我正在一个必须参考另一个应用程序创建的数据的系统上工作。另一个应用程序数据库具有一个包含以下内容的表:
| contactid | revision | lineno | other data... | | 12345 | 00 | 01 | other data... | | 12345 | 00 | 02 | other data... | | 12345 | 01 | 01 | other data... | | 12345 | 01 | 02 | other data... | | 67890 | 00 | 01 | other data... | | 67890 | 01 | 01 | other data... |
键在合同编号,修订号,行号上。在我的系统中,一次只能激活一个合同,所以如果在我的表中我有
| 12345 | 00 | 01 | other data... | | 12345 | 00 | 02 | other data... |
我不能在表中具有相同的合同编号,但修订版本不同。我可以使用哪种索引来实现这种任性的独特性。
答案 0 :(得分:2)
您需要一个exclude constraint.
create table my_table(
contactid int,
revision text,
lineno text,
other_data text,
exclude using gist (contactid with =, revision with <>)
);
该约束使用btree运算符<>
和=
,因此必须安装btree_gist extension。
create extension if not exists btree_gist;