[pgsql-jp: 26529] Re: ログ収集にかんして

Mashiki mashiki @ yanah.com
2002年 6月 28日 (金) 15:08:39 JST


 Mashikiです。

杉田さん>   PostgreSQL ならば、継承を用いれば、ログノローテートは
杉田さん>    DROP で済みます。

PostgreSQLはこんなことができるんですね。ログを格納し集計することを
主体とするアプリケーションで、是非 評価/応用してみたいです。

>継承は使った事があります。
>よくやるのは,トリガにて「レコードが削除されたら別の継承させた同カラムテーブル
>にログを残す」との方法。
>
>杉田さんが言うようなDrop された場合にDrop されたテーブル内レコード全てを
>継承させた別テーブルに以降するということはやった事がありません。

多分、杉田さんの方法ではDropの際、データのコピーはいりません。

# 調べてないけど継承元テーブルってDropできるのかな

たとえば「ログ」というテーブルを作成し、それを継承した、
「ログ現在」「ログ1世代前」「ログ2世代前」「ログ3世代前」
 ..「ログ7世代前」とテーブルを作成します。
アプリケーションはログを「ログ現在」に書き込んでいきます。
「ログ7世代前」をDROP、
「ログ6世代前」を「ログ7世代前」にリネーム
「ログ5世代前」を「ログ6世代前」にリネーム
 :
「ログ現在」を「ログ1世代前」にリネーム
「ログ現在」のCreate
って感じでrotateできますね。

「ログ」テーブル全体で検索するにしても、UNIONでつなげるよりは
処理が軽い気がします。

# 自分がやるとしたら、「ログ月」「ログ火」「ログ水」・・と作っておき、
# アプリケーションで必ず今日の曜日のログに書くようにします。
# Dropの代わりにTruncateを使い、前者の方式の余計なrename処理を
# 端折りたいところです
# その上で今日の曜日のテーブルに「ログ現在」とCreate Synonymを
# 張れれば完璧なのですが。
#
# また前者だとログに主キーが張ってあった場合、どうやってインデックス
# ごとRENAMEすればいいのか知らないので、最後にログ今日をCreateした
# ところでエラーを出しそう。まあ、主キー相当のインデックスを重複し
# ないように自分でCreateすればいいんでしょうけど。




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