【问题标题】:Communication Between 2 Databases2个数据库之间的通信
【发布时间】:2011-10-06 09:57:33
【问题描述】:

我有 2 个数据库,想在 database1 的表更新时实现触发器,以便对 database2 的表进行一些更新。

示例
db1 有一个表 1t1
db2 有一个表 2t1
在将 touple 插入 1t1 时,我想将相应的 touple 插入 2t1

截至目前,我正在使用 postgresql,但我不介意切换到其他免费数据库。
如何做到这一点?

【问题讨论】:

    标签: sql database postgresql triggers communication


    【解决方案1】:

    我建议使用数据库链接在两个远程数据库之间建立连接。

    看看这个页面:

    http://www.postgresql.org/docs/current/static/contrib-dblink-connect.html

    这里也有很好的教程:

    http://www.postgresonline.com/journal/archives/44-Using-DbLink-to-access-other-PostgreSQL-Databases-and-Servers.html

    再见, 安德烈亚

    【讨论】:

    • 经过一番挖掘,我发现这并不能完全解决问题。我想做的正是触发器所做的,但在 2 个数据库之间
    • 不确定语法,但尝试在触发器代码中插入类似的内容(更新本地表,带触发器的表,从远程表中获取值):UPDATE Table1 SET value FROM dblink(' dbname=db2', 'SELECT * FROM table2 WHERE id = ' || NEW.cid) WHERE id = NEW.cid;
    【解决方案2】:

    如果您可以用模式替换数据库,那么一切都会变得简单。 这种替换的可能性取决于您选择数据库作为组织单位的原因。

    【讨论】:

    • 我将其作为一个课程项目进行,我在其中使用大学数据库中的数据并自己构建另一个。大学数据库中的更新也应该反映在我的数据库中。现在我正在通过自己创建来模拟大学数据库。
    • 我明白了,你别无选择。在这种情况下,安德里亚的答案是要走的路。 OTOH,虽然我不确定您是否有足够的权限来操纵源数据库(大学的数据库),但我想这是一个政策和谈判问题。
    【解决方案3】:

    Postgresql 9.1 有一个新特性叫做“外表”:

    http://www.postgresql.org/docs/9.1/static/sql-createforeigntable.html

    这可能有帮助吗?

    【讨论】:

    • 那会很有用..但是我安装了 8.4 版...该功能在 8.4 中不可用但是我对外部表有疑问。更新会自动发生吗? (原表的变化是否会反映在外表中)
    • 我认为不需要原表,外加外表。这不是同步工具。你只有一张外表,你用它做的一切都是远程发生的。在你的服务器上安装 PG 9.1 怎么样?
    • 你明白了...我使用 ubuntu 并且通常更喜欢从标准存储库安装东西...8.4 是存储库中可用的最新版本..无论如何 dblink 都能完美地完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多