Я использую 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
Есть идеи, что не так?