PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да добавите условен уникален индекс към PostgreSQL

Създайте UNIQUE многоколонов индекс на (product_id, variant_id) :

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

Това обаче би позволило множество вписвания на (1, NULL) за (product_id, variant_id) защото NULL стойностите не се считат за идентични.
За да компенсирате това, създайте допълнително частичен UNIQUE индекс на product_id :

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

По този начин можете да въведете (1,2) , (1,3) и (1, NULL) , но нито един от тях втори път. Също така ускорява заявките с условия в едната или двете колони.

Скорошен, свързан отговор на dba.SE, почти пряко приложим за вашия случай:

  • Уникално ограничение за много колони на PostgreSQL и стойности NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да ускоря броенето на редове в PostgreSQL таблица?

  2. Използване на корелационната функция на PostgreSQL

  3. Как да конвертирате Postgres база данни в sqlite

  4. Регистриране на одит за PostgreSQL

  5. Как да импортирам съществуващи *.sql файлове в PostgreSQL 8.4?