Saya ingin memanggil prosedur tersimpan secara teratur. Di Oracle, saya akan menciptakan pekerjaan untuk ini. Saya telah menemukan bahwa Postgresql dapat meniru ini dengan baik dengan menggunakan alat eksternal (cron dll) dan PgAgent.
Apakah Anda tahu alternatif "internal" yang tidak akan melibatkan alat eksternal?
- Saya ingin menghindari masalah keamanan dengan kata sandi yang disimpan pada baris perintah pgAgent.
- Saya ingin menghindari konfigurasi sistem tambahan untuk menyembunyikan kata sandi (
~/.pgpass
).
Postgresql 8.3
Linux RedHat 64bit
postgresql
jobs
scheduled-tasks
Stephan
sumber
sumber
Jawaban:
Bahkan jika Anda menjalankan PostgreSQL 10 yang akan segera dirilis (saat penulisan) atau PostgreSQL 9.6 saat ini bukan rilis kuno seperti 8.3, masih belum ada penjadwal tugas bawaan.
Sesuatu seperti pekerjaan PgAgent atau cron eksternal diperlukan, tidak ada solusi yang nyaman.
Fitur latar belakang pekerja yang diperkenalkan di 9.3 semoga memungkinkan alat seperti PgAgent untuk dipindahkan ke inti PostgreSQL dalam rilis berikutnya, tetapi belum dilakukan. Bahkan pada 9.3 Anda masih harus menjalankan cron atau pgagent.
Beberapa orang sedang mengerjakan penjadwal berbasis pekerja latar belakang, dan ada beberapa tambalan yang datang yang harus menyediakan fasilitas untuk membantu dengan itu. Tetapi pada PostgreSQL 10 masih belum ada kualitas yang baik, penjadwal yang diadopsi secara luas, dan kebanyakan orang menggunakan penjadwal tugas cron / ms / dll.
Silakan lihat kebijakan versi juga; Anda menjalankan rilis yang usang dan tidak didukung.
sumber
Please take a look at the version policy
, memutakhirkan Postgresql bukanlah suatu pilihan.standard_conforming_strings
danbytea_output
.Pada PostgreSQL 9.5, Anda dapat menggunakan ekstensi pg_cron , yang dimuat sebagai pustaka bersama ke PostgreSQL.
Setelah mengaturnya, menciptakan pekerjaan cukup sederhana:
Ini akan menjalankan perintah hapus sesuai dengan jadwal cron yang ditentukan. Anda juga dapat menggunakan
@reboot
untuk menjadwalkan pekerjaan ketika server memulai kembali, dan pg_cron secara otomatis akan mulai menjalankan pekerjaan jika Anda mempromosikan siaga panas.Alih-alih menggunakan .pgpass, Anda dapat memberikan akses localhost untuk pengguna cron di pg_hba.conf.
sumber
Anda benar-benar tidak ingin melakukan ini. Postgres bukan sistem operasi, ini adalah server database. Bahkan jika database mendukung menjalankan tugas yang dijadwalkan, itu bukan ide yang baik untuk menyalahgunakan database seperti itu.
Jika kekhawatiran Anda adalah Anda tidak ingin mengatur kata sandi dan barang, itu mudah diselesaikan. Siapkan koneksi soket Unix lokal menggunakan kepercayaan atau otentikasi identitas , jalankan cronjob Anda sebagai pengguna itu.
Dalam konfigurasi out-of-the-nya, biasanya postgres mengatur pengguna sistem
postgres
untuk menjalankan server db, dan pengguna sistem ini biasanya sudah dikonfigurasikan sebelumnya sehingga dapat terhubung ke server lokal menggunakan otentikasi kepercayaan saat menghubungkan melalui soket unix lokal. Anda dapat menjalankan cronjob sebagai pengguna sistem postgres, menyambungkan ke soket lokal, dan kemudian beralih peran jika Anda tidak ingin prosedur tersimpan Anda dijalankan dengan hak superuser.Dalam pengaturan default, Anda bisa melakukan ini:
Di editor, tambahkan ke entri crontab seperti:
dan dalam file /path/to/run_stored_procedure.sh Anda cukup menggunakan psql untuk memanggil prosedur store Anda
sumber