1

我需要创建一个每天晚上运行的 cron 并从我的数据库中删除一些数据(较旧的数据)。我在 debian 上运行 postgres。我怎么做?我的服务器是tomcat6。有没有人有一步一步的指导,包括脚本来做到这一点?

4

3 回答 3

3

在大多数情况下,我更喜欢带有 here-document 的 shell 脚本。(shell 变量在这里文档中很好地扩展):

#!/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

几个好办法。
您可能想做的不仅仅是一个DELETE。跑ANALYZE tbl?处理多个表?
我会将工作包装在 aa 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 回答