【问题标题】:Update a table (Database1) from the same table (Database2) in Postgresql从 Postgresql 中的同一表 (Database2) 更新表 (Database1)
【发布时间】:2018-06-27 13:29:37
【问题描述】:

我有两个数据相似的数据库,但我想做的是更新 sample_table from Database2sample_table of Database1

例子:

数据库1 [sample_table]

ID     Reference      Name
0001   Ref0001        Test1
0002   Ref0002        Test2

数据库2 [sample_table] - 有变化

ID     Reference      Name
0001   Ref0001        Name1
0002   Ref0002        Name2

在 Database2 的 sample_table 中,我更改了 Name 字段中的数据,我想应用 Database1 中 sample_table 中的更改。要执行什么 SQL 查询来执行此操作?我正在使用 pgAdminIII 和 pgAdmin4。 (两个数据库在同一台服务器上)

如果您有任何问题,请在下方评论。

【问题讨论】:

  • 使用完全限定的表名并编写正常的更新语句?
  • Postgres 不支持跨数据库查询(或更新)。为此,您需要foreign table
  • @a_horse_with_no_name 我已经成功完成了 PostgreSQL 的外部数据包装器的过程,但问题是我不知道将 Name 从 Database2 替换为 的查询名称 Database1.

标签: sql postgresql pgadmin


【解决方案1】:

这个问题没有单一的答案,您可以通过多种方式解决它。我们列举几个:

  • 为 Database2 创建一个普通的 sql 转储,将表名编辑为与 Database1 表不同。将修改后的 sql 转储到 Database1 中,以将所有数据放入同一个数据库中。执行从导入的表到原始表的更新,通过 id 加入/匹配元组。

  • 如建议的那样:创建一个 postgres_fdw 类型的外部数据包装器为 described,以使用它直接在 postgres 中更新来自外部数据源的原始表。

  • 创建一个连接到两个数据库的简单外部脚本,从一个数据库中读取数据并更新到另一个数据库。

  • 使用一种(ETL,或复制)软件系统能够保持数据库更新。 BucardoKettle(Pentaho Data Integration) 之类的东西可以解决问题。

一切都取决于您需要多复杂或多简单的解决方案,一次或几次使用或长期使用

【讨论】:

  • 另一种选择:也许这些表应该位于两个模式而不是两个数据库中。
  • 我实际上是在尝试 postgres_fdw 并按照postgres_fdw 操作,但在第 4 步中出现错误。
  • 我该如何做建议#1?有没有我可以关注的链接,因为我实际上并不熟悉它。
  • 对于#1,你可以使用这个link
  • 我已经成功完成了 dblink 和 postgres_fdw,我现在的问题是用于将 Name 字段从 DB2 更新到 DB1 的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多