All Products
Search
Document Center

ApsaraDB RDS:Gunakan ekstensi pg_cron

Last Updated:Aug 04, 2026

ApsaraDB RDS untuk PostgreSQL mendukung ekstensi pg_cron yang menggunakan sintaks dan mekanisme penjadwalan tugas yang sama seperti cron. Anda dapat menggunakan ekstensi ini untuk mengonfigurasi tugas terjadwal di dalam database dengan menjalankan perintah SQL.

Ikhtisar

pg_cron adalah penjadwal berbasis cron yang menggunakan sintaks yang sama seperti cron. Anda dapat menjalankan perintah SQL untuk mengonfigurasi tugas terjadwal. Untuk informasi selengkapnya, lihat pg_cron.

Tugas terjadwal terdiri dari schedule dan action. Pada bagian ini, sebuah tugas terjadwal digunakan sebagai contoh untuk menjelaskan kedua komponen tersebut. Tugas terjadwal dikonfigurasi dengan menjalankan perintah berikut: SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);.

  • Schedule

    Bagian ini menentukan jadwal berdasarkan waktu sistem menjalankan tugas menggunakan ekstensi pg_cron. Anda dapat menentukan jadwal dengan mengikuti sintaks yang sama seperti ekspresi cron standar. Dalam sintaks tersebut, tanda bintang (*) sebagai wildcard pada suatu bidang berarti tugas dijalankan kapan saja sesuai rentang waktu yang ditentukan oleh bidang tersebut, sedangkan nilai numerik pada suatu bidang berarti tugas hanya dijalankan pada waktu spesifik yang ditentukan oleh nilai tersebut. Pada contoh tugas terjadwal ini, jadwalnya adalah 30 3 * * 6, yang berarti tugas dijalankan setiap Sabtu pukul 03.30.00 (UTC).

     ┌───────────── Menit: 0 hingga 59
     │ ┌────────────── Jam: 0 hingga 23
     │ │ ┌─────────────── Tanggal: 1 hingga 31
     │ │ │ ┌──────────────── Bulan: 1 hingga 12
     │ │ │ │ ┌───────────────── Hari dalam seminggu: 0 hingga 6 (Nilai 0 menunjukkan Minggu.)
     │ │ │ │ │                  
     │ │ │ │ │
     │ │ │ │ │
     * * * * *

    Anda dapat membuat dan memecahkan jadwal tugas terjadwal pg_cron di crontab.guru.

  • Action

    Bagian ini menentukan aksi yang ingin Anda lakukan saat tugas dijalankan. Pada contoh tugas terjadwal ini, aksinya adalah $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$, yang berarti tugas terjadwal tersebut dijalankan untuk menghapus data kedaluwarsa dari tabel bernama events.

Prasyarat

  • Instans RDS Anda menjalankan PostgreSQL 10 atau versi yang lebih baru.

  • Instans RDS Anda menjalankan versi mesin minor 20250430 atau versi yang lebih baru.

    Penting

    Ekstensi ini didukung pada beberapa versi mesin minor sebelum 20250430. Namun, ApsaraDB RDS berencana mengoptimalkan ekstensi yang didukung dalam pembaruan versi mesin minor untuk manajemen ekstensi yang terstandarisasi dan keamanan yang lebih baik terhadap kerentanan. Oleh karena itu, Anda tidak dapat membuat ekstensi ini untuk instans RDS yang menjalankan versi mesin minor sebelum 20250430. Untuk informasi selengkapnya, lihat Batasan pembuatan ekstensi untuk RDS untuk PostgreSQL.

    • Jika Anda telah membuat ekstensi ini untuk instans RDS yang menjalankan versi mesin minor sebelum 20250430, Anda dapat terus menggunakan ekstensi ini.

    • Jika Anda membuat ekstensi ini untuk pertama kalinya atau perlu membuat ulang ekstensi untuk instans RDS Anda, Anda harus memperbarui versi mesin minor instans RDS ke versi terbaru. Untuk informasi selengkapnya, lihat Perbarui versi mesin minor.

  • Akun istimewa telah dibuat. Untuk informasi selengkapnya, lihat Buat akun.

Catatan penggunaan

  • Waktu yang ditentukan dalam jadwal tugas terjadwal mengikuti UTC secara default. Konversikan waktu tersebut berdasarkan parameter TIMEZONE database sesuai kebutuhan. Jika tugas terjadwal tidak dapat dipicu, jalankan perintah berikut untuk mengonfigurasi tugas yang dieksekusi setiap menit guna memverifikasi apakah ekstensi berfungsi dengan baik.

    SELECT cron.schedule('* * * * *', 'SELECT 1;');
  • Tugas terjadwal yang dikonfigurasi disimpan di database default bernama postgres. Anda dapat mengkueri tugas-tugas terjadwal ini dari database lain.

  • Ekstensi pg_cron diinstal di database yang ditentukan oleh parameter cron.database_name, yang nilai default-nya adalah postgres. Jika Anda ingin menginstal ekstensi pg_cron di database lain, ubah nilai parameter cron.database_name. Untuk informasi selengkapnya, lihat Atur parameter instans. Menginstal ekstensi pg_cron akan me-restart instans. Lakukan instalasi selama jam sepi.

  • Ekstensi pg_cron versi asli didukung untuk instans RDS yang menjalankan PostgreSQL 10, PostgreSQL 11, atau PostgreSQL 12 serta menggunakan versi mesin minor sebelum 20201130. Namun, kami menyarankan agar Anda memperbarui versi mesin minor instans RDS ke versi terbaru untuk menggunakan versi pg_cron yang telah ditingkatkan. Untuk informasi selengkapnya, lihat Perbarui versi mesin minor. Jika Anda telah menggunakan pg_cron sebelum pembaruan versi mesin minor, buat ulang pg_cron untuk memanfaatkan fitur-fitur barunya. Perhatikan bahwa tugas terjadwal yang telah Anda konfigurasi menggunakan pg_cron akan hilang setelah ekstensi dibuat ulang.

  • Anda harus menggunakan akun istimewa untuk membuat atau menghapus ekstensi pg_cron. Untuk informasi selengkapnya tentang cara membuat akun istimewa, lihat Buat akun.

