[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 メーリングリストの案内