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
相关产品推荐
相关产品推荐

