2011-11-29 19 views
0

私はチャットアプリケーションで使用されるPostgres DBを持っています。チャットシステムは、大きくなるとこれらのテーブルを切り捨てることがありますが、このデータを別のPostgresデータベースにコピーする必要があります。私はこのDBのテーブルを切り捨てません。Postgres DB間でデータを複製する

チャットシステムのデータベースにいくつかのテーブルを設定して、別のPostgresデータベースにデータを複製する方法を教えてください。これを達成するための迅速な方法はありますか?

+0

テーブルを分割することを検討しましたか?そして、なぜそれを別のDBにコピーする必要がありますか?別のスキーマでは十分ではないでしょうか? –

+0

おそらくdblinkとAFTER INSERT-triggerを使用できますか? – plundra

答えて

2
  • Slonyは選択テーブルのみをレプリケートできますが、どのように切り詰めを処理するかわからないため、構成するのが苦痛かもしれません。
  • pgpoolのようなものを使用して、挿入文のコピーを2番目のデータベースに送信することもできます。
  • 新しいレコードが作成されたときにチャットアプリケーションのソースを変更して、2つの書き込み(各データベースに1つずつ)を実行することがあります。
  • Perl/PHP/Pythonでスクリプトを読み書きして、別のものに書き込んだり、cronで起動して、切り捨て前に実行されることを確認したりできます。
1

あなただけの一日おきの行のバッチをコピーする場合は、同じデータベース内の別のスキーマまたは同じデータベースクラスタ内の別のデータベースへの平野INSERTとしたほうが良いかもしれ(あなたがdblinkようなものが必要そのために)。

同じデータベース内の最も安全な/最速の解決策は、writeable CTE(PostgreSQL 9.1の新機能)です。これらの線に沿って何か:

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

リアル複製ニーズのためには、私は、レプリケーション、クラスタリングやプールについては、この優れたarticle at the Postgres Wikiを開始します。

関連する問題