Sie können eine Ausschlussbeschränkung verwenden was nur einen einzigen Index benötigt:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
Der &&
Operator ist der „overlaps“-Operator für Arrays – was bedeutet, dass „Elemente gemeinsam haben, unabhängig von der Reihenfolge der Elemente im Array ) erscheint in einer anderen Zeile der Tabelle (unabhängig von der Spalte).
Sie benötigen jedoch das intarray Erweiterung dafür.
Online-Beispiel:https://rextester.com/QOYS23482