创建一个 cron 作业以使用配置文件运行存储过程:
/etc/postgresql/12/main/postgresql.conf:
shared_preload_libraries = 'pg_cron' # (change requires restart)
cron.database_name='navstar_ankay'
/etc/postgresql/12/main/pg_hba.conf
host all all localhost trust
host all all 0.0.0.0/0 trust
重启 postgresql
sudo systemctl restart postgresql
记录要执行的操作和执行间隔:
select cron.schedule('*1/ * * * *','CALL PROCESS_GPS();','localhost','5432','navstar_ankay','admin')
当我看到执行状态时,我收到一条错误消息:
2021-07-03 16:23:00.000 UTC [163769] LOG: cron job 1 starting: CALL PROCESS_GPS();
2021-07-03 16:23:00.013 UTC [163769] LOG: cron job 1 connection failed
我因这个错误而头疼
答案 0 :(得分:1)
我猜你也执行了 CREATE EXTENSION pg_cron;
否则 cron.schedule()
调用会失败。
不知道为什么你还在 pg_hba.conf 中允许 0.0.0.0/0
这意味着地球上的任何地方(假设 IPv4 不在地球之外使用);)
调用 cron.schedule()
时,应该在 ${cron.database_name} 数据库上执行,您只需要时间表和命令(可选地,您可以添加 job_name 作为第一个参数)。您不需要提供任何连接参数。
我做到了:
postgresql.conf:
shared_preload_libraries='pg_cron'
cron.database_name='navstar_ankay'
pg_hba.conf:
host all all 127.0.0.1/32 trust
在 psql,连接到数据库 navstar_ankay:
CREATE EXTENSION pg_cron;
CREATE PROCEDURE log_myproc() AS
$$
begin
raise log 'Procedimiento ejecutado a las: %', clock_timestamp();
end;
$$ language plpgsql;
select cron.schedule('*1/ * * * *','CALL log_myproc()');