PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como adicionar um índice exclusivo condicional no PostgreSQL


Crie um UNIQUE índice de várias colunas em (product_id, variant_id) :
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);

No entanto, isso permitiria várias entradas de (1, NULL) para (product_id, variant_id) porque NULL os valores não são considerados idênticos.
Para compensar isso, crie adicionalmente um UNIQUE parcial índice em product_id :
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;

Desta forma, você pode inserir (1,2) , (1,3) e (1, NULL) , mas nenhum deles uma segunda vez. Também acelera as consultas com condições em uma ou ambas as colunas.

Resposta recente e relacionada no dba.SE, quase diretamente aplicável ao seu caso:
  • Restrição exclusiva de várias colunas do PostgreSQL e valores NULL