Postgresql 从debian上的postgres中删除旧数据的cron作业

Postgresql 从debian上的postgres中删除旧数据的cron作业,postgresql,debian,crontab,Postgresql,Debian,Crontab,我需要创建一个每晚运行的cron,并从数据库中删除一些数据(旧数据)。我在debian上运行博士后考试。我该怎么做?我的服务器是tomcat6。有人有包括脚本在内的分步指令吗?您可以在/etc/crontab中直接调用psql。调用将遵循以下模式: psql -c 'DELETE FROM my_table WHERE ...' 您需要为“psql”提供适当的附加参数来创建数据库连接。有关这方面的更多信息,请参阅 您可以在/etc/crontab中直接调用psql。调用将遵循以下模式: psq

我需要创建一个每晚运行的cron,并从数据库中删除一些数据(旧数据)。我在debian上运行博士后考试。我该怎么做?我的服务器是tomcat6。有人有包括脚本在内的分步指令吗?

您可以在/etc/crontab中直接调用psql。调用将遵循以下模式:

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

您需要为“psql”提供适当的附加参数来创建数据库连接。有关这方面的更多信息,请参阅

您可以在/etc/crontab中直接调用psql。调用将遵循以下模式:

psql -c 'DELETE FROM my_table WHERE ...'
您需要为“psql”提供适当的附加参数来创建数据库连接。有关这方面的更多信息,请参阅

有几种好方法。
您可能需要执行多个操作,而不仅仅是一个
DELETE
。运行
分析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;
为系统用户postgres计划cron作业:

crontab -e
要在每天02:06运行,请添加一行,如:

06 02 * * * psql -p 5432 event -c 'SELECT myschema.f_maintain()' >/dev/null
有几种好方法。
您可能需要执行多个操作,而不仅仅是一个
DELETE
。运行
分析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;
为系统用户postgres计划cron作业:

crontab -e
要在每天02:06运行,请添加一行,如:

06 02 * * * psql -p 5432 event -c 'SELECT myschema.f_maintain()' >/dev/null

在大多数情况下,我更喜欢带有here文档的shell脚本。(shell变量在此处文档中展开得很好):

#/垃圾箱/垃圾箱
PSQL=/local/postgres/bin/PSQL
某些值=123

$PSQL my_database在大多数情况下,我更喜欢带有here文档的shell脚本。(shell变量在此处文档中展开得很好):

#/垃圾箱/垃圾箱
PSQL=/local/postgres/bin/PSQL
某些值=123
$PSQL我的_数据库