All Products
Search
Document Center

AnalyticDB:pg_cron

Last Updated:Mar 18, 2026

Di AnalyticDB for PostgreSQL, gunakan ekstensi pg_cron untuk menjadwalkan pekerjaan pada waktu tertentu. Fitur ini ideal untuk mengotomatiskan tugas berulang seperti pembaruan data, pencadangan, atau pembersihan data kedaluwarsa. Otomatisasi ini menghemat waktu dan upaya dengan memastikan tugas dijalankan secara andal dan tepat waktu, sehingga meningkatkan efisiensi serta manajemen sistem.

Cara kerja

pg_cron adalah penjadwal pekerjaan berbasis cron yang menggunakan sintaksis standar cron dan memungkinkan Anda menjalankan perintah PostgreSQL langsung dari database.

Pekerjaan terjadwal terdiri dari dua bagian utama:

  • Command: Tugas yang akan dijalankan, seperti VACUUM.

  • Schedule: Waktu saat tugas dijalankan, misalnya sekali setiap menit.

    Jadwal menggunakan sintaksis cron standar:

     ┌───────────── minute (0 - 59)
     │ ┌────────────── hour (0 - 23)
     │ │ ┌─────────────── day of month (1 - 31)
     │ │ │ ┌──────────────── month (1 - 12)
     │ │ │ │ ┌───────────────── day of week (0 - 6, 0 is Sunday)
     │ │ │ │ │
     │ │ │ │ │
     │ │ │ │ │
     * * * * *
    • *: Mewakili nilai apa pun.

    • Bilangan spesifik: Hanya dijalankan pada waktu tersebut.

    • ,: Memisahkan beberapa nilai.

    • -: Menentukan rentang nilai.

    • /: Menentukan nilai langkah (step).

    Untuk membuat atau melihat pratinjau jadwal, kunjungi Crontab.guru.

    Contoh:

    • Setiap Sabtu pukul 03.30 (GMT):

      30 3 * * 6
    • Pukul 01.45 (GMT) pada tanggal 1 dan 30 setiap bulan:

      45 1 1,30 * *
    • Setiap hari kerja (Senin hingga Jumat) pukul 03.00 (GMT):

      00 3 * * 1-5
    • Setiap dua jam tepat, dari pukul 08.00 hingga 20.00 (GMT):

      0 8-20/2 * * *

Catatan penggunaan

  • Pekerjaan terjadwal dijalankan dalam Greenwich Mean Time (GMT), yang setara dengan Coordinated Universal Time (UTC). Saat menjadwalkan pekerjaan, konversikan waktu lokal Anda ke GMT.

  • Semua pekerjaan terjadwal disimpan di dan harus di-query dari database default postgres.

  • Jika versi instans Anda lebih awal dari v6.3.6.0 (untuk AnalyticDB for PostgreSQL V6.0), v7.0.3.0 (untuk AnalyticDB for PostgreSQL V7.0), atau v2.0.0.1 (untuk AnalyticDB for PostgreSQL Serverless mode), beberapa fitur yang dijelaskan dalam topik ini mungkin tidak tersedia. Untuk menggunakan semua fitur, perbarui versi minor instans Anda. Petunjuknya tersedia di Upgrade the minor engine version.

Instal atau uninstal ekstensi

Instal ekstensi

AnalyticDB for PostgreSQL menginstal ekstensi pg_cron secara default saat Anda membuat instans. Anda tidak perlu menginstalnya secara manual.

Uninstal ekstensi

Ekstensi pg_cron memiliki dependensi kernel dan tidak dapat dihapus.

Jadwalkan pekerjaan

Jadwalkan pekerjaan

Sintaksis:

SELECT cron.schedule('<schedule>', '<command>');

Contoh:

  • Hapus data kedaluwarsa setiap Sabtu pukul 03.30 (GMT):

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
  • Jalankan fungsi test() setiap hari pukul 10.00 (GMT):

    SELECT cron.schedule('0 10 * * *', 'select test()');
  • Jalankan pernyataan SQL tertentu setiap menit:

    SELECT cron.schedule('* * * * *', 'select 1');
  • Jalankan VACUUM FULL pukul 02.30 (GMT) pada tanggal 1 dan 30 setiap bulan, serta setiap Sabtu dan Minggu:

    SELECT cron.schedule('30 2 1,30 * 6,0', 'VACUUM FULL');

Tentukan nama pekerjaan

Anda dapat memberikan nama pada pekerjaan terjadwal. Sintaksisnya sebagai berikut:

SELECT cron.schedule('<job_name>', '<schedule>', '<command>');

