【问题标题】:Inserting in postgresql table from db2 trigger从 db2 触发器插入 postgresql 表
【发布时间】:2013-04-08 10:29:19
【问题描述】:

我的问题如下:

我有一个 db2 数据库和一个 postgres 数据库。它们位于不同的服务器中。每次我在 db2 表中添加一条新记录时,它也应该立即添加到 postgresql 中。

我正在考虑通过触发器来实现。但我不知道要在其中放入什么以插入到 postgresql 中。我读过也许我可以调用一个外部存储过程,但我不太确定它是否是我正在寻找的。​​p>

提前致谢!

【问题讨论】:

    标签: postgresql stored-procedures triggers db2 sql-insert


    【解决方案1】:

    Java 存储过程

    是的,您可以创建存储过程,例如在 Java 中。您从触发器中调用此存储过程。在 Java 存储过程中,您创建到 postgresql 的连接,并插入从 DB2 接收到的值并将它们插入到 postgres 中。我认为你必须处理两个连接,一个来自 DB2,一个来自 postgres。

    关于Java存储过程的资料有很多:

    联合:Postgres 包装器

    另一种方法是为 Postgresql 创建一个包装器。目前,IBM 通过 InfoSphere Federation 服务器提供了许多连接器,但我没有为 Postgres 和 Mysql 提供任何连接器。 但是,您可以创建自己的包装器。文档在这里:

    如果您想为 postgresql 包装器创建一个开源项目,我将有兴趣参与。

    【讨论】:

    • 这两种方法都需要考虑的一点是如何处理错误。我假设如果 postgres 插入失败,那么 DB2 插入也应该回滚。对于触发器,也许它应该作为“插入之前”完成,这样如果出现 postgres 问题,整个插入可以中止?
    • “插入前”或“插入后”不会影响事务,如果存储过程在执行过程中发生错误时抛出异常/sqlstate。在这两种情况下,事务都将在 DB2 中回滚。
    • 但是,如果存储过程包装了所有错误(try catch),那么 DB2 可以提交,但 Postgres 中不会有相应的值。
    • 这些关于同步的问题在使用包装器时不会发生。它已经考虑了所有这些情况。
    • @AngocA 感谢您的帮助。看来这是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多