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 happenEND;$$LANGUAGE plpgsql;总结
以上是内存溢出为你收集整理的postgresql – Postrgesql – 检查定义为数组的表列的约束全部内容,希望文章能够帮你解决postgresql – Postrgesql – 检查定义为数组的表列的约束所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)