sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man lägger till ett villkorligt unikt index på PostgreSQL

Skapa en UNIQUE multikolumnindex på (product_id, variant_id) :

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

Detta skulle dock tillåta flera inmatningar av (1, NULL) för (product_id, variant_id) eftersom NULL värden anses inte vara identiska.
För att kompensera för det skapar du dessutom en partiell UNIQUE index på product_id :

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

På så sätt kan du ange (1,2) , (1,3) och (1, NULL) , men ingen av dem en andra gång. Snabbar också upp frågor med villkor i en eller båda kolumnerna.

Nytt, relaterat svar på dba.SE, nästan direkt tillämpligt på ditt ärende:

  • PostgreSQL flerkolumns unika begränsningar och NULL-värden


  1. 2018 i recension:7 MariaDB-milstolpar du kanske har missat

  2. SQLAlchemy PÅ DUBLIKATNYCKELUPPDATERING

  3. Genererar slumptal i varje rad i Oracle-fråga

  4. SQL Server Pre-Login Handshake Acknowledgement Error