我目前对表有以下约束:
ALTER TABLE myTable
ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id);
Run Code Online (Sandbox Code Playgroud)
我想向约束添加一个条件:我希望约束以相同的方式工作,但只有一行 is_archived 为 FALSE:
ALTER TABLE myTable
ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id, !is_archived);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到语法错误。
如果则允许is_archived = true
具有相同的content_id
和组合的多行。brand_id
基本上可以归档多行相同的行,但只能取消归档一行。
虽然 Postgres 不允许部分唯一约束,但它确实支持部分唯一索引:
create unique index unique_row on myTable(content_id, brand_id) where not is_archived;
Run Code Online (Sandbox Code Playgroud)
请参阅Postgres 文档中的部分索引。
这实际上与唯一约束几乎相同,因为无论如何,此类约束都是通过唯一索引实现的。
归档时间: |
|
查看次数: |
7842 次 |
最近记录: |