首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个数据库之间生成数据增量( PostgreSQL )

在两个数据库之间生成数据增量( PostgreSQL )
EN

Database Administration用户
提问于 2019-02-18 15:48:22
回答 1查看 1.4K关注 0票数 0

我有一个很大的数据库,有很多数据~50 40,大约有40个表-运行PostgreSQL 9.6。此数据库被复制,并位于没有Internet连接的多个客户端站点中。对此数据库所做的更改应传递给客户端站点。

我正在寻找一种方法,在数据库的当前版本之间生成一个增量脚本,然后在每个客户端的站点上执行这个脚本(开源/免费软件解决方案-- RedGate不是一个选项)。

主要假设是模式是相同的,因此增量只存在于数据中(插入/更新/删除行)。

我检查了许多建议中的工具(例如这里),其中一个运行良好的工具是SQLWorkbench-J,使用它的WbDataDiff命令。但是它非常慢--即使数据库驻留在同一台机器上。我认为这是因为增量是外部计算的,以支持不同的数据库源。

有人建议过这样做吗?是否有一种方法可以让它在PostgreSQL实例上内部运行以提高性能(据我所知,不能根据这里使用不同的数据库计算联接--在这种情况下,使用“外部数据包装器”可能有帮助吗)?

EN

回答 1

Database Administration用户

发布于 2019-02-18 16:12:11

如果可以的话,传统的机制

  • 在实时点将表转储到CSV (\COPY with ORDER BY)中。
  • 修改表,或等待修改
  • 再次在时间点转储表(\COPYORDER BY)
  • 区分CSV
  • Thennn
    • 如果第二个版本中不存在行,则编写一个DELETE (或对较大的删除进行批处理)。
    • 否则编写一个INSERT ON CONFLICT .. DO UPDATE (或为较大的INSERT编写批处理)

这将处理INSERTSUPDATESDELETES,并且只要求您检查是否存在代理密钥。如果你没有代孕密钥,事情显然会变得更加复杂。而且,如果根本没有UNIQUE键的话,就会更加复杂。

或者,将表作为50 it的CSV转储为.xz (或其他压缩格式),然后只处理它。可能几小时内压缩到几GB。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/230058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档