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\_]+$'
我的目标是在 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\_]+$'