Contoh:

  • Tetapkan nama pekerjaan terjadwal menjadi "Delete Expired Data":

    SELECT cron.schedule('Delete Expired Data','30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
  • Tetapkan nama pekerjaan terjadwal menjadi "Select Per Minute":

    SELECT cron.schedule('Select Per Minute', '* * * * *', 'select 1');
  • Tetapkan nama pekerjaan terjadwal menjadi "Do Vacuum":

    SELECT cron.schedule('Do Vacuum', '0 23 * * *' , 'VACUUM FULL');

Tentukan database untuk pekerjaan

Pada versi pg_cron sebelum 1.4, pekerjaan hanya dapat dijalankan di database tempat ekstensi diinstal. Untuk menjalankan pekerjaan di database lain, Anda harus memanipulasi tabel cron.job secara langsung, yang tidak praktis dan tidak aman.

Versi pg_cron 1.4 memungkinkan Anda menentukan database dan akun database untuk menjalankan pekerjaan terjadwal. Sintaksisnya sebagai berikut:

SELECT cron.schedule('<job_name>', '<schedule>', '<command>', '<database>', '<username>', '<active>');
  • '<database>': Database tempat pekerjaan dijalankan. Jika tidak ditentukan, default-nya adalah database postgres.

  • '<username>: Akun database yang menjalankan pekerjaan. Jika tidak ditentukan, default-nya adalah akun saat ini.

  • '<active>': Menentukan apakah pekerjaan terjadwal diaktifkan. Nilai default-nya adalah true.

Contoh:

  • Jalankan VACUUM pada database dw setiap hari pukul 23.00 (GMT):

    SELECT cron.schedule('Do Vacuum', '0 23 * * *' , 'VACUUM FULL', 'dw');
  • Jalankan pernyataan SQL tertentu di database dw setiap menit sebagai pengguna gp1234:

    SELECT cron.schedule('Select Per Minute', '* * * * *', 'select 1', 'dw', 'gp1234');
  • Jalankan fungsi test() di database dw setiap hari pukul 10.00 (GMT) sebagai pengguna user1:

    SELECT cron.schedule('DO Function', '0 10 * * *', 'select test()', 'dw', 'user1', true);

Perbarui pekerjaan terjadwal

Gunakan fungsi cron.alter_job untuk memperbarui pekerjaan terjadwal. Sintaksisnya sebagai berikut:

SELECT cron.alter_job(<job_id>, '<schedule>', '<command>', '<database>', '<username>', '<active>');
  • <job_id>: Wajib diisi. Ini adalah ID pekerjaan yang dihasilkan secara otomatis, yang dapat Anda temukan di tabel cron.job.

  • Parameter lainnya: Opsional. Jika Anda tidak menentukan nilai untuk parameter opsional, nilainya tetap tidak berubah.

Contoh:

  • Ubah jadwal pekerjaan dengan ID 3 agar dijalankan setiap hari pukul 11.00 (GMT):

    SELECT cron.alter_job(3, '0 11 * * *');
  • Ubah perintah pekerjaan dengan ID 1 menjadi VACUUM:

    SELECT cron.alter_job(1, null , 'VACUUM');
  • Ubah pengguna pekerjaan dengan ID 2 menjadi gp1234:

    SELECT cron.alter_job(2, null , null, null, 'gp1234');

Lihat detail eksekusi pekerjaan

Tabel cron.job_run_details mencatat detail setiap eksekusi pekerjaan.

Catatan

Dengan banyaknya pekerjaan terjadwal, tabel cron.job_run_details dapat menjadi sangat besar. Jadwalkan pekerjaan untuk membersihkan tabel ini secara berkala. Jika Anda tidak perlu mencatat detail eksekusi pekerjaan, Anda juga dapat Submit a ticket untuk meminta dukungan teknis menonaktifkan pencatatan log dengan mengatur cron.log_run menjadi false.

Contoh:

  • Lihat detail semua pekerjaan yang gagal:

    SELECT * FROM cron.job_run_details WHERE status = 'failed';
  • Lihat detail eksekusi pekerjaan dengan ID 1:

    SELECT * FROM cron.job_run_details WHERE jobid = '1';

Lihat daftar pekerjaan terjadwal

Contoh:

SELECT * FROM cron.job;

Batalkan penjadwalan pekerjaan

  • Batalkan penjadwalan pekerjaan berdasarkan namanya. Sintaksisnya sebagai berikut:

    SELECT cron.unschedule('<job_name>');
    Penting

    pg_cron memungkinkan Anda membuat pekerjaan dengan nama duplikat. Jika Anda membatalkan penjadwalan pekerjaan berdasarkan nama yang digunakan oleh beberapa pekerjaan, pg_cron hanya menghapus pekerjaan dengan jobid terkecil.

    Contoh:

    Batalkan penjadwalan pekerjaan bernama 'Do Vacuum':

    SELECT cron.unschedule('Do Vacuum');
  • Batalkan penjadwalan pekerjaan berdasarkan ID-nya. Sintaksisnya sebagai berikut:

    SELECT cron.unschedule(<job_id>);

    pg_cron menghasilkan ID pekerjaan secara otomatis saat Anda membuat pekerjaan tersebut. Anda dapat menemukan jobid di tabel cron.job.

    Contoh:

    Batalkan penjadwalan pekerjaan dengan ID 21:

    SELECT cron.unschedule(21);

Dokumen terkait