全部产品
Search
文档中心

ApsaraDB RDS:Tugas terjadwal (pg_cron)

更新时间:Dec 05, 2025

ApsaraDB RDS untuk PostgreSQL mendukung ekstensi pg_cron untuk penjadwalan tugas. Ekstensi ini menggunakan penjadwalan berbasis cron dengan sintaks yang sama seperti utilitas cron standar. Anda dapat mengonfigurasi tugas terjadwal secara langsung di dalam database menggunakan perintah SQL.

Ikhtisar

pg_cron adalah ekstensi penjadwalan berbasis cron yang menggunakan sintaks yang sama seperti utilitas cron standar. Ekstensi ini memungkinkan Anda mengonfigurasi tugas terjadwal secara langsung di dalam database melalui perintah SQL. Untuk informasi selengkapnya, lihat pg_cron.

Setiap tugas terjadwal terdiri dari dua bagian utama: scheduling dan action. Sebagai contoh, pertimbangkan tugas berikut yang menghapus data kedaluwarsa dari tabel `events` pada pukul 03.30 (UTC) setiap hari Sabtu: SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);.

  • Scheduling didefinisikan oleh ekspresi cron 30 3 * * 6, yang menjadwalkan tugas pada pukul 03.30 (GMT) setiap hari Sabtu. Dalam sintaks cron, * berarti Runs At Any Time, sedangkan angka tertentu berarti Runs Only At This Time.

     ┌───────────── menit: 0-59
     │ ┌────────────── jam: 0-23
     │ │ ┌─────────────── tanggal bulan: 1-31
     │ │ │ ┌──────────────── bulan: 1-12
     │ │ │ │ ┌───────────────── hari dalam minggu: 0-6 (0 adalah Minggu)
     │ │ │ │ │                  
     │ │ │ │ │
     │ │ │ │ │
     * * * * *

    Anda dapat menggunakan situs web crontab.guru untuk membuat dan memahami pengaturan waktu tugas terjadwal pg_cron.

  • Action adalah $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$, yang menghapus data kedaluwarsa dari tabel `events`.

Prasyarat

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

  • Versi mesin minor instans adalah 20250430 atau yang lebih baru.

    Penting

    Ekstensi ini didukung pada beberapa versi mesin minor yang lebih lama dari 20250430. Namun, untuk menstandarkan manajemen ekstensi dan meningkatkan keamanan ApsaraDB RDS untuk PostgreSQL, Alibaba Cloud telah mengatasi risiko keamanan pada ekstensi selama iterasi versi mesin minor. Akibatnya, Anda tidak dapat membuat ekstensi ini pada instans yang menjalankan versi mesin minor tersebut. Untuk informasi selengkapnya, lihat Pembatasan pembuatan ekstensi.

    • Jika instans Anda menjalankan versi mesin minor yang lebih lama dari 20250430 dan Anda telah menggunakan ekstensi ini, penggunaan ekstensi Anda tidak terpengaruh.

    • Jika Anda ingin membuat ekstensi ini untuk pertama kalinya atau membuat ulang, Anda harus memperbarui versi mesin minor ke versi terbaru.

  • Anda telah membuat Akun istimewa. Untuk informasi selengkapnya tentang cara membuat Akun istimewa, lihat Buat akun.

