sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgresql:restricción única sobre la unión de 2 columnas

Puede usar una restricción de exclusión que solo requiere un único índice:

alter table transaction_links
  add constraint check_tx
  exclude using gist ( (array[send_id, receive_id]) with &&);

El && operador es el operador de "superposición" para matrices, lo que significa "tener elementos en común, independientemente del orden de los elementos en la matriz. En este caso, la restricción impide insertar cualquier fila donde cualquier valor de (send_id, receive_id) aparece en alguna otra fila de la tabla (independientemente de la columna).

Sin embargo, necesita el intarray extensión para eso.

Ejemplo en línea:https://rextester.com/QOYS23482