U kunt een uitsluitingsbeperking gebruiken waarvoor slechts een enkele index nodig is:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
De &&
operator is de "overlap"-operator voor arrays - wat betekent "elementen gemeen hebben, ongeacht de volgorde van de elementen in de array. In dit geval verhindert de beperking het invoegen van een rij waar een waarde van (send_id, receive_id)
verschijnt in een andere rij van de tabel (ongeacht de kolom).
U hebt echter de intarray nodig extensie daarvoor.
Online voorbeeld:https://rextester.com/QOYS23482