如何使用现有索引创建条件约束
How to use existing index to create conditional constraint
我有以下索引:
op.create_index(
op.f("ix_order_company_id_email_lower"),
"order",
["company_id", sa.text("lower(email)")],
unique=False,
postgresql_concurrently=True
)
现在我想创建一个检查约束,它将为特定类型的订单创建某种 'unique' 约束。
op.execute(
"""ALTER TABLE order
ADD CONSTRAINT check_order_company_id_email_lower_type
CHECK (type = 'AH01')
NOT VALID"""
)
如何添加额外检查以仅应用于 ix_order_company_id_email_lower
中的记录?
编辑:基本上这种类型的订单只能在特定公司的每封电子邮件中提交一次。
您需要部分唯一索引:
CREATE INDEX ON order (company_id, lower(email))
WHERE type = 'AH01';
我有以下索引:
op.create_index(
op.f("ix_order_company_id_email_lower"),
"order",
["company_id", sa.text("lower(email)")],
unique=False,
postgresql_concurrently=True
)
现在我想创建一个检查约束,它将为特定类型的订单创建某种 'unique' 约束。
op.execute(
"""ALTER TABLE order
ADD CONSTRAINT check_order_company_id_email_lower_type
CHECK (type = 'AH01')
NOT VALID"""
)
如何添加额外检查以仅应用于 ix_order_company_id_email_lower
中的记录?
编辑:基本上这种类型的订单只能在特定公司的每封电子邮件中提交一次。
您需要部分唯一索引:
CREATE INDEX ON order (company_id, lower(email))
WHERE type = 'AH01';