0

请帮助我设置从 PostgreSQL 到 Informix(两者的最新版本)的连接。我希望能够从 PostgreSQL 对 Informix 执行查询。我正在寻找一种不需要为每个查询导出数据(从 Informix)和导入(到 PostgreSQL)的解决方案。

我是 PostgreSQL 的新手,需要详细说明。

4

2 回答 2

2

正如克里斯特拉弗斯所说,你想做的事情并不容易。

理论上,如果您正在使用 Informix 并需要访问 PostgreSQL,您可以(购买和)使用 Enterprise Gateway Manager (EGM) 并使用 PostgreSQL 的 ODBC 驱动程序来允许 Informix 连接到 PostgreSQL。EGM 在实际访问 PostgreSQL 时会尽最大努力看起来像是另一个 Informix 数据库。(我尚未验证是否支持 PostgreSQL,但 EGM 基本上需要 ODBC 驱动程序才能工作,所以应该没有任何问题——可能是“著名的遗言”。)这将包括 2PC(两阶段犯罪); 不完美,但适度接近。

对于反向连接(使用 PostgreSQL 并连接到 Informix),您需要查看 PostgreSQL 工具套件或其他来源。

于 2012-09-02T14:31:36.943 回答
2

你还没有说你使用的是哪个版本。有一些限制需要注意,但有多种选择。

既然你说这是导入/导出,我会假设只读选项是不够的。这排除了 PostgreSQL 9.1 的外部数据包装系统。

根据您的版本,David Fetter 的 DBI-Link 可能适合您的需求,因为它可以对远程表执行查询(请参阅https://github.com/davidfetter/DBI-Link)。它已经有一段时间没有更新了,但是实现应该非常稳定并且可以跨版本使用。如果失败,您可以使用不受信任的语言(PL/PythonU、PL/PerlU 等)编写存储过程以连接到 Informix 并在那里运行查询。请注意,在这种情况下您将遇到有关事务处理的限制,因此您可能希望使用延迟约束触发器对其他表运行任何查询,以便在提交时运行所有内容。

编辑:我想到了一种更简洁的方法:使用外部数据包装器进行导入,使用单独的客户端应用程序进行导出。

在这种方法中,您将拥有四个基本组件,但这将是松散耦合的,并受到适当的事务控制。如果需要,您甚至可以使用两阶段提交。这四个组件是(这里没有提供完整的工作示例,但至少是一个路线图):

  1. 用于数据导入的外部数据包装器,允许您查看来自 Informix 的数据。
  2. 要导出的数据的视图。
  3. 管理导出方面的外部应用程序,以您选择的语言编写。这在一个频道上收听LISTEN export_informix;
  4. 基础表上的触发器,这些表可以查看要导出的数据,这会引发NOTIFY export_informix

通知是在提交时发出的,所以基本上你的事务有两个阶段:

  1. 在 PostgreSQL 中写入数据,标记要导出的数据。犯罪。
  2. 从 PostgreSQL 读取数据,导出到 Informix。双方都提交(TPC?)。
于 2012-09-02T09:04:08.990 回答