Upsert с частичным индексом: "не существует уникального соответствия спецификации ON CONFLICT" - PullRequest
1 голос
/ 12 июля 2020

Я использую upsert с частичным индексом. Я знаю, что мне нужно указать предикат, если я использую частичный индекс, но по какой-то причине он не может найти индекс. Я нашел много похожих сообщений, но обычно в предложении ON CONFLICT была опечатка или отсутствующее условие. В моем случае я не могу определить проблему.

Индекс выглядит следующим образом:

CREATE INDEX index_plays_on_user_id_and_episode_id ON db.plays USING btree (user_id, episode_id) WHERE (NOT ((client)::text = 'Web'::text))

Я пытаюсь выполнить следующее обновление, но это не работает:

INSERT INTO plays (client, user_id, scrobble_id, event_timestamp, episode_id)
VALUES ('Mac', 2, 14159, '2020-07-11 20:10:32.813406', 141800194)
ON CONFLICT (user_id, episode_id) WHERE (NOT ((client)::text = 'Web'::text))
DO NOTHING
;

Вывод:

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

Есть идеи, что не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...