Re: Bug Report: INSERT ON CONFLICT sometimes does not work with partial index

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: Bug Report: INSERT ON CONFLICT sometimes does not work with partial index
Дата
Msg-id CAKFQuwa1oJs6aNdpEJyT9K=o6k-frkAM8VUuxEtOjjtq8Zjv3g@mail.gmail.com
обсуждение исходный текст
Ответ на Bug Report: INSERT ON CONFLICT sometimes does not work with partial index  (Danylo Miroshnichenko <miroshnik.dan@gmail.com>)
Список pgsql-bugs
On Sun, Feb 5, 2023 at 9:51 AM Danylo Miroshnichenko <miroshnik.dan@gmail.com> wrote:

CREATE UNIQUE INDEX IF NOT EXISTS uniq_id_test     ON test USING btree (type, id)     WHERE (type = 'Test');

PREPARE test (text, int, text) AS    INSERT INTO test (type, id)    VALUES ($1, $2)    ON CONFLICT (type, id)    WHERE type = $3 DO    UPDATE    SET id = EXCLUDED.id;
 
EXECUTE test('Test', 6, 'Test');
The last EXECUTE statement always throws an error:
[42P10] ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
All of it works fine if we replace $3 parameter with a constant value 'Test' (no errors):
PREPARE test (text, int, text) AS    INSERT INTO test (type, id)    VALUES ($1, $2)    ON CONFLICT (type, id)    WHERE type = 'Test' DO    UPDATE    SET id = EXCLUDED.id;

This is a known deficiency that the first query ever works at all.  It should error every time.


In short, consider the WHERE clause a part of query structure that has to statically match one partial index specification.

David J.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #17771: add a "status" column to the pg_rules system view
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: BUG #17771: add a "status" column to the pg_rules system view