2013-08-12 9 views
7

7日以上経過しているテーブルの行を削除したいとします。これを行う最善の方法は何ですか?毎晩実行されるcronジョブを作成するか、PostgreSQLはこれを行うための機能を組み込んでいますか?PostgreSQLはローリングベースで古い行を削除しますか?

+0

行にタイムスタンプはありますか? –

+0

行にタイムスタンプがあります – Arya

+0

なぜデータを削除するのですか?毎晩ジョブを実行すると、ジョブが実行される直前のほぼ8日間のデータが得られます。なぜ、時間ごとに実行するのか、1分ごとに実行するのでしょうか。 – Josh

答えて

10
delete from the_table 
where the_timestamp < now() - interval '7 days' 
1

DBジョブをスケジュールする最も簡単な方法は、psqlを使用してSQLスクリプトを実行するcronジョブを作成することです。

Herepsqlを読むことができます。 -fまたは-cを使用して、SQLコマンドをpsqlに渡します。また

現在ので、ビルトインのcronのような機能を持っていない、あなたの仕事をしてPL/pgSQL関数を、書き、SELECT my_function();

2

のPostgreSQLとpsqlからそれを呼び出すことが容易であるかもしれません適切なdelete文を実行するには、システムのcronを使用します。タイムスタンプ列にすでにbtreeインデックスがある場合は、一度に小さなチャンクを取り出して夜間より頻繁に削除を実行することもできます。インデックスを持っていない場合は、オフピーク時に夜間に実行する方が良いでしょう。

必要なパフォーマンスが得られない場合は、パーティションを作成してみてください。しかし、私は最後の手段として、最初の手段ではないでしょう。

関連する問題