【发布时间】:2020-10-14 18:52:45
【问题描述】:
我需要定期(但以增量方式)将一组 SQL Server Azure 表的内容(一种方式)同步到 PostgreSQL Azure 实例。
以下是我考虑过的一些途径:
- 来自 SQL Server 的链接服务器。不去。显然 Azure 不支持链接服务器。
- 来自 PostgreSQL 的外部数据包装器。不去。 Azure 上的 PostgreSQL 仅支持 postgres_fdw,不支持所需的 tds_fdw。
- Azure 数据工厂。不去。数据复制过程不能以增量方式工作,并且 sink 管道组件不支持 PosgreSQL。
- 商业复制解决方案。对于初创公司来说太贵了,而且大多数都没有托管。
- SymmetricDS 或 ReplicaDB。这些可能有效,但未托管,因此在配置和调试所有时间和精力之后,我们可能会也可能不会节省构建自定义解决方案的时间。
我是否缺少明显的解决方案?
【问题讨论】:
-
你能在你的应用程序代码中设置双重写入吗?我基本上在想:设置双重写入,在 Azure 中设置一个 vanilla Linux 盒子并在那里安装 PG,从指向 SQL-Server-on-Azure 表的 that PG 设置 tds_fdw,然后然后从 azure PG 设置 postgres_fdw 指向您的 PG。然后你用
INSERT INTO the_table_in_azure_pg SELECT * FROM the_foreign_table WHERE id < (first ID already present in the table from double-writing)回填之前写的记录 -
这是一个有趣的方法。我绝对更喜欢基于联合 SQL 的解决方案而不是自定义工具,因为这样我就可以轻松构建增量更新插入逻辑。
-
我在工作中遇到了类似的情况,只是数据被推送到 Oracle 中。最后我们选择抓取 bacpac 文件,解析它们并加载结果。使用为此目的编写的实用程序来解析 bacpac 文件:github.com/gsiems/bac-tract。有一个用于创建 pg_dump 文件的实用程序的开始,但我从来没有达到实际测试它的地步。
-
@LeonYue,这是一种有趣的方法,但我最终构建了自己的简单复制系统。
-
@N8allan 恭喜你。如果您能与我们分享一些东西作为答案,那就更好了。
标签: sql-server postgresql azure azure-sql-database database-replication