【问题标题】:How to use existing index to create conditional constraint如何使用现有索引创建条件约束
【发布时间】:2021-12-24 10:43:54
【问题描述】:

我有以下索引:

op.create_index(
    op.f("ix_order_company_id_email_lower"),
    "order",
    ["company_id", sa.text("lower(email)")],
    unique=False,
    postgresql_concurrently=True
)

现在我想创建一个检查约束,它将仅为特定类型的订单创建某种“唯一”约束。

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 中的记录?

编辑:基本上这种类型的订单只能在特定公司的每封电子邮件中提交一次。

【问题讨论】:

    标签: postgresql sqlalchemy constraints


    【解决方案1】:

    你需要一个部分唯一索引:

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

    【讨论】:

    • 是的,postgresql_where=(Order.type == "AH01"), 成功了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多