PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgresql :contrainte unique sur l'union de 2 colonnes

Vous pouvez utiliser une contrainte d'exclusion qui ne nécessite qu'un seul index :

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

Le && L'opérateur est l'opérateur "chevauchements" pour les tableaux - ce qui signifie "avoir des éléments en commun, quel que soit l'ordre des éléments dans le tableau. Dans ce cas, la contrainte empêche d'insérer une ligne où n'importe quelle valeur de (send_id, receive_id) apparaît dans une autre ligne du tableau (quelle que soit la colonne).

Cependant, vous avez besoin de intarray extension pour cela.

Exemple en ligne :https://rextester.com/QOYS23482