PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So fügen Sie einen bedingten eindeutigen Index in PostgreSQL hinzu

Erstellen Sie einen UNIQUE mehrspaltiger Index auf (product_id, variant_id) :

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

Dies würde jedoch mehrere Einträge von (1, NULL) zulassen für (product_id, variant_id) weil NULL Werte werden nicht als identisch angesehen.
Um dies auszugleichen, erstellen Sie zusätzlich einen partiellen UNIQUE Index auf product_id :

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

Auf diese Weise können Sie (1,2) eingeben , (1,3) und (1, NULL) , aber keiner von ihnen ein zweites Mal. Beschleunigt auch Abfragen mit Bedingungen für eine oder beide Spalten.

Aktuelle, verwandte Antwort auf dba.SE, die fast direkt auf Ihren Fall anwendbar ist:

  • PostgreSQL Multi-Column Unique Constraint und NULL-Werte