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

PostgreSQL中如何为指定status_id值创建唯一复合索引

实现PostgreSQL条件唯一复合索引(仅约束status_id为1/3时的document+status_id唯一性)

正确SQL语句

CREATE UNIQUE INDEX accounts_document_status_unique ON "Accounts" (document, status_id)
WHERE status_id IN (1, 3);

原写法问题说明

  1. 第一个语句仅针对status_id = 1做约束,未覆盖需求中的status_id = 3场景,且索引名使用了关键字index(虽PostgreSQL允许加引号,但不推荐)。
  2. 第二个语句未添加UNIQUE关键字,仅创建了普通部分索引,不会对记录唯一性做校验,因此可以重复插入符合条件的记录。

约束效果验证

  • 插入记录(1, name_1, 1, 1234):合法,无重复约束冲突
  • 插入记录(1, name_1, 2, 1234):合法,status_id不在约束范围内
  • 重复插入(1, name_1, 1, 1234):触发唯一索引约束错误,符合预期
  • 插入(1, name_1, 3, 1234)(若已有同document+status_id=3的记录):触发唯一索引约束错误,符合预期
  • 插入记录(1, name_1, 4, 1234):合法,status_id不在约束范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:10:36