naX*_*aXa 5 unique-constraint liquibase
问题:删除用户时,相关记录不会从数据库中删除。相反,我将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
Run Code Online (Sandbox Code Playgroud)
上面的简单方法对(电子邮件、删除)列施加了复合约束,但它不起作用,因为在以下流程中用户被阻止删除和创建帐户:
附:数据库是H2和PostgreSQL
小智 5
此功能是 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'"
Run Code Online (Sandbox Code Playgroud)
但这在H2.
可能的选项H2:
如果它在测试中使用,那么您可以迁移到PostgreSQL使用testcontainers技术(但您的构建环境将取决于docker)
有自定义变更集PostgreSQL-H2您可以使用preconditions