如何在 PostgreSQL 中插入多行
Posted
技术标签:
【中文标题】如何在 PostgreSQL 中插入多行【英文标题】:How to upsert multiple rows in PostgreSQL 【发布时间】:2016-08-24 04:01:19 【问题描述】:我正在尝试在 PostgreSQL 9.5.2 中编写这样的查询:
INSERT INTO a (id, x)
SELECT id, x FROM b
ON CONFLICT (id) DO UPDATE
SET x = b.x
WHERE b.y < 100
但我得到ERROR: missing FROM-clause entry for table "b"
。我一定遗漏了一些基本的东西,但是如何引用 UPDATE 子句中插入的行?还是有其他方法?
【问题讨论】:
【参考方案1】:冲突值可通过excluded
别名获得:
INSERT INTO a (id, x)
SELECT id, x
FROM b
ON CONFLICT (id) DO UPDATE
SET x = excluded.x;
【讨论】:
惊人的答案,很难找到,并为多行 upsert 问题提供了一个超级优雅的解决方案。谢谢!以上是关于如何在 PostgreSQL 中插入多行的主要内容,如果未能解决你的问题,请参考以下文章
PDO postgresql 最后插入的 id 返回 'false' 或 -1
如何使用 RECORD 在 PostgreSQL 中返回多行?