PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql:Unique Constraint über Union von 2 Spalten

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