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

PostgreSQL设置字符串+整数组合CHECK CONSTRAINT插入数据报错如何解决

报错根因

你在cek_id_customer校验约束中使用的substring(id_customer,3) LIKE '%[0-9]%'语法不符合PostgreSQL的规则:PostgreSQL默认的LIKE操作符仅支持%(匹配任意长度任意字符)、_(匹配单个任意字符)两个通配符,不支持[]字符类匹配逻辑,导致合法的CU001也被判定为不符合约束。
错误码23514是PostgreSQL标准的CHECK约束违反错误码,仅代表数据未通过约束校验,和你插入的数据本身无关。

修复方案

推荐使用正则匹配实现你的校验要求,逻辑更简洁严谨,适配char(5)的字段长度要求:
将原cek_id_customer约束替换为以下内容即可:

CONSTRAINT cek_id_customer CHECK (id_customer ~ '^CU[0-9]{3}$')

正则含义说明:

  • ^匹配字符串开头,确保前两位从第一个字符开始
  • CU固定匹配前两位字符
  • [0-9]{3}要求后续3位必须都是数字
  • $匹配字符串结尾,避免后面出现多余字符
修正后完整建表语句
CREATE TABLE customer
(
    id_customer char(5) PRIMARY KEY NOT NULL,
    CONSTRAINT cek_id_customer CHECK (id_customer ~ '^CU[0-9]{3}$'), 
    nama_customer varchar(30) NOT NULL,
    gender_customer varchar(15) NOT NULL,
    CONSTRAINT  cek_gender_customer CHECK(gender_customer IN ('Male', 'Female'))
);

修正后你原有的插入语句INSERT INTO customer VALUES ('CU001', 'Sayaa', 'Male')可正常执行,不会触发约束报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:02