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