首页 > 解决方案 > 带有部分索引的更新:“没有唯一匹配 ON CONFLICT 规范”

问题描述

我正在使用upsert带有部分索引的 an 。我知道如果我使用部分索引,我必须指定谓词,但由于某种原因它找不到索引。我发现了很多类似的帖子,但通常是拼写错误或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))

我正在尝试执行以下 upsert 但这不起作用:

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

知道有什么问题吗?

标签: postgresqlupsert

解决方案


推荐阅读