Můžete použít vylučovací omezení který vyžaduje pouze jeden index:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
&&
operátor je operátor "překrývání" pro pole - což znamená "mají prvky společné, bez ohledu na pořadí prvků v poli. V tomto případě omezení brání vložit libovolný řádek, kde je jakákoli hodnota (send_id, receive_id)
se objeví v některém jiném řádku tabulky (bez ohledu na sloupec).
Potřebujete však intarray rozšíření pro to.
Online příklad:https://rextester.com/QOYS23482