Os documentos em INSERT dizem:
Se an
index_predicate
for especificado, ele deverá, como requisito adicional para inferência, satisfazer os índices de árbitro. Observe que isso significa que um índice único não parcial (um índice único sem predicado) será inferido (e, portanto, usado porON CONFLICT
) se tal índice que satisfaça todos os outros critérios estiver disponível.
Não tenho certeza se entendi isso. Acho que estou dizendo que se eu tiver um índice não parcial como este:
CREATE UNIQUE INDEX ON managers (department_id);
e eu escrevo um insert com ON CONFLICT (department_id)
, ele inferirá que deveria usar o índice acima.
Mas se eu tiver um índice parcial como este:
CREATE UNIQUE INDEX ON managers (department_id) WHERE active = true;
então preciso usar o index_predicate
para direcioná-lo para usar o índice parcial, como ON CONFLICT (department_id) WHERE active = true
.
Isso está correto?
Sim, você acertou.
O que a documentação está tentando deixar claro é que se você escrever
ON CONFLICT (department_id) WHERE active = TRUE
, o PostgreSQL também poderá inferir um índice exclusivo semWHERE
cláusula.