1

这是我要运行的查询 - 让我在其中运行此查询的当前数据库是 db1,我要在其中插入记录的数据库是 db2。

  insert into db2.employee(id, name, group) values(id, <db1.employee.name>, <db1.employee.group>) where id in (select id from archived limit 2);

如您所见,这些值必须从 db1(当前数据库)的员工表中选择,然后插入到 db2 的员工表中。

我知道查询是错误的 - 但我刚刚写信解释我想要做什么。

如何使用 postgres_fdw 制定查询?

我试过用这个查询做一些相反的事情

INSERT INTO  employee select * from 
dblink('host=10.1.1.1
 user=user
 password=password
 dbname=mydb', 'select * from employee') tt(
       id int,
  name character varying,
 );

编辑:请注意,我想做一个远程插入和一个本地选择。当我在 db2 中运行查询作为本地数据库而不是 db1 时,似乎可以使用上面的查询来实现这一点

4

1 回答 1

3

您不能像在 MySQL 中那样直接访问不同数据库中的表(MySQL数据库对应于 PostgreSQL模式)。

因此,也许您可​​以通过在单个数据库中使用不同的模式来实现您想要的。

如果您确实需要更新不同数据库中的表,则必须使用 postgres_fdw 外部数据包装器来访问外部表。

您必须foreign_employeedb1指向db2.

然后你可以这样做:

INSERT INTO foreign_employee
SELECT e.*
FROM employee e
     JOIN archived a USING id
LIMIT 2;

请注意,LIMIT这里有点奇怪,因为查询结果中没有隐式顺序,除非您强制使用ORDER BY.

于 2016-11-14T14:04:28.047 回答