PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Partial Index wird nicht in ON CONFLICT-Klausel verwendet, während ein Upsert in Postgresql durchgeführt wird

Sie müssen ein Indexprädikat verwenden, um einen partiellen eindeutigen Index zu verwenden. Lesen Sie die Dokumentation ein:

index_predicate

Wird verwendet, um Rückschlüsse auf teilweise eindeutige Indizes zu ermöglichen. Alle Indizes, die das Prädikat erfüllen (die eigentlich keine Teilindizes sein müssen), können abgeleitet werden. Folgt dem CREATE INDEX-Format.

In diesem Fall:

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;