如何根据另一个数据库中具有相同表的表更新数据库中的表记录



让我们假设我有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中克服它们?

步骤如下:

步骤-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:创建具有与另一个DB中相同结构的外部表

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;

相关内容

  • 没有找到相关文章