dma*_*man 4 sql postgresql unique upsert
使用 Postgres 9.6,我将一行(选定的列)从一个表复制到另一个表。我在跑步:
INSERT INTO copy_on_write(id, images)
SELECT id, images
FROM listings
WHERE id = 1 AND posted_by = foo
ON CONFLICT (id) DO UPDATE SET images = listings.images
Run Code Online (Sandbox Code Playgroud)
由于 id 已经存在而产生冲突,我得到了missing FROM-clause entry for table "listings".
所以,我尝试过:
INSERT INTO copy_on_write(id, images)
SELECT id, images
FROM listings
WHERE id = 1 AND posted_by = foo
ON CONFLICT (id) DO UPDATE SET images = images FROM listings
Run Code Online (Sandbox Code Playgroud)
但后来我得到syntax error at or near "FROM"
ON CONFLICT (id)如果行 ID 已经存在,我该如何处理这个问题,以便它更新图像列?
使用excluded:
INSERT INTO copy_on_write(id, images)
SELECT id, images
FROM listings
WHERE id = 1 AND posted_by = 'foo'
ON CONFLICT (id) DO UPDATE SET images = excluded.images;
Run Code Online (Sandbox Code Playgroud)
从文档中:
冲突动作
(...) ON CONFLICT DO UPDATE 中的 SET 和 WHERE 子句可以使用表名称(或别名)访问现有行,并可以使用特殊表访问建议插入的行
excluded。