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

Matsukaze Takashi shohu33_0327 @ nifty.com
2006年 2月 27日 (月) 18:52:47 JST


川崎さん、水野さん

松風です。

ご回答非常に助かりました。

水野さん案の実用的な解、もしくは、川崎さん案dblinkを使用する、の二つの
案にて、お客様と相談しながら仕様を決定致したいと思います。

ご経験豊富な方のアドバイスを頂くことができ、私にとって非常に有益な情報
となりました。ありがとうございました。

>川崎です。こんにちは。
>
>トリガと、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 メーリングリストの案内