如何根据 table 将数据库中的 table 记录更新为另一个数据库中的相同 table?
How to update table records in a database based on a table with the same table in another database?
假设我有两个数据库 db1
和 db2
。我想执行类似
的命令
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');
我卡在这里了,我不知道如何继续。 None 这些问题存在于 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:创建具有与另一个数据库中相同结构的外部 Table
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');
现在您可以像本地 table 一样在查询中使用 local_table_name
。它将对远程数据库执行所有操作。
你的更新查询可以这样写:
update local_table_name p2
set name = p1.name
from person p1
where p1.id = p2.id;
假设我有两个数据库 db1
和 db2
。我想执行类似
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');
我卡在这里了,我不知道如何继续。 None 这些问题存在于 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:创建具有与另一个数据库中相同结构的外部 Table
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');
现在您可以像本地 table 一样在查询中使用 local_table_name
。它将对远程数据库执行所有操作。
你的更新查询可以这样写:
update local_table_name p2
set name = p1.name
from person p1
where p1.id = p2.id;