在PostgreSQL的UPSERT上返回PK ID时出错,导致ON CONFLICT无法运行

时间:2019-07-17 17:19:52

标签: database postgresql insert

当插入与songid的值之一冲突时,我需要返回现有记录sc_link, yt_link, spot_link(PK序列)的ID。

sc_link, yt_link, spot_link都具有独特的约束。

当我运行此查询

INSERT INTO songs (created, lat, lng, mood, genre, format, cxc_views, sc_link, yt_link, spot_link, soundcloud_id_author, yt_channel_id_author)   
VALUES (CURRENT_TIMESTAMP, '51.06901665960392', '-129.02343750000003', 'joyful', 'reggaeton', '', '0', NULL, 'vYeenwUBjRg', NULL, NULL, 'UCG94rpZEA7WG1eN_UC8GsDA')   
ON CONFLICT (sc_link, yt_link, spot_link)
DO UPDATE SET title=EXCLUDED.title
RETURNING songid;

我收到以下错误

ERROR:  duplicate key value violates unique constraint "yt_unique"
DETAIL:  Key (yt_link)=(vYeenwUBjRg) already exists.
SQL state: 23505

那会没事的(我知道有一个骗子),除了我需要找回songid以便我可以向用户显示歌曲已经在应用程序上了。

此外,ON CONFLICT甚至没有运行,因为删除最后三行时出现相同的错误。

为什么ON CONFLICT及以下版本未运行?其他的SO答案表明此UPSERT解决方案运行良好。

我是PostgreSQL的新手,使用11.4从MySQL移植应用程序。谢谢!

0 个答案:

没有答案