Postgresql

自定義唯一約束,僅在一列具有特定值時強制執行

  • October 9, 2020

是否可以有如下自定義唯一約束?假設我有兩個 colssubsettype,兩個字元串(儘管數據類型可能無關緊要)。

如果type是“真”,那麼我希望 和 的組合typesubset獨一無二的。否則,沒有約束。我在 Debian 上使用 PostgreSQL 8.4。

換句話說,您希望列中的值在該列為“真”subset的行中是唯一的。部分唯一索引 將執行此操作:type

CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';

數據類型確實很重要。如果該列typeboolean(可能應該是),您可以簡化:

CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type;

通過這種方式,您甚至可以與NULLunique 進行組合,否則這是不可能的。看:

引用自:https://dba.stackexchange.com/questions/37427