[pgsql-jp: 36776] Re: 他DB、他サーバDBへの変更前、変更後のレコード保存

Kawasaki Yusuke u-suke @ kawa.net
2006年 2月 27日 (月) 13:58:33 JST


川崎です。こんにちは。

トリガと、PostgreSQL の配布パッケージの contirub に入っている dblink を
組み合わせるのが、恐らく、松風さんご希望の処理を実現する手段と思いますが、
水野さんの言われるように、パフォーマンスの低下や接続失敗時の影響の
大きさが心配されますので、リアルタイムではなくて、1日1回とか30分に1回の
バッチ処理で、ミラーリングした方が確実なのではないかと思われます。
(僕が使ったときは、参照系だったので、それでも特に問題はない用途)

dblink は↓のように使います。複数のDB(マシンは同じでもOK)の連携を
SQL内で閉じた処理で済むので、とても便利になります。

---- 他サーバのバージョン番号を確認する例

select dblink_tok(t1.v1,0) from (
    select dblink('hostaddr=192.168.1.111 port=5432
                   dbname=hoge_db user=hoge password=pomu','
        select version();
    ') as v1 ) as t1;

---- 他サーバからデータを取得してくる例

insert into tbl_local ( name, email, userid )
select dblink_tok(t1.v1,0) as name,
       dblink_tok(t1.v1,1) as email,
       dblink_tok(t1.v1,2) as userid
from (
    select dblink('hostaddr=192.168.1.111 port=5432
                   dbname=hoge_db user=hoge password=pomu','
        select name, email, userid from tbl_remote
    ') as v1 ) as t1
order by userid;


On 2/27/06, Kiyoshi Mizuno <kiyoshi_mizuno @ mail.toyota.co.jp> wrote:
> > DB上の任意テーブルにコンソールなどから操作(UPDATE,DELETE)
> > 行った際に、変更前、変更後のレコード情報を、同一サーバ上の他
> > DB、もしくは、他サーバ上のDBへ保存しようと考えております。
  (中略)
> そのため「トリガを使って変更履歴を他DBへ記録する」
> のは技術的には実現可能でも、努力の割に報われないと
> 思います。
> 他DBへの変更履歴記録であれば
> (1)トリガでは同一DB内のテーブルに変更前、変更後の
> レコード情報を記録する。
> (2)PostgreSQLから独立した外部アプリケーション、
> あるいはレプリケータで(1)のテーブルから他DBに
> データを移動する。
> のが実用的な解ではないかと思います。

--
Kawasaki Yusuke <u-suke @ kawa.net> http://www.kawa.net/



pgsql-jp メーリングリストの案内