Gunakan ekstensi

Penting

Perintah yang didukung oleh pg_cron hanya dapat dieksekusi di database yang ditentukan oleh parameter cron.database_name, yang nilai default-nya adalah postgres. Untuk informasi selengkapnya tentang cara menggunakan pg_cron, lihat pg_cron.

  • Buat ekstensi

    • Gunakan fitur manajemen ekstensi untuk menginstal ekstensi

      1. Masuk ke Konsol ApsaraDB RDS dan buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS Anda berada. Lalu, temukan instans RDS tersebut dan klik ID instans.

      2. Di panel navigasi kiri, klik Plug-ins.

      3. Pada halaman yang muncul, klik tab Extension Management, lalu klik tab Uninstalled Extensions. Kemudian, cari ekstensi pg_cron, pilih database tempat Anda ingin menginstal ekstensi tersebut, lalu klik Install di kolom Actions.

      4. Pada kotak dialog yang muncul, pilih Akun istimewa lalu klik OK untuk menginstal ekstensi pada database yang diperlukan.

        Saat proses instalasi ekstensi berlangsung, status instans RDS berubah menjadi Maintaining Instance. Jika status instans RDS berubah menjadi Running, berarti ekstensi telah berhasil diinstal.

    • Eksekusi pernyataan SQL yang diperlukan untuk menginstal ekstensi

      1. Ubah parameter yang diperlukan untuk menambahkan pg_cron ke Running Value dari parameter shared_preload_libraries di Konsol ApsaraDB RDS. Misalnya, Anda dapat mengubah Running Value parameter ini menjadi 'pg_stat_statements,auto_explain,pg_cron'. Untuk informasi selengkapnya, lihat Atur parameter instans.

      2. Gunakan akun istimewa untuk menghubungkan ke database yang diperlukan dan eksekusi pernyataan berikut:

        CREATE EXTENSION pg_cron;
        Catatan

        Anda dapat mengeksekusi pernyataan SELECT * FROM pg_extension untuk melihat ekstensi yang telah diinstal.

  • Konfigurasi tugas terjadwal

    SELECT cron.schedule('<Nama Tugas Terjadwal>','<Schedule>', '<Action>');
    Catatan

    Anda dapat tidak menentukan nama tugas terjadwal. Setelah tugas terjadwal dikonfigurasi, ID tugas akan dikembalikan.

    Contoh:

    -- Hapus data kedaluwarsa setiap Sabtu pukul 03.30 pagi (GMT). 
    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
    ----------
    
    -- Bersihkan disk setiap hari pukul 10.00 pagi (GMT).
    SELECT cron.schedule('0 10 * * *', 'VACUUM');
  • Konfigurasi tugas terjadwal di database tertentu

    SELECT cron.schedule_in_database('<Nama Tugas Terjadwal>', '<Schedule>', '<Action>', '<Database Tertentu>');
    Penting

    Anda harus menentukan nama tugas terjadwal. Jika tidak, tugas tidak akan berhasil dibuat.

    Jika instans RDS untuk PostgreSQL Anda menjalankan versi mesin minor sebelum 20230530, gunakan perintah berikut untuk menjalankan tugas terjadwal. Jika Anda tidak menentukan database, tugas akan dijalankan di database yang ditentukan oleh parameter cron.database_name. Secara default, database tersebut adalah postgres.

    SELECT cron.schedule('<Schedule>', '<Action>', '<Database Tertentu>')

    Contoh:

    SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'some_other_database');
  • Lihat tugas terjadwal yang telah dikonfigurasi

    SELECT * FROM cron.job;
  • Hapus tugas terjadwal

    SELECT cron.unschedule(<ID Tugas Terjadwal>);

    Jika nama telah ditentukan untuk tugas terjadwal, Anda juga dapat menghapus tugas tersebut dengan menyebutkan namanya.

    SELECT cron.unschedule('<Nama Tugas Terjadwal>');

    Contoh:

    -- Hapus tugas terjadwal berdasarkan ID-nya.
    SELECT cron.unschedule(43);
    -- Hapus tugas terjadwal berdasarkan namanya.
    SELECT cron.unschedule('test01');
  • Hapus ekstensi

    DROP EXTENSION pg_cron;
    Catatan
    • Hanya akun istimewa yang memiliki izin untuk menjalankan perintah di atas.

    • Di tab Installed Extensions pada tab Extension Management, Anda dapat meng-uninstal ekstensi.