仅具有整数组合的Postgres索引

时间:2018-06-30 18:58:24

标签: postgresql indexing

我正在一个必须参考另一个应用程序创建的数据的系统上工作。另一个应用程序数据库具有一个包含以下内容的表:

| 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... |

我不能在表中具有相同的合同编号,但修订版本不同。我可以使用哪种索引来实现这种任性的独特性。

1 个答案:

答案 0 :(得分:2)

您需要一个exclude constraint.

create table my_table(
    contactid int, 
    revision text, 
    lineno text, 
    other_data text,
    exclude using gist (contactid with =, revision with <>)
);

DbFiddle.

该约束使用btree运算符<>=,因此必须安装btree_gist extension

create extension if not exists btree_gist;