我如何使用 postgres_fdw 将插入查询表达到另一个数据库中?
How would I formulate an insert query into another database using postgres_fdw?
这是我想要的查询 运行 - 让我们 运行 在其中执行此查询的当前数据库是 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(当前数据库)的员工 table 中 select 编辑,然后插入到 db2 的员工 table 中。
我知道查询是错误的 - 但我刚刚写信来解释我正在尝试做什么。
我将如何使用 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,
);
编辑:请注意,我想执行远程插入和本地 select。
当我 运行 db2 中的查询作为我的本地数据库而不是 db1
时,我似乎能够使用上面的查询来实现此目的
您不能像在 MySQL 中那样直接访问不同数据库中的 tables(MySQL 数据库 对应于PostgreSQL 架构).
所以也许您可以通过在单个数据库中使用不同的模式来实现您想要的。
如果您确实需要在不同的数据库中更新 table,则必须使用 postgres_fdw 外部数据包装器来访问外部 table.
你必须在数据库 db1
中定义一个外来的 table – 我们称之为 foreign_employee
– 指向 db2
中的 table .
那么你可以这样做:
INSERT INTO foreign_employee
SELECT e.*
FROM employee e
JOIN archived a USING id
LIMIT 2;
请注意,LIMIT
在这里有点奇怪,因为查询结果中没有隐式顺序,除非您使用 ORDER BY
.
强制排序
这是我想要的查询 运行 - 让我们 运行 在其中执行此查询的当前数据库是 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(当前数据库)的员工 table 中 select 编辑,然后插入到 db2 的员工 table 中。
我知道查询是错误的 - 但我刚刚写信来解释我正在尝试做什么。
我将如何使用 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,
);
编辑:请注意,我想执行远程插入和本地 select。 当我 运行 db2 中的查询作为我的本地数据库而不是 db1
时,我似乎能够使用上面的查询来实现此目的您不能像在 MySQL 中那样直接访问不同数据库中的 tables(MySQL 数据库 对应于PostgreSQL 架构).
所以也许您可以通过在单个数据库中使用不同的模式来实现您想要的。
如果您确实需要在不同的数据库中更新 table,则必须使用 postgres_fdw 外部数据包装器来访问外部 table.
你必须在数据库 db1
中定义一个外来的 table – 我们称之为 foreign_employee
– 指向 db2
中的 table .
那么你可以这样做:
INSERT INTO foreign_employee
SELECT e.*
FROM employee e
JOIN archived a USING id
LIMIT 2;
请注意,LIMIT
在这里有点奇怪,因为查询结果中没有隐式顺序,除非您使用 ORDER BY
.