【发布时间】:2021-05-19 08:20:08
【问题描述】:
我想通过将CONSTRAINT 添加到特定列以尊重某些正则表达式来ALTER 我现有的表。
我尝试通过执行来规范电话前缀号码:
ALTER TABLE users
ADD CONSTRAINT users_prefix_constraint
CHECK (users.phone_prefix ~ '^\+\d{1,3}$');
而且它工作正常。
但我想更通用地使用它并定义包含正则表达式模式的DOMAIN,以便在不同的地方(即在触发器中)使用相同的模式。这就是为什么我想这样做:
CREATE DOMAIN ph_prefix AS TEXT CHECK (VALUE ~'^\+\d{1,3}$');
ADD CONSTRAINT users_prefix_constraint CHECK (users.phone_prefix :: ph_prefix);
这里的问题是,CHECK 部分期望某个函数返回 boolean,而强制转换没有。
- 有办法吗?
- 这是定义约束的好方法吗?也许这不是首选方式。
【问题讨论】:
标签: database postgresql database-design constraints