Postgresの古いレコードの自動エージングアウト(削除)


15

Postgresには古いレコードのエージングアウトをサポートする機能がありますか?

2週間以上前のレコード(ログイベント)が自動的に削除される一種のキューとして、ロギングにPostgresを使用したいと思います。


パーティションを使用します。レコードを削除するだけでは、ディスク上のテーブルサイズは小さくなりません。
sivann

@sivann彼の問題はディスクサイズであると思われませんか?彼の問題がクエリの実行時間である場合、削除はパーティション分割よりも単純な答えであるように思われますか?(まだこれを自分で理解しようとしています)
-stephenmm

1
問題は、一定の時間が経過してもログレコードが面白くないということです。古い行を削除すると、新しい新しい行のためのスペースが必要になります。
バジルブルク

回答:


15

時間ベースのレジームで行を自動的に削除する機能は組み込まれていません(知っていると思います)。

毎日(決定する)cronジョブDELETE実行して、単純なコマンドをスケジュールしたり、目的のためにpgAgentを使用したりできます。

それとも、使用できるパーティショニングをすることを毎週パーティションを持つマスター表から継承は、それを呼び出すことができますlog。それは削除を非常に安くします:最新の2週間を維持し、古いパーティションを削除します。

作成RULEまたはTRIGGERシステム時刻に基づいて、現在の週のパーティションに挿入をリダイレクトするマスタテーブルの上に。常にマスターテーブルにログを記録しますlog。事前に子テーブルを作成します。確実に数週間先に進み、将来の子テーブルを追加するcronジョブを毎週実行してください...

マニュアルにコード例があります
テーブルを自動的に作成するplpgsql関数に関連する回答:

関連ソリューションは、RULEINSERTをリダイレクトするために再作成します。トリガー関数は、現在のパーティションに動的に書き込むことができます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.