我们正在尝试在 PostgreSQL 中配置定期作业。为此,我们在 Linux 机器上安装了运行 Postgres 9.6 的citusdata pg_cron项目。
系统信息:
- 操作系统:Linux pg 4.4.0-72-generic #93-Ubuntu SMP
- PG:从 repo 'deb http://apt.postgresql.org/pub/repos/apt/xenial-pgdg main'安装 Postgres 9.6.3
- Citusdata pg_cron 项目https://github.com/citusdata/pg_cron
按照pg_cron存储库中的说明,我们在postgresql.conf
下面的配置中进行设置:
shared_preload_libraries = 'pg_cron'
cron.database_name = 'our db_name'
然后,在 上db_name
,我们创建了 EXTENSION pg_cron
CREATE EXTENSION pg_cron;
我们安排了我们的第一个 Postgres 工作:
SELECT cron.schedule('45 12 * * *', $$CREATE TABLE testCron AS Select 'Test Cron' as Cron$$);
因此,jobid 1 被创建并列在表中cron.job
。
我们预计在 12:45 将启动计划作业的命令。但什么也没有发生。
该testCron
表未创建,我们在任何日志中都没有跟踪。
我们还定义了 LOG_FILE/usr/src/pg_cron/include/pathnames.h
以启用日志记录。
但是,在重新编译项目并重新启动 Postgres 服务后,我们没有跟踪pg_cron的日志。
我们如何启用pg_cron的日志来检查调度结果?
作为解决方法,我们在 root 的 crontab 中使用它:
su -c "Sql_statement" postgres
但这需要完全控制 Linux 系统。
能够从数据库服务器安排作业会很有用。
有人可以帮助我们吗?
提前致谢!
要从 db 服务器安排作业,我们需要在 pg_hba.conf 中为运行 cron 作业的用户启用信任身份验证。我们还需要运行 UPDATE cron.job SET nodename = '' 以使 pg_cron 通过本地(unix 域)套接字连接或在 pg_hba.conf 中添加所有 127.0.0.1/32 的主机以允许访问 pg_cron 背景worker 通过本地 TCP 连接。
作为基本的健全性检查以查看是否启用了日志记录,我们运行 SELECT cron.schedule('* * * * *', 'SELECT 1') 它将在每分钟开始时运行 SELECT 1 并且应该显示在常规postgres 日志。