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

标签 database postgresql database-design

我在数据库中有一个字段,它是 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/

相关文章:

mysql - 如何在Django中自动切换多个数据库服务器?

sql - PL/pgSQL 触发器阻止一条河流穿越另一条河流

sql - 使用连接更新表,如果不存在则为 NULL

sql - 仅选择 Postgres JSONB 字段中的非 NULL 键

mysql - mysql中房屋销售网站的数据库设计

mysql - 如何将mysql从5.1更新到5.5

sql - 选择合计或更新总余额字段?

数据库比较工具

php - 在数据库中存储大量标记的最佳方法是什么?

mysql - 将子子项中的外键添加到 "super parent"- 是否有更好的方法如 View ?