PostgreSQL检查约束报错:插入符合要求的值仍触发错误
问题原因与解决办法
你的检查约束存在语法错误:约束中的'str'::text是固定字符串字面量,并非引用表内的str列。PostgreSQL规定单引号包裹的内容为静态文本,因此你的约束实际是在判断字符串'str'是否等于'koko'——这一条件永远不成立,所以无论插入什么值都会触发约束违反错误。
正确的建表语句
去掉列名的单引号(列名无需用单引号包裹,单引号仅用于字符串字面量):
CREATE TABLE public.test ( str text NULL, CONSTRAINT test_check CHECK (str = 'koko'::text) );
也可以简化写法(text类型比较时可省略显式类型转换):
CREATE TABLE public.test ( str text NULL, CONSTRAINT test_check CHECK (str = 'koko') );
修改后执行插入语句INSERT INTO public.test(str) VALUES ('koko');即可正常通过约束校验。
内容的提问来源于stack exchange,提问作者cikatomo
相关产品推荐
相关产品推荐

