Postgres CHAR 检查约束未正确评估

Postgres CHAR check constraint not evaluating correctly

我的目标是在 Postgres 中有一个列只接受字母和下划线类型的值。 出于某种原因,尽管我无法让 Postgres 正确执行正则表达式。

我尝试过的事情:

生成不接受带数字的字符串的列

action_type CHAR(100) check (action_type ~ '^(?:[^[:digit:]]*)$')

生成不接受任何内容的列

action_type CHAR(100) check (action_type ~ '^(?:[^[:digit:] ]*)$')

生成不接受任何内容的列

action_type CHAR(100) check (action_type ~ '^([[:alpha:]_]*)$'),

我试过使用上述的多种变体以及使用 SIMILAR TO 代替“~”。根据我的经验,该列要么接受所有内容,要么什么都不接受,具体取决于给定的约束。

我 运行 在本地的 timescaledb docker 图像上 运行 PostgreSQL 12.5.

任何帮助将不胜感激,因为我无能为力。

试试这个:

CREATE TABLE your_table(
    action_type text
);

ALTER TABLE your_table ADD CONSTRAINT check_letters 
CHECK (action_type ~ '^[a-z\_]*$' )

对于 action_type 列,这应该只允许 a-z 个字符和下划线 _

另请注意,这是区分大小写的,如果您需要不区分大小写的匹配,请使用 ~* 而不是 ~

此外,这允许空字符串,如果您不想这样,请改用 '^[a-z\_]+$'