All Products
Search
Document Center

PolarDB:PG_CRON

Last Updated:Mar 29, 2026

pg_cron adalah penjadwal pekerjaan berbasis cron untuk PostgreSQL 9.5 dan versi yang lebih baru, yang berjalan langsung di dalam database Anda sebagai ekstensi. Ekstensi ini menggunakan sintaks ekspresi cron standar, sehingga Anda dapat menjadwalkan perintah SQL apa pun—mulai dari eksekusi rutin VACUUM hingga kueri arsip data kustom—tanpa memerlukan penjadwal eksternal.

Penting

Sebelum menggunakan pg_cron, tingkatkan kernel Anda ke V1.1.19 atau versi yang lebih baru. Versi sebelumnya memiliki risiko memory leak yang diketahui.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster PolarDB for PostgreSQL yang berjalan dengan kernel V1.1.19 atau versi yang lebih baru

Aktifkan pg_cron

pg_cron dinonaktifkan secara default. Untuk mengaktifkannya, ajukan permohonan akses melalui Quota Center:

  1. Buka Quota Center.

  2. Temukan polardb_pg_pg_cron dalam daftar kuota.

  3. Klik Apply pada kolom Actions.

Anda tidak dapat mengaktifkannya secara manual dengan CREATE EXTENSION.

Catatan penggunaan

  • Pekerjaan terjadwal dijalankan dalam GMT.

  • Semua pekerjaan disimpan di database PostgreSQL default, tetapi Anda dapat melakukan kueri terhadapnya dari database mana pun.

  • Demi pertimbangan keamanan, Anda hanya dapat mengeksekusi tugas terjadwal dengan menggunakan fungsi sistem. Sistem memungkinkan Anda menambah dan menghapus tugas terjadwal. Pengguna biasa hanya dapat melihat tugas terjadwal di tabel cron.job.

Jadwalkan pekerjaan

Setiap pekerjaan terjadwal memiliki dua komponen: ekspresi cron yang menentukan waktu eksekusinya, dan perintah SQL yang akan dijalankan.

-- Jadwalkan pekerjaan di database PostgreSQL default
SELECT cron.schedule('<cron-expression>', '<sql-command>');

-- Jadwalkan pekerjaan di database tertentu
SELECT cron.schedule('<cron-expression>', '<sql-command>', '<database-name>');

Jika Anda menghilangkan parameter database, database PostgreSQL default akan digunakan.

cron.schedule() mengembalikan jobid numerik yang dapat Anda gunakan untuk mengelola pekerjaan tersebut di kemudian hari.

Sintaks ekspresi cron

Ekspresi cron memiliki lima bidang yang dipisahkan spasi:

┌─────────────── Menit (0–59)
│ ┌───────────── Jam (0–23)
│ │ ┌─────────── Tanggal bulan (1–31)
│ │ │ ┌───────── Bulan (1–12)
│ │ │ │ ┌─────── Hari dalam minggu (0–6, di mana 0 = Minggu; 7 tetap menunjukkan hari akhir pekan)
│ │ │ │ │
* * * * *

Karakter khusus:

KarakterMaknaContoh
*Setiap nilai dalam bidang tersebut* * * * * dijalankan setiap menit

Contoh

Hapus data kedaluwarsa setiap Sabtu

-- Hapus event yang lebih lama dari 1 minggu pada pukul 03.30 GMT setiap Sabtu
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

Output:

 schedule
----------
       42

Jalankan VACUUM setiap hari

-- Jalankan VACUUM pada pukul 10.00 GMT setiap hari
SELECT cron.schedule('0 10 * * *', 'VACUUM');

Output:

 schedule
----------
       43

Jalankan perintah setiap menit

SELECT cron.schedule('* * * * *', 'select 1;');

Output:

 schedule
----------
       44

Jalankan perintah pada menit ke-23 setiap jam

SELECT cron.schedule('23 * * * *', 'select 1;');

Output:

 schedule
----------
       45

Jalankan perintah pada tanggal 4 setiap bulan

SELECT cron.schedule('* * 4 * *', 'select 1;');

Output:

 schedule
----------
       46

Kelola pekerjaan

Lihat pekerjaan terjadwal

SELECT * FROM cron.job;

Contoh output:

 jobid |  schedule   |  command  | nodename  | nodeport | database | username | active
-------+-------------+-----------+-----------+----------+----------+----------+--------
    43 | 0 10 * * *  |  VACUUM;  | localhost |     5433 | postgres | test     | t

Hapus pekerjaan

-- Hapus pekerjaan dengan jobid 42
SELECT cron.unschedule(42);

Output:

 unschedule
------------
          t

Nonaktifkan pg_cron

Untuk menonaktifkan ekstensi ini, jalankan:

DROP EXTENSION pg_cron;