POSTGRES约束检查


CONSTRAINT proper_matricula CHECK (matricula ~  '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]' OR '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]')

);

尝试执行约束检查,查看给定的车牌是否有效。它给出了这个错误错误:布尔类型的输入语法无效:"[0-9][0-9][a-Za-Z][a-Za-Z][0-9] ">

首先:

CONSTRAINT proper_matricula 
CHECK 
(
matricula ~  '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]' 
OR '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]'
)
); --  <<=== Extra ')'   

如果你的代码格式正确,你可以很容易地看到在你的CONSTRAINT声明中有一个额外的)(右括号)-只需删除它,这将有助于。

但是,请参阅下面也需要更正的其他错误!

  • CONSTRAINT声明前无ALTER TABLE test ADD

  • 最后,您需要复制字段名- ' OR materials = '....'


(
matricula ~ '...'
OR
matricula ~ '...'
)

看这里的小提琴

编辑-回应OP的评论

你也可以这样做:

CREATE TABLE test_2 
(
matricula TEXT NOT NULL
CONSTRAINT proper_matricula 
CHECK 
(
matricula ~  '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]' 
OR 
matricula ~ '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]'  
)
);

CONSTRAINT必须是中的TABLE定义本身,否则你必须指定

ALTER TABLE test ADD... 

否则,服务器如何知道您引用的是哪个TABLE-它可能是数据库/模式中的任何表?

小提琴。

最后,正如已经指出的,您应该始终在你的问题中包含尽可能多的相关信息。在这个问题中,知道CHECK是否已经是TABLE定义的一部分是很有用的一段独立的代码。顺便说一句,我现在已经涵盖了这两种情况!

最新更新