sql >> Databáze >  >> RDS >> PostgreSQL

Jak přidat podmíněný jedinečný index na PostgreSQL

Vytvořte UNIQUE vícesloupcový index na (product_id, variant_id) :

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

To by však umožnilo více položek (1, NULL) pro (product_id, variant_id) protože NULL hodnoty nejsou považovány za identické.
Chcete-li to nahradit, vytvořte navíc částečný UNIQUE index na product_id :

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

Tímto způsobem můžete zadat (1,2) , (1,3) a (1, NULL) , ale ani jeden z nich podruhé. Také urychluje dotazy s podmínkami v jednom nebo obou sloupcích.

Nedávná související odpověď na dba.SE, téměř přímo použitelná na váš případ:

  • Unikátní omezení PostgreSQL ve více sloupcích a hodnoty NULL


  1. Zvyšte hodnotu v Postgresu

  2. Zabraňuje tento kód vkládání SQL?

  3. Je pozice sloupce id v Postgresql důležitá?

  4. Zablokování v PostgreSQL při spuštění UPDATE