database - 如何仅更新数据库转储中的某些属性(sql/text/csv 或任何其他格式)
问题描述
我有从表的某些列中提取数据的特定要求(对于某些记录,由唯一 ID 标识)并在另一个表中更新具有相同 ID 的记录,并在列中使用相同的值。
我使用的数据库是 Postgresql。我希望是否有一种方法可以通过使用数据库工具(DBeaver、PG Admin 等)进行提取,我可以使用该工具从一个 DB 中提取并将值保存在另一个 DB 中。我尝试从 DBeaver 中提取值,但它们是Insert INTO
语句,会创建重复记录。
我的外行解决方案是提取 CSV,然后通过 Rake 任务逐行读取来更新记录。
任何有关建议解决方案的 DB 级别方式的帮助表示赞赏。提前致谢。
解决方案
解决方案:
通过使用postgres_fdw你可以很容易地做到这一点。请在要更新表的新数据库上按照以下提到的步骤操作:
步骤 - 1:创建扩展
create extension postgres_fdw;
步骤 - 2:创建远程服务器
create server remote_server
foreign data wrapper postgres_fdw
options(host 'remote_server', dbname 'remote_dbname', port '5432');
步骤 - 3:为服务器创建外部用户映射
create user mapping for localuser
server remote_server
options(user 'remoteuser', password 'remoteuser_password');
步骤 - 4:创建与远程数据库中结构相同的外部表
create foreign table "schema_name"."remote_table"
(
id_ int;
...
-- field list same as foreign table in other db
)
server remote_server
options(SCHEMA_NAME 'foreign_schema', TABLE_NAME 'foreign_name');
现在您可以local_table_name
在查询中使用本地表,但它将在远程数据库上执行所有操作。
您的更新查询可以编写如下:
update local_table p1
set
-- your set statements
.....
.....
from remote_table p2
where p1.id = p2.id;
remote_table
如果您觉得以后不需要它,您可以放弃。
注意: -仅当两个数据库都在同一台服务器上或两个数据库可以相互通信(如果在不同的服务器上)时,上述方法才有效。
推荐阅读
- scala - 使用 Spark SQL 时可以要求对数据库进行联接操作吗?
- javascript - 在 React 应用程序中编译时出错
- java - 如何显示维护页面我的 Web 应用程序未部署,使用重定向请求到另一个端口
- docker - Docker compose with nginx 不断显示欢迎页面
- google-app-engine - CloudSQL Eclipse Java 标准 GAE java.lang.UnsatisfiedLinkError
- templates - 如何更改拉取请求的 github 默认名称
- java - Datepicker 只有日历应该是可见的
- kotlin - 订阅功能不起作用
- android - 意图不起作用
- python - python sum on 张量数组与 tf.add_n