Índice parcial no utilizado en la cláusula ON CONFLICT mientras se realiza una actualización en Postgresql

Tengo la siguiente tabla de valores de atributos de entidad:

CREATE TABLE key_value_pair (
    id serial NOT NULL PRIMARY KEY,
    key varchar(255) NOT NULL,
    value varchar(255),
    is_active boolean
);

CREATE UNIQUE INDEX key_value_pair_key_if_is_active_true_unique ON key_value_pair (key) WHERE is_active = true;

Las entradas de muestra en esta tabla son:

id |     key     | value | is_active 
----+-------------+-------+-----------
  1 | temperature | 2     | f
  2 | temperature | 12    | f
  3 | temperature | 15    | f
  4 | temperature | 19    | f
  5 | temperature | 23    | t
(5 rows)

Por lo tanto, en cualquier momento, para cualquier clave dada, solo debe estar presente una entrada verdadera is_active.

Estoy ejecutando la siguiente declaración upsert en esta tabla:

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

Pero falla con:

ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification

Lo que me pregunto es por qué no está usando el índice parcial únicokey_value_pair_key_if_is_active_true_unique.

El upsert funciona si dejo ir el "en cualquier momento, para cualquier clave dada, solo debe estar presente una entrada verdadera is_active"cláusula y cambie el índice a:

CREATE UNIQUE INDEX key_value_pair_key_if_is_active_true_unique ON key_value_pair (key, is_active);

Leí documentación en el sitio web de Postgres de que la cláusula ON CONFLICT utilizará índices parciales. Me pregunto por qué no se usa en este caso. ¿Qué me estoy perdiendo aquí o qué error estoy cometiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta