pg_dbms_job

Extension to add Oracle DBMS_JOB full compatibility to PostgreSQL

Overview

PackageVersionCategoryLicenseLanguage
pg_dbms_job1.5SIMPostgreSQLSQL
IDExtensionBinLibLoadCreateTrustRelocSchema
9260pg_dbms_jobNoYesNoYesNoNo-
Relatedpg_cron pg_task pg_dbms_metadata pg_dbms_lock pgagent pg_jobmon oracle_fdw orafce

Version

TypeRepoVersionPG VerPackageDeps
EXTPGDG1.51817161514pg_dbms_job-
RPMPGDG1.51817161514pg_dbms_job_$v-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 1.5
el8.aarch64
PGDG 1.5
PGDG 1.5
el9.x86_64
PGDG 1.5
el9.aarch64
PGDG 1.5
PGDG 1.5
el10.x86_64
el10.aarch64
d12.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d12.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d13.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d13.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u22.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u22.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u24.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u24.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS

Install

You can install pg_dbms_job directly. First, make sure the PGDG repository is added and enabled:

pig repo add pgdg -u          # Add PGDG repo and update cache

Install the extension using pig or apt/yum/dnf:

pig install pg_dbms_job;          # Install for current active PG version
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

Create Extension:

CREATE EXTENSION pg_dbms_job;

Usage

pg_dbms_job: Extension to add Oracle DBMS_JOB full compatibility to PostgreSQL

Enabling

CREATE EXTENSION pg_dbms_job;

A dedicated scheduler daemon must be running per database:

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

SUBMIT - Schedule a Job

BEGIN;
-- Scheduled job: run a procedure every day
CALL dbms_job.submit(
    job       => jobid,
    what      => 'CALL my_procedure();',
    next_date => current_timestamp + interval '1 minute',
    interval  => 'current_timestamp + ''1 day''::interval'
);
COMMIT;

When next_date and interval are omitted, the job executes immediately and asynchronously.

BROKEN - Disable/Enable a Job

BEGIN;
CALL dbms_job.broken(12345, true);   -- disable job
CALL dbms_job.broken(12345, false);  -- re-enable job
COMMIT;

CHANGE - Modify a Job

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

INTERVAL - Change Execution Interval

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

NEXT_DATE - Change Next Execution Date

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

WHAT - Change Job Code

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

REMOVE - Delete a Job

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

RUN - Execute Immediately

CALL dbms_job.run(12345);

Viewing Jobs

SELECT * FROM dbms_job.all_jobs;

Execution History

SELECT * FROM dbms_job.all_scheduler_job_run_details;

Last Modified 2026-03-12: add pg extension catalog (95749bf)