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