问题:删除用户时,不会从数据库中删除关联的记录。相反,我将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
上述幼稚的方法对(email,delete)列施加了复合约束,但是它不起作用,因为在以下流程中,用户被阻止删除和创建帐户:
ps。数据库是H2和PostgreSQL
答案 0 :(得分:1)
此功能是特定于数据库的,当前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
的可能选项:
如果用于测试,则可以使用testcontainers
技术迁移到PostgreSQL
(但是您的构建环境将取决于docker
)
具有PostgreSQL
和H2
的自定义变更集-您可以使用preconditions