pg_dbms_job

添加 Oracle DBMS_JOB 兼容性支持的扩展

概览

扩展包名版本分类许可证语言
pg_dbms_job2.0SIMPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
9260pg_dbms_jobdbms_job
相关扩展pg_cron pg_task pg_dbms_metadata pg_dbms_lock pgagent pg_jobmon oracle_fdw orafce

Background worker; requires shared_preload_libraries=pg_dbms_job and restart. Worker connections also require valid database, user, and authentication settings.

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED2.01817161514pg_dbms_job-
RPMPGDG2.01817161514pg_dbms_job_$v-
DEBPIGSTY2.01817161514postgresql-$v-pg-dbms-joblibpq5
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
d12.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
d13.x86_64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
d13.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u22.x86_64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u22.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u24.x86_64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u24.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u26.x86_64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
u26.aarch64
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0
PIGSTY 2.0

构建

您可以使用 pig build 命令构建 pg_dbms_job 扩展的 DEB 包:

pig build pkg pg_dbms_job         # 构建 DEB 包

安装

您可以直接安装 pg_dbms_job 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_dbms_job;          # 当前活跃 PG 版本安装
pig ext install -y pg_dbms_job -v 18  # PG 18
pig ext install -y pg_dbms_job -v 17  # PG 17
pig ext install -y pg_dbms_job -v 16  # PG 16
pig ext install -y pg_dbms_job -v 15  # PG 15
pig ext install -y pg_dbms_job -v 14  # PG 14
dnf install -y pg_dbms_job_18       # PG 18
dnf install -y pg_dbms_job_17       # PG 17
dnf install -y pg_dbms_job_16       # PG 16
dnf install -y pg_dbms_job_15       # PG 15
dnf install -y pg_dbms_job_14       # PG 14
apt install -y postgresql-18-pg-dbms-job   # PG 18
apt install -y postgresql-17-pg-dbms-job   # PG 17
apt install -y postgresql-16-pg-dbms-job   # PG 16
apt install -y postgresql-15-pg-dbms-job   # PG 15
apt install -y postgresql-14-pg-dbms-job   # PG 14

预加载配置

shared_preload_libraries = 'pg_dbms_job';

创建扩展

CREATE EXTENSION pg_dbms_job;

用法

pg_dbms_job: 为 PostgreSQL 添加 Oracle DBMS_JOB 完整兼容的扩展

启用

CREATE EXTENSION pg_dbms_job;

需要为每个数据库运行专用调度守护进程:

pg_dbms_job -c /etc/pg_dbms_job/mydb-dbms_job.conf

SUBMIT - 调度作业

BEGIN;
-- 调度作业:每天运行一个过程
CALL dbms_job.submit(
    job       => jobid,
    what      => 'CALL my_procedure();',
    next_date => current_timestamp + interval '1 minute',
    interval  => 'current_timestamp + ''1 day''::interval'
);
COMMIT;

省略 next_dateinterval 时,作业立即异步执行。

BROKEN - 禁用/启用作业

BEGIN;
CALL dbms_job.broken(12345, true);   -- 禁用作业
CALL dbms_job.broken(12345, false);  -- 重新启用作业
COMMIT;

CHANGE - 修改作业

BEGIN;
CALL dbms_job.change(12345, null, null, 'current_timestamp + ''3 days''::interval');
COMMIT;

INTERVAL - 更改执行间隔

BEGIN;
CALL dbms_job.interval(12345, 'current_timestamp + ''1 hour''::interval');
COMMIT;

NEXT_DATE - 更改下次执行日期

BEGIN;
CALL dbms_job.next_date(12345, current_timestamp + interval '30 minutes');
COMMIT;

WHAT - 更改作业代码

BEGIN;
CALL dbms_job.what(12345, 'CALL new_procedure();');
COMMIT;

REMOVE - 删除作业

BEGIN;
CALL dbms_job.remove(12345);
COMMIT;

RUN - 立即执行

CALL dbms_job.run(12345);

查看作业

SELECT * FROM dbms_job.all_jobs;

执行历史

SELECT * FROM dbms_job.all_scheduler_job_run_details;