PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come aggiungere un indice univoco condizionale su PostgreSQL

Crea un UNIQUE indice multicolonna su (product_id, variant_id) :

CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);

Tuttavia, ciò consentirebbe più voci di (1, NULL) per (product_id, variant_id) perché NULL i valori non sono considerati identici.
Per compensare, creare inoltre un UNIQUE parziale indice su product_id :

CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;

In questo modo puoi inserire (1,2) , (1,3) e (1, NULL) , ma nessuno dei due una seconda volta. Velocizza anche le query con condizioni su una o entrambe le colonne.

Risposta recente e correlata su dba.SE, applicabile quasi direttamente al tuo caso:

  • vincolo univoco multicolonna PostgreSQL e valori NULL