PostgreSQL唯一约束配置:每个source_table仅一行is_id_relation为true
解决方案:确保每个source_table仅存在一行is_id_relation=true的记录
你可以使用PostgreSQL的**部分唯一索引(Partial Unique Index)**来实现这个需求,它能针对满足特定条件的行施加唯一约束,完美匹配你的场景。
1. 创建部分唯一索引
执行以下SQL语句创建约束:
CREATE UNIQUE INDEX idx_metadado_log_audit_source_table_id ON metadado_log_audit (source_table) WHERE is_id_relation = true;
2. 索引作用说明
这个索引仅对is_id_relation = true的行生效:
- 同一个
source_table下,最多只能存在一条is_id_relation = true的记录 - 不限制
is_id_relation = false的记录数量,同一个source_table可以有多条false的行
3. 前置检查(可选)
如果表中已有数据,建议先检查是否存在违反约束的重复记录,避免创建索引失败:
SELECT source_table, COUNT(*) FROM metadado_log_audit WHERE is_id_relation = true GROUP BY source_table HAVING COUNT(*) > 1;
如果查询返回结果,需要先删除或修改重复的记录,再执行创建索引的语句。
内容的提问来源于stack exchange,提问作者Anderson
相关产品推荐
相关产品推荐

