同步来自两个不同PostgreSQL数据库的两个表

同步来自两个不同PostgreSQL数据库的两个表

问题描述:

我有两个来自两个不同数据库的表,我想要一个php函数来同步数据,这样表号2总是可以验证表1上的内容并更新它的信息。 任何人都有如何做到这一点的例子?提前致谢。同步来自两个不同PostgreSQL数据库的两个表

+0

请注意发布'CREATE TABLE' ?,你需要实现你自己的逻辑来在两个不同的数据库之间同步数据 – 2011-05-31 14:37:35

这个例子将连接到两个数据库,并为每个第一个数据库的作者将更新目标数据库的作者与相同的ID。 当然,你必须建立必要的检查,搜索和其他细节之前执行和更新(或插入或者如果你愿意更换),但它完全取决于你要做:)

<?php 

if (false !== ($con1 = pg_connect("your source connection string"))) { 
    if (false !== ($con2 = pg_connect("your dest connection string"))) { 
    if (false !== ($result = pg_query($con1, "SELECT id, author, email FROM authors"))) { 
     while (false !== ($row = pg_fetch_assoc($result))) { 
     pg_query($con2, "UPDATE authors SET email=".pg_escape_string($con2, $row['email']). 
      'WHERE id='.pg_escape_string($con2, $row['id'])); 
     } 
     pg_free_result($result); 
    } 
    pg_close($con2); 
    } 
    pg_close($con1); 
} 

?> 
什么

我希望它有用。请随时问任何关于它的问题。请享用! :)

+0

DS首先感谢你的回复:)我是PHP新手,所以我没有完全理解你的代码告诉我一些事情:在这种情况下,信息会更新!但如果目标数据库是空的,我希望脚本更新它像源数据库? – aocferreira 2011-05-31 15:00:13

+0

如果你想这样做,你必须使用INSERT查询而不是UPDATE查询,但是你应该在之前检查 - 如果匹配的行已经存在于目标数据库中,在这种情况下使用UPDATE作为例子。您也可以使用SQL REPLACE命令,这取决于您的主键的样子。 – 2011-05-31 16:46:09

D.S.的答案将完成工作。

您还可以考虑设置插入/更新后触发器并使用dblink。这样,他们将保持同步,而无需担心它在PHP中。

请注意,无论是哪种情况,都要对数据库错误可能发生的情况保持警惕。当发生数据库错误时,您最终可能会失去与任一解决方案的同步,因为事务将是自治的。

在插入,更新,删除时创建触发器。当触发程序调用将所有在操作中完成的更改(Insert,updatedelete)存储到数据库表(我们称之为sync_table)时。运行一些脚本,将数据从sync_table复制到另一个数据库表。 sync_table将存储修改,插入和删除的数据。