Skip to content
pg_cron

pg_cron

pg_cron : Job scheduler for PostgreSQL

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
1070
pg_cron
pg_cron
1.6.7
TIME
PostgreSQL
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--sLd--
No
Yes
Yes
Yes
no
no
Relationships
Schemaspg_catalog
Need By
documentdb
pg_incremental
timeseries
vectorize
pgmb
See Also
timescaledb_toolkit
timescaledb
periods
temporal_tables
pg_task
pg_later
emaj
table_version

require cron.database_name

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
1.6.7
18
17
16
15
14
pg_cron-
RPM
PGDG
1.6.7
18
17
16
15
14
pg_cron_$v-
DEB
PGDG
1.6.7
18
17
16
15
14
postgresql-$v-cron-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
el8.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
el9.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
el9.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
el10.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
el10.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
d12.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
d12.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
d13.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
d13.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u22.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u22.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u24.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u24.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u26.x86_64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
u26.aarch64
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7
PGDG 1.6.7

Source

Install

Make sure PGDG repo available:

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

Install this extension with pig:

pig install pg_cron;		# install via package name, for the active PG version

pig install pg_cron -v 18;   # install for PG 18
pig install pg_cron -v 17;   # install for PG 17
pig install pg_cron -v 16;   # install for PG 16
pig install pg_cron -v 15;   # install for PG 15
pig install pg_cron -v 14;   # install for PG 14

Config this extension to shared_preload_libraries:

shared_preload_libraries = 'pg_cron';

Create this extension with:

CREATE EXTENSION pg_cron;

Usage

beware that cron.database has to be set before adding to shared_preload_libraries

-- Delete old data on Saturday at 3:30am (GMT)
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
 schedule
----------
       42

-- Vacuum every day at 10:00am (GMT)
SELECT cron.schedule('nightly-vacuum', '0 10 * * *', 'VACUUM');
 schedule
----------
       43

-- Change to vacuum at 3:00am (GMT)
SELECT cron.schedule('nightly-vacuum', '0 3 * * *', 'VACUUM');
 schedule
----------
       43

-- Stop scheduling jobs
SELECT cron.unschedule('nightly-vacuum' );
 unschedule 
------------
 t

SELECT cron.unschedule(42);
 unschedule
------------
          t

-- Vacuum every Sunday at 4:00am (GMT) in a database other than the one pg_cron is installed in
SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'some_other_database');
 schedule
----------
       44

-- Call a stored procedure every 5 seconds
SELECT cron.schedule('process-updates', '5 seconds', 'CALL process_updates()');

-- Process payroll at 12:00 of the last day of each month
SELECT cron.schedule('process-payroll', '0 12 $ * *', 'CALL process_payroll()');

Crontab format:

 ┌───────────── min (0 - 59)
 │ ┌────────────── hour (0 - 23)
 │ │ ┌─────────────── day of month (1 - 31) or last day of the month ($)
 │ │ │ ┌──────────────── month (1 - 12)
 │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
 │ │ │ │ │                  Saturday, or use names; 7 is also Sunday)
 │ │ │ │ │
 │ │ │ │ │
 * * * * *
Last updated on