postgresql – Postrgesql – 检查定义为数组的表列的约束

postgresql – Postrgesql – 检查定义为数组的表列的约束,第1张

概述我想在下面的postgres表上设置一个检查约束: CREATE TABLE foo( id int Primary Key, names varchar(40)[] ); 由于names是一个数组,因此我无法定义对数组中每个元素的检查. 以下约束是我最好的猜测(不工作): ALTER TABLE foo ADD CONSTRAINT chec 我想在下面的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 happenEND;$$LANGUAGE plpgsql;
总结

以上是内存溢出为你收集整理的postgresql – Postrgesql – 检查定义为数组的表列的约束全部内容,希望文章能够帮你解决postgresql – Postrgesql – 检查定义为数组的表列的约束所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1160219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存