在 postgresql 中插入 ... 值( SELECT ... FROM ... )?

Posted

技术标签:

【中文标题】在 postgresql 中插入 ... 值( SELECT ... FROM ... )?【英文标题】:Insert into … values ( SELECT … FROM … ) in postgresql? 【发布时间】:2014-04-04 00:49:33 【问题描述】:

我正在使用Postgresql 数据库。我有一个数据库-db1,我在这个数据库中有一个表App1

我需要对 db1 中的 App1 表进行选择查询,然后无论我得到什么结果,我都需要将它们插入到 App2 表中,因为它在另一个数据库中 @ 987654328@.

下面是我针对App1 表运行的查询,该表位于db1 -

select col1, col2 from App1 limit 5

现在有什么方法可以使用 Insert 语句和上面的 SELECT 语句,它可以自动插入到 db2 中的 App2 表中?

沿着这条线的东西-

Insert into … values ( SELECT … FROM … )

这是否可以在 Postgresql 中执行,因为这两个表都在不同的数据库中?

【问题讨论】:

真的吗?查看 postgres 文档有这么难吗? postgresql.org/docs/8.1/static/sql-insert.html @MarcB:但是这两个表都在不同的数据库中,所以这仍然有效吗? 只要你运行它的用户拥有适当的权限,postgres 不会在意。 select db1.table1.field, db2.table2.otherfield 在几乎任何值得使用的 sql 数据库中都是完全合法的 SQL。 @MarcB:请不要链接到过时的版本(您可以使用current而不是URL中的版本号) 【参考方案1】:

要在数据库之间执行此操作,您必须使用 the foreign data wrapper postgres_fdw 或 use dblink。请参阅文档。 PostgreSQL 不支持跨库SELECT

通常,如果您发现自己想要这样做,则应该在单个数据库中使用单独的架构。


顺便说一句,一般是:

INSERT INTO ... SELECT ...

即没有子查询,没有括号。那是因为VALUES 子句实际上也是一个独立的语句:

INSERT INTO ... VALUES ...

观察:

regress=> VALUES (1,2), (2,3);
 column1 | column2 
---------+---------
       1 |       2
       2 |       3
(2 rows)

【讨论】:

感谢您的建议。那么我应该为我的用例做些什么呢?我是否应该从 db1 获取数据并将其放入响应对象中,然后迭代该对象,然后插入到 db2 中? 您可以按照您的描述通过客户端执行此操作,或者您可以使用 dblink 或 postgres_fdw,正如我在上面链接的那样,通过 INSERT INTO ... SELECT 查询执行此操作

以上是关于在 postgresql 中插入 ... 值( SELECT ... FROM ... )?的主要内容,如果未能解决你的问题,请参考以下文章

将空值插入 Postgresql

将 SQL 语句作为记录值插入 PostgreSQL 列

Postgresql 插入触发器以设置值

sql 从逗号分隔列postgresql中插入splitin值

从 postgresql 数据库中选择值并根据我需要完整查询插入/更新

如何将 DELETE 的返回值插入到 postgresql 中的 INSERT 中?