我在数据库中有一个字段,其中的字符串形式为XXXYYXXXX,其中X是数字,Y是字母 - 是否有一种方法来定义表,以便尝试插入此字段无法匹配的新行一个错误?
如果我通过ORM使用DB,我知道如何做到这一点,但是在纯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).