2011-11-29 41 views
0

我有一个由聊天应用程序使用的Postgres数据库。聊天系统往往会在这些表变长时截断这些表,但我需要将这些数据复制到另一个Postgres数据库。我不会截断这个数据库中的表格。在Postgres DB之间复制数据

我如何在聊天系统的数据库上配置几个表来将数据复制到另一个Postgres数据库。有没有一种快速的方法来实现这一点?

+0

您是否考虑划分表格?为什么你需要将它复制到另一个数据库?不会有不同的模式足够吗? –

+0

也许你可以使用dblink和AFTER INSERT触发器? – plundra

回答

2
  • Slony只能复制选择表,但我不知道它如何处理截断,它可能是一个痛苦的配置。
  • 您也可以使用诸如pgpool之类的东西将插入语句的副本发送到第二个数据库。
  • 当创建新记录时,您可能会修改聊天应用程序的来源以执行两次写入(每个数据库一次)。
  • 您可以在Perl/PHP/Python中编写脚本来读取一个脚本并写入另一个脚本,然后通过cron启动它,以确保它在截断之前运行。
1

如果只复制了一批行的每一天,你可能是一个普通的INSERT最好到不同的模式在同一个数据库或同一个数据库集群在不同的数据库(你需要像dblink为了那个原因)。

同一个数据库中最安全/最快的解决方案是writeable CTE(Postgres 9.1中的新增功能)。沿着这些路线的东西:

WITH x AS (
    DELETE FROM tbl 
    WHERE <some condition> 
    RETURNING * 
    ) 
INSERT INTO backup.tbl 
SELECT * 
FROM x; 

对于真正复制需求我会用这个优秀article at the Postgres Wiki有关复制,集群和池开始。