在Postgres DB之间复制数据

时间:2011-11-29 14:11:18

标签: postgresql database-replication

我有一个聊天应用程序使用的Postgres数据库。聊天系统在它们变大时会经常截断这些表,但我需要将这些数据复制到另一个Postgres数据库中。我不会截断这个数据库中的表。

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

2 个答案:

答案 0 :(得分:2)

  • Slony只能复制选择表,但我不确定它是如何处理截断的,配置起来很麻烦。
  • 您也可以使用pgpool之类的内容将insert语句的副本发送到第二个数据库。
  • 您可以修改聊天应用程序的源,以便在创建新记录时进行两次写入(每个数据库一次)。
  • 您可以在Perl / PHP / Python中编写一个脚本来从一个脚本中读取并写入另一个脚本,然后通过cron触发它,这样您就可以确保它在截断之前运行。

答案 1 :(得分: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开始。