Bạn có thể sử dụng ràng buộc loại trừ chỉ yêu cầu một chỉ mục duy nhất:
alter table transaction_links
add constraint check_tx
exclude using gist ( (array[send_id, receive_id]) with &&);
&&
toán tử là toán tử "chồng chéo" cho mảng - có nghĩa là "có các phần tử chung, bất kể thứ tự của các phần tử trong mảng. Trong trường hợp này, ràng buộc ngăn chặn việc chèn bất kỳ hàng nào có giá trị bất kỳ của (send_id, receive_id)
xuất hiện trong một số hàng khác của bảng (bất kể cột).
Tuy nhiên, bạn cần có intarray phần mở rộng cho điều đó.
Ví dụ trực tuyến: https://rextester.com/QOYS23482