postgresql – Postrgesql – 检查定义为数组的表列的约束
发布时间:2020-12-13 15:58:08 所属栏目:百科 来源:网络整理
导读:我想在下面的postgres表上设置一个检查约束: CREATE TABLE foo( id int Primary Key,names varchar(40)[] ); 由于names是一个数组,因此我无法定义对数组中每个元素的检查. 以下约束是我最好的猜测(不工作): ALTER TABLE foo ADD CONSTRAINT check_names CH
我想在下面的postgres表上设置一个检查约束:
CREATE TABLE foo ( id int Primary Key,names varchar(40)[] ); 由于names是一个数组,因此我无法定义对数组中每个元素的检查. ALTER TABLE foo ADD CONSTRAINT check_names CHECK (ALL(names[]) ~* '^[A-Z]') ; 基本上,名称[]的每个元素都应该只用大写字母组成. 解决方法
就像pozs评论你的帖子一样,就我所知,你不能把这样的CHECK约束放在一个数组上(真正的专业人士可能会在这里纠正我).
你可以做的是写一个BEFORE INSERT触发器,它在名字字段插入表格之前检查它的值.实际上就像CONSTRAINT一样.显然,这不适用于表中已有的行. CREATE FUNCTION all_caps_array_only() RETURNS trigger AS $$ DECLARE name varchar(40); BEGIN FOREACH name IN ARRAY NEW.names LOOP IF name !~ '[A-Z]+' THEN RETURN NULL; -- Fail the INSERT END IF; END LOOP; RETURN NEW; -- Make the INSERT happen END; $$LANGUAGE plpgsql; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |