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

如何基于现有索引为特定类型订单创建条件唯一性约束

核心误区说明

你当前编写的CHECK约束无法实现跨记录的唯一性校验,CHECK约束只能验证单条行记录内的字段规则,不能判断是否存在其他符合重复条件的记录,你的需求可以直接用PostgreSQL的部分唯一索引实现,不需要单独写CHECK约束。

实现方案

你要的「仅type为AH01的订单,同公司、同小写邮箱仅可提交一次」的需求,直接创建带过滤条件的唯一索引即可,写法如下:

Alembic 迁移代码

op.create_index(
    op.f("ix_order_company_id_email_lower_ah01_unique"),
    "order",
    ["company_id", sa.text("lower(email)")],
    unique=True,
    postgresql_concurrently=True,
    # 仅对type为AH01的记录生效唯一校验
    postgresql_where=sa.text("type = 'AH01'")
)

对应的原生SQL逻辑

CREATE UNIQUE INDEX ix_order_company_id_email_lower_ah01_unique
ON "order" (company_id, lower(email))
WHERE type = 'AH01';

逻辑说明

这个唯一索引只会把type = 'AH01'的记录纳入唯一校验范围,其他类型的订单不会被该索引约束,完全匹配你的需求。如果你的原有普通索引ix_order_company_id_email_lower没有其他业务场景使用,可以直接删除。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:03