PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql:vincolo unico sull'unione di 2 colonne

Puoi utilizzare un vincolo di esclusione che richiede un solo indice:

alter table transaction_links
  add constraint check_tx
  exclude using gist ( (array[send_id, receive_id]) with &&);

Il && operatore è l'operatore "sovrapposizioni" per gli array - che significa "hanno elementi in comune, indipendentemente dall'ordine degli elementi nell'array. In questo caso il vincolo impedisce di inserire qualsiasi riga in cui qualsiasi valore di (send_id, receive_id) appare in qualche altra riga della tabella (indipendentemente dalla colonna).

Tuttavia, è necessario intarray estensione per quello.

Esempio online:https://rextester.com/QOYS23482