我需要创建一个每晚运行的cron,并从我的数据库中删除一些数据(旧数据)。我在debian上运行postgres。我怎么做?我的服务器是tomcat6。有没有人有一步一步的指令,包括脚本来做到这一点?
答案 0 :(得分:3)
在大多数情况下,我更喜欢带有here-document的shell脚本。 (shell变量在here-documents中很好地扩展):
#!/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
答案 1 :(得分: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;
...并从shell中调用它:
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
答案 2 :(得分:0)
您可以在/ etc / crontab中直接调用psql。电话会按照这种模式进行:
psql -c 'DELETE FROM my_table WHERE ...'
您需要为'psql'提供适当的附加参数以创建数据库连接。有关详细信息,请参阅documentation for psql。