gpt4 book ai didi

liquibase - 如何在 Liquibase 中添加条件唯一约束?

转载 作者:行者123 更新时间:2023-12-04 15:45:22 25 4
gpt4 key购买 nike

问题:当用户被删除时,关联的记录不会从数据库中删除。相反,我设置了 user.delete列到 true .现在我需要在 user.email 上设置一个唯一约束但仅适用于事件用户(未删除)。

我怎样才能做到这一点?

databaseChangeLog:
- changeSet:
id: add-user-unique-constraint
author: me
changes:
- addUniqueConstraint:
columnNames: email, delete
constraintName: unique-email-not-deleted
tableName: users

上述幼稚的方法在(电子邮件、删除)列上设置了复合约束,但它不起作用,因为在以下流程中用户被阻止删除和创建帐户:
  • 使用电子邮件“E”注册新用户
  • 删除电子邮件为“E”的用户
  • 使用电子邮件“E”再次注册新用户
  • 删除带有电子邮件“E”的用户 -> 错误:违反约束
  • 使用电子邮件“E”注册新用户 -> 错误:违反约束

  • 附:数据库是 H2 和 PostgreSQL

    最佳答案

    此功能是特定于 DB 的,目前 liquibase 不支持它。

    对于 PostgreSQL您可以使用直接 SQL:

    databaseChangeLog:
    - changeSet:
    id: add-user-unique-constraint
    author: me
    changes:
    - sql:
    "sql": "CREATE UNIQUE INDEX user_email_idx ON user (email) WHERE delete = 'false'"

    但是这不适用于 H2 .
    H2 的可能选项:
  • 如果它在测试中使用,那么您可以迁移到 PostgreSQL使用 testcontainers 技术(但您的构建环境将取决于 docker )
  • PostgreSQL 的自定义变更集和 H2 - 您可以使用 preconditions
  • 关于liquibase - 如何在 Liquibase 中添加条件唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991138/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com