sql >> Database >  >> RDS >> PostgreSQL

Een voorwaardelijke unieke index toevoegen aan PostgreSQL

Maak een UNIQUE index met meerdere kolommen op (product_id, variant_id) :

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

Dit zou echter meerdere invoer van (1, NULL) . mogelijk maken voor (product_id, variant_id) omdat NULL waarden worden niet als identiek beschouwd.
Om dat goed te maken, maakt u bovendien een gedeeltelijke UNIQUE index op product_id :

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

Op deze manier kunt u (1,2) . invoeren , (1,3) en (1, NULL) , maar geen van beiden een tweede keer. Versnelt ook zoekopdrachten met voorwaarden in een of beide kolommen.

Recent, gerelateerd antwoord op dba.SE, bijna direct van toepassing op uw geval:

  • PostgreSQL-unieke beperking met meerdere kolommen en NULL-waarden


  1. Hoe SQL-query's te versnellen

  2. Retourwaarde van sql-script naar shell-script

  3. Het minimum van twee waarden in SQL verkrijgen

  4. kan database niet kopiëren met SQLiteAssetHelper-klasse