2

假设我有db1db2,两个数据库。我想执行类似的命令

update db2.person p2
set p2.name = p1.name
from db1.person p1
where p1.id = p2.id;

这在 MySQL 中是可能的,没有任何问题。我很难在 PostgreSQL 中实现它。

我试过的:

create extension postgres_fdw;

create server theservername
foreign data wrapper postgres_fdw
options(host 'localhost', dbname 'thedbname', port '5432');

create user mapping for theuser
server theservername
options(user 'theusername', password 'thepassword');

在这里我被卡住了,我不知道如何继续。MySQL 中不存在这些问题。如何在 PostgreSQL 中克服它们?

4

1 回答 1

4

步骤如下:

步骤 - 1:创建扩展

create extension postgres_fdw;

步骤 - 2:创建服务器

create server theservername
foreign data wrapper postgres_fdw
options(host 'localhost', dbname 'thedbname', port '5432');

步骤 - 3:为服务器创建外部用户映射

create user mapping for theuser
server theservername
options(user 'theusername', password 'thepassword');

步骤 - 4:创建与另一个数据库具有相同结构的外部表

create foreign table "schema_name"."local_table_name"
(
id_ int;
...
-- field list same as foreign table in other db
)
server theservername
options(SCHEMA_NAME 'foreign_schema', TABLE_NAME 'foreign_name');

现在您可以local_table_name在查询中使用本地表。它将在远程数据库上执行所有操作。

您的更新查询可以编写如下:

update local_table_name p2
set name = p1.name
from person p1
where p1.id = p2.id;
于 2020-10-01T10:27:52.133 回答