PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Index partiel non utilisé dans la clause ON CONFLICT lors de l'exécution d'un upsert dans Postgresql

Vous devez utiliser un prédicat d'index pour utiliser un index unique partiel. Lire dans la documentation :

index_prédicat

Utilisé pour permettre l'inférence d'index uniques partiels. Tous les index qui satisfont le prédicat (qui n'ont pas besoin d'être des index partiels) peuvent être déduits. Suit le format CREATE INDEX.

Dans ce cas :

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;