1

毎晩実行する cron を作成し、データベースから一部のデータ (古いデータ) を削除する必要があります。私はdebianでpostgresを実行しています。それ、どうやったら出来るの?私のサーバーはtomcat6です。それを行うためのスクリプトを含む段階的な指示を誰かが持っていますか?

4

3 に答える 3

3

ほとんどの場合、私はヒアドキュメントを含むシェル スクリプトを好みます。(シェル変数はヒアドキュメントでうまく展開されます):

#!/bin/sh
PSQL=/local/postgres/bin/psql
SOME_VALUE=123

$PSQL my_database <<THE_END
DELETE FROM my_table
WHERE my_column <= $SOME_VALUE
    ;
THE_END
于 2012-06-28T18:57:46.007 に答える
2

いくつかの良い方法。
1つ以上のことをしたい場合がありますDELETE。実行しますANALYZE tblか?複数のテーブルを処理しますか?
作業をplpgsql関数でラップします。

CREATE OR REPLACE FUNCTION myschema.f_maintain()
  RETURNS text AS
$BODY$
DECLARE
    _msg    text := 'Report';
    _min_ts timestamp := now()::timestamp - interval '5y'; -- max. age 5 years
    _count  int;
BEGIN

DELETE FROM tbl
WHERE  my_ts < _min_ts
AND    <some condition>;

GET DIAGNOSTICS _count = ROW_COUNT;

IF _count > 0 THEN
    _msg := _msg || E'\nDeleted rows in tbl: ' || _count;
END IF;

ANALYZE tbl;

-- more ?

RAISE LOG '%', _msg;

END;
$BODY$
  LANGUAGE plpgsql;

...そして次のようにシェルから呼び出します:

psql -p 5432 event -c 'SELECT myschema.f_maintain()'

システムユーザーpostgresのcronジョブをスケジュールします。

crontab -e

毎日02:06に実行するには、次のような行を追加します。

06 02 * * * psql -p 5432 event -c 'SELECT myschema.f_maintain()' >/dev/null
于 2012-06-28T18:35:05.207 に答える
0

/ etc/crontabでpsqlを直接呼び出すことができます。呼び出しは次のパターンに従います。

psql -c 'DELETE FROM my_table WHERE ...'

データベース接続を作成するには、「psql」に適切な追加の引数を指定する必要があります。詳細については、psqlのドキュメントを参照してください。

于 2012-06-28T18:34:54.000 に答える