PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment ajouter un index unique conditionnel sur PostgreSQL

Créer un UNIQUE index multicolonne sur (product_id, variant_id) :

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

Cependant, cela autoriserait plusieurs entrées de (1, NULL) pour (product_id, variant_id) car NULL les valeurs ne sont pas considérées comme identiques.
Pour compenser cela, créez en plus un UNIQUE partiel index sur product_id :

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

De cette façon, vous pouvez saisir (1,2) , (1,3) et (1, NULL) , mais ni l'un ni l'autre une seconde fois. Accélère également les requêtes avec des conditions sur une ou les deux colonnes.

Réponse récente et connexe sur dba.SE, presque directement applicable à votre cas :

  • Contrainte unique multi-colonnes PostgreSQL et valeurs NULL