Índice parcial não usado na cláusula ON CONFLICT ao executar uma upsert no Postgresql

Eu tenho a seguinte tabela de valor de atributo da entidade:

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;

As entradas de amostra nesta tabela são:

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)

Portanto, a qualquer momento, para qualquer chave especificada, apenas 1 entrada is_active verdadeira deve estar presente.

Estou executando a seguinte instrução upsert nesta tabela:

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;

Mas, falha com:

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

O que eu quero saber é por que ele não está usando o índice parcial exclusivokey_value_pair_key_if_is_active_true_unique.

O upsert funciona se eu largar o "a qualquer momento, para qualquer chave especificada, apenas 1 entrada is_active verdadeira deve estar presente"e altere o índice para:

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

Li a documentação no site do Postgres de que índices parciais serão usados pela cláusula ON CONFLICT. Eu me pergunto por que não é usado neste caso. O que estou perdendo aqui ou que erro estou cometendo?

questionAnswers(1)

yourAnswerToTheQuestion