Catatan penggunaan

  • Secara default, tugas terjadwal dijalankan dalam Coordinated Universal Time (UTC). Saat menyiapkan tugas, Anda harus mengonversi waktunya berdasarkan parameter TIMEZONE database Anda. Jika tugas terjadwal tidak dipicu sesuai harapan, Anda dapat menyiapkan tugas yang berjalan setiap menit untuk memeriksa ketersediaan ekstensi. Contohnya:

    SELECT cron.schedule('* * * * *', 'SELECT 1;');
  • Tugas terjadwal disimpan di database `postgres` default. Namun, Anda dapat mengkueri tugas terjadwal tersebut dari database lain.

  • Ekstensi pg_cron diinstal di database yang ditentukan oleh parameter cron.database_name. Nilai default parameter cron.database_name adalah postgres. Jika Anda ingin menginstal ekstensi pg_cron di database lain, Anda harus mengubah nilai parameter cron.database_name. Untuk informasi selengkapnya, lihat Atur parameter instans.

  • Ekstensi pg_cron didukung pada instans yang menjalankan ApsaraDB RDS untuk PostgreSQL 10, 11, atau 12 dengan versi mesin minor yang lebih lama dari 20201130. Namun, ekstensi tersebut telah ditingkatkan. Kami menyarankan agar Anda meningkatkan versi mesin minor ke versi terbaru. Jika Anda menggunakan pg_cron sebelum peningkatan, Anda harus membuat ulang ekstensi tersebut untuk menggunakan fitur-fitur barunya. Catatan: Saat Anda membuat ulang ekstensi, tugas terjadwal yang ada akan dihapus.

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

Cara menggunakan ekstensi

Penting

Ekstensi pg_cron diinstal di database yang ditentukan oleh parameter cron.database_name. Database default adalah postgres. Perintah yang didukung oleh ekstensi hanya dapat dijalankan di database tersebut. Untuk informasi selengkapnya tentang cara menggunakan ekstensi pg_cron, lihat pg_cron.

  • Buat ekstensi

    • Instal ekstensi dari Konsol

      1. Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans berada. Lalu, temukan instans tersebut dan klik ID-nya.

      2. Di panel navigasi kiri, klik Extension Management.

      3. Di halaman Extension Management > Uninstalled Extensions, temukan ekstensi pg_cron. Pilih database tempat ekstensi akan diinstal dan klik Install.

      4. Di kotak dialog, pilih Akun istimewa dan klik Install untuk menginstal ekstensi pada database tujuan.

        Status instans berubah menjadi Maintaining Instance selama proses instalasi. Ekstensi berhasil diinstal ketika status berubah menjadi Running.

    • Instal ekstensi menggunakan perintah SQL

      1. Atur parameter instans. Tambahkan pg_cron ke Running Parameter Value untuk parameter shared_preload_libraries. Misalnya, ubah Running Parameter Value menjadi 'pg_stat_statements, auto_explain, pg_cron'.

      2. Gunakan Akun istimewa untuk terhubung ke database tujuan dan jalankan pernyataan SQL berikut.

        CREATE EXTENSION pg_cron;
        Catatan

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

  • Buat tugas terjadwal

    SELECT cron.schedule('<Task Name>','<Schedule>', '<Action>');
    Catatan

    Nama tugas bersifat opsional. Saat tugas dibuat, ID tugasnya dikembalikan.

    Contoh:

    -- Hapus data kedaluwarsa pada pukul 03.30 (UTC) setiap hari Sabtu. 
    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
    ----------
    
    -- Jalankan pekerjaan vacuum pada pukul 10.00 (UTC) setiap hari.
    SELECT cron.schedule('0 10 * * *', 'VACUUM');
  • Buat tugas terjadwal di database tertentu

    SELECT cron.schedule_in_database('<Task Name>', '<Schedule>', '<Action>', '<Database>');
    Penting

    Anda harus menentukan nama tugas. Jika tidak, tugas tidak dapat dibuat.

    Jika instans ApsaraDB RDS untuk PostgreSQL Anda menjalankan versi mesin minor yang lebih lama dari 20230530, gunakan perintah berikut. Jika Anda tidak menentukan database, tugas akan dijalankan di database yang ditentukan oleh parameter cron.database_name. Database default adalah postgres.

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

    Contoh:

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

    SELECT * FROM cron.job;
  • Hapus tugas terjadwal

    SELECT cron.unschedule(<Task ID>);

    Jika Anda menentukan nama untuk tugas terjadwal tersebut, Anda juga dapat menghapus tugas berdasarkan namanya.

    SELECT cron.unschedule('<Task Name>');

    Contoh:

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

    DROP EXTENSION pg_cron;
    Catatan
    • Hanya Akun istimewa yang dapat menjalankan perintah ini.

    • Anda juga dapat menguninstall ekstensi di tab Installed Extensions pada halaman Extension Management.