我在数据库中有一个字段,它是 XXXYYXXXX 形式的字符串,其中 X 是数字,Y 是字母——有没有一种方法可以定义表,以便尝试在该字段失败的地方插入新行匹配导致错误?
如果我通过 ORM 使用数据库,我会知道如何执行此操作,但不必在纯 SQL 中进行这样的验证。
最佳答案
你可以定义一个check constraint使用 regular expression ,例如:
create table my_table(
id serial primary key,
str text check (str ~ '^[a-zA-Z]{3}[0-9]{2}[a-zA-Z]{3}$')
);
insert into my_table values
(default, 'abc99def')
returning *;
id | str
----+----------
1 | abc99def
(1 row)
insert into my_table values
(default, '1bc99def')
returning *;
ERROR: new row for relation "my_table" violates check constraint "my_table_str_check"
DETAIL: Failing row contains (2, 1bc99def).
关于database - 有没有办法为 Postgres 列强制执行特定的字符串结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322689/