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