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

Sådan tilføjes et betinget unikt indeks på PostgreSQL

Opret en UNIQUE multikolonneindeks på (product_id, variant_id) :

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

Dette ville dog tillade flere indtastninger af (1, NULL) for (product_id, variant_id) fordi NULL værdier anses ikke for at være identiske.
For at kompensere for det skal du desuden oprette en delvis UNIQUE indeks på product_id :

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

På denne måde kan du indtaste (1,2) , (1,3) og (1, NULL) , men ingen af ​​dem en anden gang. Fremskynder også forespørgsler med betingelser på en eller begge kolonner.

Nyligt, relateret svar på dba.SE, næsten direkte relevant for din sag:

  • PostgreSQL-multi-kolonne unikke begrænsninger og NULL-værdier


  1. isolering af en understreng i en streng før et symbol i SQL Server 2008

  2. Nye drivere til SQL Server ... Hvad du behøver at vide

  3. Grupperet sammenkædning i SQL Server

  4. Vis fremskridt, mens du laver i baggrunden