Индекс Postgres с единственной комбинацией целых чисел - PullRequest
0 голосов
/ 30 июня 2018

Я работаю в системе, которая должна ссылаться на данные, созданные другим приложением. В другой базе данных приложения есть таблица, которая содержит:

| 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 голосов
/ 01 июля 2018

Вам необходимо исключить ограничение.

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

DbFiddle.

Ограничение использует операторы btree <> и =, следовательно, расширение btree_gist должно быть установлено.

create extension if not exists btree_gist;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...