Ekstensi PG_CRON adalah penjadwal tugas sederhana berbasis CRON untuk PostgreSQL 9.5 dan versi lebih baru, yang berjalan sebagai ekstensi di dalam database. Ekstensi ini menggunakan sintaks yang sama dengan ekspresi CRON biasa, tetapi memungkinkan Anda menjadwalkan perintah PostgreSQL langsung dari database.
Peringatan
- Versi sebelumnya dari ekstensi PG_CRON mungkin memiliki risiko kebocoran memori. Oleh karena itu, sebelum menggunakan ekstensi ini, pastikan kernel ditingkatkan ke V1.1.19 atau versi lebih baru. Risiko ini tidak akan terjadi jika Anda menghindari penggunaan ekstensi PG_CRON.
- Untuk alasan keamanan, hanya fungsi sistem yang dapat mengeksekusi tugas terjadwal. Sistem memungkinkan Anda menambah dan menghapus tugas terjadwal. Pengguna umum hanya dapat melihat tugas terjadwal di tabel
cron.job. Pilih metode penggunaan fungsi dengan hati-hati. - Tugas terjadwal disimpan di database default PostgreSQL, tetapi Anda dapat menanyakan tugas terjadwal di database lain.
- Tugas terjadwal dijalankan berdasarkan waktu GMT.
- Ekstensi PG_CRON dinonaktifkan secara default. Untuk alasan keamanan, Anda tidak dapat membuat ekstensi ini secara manual. Untuk menggunakannya, kunjungi Quota Center. Klik Apply di kolom Actions yang sesuai dengan polardb_pg_pg_cron.
Nonaktifkan ekstensi PG_CRON
Anda dapat menonaktifkan ekstensi PG_CRON dengan mengeksekusi pernyataan berikut:
-- Nonaktifkan PG_CRON
DROP EXTENSION pg_cron;Menggunakan ekstensi PG_CRON
Setiap tugas terjadwal terdiri dari jadwal dan tugas. Jadwal menentukan waktu eksekusi tugas, misalnya, sekali setiap menit. Tugas menentukan operasi yang akan dilakukan, seperti select * from some_table. Ekstensi PG_CRON menyediakan parameter opsional database. Jika parameter ini tidak ditentukan, sistem secara otomatis menggunakan database PostgreSQL.
Hanya fungsi-fungsi tertentu yang dapat dieksekusi. Eksekusi fungsi lainnya tidak valid.
-- Menjalankan tugas.
SELECT cron.schedule('jadwal', 'tugas')
-- Pilih database untuk menjalankan tugas.
-- Jika Anda tidak menentukan parameter ketiga, database di file konfigurasi digunakan. Secara default, database PostgreSQL digunakan.
SELECT cron.schedule('jadwal', 'tugas', 'my_db')
-- Hapus tugas.
SELECT cron.unschedule(id_jadwal)
-- Lihat daftar tugas.
SELECT * FROM cron.job;Contoh
- Tambahkan tugas terjadwal.
-- Hapus data lama pada pukul 3:30 pagi setiap hari Sabtu. Waktu dalam Greenwich Mean Time (GMT). SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 minggu'$$); schedule ---------- 42 -- Bersihkan disk pada pukul 10:00 pagi setiap hari. Waktu dalam GMT. SELECT cron.schedule('0 10 * * *', 'VACUUM'); schedule ---------- 43 -- Jalankan skrip tertentu sekali setiap menit. SELECT cron.schedule('* * * * *', 'select 1;'); schedule ---------- 44 -- Jalankan skrip tertentu pada menit ke-23 setiap jam. SELECT cron.schedule('23 * * * *', 'select 1;'); schedule ---------- 45 -- Jalankan skrip tertentu pada hari keempat setiap bulan. SELECT cron.schedule('* * 4 * *', 'select 1;'); schedule ---------- 46Jadwal menggunakan ekspresi CRON standar. Dalam ekspresi tersebut, wildcard
*menunjukkan bahwa tugas dijalankan secara berkala, sedangkan angka menunjukkan titik waktu spesifik ketika tugas dijalankan.┌───────────── 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. │ │ │ │ │ Nilai 7 masih menunjukkan akhir pekan.) * * * * * - Hapus tugas.
-- Hentikan dan hapus tugas. SELECT cron.unschedule(42); unschedule ------------ t - Lihat tugas yang sedang berjalan.
SELECT * FROM cron.job; jobid | schedule | command | nodename | nodeport | database | username | active -------+------------+-----------+-----------+----------+----------+----------+-------- 43 | 0 10 * * * | VACUUM; | localhost | 5433 | postgres | test | t