PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgresql:restrição exclusiva sobre união de 2 colunas


Você pode usar uma restrição de exclusão que requer apenas um único índice:
alter table transaction_links
  add constraint check_tx
  exclude using gist ( (array[send_id, receive_id]) with &&);

O && operador é o operador "overlaps" para arrays - que significa "ter elementos em comum, independentemente da ordem dos elementos no array. Neste caso a restrição impede a inserção de qualquer linha onde qualquer valor de (send_id, receive_id) aparece em alguma outra linha da tabela (independentemente da coluna).

No entanto, você precisa do intarray extensão para isso.

Exemplo on-line:https://rextester.com/QOYS23482