有没有办法为Postgres列强制执行特定的字符串结构?

问题描述 投票:1回答:1

我在数据库中有一个字段,其中的字符串形式为XXXYYXXXX,其中X是数字,Y是字母 - 是否有一种方法来定义表,以便尝试插入此字段无法匹配的新行一个错误?

如果我通过ORM使用DB,我知道如何做到这一点,但是在纯SQL中不必像这样进行验证。

database postgresql database-design
1个回答
2
投票

您可以使用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).
© www.soinside.com 2019 - 2024. All rights reserved.