gpt4 book ai didi

postgresql - PostgreSQL 列上的字符串格式约束不起作用

转载 作者:行者123 更新时间:2023-11-29 11:33:23 25 4
gpt4 key购买 nike

我正在将一个数据库从 SQL Server 移动到 PostgreSQL,并在其中一个表中遇到了一些检查约束问题。 PostgreSQL 版本为 9.5.1。

我创建了一个表,其中一列带有检查约束以强制执行格式。这在 SQL Server 中有效。这个想法是,只能在其中一列中输入以字母 AF 开头并后跟三个数字字符(例如 AF001)的值。

创建表的 SQL 看起来像这样:

CREATE TABLE TableName (
referenceID VARCHAR(5) NOT NULL CHECK (referenceID LIKE 'AF[0-9][0-9][0-9]'),
comment VARCHAR(50) NOT NULL,
PRIMARY KEY (referenceID)
);

但是当我尝试输入任何数据时都失败了。数据输入示例:

INSERT INTO TableName (reference, comment) VALUES ('AF000','A comment');

我得到的错误是:

ERROR:  new row for relation "tablename" violates check constraint "tablename_referenceID_check"
DETAIL: Failing row contains (AF000, A comment).

********** Error **********

ERROR: new row for relation "TableName" violates check constraint "tablename_referenceID_check"
SQL state: 23514
Detail: Failing row contains (AF000, A comment).

我假设问题出在实际的检查约束上,但我不确定。

最佳答案

LIKE 子句在 PostgreSQL 中不使用正则表达式模式。而不是 LIKE 你应该使用 SIMILAR TO 子句:

CREATE TABLE TableName (
referenceID VARCHAR(5) NOT NULL CHECK (referenceID SIMILAR TO 'AF[0-9]{3}'),
comment VARCHAR(50) NOT NULL,
PRIMARY KEY (referenceID)
);

关于postgresql - PostgreSQL 列上的字符串格式约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com