Du kan använda en uteslutningsrestriktion som bara kräver ett enda index:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
&&
operatorn är "överlappningsoperatorn" för arrayer - vilket betyder "har element gemensamma, oavsett ordningen på elementen i arrayen. I det här fallet förhindrar begränsningen att infoga någon rad där något värde på (send_id, receive_id)
visas i någon annan rad i tabellen (oavsett kolumn).
Du behöver dock intarray förlängning för det.
Onlineexempel:https://rextester.com/QOYS23482