如何按照当地时间运行 pg_cron 作业?

问题描述 投票:0回答:2

目前 pg_cron 仅按照 UTC/GMT 时间工作。没有可用于根据本地时间服务器时间运行作业的配置选项。如何按照当地时间运行 pg_cron 作业?

cron pg
2个回答
1
投票

当您使用

pg_cron
定义cronjob时,您可以先设置时区

SELECT cron.schedule('manual vacuum', '0 22 * * *', 'SET LOCAL TIME ZONE \'Europe/Rome\'; VACUUM FREEZE pgbench_accounts');

0
投票

我在 pg_cron 1.4.2 版中遇到了同样的问题。 我尝试了不同的组合,在配置文件中设置时区,重新安装扩展并重新加载数据库。 升级到版本 1.5.1 pg_cron_15-1.5.1-1.rhel7.x86_64 后,根据配置文件中设置的时区,作业正常运行。

postgresql.conf

cron.timezone = 'Europe/Moscow'

[root@demo-db ~]# yum update pg_cron_15.x86_64
................
    Running transaction
  Updating   : pg_cron_15-1.5.1-1.rhel7.x86_64                                                                                                                                              1/2
  Cleanup    : pg_cron_15-1.4.2-1.rhel7.x86_64                                                                                                                                              2/2
  Verifying  : pg_cron_15-1.5.1-1.rhel7.x86_64                                                                                                                                              1/2
  Verifying  : pg_cron_15-1.4.2-1.rhel7.x86_64                                                                                                                                              2/2

Updated:
  pg_cron_15.x86_64 0:1.5.1-1.rhel7


-bash-4.2$ psql -d db_stroy -U postgres
psql (15.2)
Type "help" for help.

db_stroy=# DROP EXTENSION IF EXISTS pg_cron;
DROP EXTENSION

[root@demo-db ~]# systemctl stop  postgresql-15.service
[root@demo-db ~]# systemctl start  postgresql-15.service
[root@demo-db ~]# systemctl status  postgresql-15.service
● postgresql-15.service - PostgreSQL 15 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-03-24 07:53:13 MSK; 1s ago
     Docs: https://www.postgresql.org/docs/15/static/
  Process: 29027 ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 29033 (postmaster)
   CGroup: /system.slice/postgresql-15.service
           ├─29033 /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/stroy/
           ├─29035 postgres: logger
           ├─29036 postgres: checkpointer
           ├─29037 postgres: background writer
           ├─29039 postgres: walwriter
           ├─29040 postgres: autovacuum launcher
           ├─29041 postgres: pg_cron launcher
           └─29042 postgres: logical replication launcher


[root@demo-db ~]# su - postgres
Last login: Fri Mar 24 07:43:25 MSK 2023 on pts/2
-bash-4.2$ psql -d db_stroy -U postgres
psql (15.2)
Type "help" for help.

db_stroy=# CREATE EXTENSION IF NOT EXISTS pg_cron;
CREATE EXTENSION
db_stroy=# GRANT ALL ON TABLE cron.job TO str;
GRANT
db_stroy=# GRANT SELECT, USAGE, UPDATE ON SEQUENCE cron.jobid_seq TO str;
GRANT
db_stroy=# GRANT USAGE ON SCHEMA cron TO str;
GRANT
© www.soinside.com 2019 - 2024. All rights reserved.