You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL字段仅允许插入大写字母的CHECK约束设置问题

解决PostgreSQL字段仅允许大写字母的约束问题

你的问题出在正则表达式的逻辑错误上:

  • 原约束CHECK (location_id ~* '[A-Z]')只是检查字符串包含任意大小写字母(~*是不区分大小写匹配),完全没限制特殊字符,也没要求整个字段全是大写字母,所以不符合预期。

要实现仅存储大写字母、禁止特殊字符的需求,需要用精准的正则表达式约束:

正确的CHECK约束写法

1. 字段非空且全为大写字母

ALTER TABLE your_table_name 
ADD CONSTRAINT chk_location_id_upper 
CHECK (location_id ~ '^[A-Z]+$');
  • ^ 匹配字符串开头,$ 匹配字符串结尾,确保整个字段内容都在规则范围内
  • [A-Z]+ 匹配一个或多个大写字母
  • 用~替代~*,强制区分大小写,避免小写字母通过匹配

2. 允许字段为空的场景

如果字段支持空值,需要在约束中补充空值判断:

ALTER TABLE your_table_name 
ADD CONSTRAINT chk_location_id_upper 
CHECK (location_id IS NULL OR location_id ~ '^[A-Z]+$');

验证约束效果

插入符合要求的内容会成功:

INSERT INTO your_table_name (location_id) VALUES ('ABCDE');

插入包含特殊字符、小写字母的内容会被拦截:

INSERT INTO your_table_name (location_id) VALUES ('abc'); -- 插入失败
INSERT INTO your_table_name (location_id) VALUES ('AB@C'); -- 插入失败

内容的提问来源于stack exchange,提问作者nikhil raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:25:19