- ベストアンサー
postgresql の rule とは
postgreSQL 7.2.1 を使用しています。 あるヒストリカルテーブルがUpdateされた際に 直近データのレコードだけをセレクトした テーブルを新規に作成したいと思っています。 この機能はpostgresql の ruleで実現可能でしょうか? (既存プログラムに手を入れたくないのです) rule機能がイマイチ理解出来ないので どなたかご助言ください。よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> どうやって使用したら良いのでしょうか? まず、そちらの環境はどうなっているのでしょう? 既存ソフトを触りたくないとありますが、そのソフトは何の言語でかかれ、どのような使い方でPostgreSQLにアクセスしているのでしょう? また、既存ソフトを触らずには無理のような気もしますが・・・
その他の回答 (1)
- kusukusu
- ベストアンサー率38% (141/363)
ようは更新ログを取りたいと言うことですよね? create rule hoge update to table_name do insert into new_table values(old.a,old.b,new.a,new.b,current_user,'now'); を試してください。
補足
言葉が足りなくてすみません。 複数テーブルをUpdateする既存プログラムがあって、 それが稼動された時に動かしたいのです。 ヒストリカルテーブルが重いので 利用頻度が高い直近データだけの 軽いテーブルを作る事が目的です。 おおよその構文は調べて想像できたのですが どうやって使用したら良いのでしょうか? 「テーブルに貼り付けておけば・・」という アドバイスを戴いたのですが意味が解りません。 また、本来ruleで補える要件なのでしょうか?? よろしくお願いいたします。
お礼
ruleでは不可能な事が解りました。 意味不明な質問をしてしまいすみませんでした。 #元処理の値によってruleの発動を条件づけしたかったのですが、 #元処理がInsertの時はoldのテーブルが参照できず、 #元処理がUpdateの時は更新前のデータを参照してしまう事がわかりました。
補足
亀レスですみません。 既存ソフトはJAVA1.3.1_04で書かれています。 AテーブルにインサートされたデータをruleでBテーブルにインサートし、 尚且つそのインサートデータがすでにBテーブルにあった場合は 同データをアップデートで処理したい。。。という用件です。 やはり難しいでしょうか?