Anda dapat menggunakan batasan pengecualian yang hanya membutuhkan satu indeks:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
&&
operator adalah operator "tumpang tindih" untuk array - yang berarti "memiliki elemen yang sama, terlepas dari urutan elemen dalam array. Dalam hal ini batasan mencegah untuk menyisipkan setiap baris di mana nilai (send_id, receive_id)
muncul di beberapa baris tabel lainnya (terlepas dari kolomnya).
Namun, Anda memerlukan intarray ekstensi untuk itu.
Contoh online:https://rextester.com/QOYS23282