web-dev-qa-db-ja.com

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

Postgresには古いレコードの期限切れをサポートする機能がありますか?

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

16
Basil Bourque

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

毎日(あなたが決める)cron-jobを実行して、単純なDELETEコマンドをスケジュールするか、 pgAgent 目的のため。

または、 partitioning を週単位のパーティションで使用できます マスターテーブルから継承 、それを呼び出すことができますlog。それは削除を非常に安価にします:最近の2週間を保持して古いパーティションを削除します。

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

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

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

15