我有一个很大的数据库,有很多数据~50 40,大约有40个表-运行PostgreSQL 9.6。此数据库被复制,并位于没有Internet连接的多个客户端站点中。对此数据库所做的更改应传递给客户端站点。
我正在寻找一种方法,在数据库的当前版本之间生成一个增量脚本,然后在每个客户端的站点上执行这个脚本(开源/免费软件解决方案-- RedGate不是一个选项)。
主要假设是模式是相同的,因此增量只存在于数据中(插入/更新/删除行)。
我检查了许多建议中的工具(例如这里),其中一个运行良好的工具是SQLWorkbench-J,使用它的WbDataDiff命令。但是它非常慢--即使数据库驻留在同一台机器上。我认为这是因为增量是外部计算的,以支持不同的数据库源。
有人建议过这样做吗?是否有一种方法可以让它在PostgreSQL实例上内部运行以提高性能(据我所知,不能根据这里使用不同的数据库计算联接--在这种情况下,使用“外部数据包装器”可能有帮助吗)?
发布于 2019-02-18 16:12:11
如果可以的话,传统的机制
\COPY with ORDER BY)中。\COPY和ORDER BY)DELETE (或对较大的删除进行批处理)。INSERT ON CONFLICT .. DO UPDATE (或为较大的INSERT编写批处理)这将处理INSERTS、UPDATES和DELETES,并且只要求您检查是否存在代理密钥。如果你没有代孕密钥,事情显然会变得更加复杂。而且,如果根本没有UNIQUE键的话,就会更加复杂。
或者,将表作为50 it的CSV转储为.xz (或其他压缩格式),然后只处理它。可能几小时内压缩到几GB。
https://dba.stackexchange.com/questions/230058
复制相似问题