Postgresql 在Postgres数据库之间复制数据

Postgresql 在Postgres数据库之间复制数据,postgresql,database-replication,Postgresql,Database Replication,我有一个聊天应用程序使用的Postgres DB。聊天系统通常会在这些表变大时截断它们,但我需要将这些数据复制到另一个Postgres数据库。我不会截断这个数据库中的表 如何配置聊天系统数据库上的几个表,以便将数据复制到另一个Postgres数据库。有没有一种快速的方法来实现这一点? 只能复制select表,但我不确定它如何处理截断,配置起来可能会很麻烦 您还可以使用类似的方法将insert语句的副本发送到第二个数据库 您可以修改聊天应用程序的源,以便在创建新记录时执行两次写入(每个db一次)

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

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

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

      如果每隔一天只复制一批行,那么最好是将
      插入到同一数据库中的不同模式或同一数据库集群中的不同数据库中(您需要类似的操作)

      同一数据库中最安全/最快的解决方案是a(Postgres 9.1中新增)。大致如下:

      WITH x AS (
          DELETE FROM tbl
          WHERE <some condition>
          RETURNING *
          )
      INSERT INTO backup.tbl
      SELECT *
      FROM x;
      
      以x作为(
      从tbl中删除
      哪里
      返回*
      )
      插入backup.tbl
      挑选*
      从x;
      

      对于真正的复制需求,我将从这篇关于复制、集群和池的优秀文章开始。

      如果您每隔一天只复制一批行,那么最好是简单地将
      插入到同一数据库中的不同架构或同一数据库群集中的不同数据库中(您需要类似的东西)

      同一数据库中最安全/最快的解决方案是a(Postgres 9.1中新增)。大致如下:

      WITH x AS (
          DELETE FROM tbl
          WHERE <some condition>
          RETURNING *
          )
      INSERT INTO backup.tbl
      SELECT *
      FROM x;
      
      以x作为(
      从tbl中删除
      哪里
      返回*
      )
      插入backup.tbl
      挑选*
      从x;
      

      <>对于真正的复制,我需要从复制、聚类和池化这方面入手。

      您考虑过对该表进行分区吗?为什么需要将其复制到另一个数据库?一个不同的模式是否足够?也许你可以使用DBLink和一个后插入触发器?你考虑过对这个表进行分区吗?为什么需要将其复制到另一个数据库?不同的模式还不够吗?也许可以使用dblink和AFTER-INSERT触发器?