POSTGRESQL:cron 作业 1 连接失败

时间:2021-07-03 16:26:38

标签: postgresql cron

创建一个 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

我因这个错误而头疼

1 个答案:

答案 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()');