如何在 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

使用命令行参数运行 PostgreSQL .sql 文件

如何使用 RECORD 在 PostgreSQL 中返回多行?

当多行满足要求时,如何通过连接在 PostgreSQL 中进行选择?

向PostgreSQL插入数据

如何从 PostgreSQL 的单行数据库表中获取多行?