2011-11-29 80 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有關複製,集羣和池開始。