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