sql >> Base de Datos >  >> RDS >> PostgreSQL

Índice parcial no utilizado en la cláusula ON CONFLICT al realizar un upsert en Postgresql

Tiene que usar un predicado de índice para usar un índice único parcial. Lea en la documentación:

predicado_índice

Se utiliza para permitir la inferencia de índices únicos parciales. Se puede inferir cualquier índice que satisfaga el predicado (que en realidad no es necesario que sean índices parciales). Sigue el formato CREATE INDEX.

En este caso:

INSERT INTO key_value_pair (key, value, is_active) VALUES ('temperature','20', false) 
ON CONFLICT (key) WHERE is_active
DO UPDATE
SET value = '33', is_active = true;