คุณไม่ต้องการทำสิ่งนี้จริงๆ Postgres ไม่ใช่ระบบปฏิบัติการ แต่เป็นเซิร์ฟเวอร์ฐานข้อมูล แม้ว่าฐานข้อมูลจะสนับสนุนการทำงานตามกำหนดเวลา แต่ก็ไม่ควรที่จะใช้ฐานข้อมูลแบบนั้นในทางที่ผิด
หากความกังวลของคุณคือคุณไม่ต้องการตั้งค่ารหัสผ่านและเนื้อหาต่าง ๆ นั่นเป็นเรื่องง่ายที่จะแก้ไข ตั้งค่าการเชื่อมต่อซ็อกเก็ต Unix ในเครื่องโดยใช้ trust หรือ ident authenticationแทนรัน cronjob ของคุณในฐานะผู้ใช้นั้น
ในการกำหนดค่านอกกรอบโดยปกติ postgres จะตั้งค่าผู้ใช้ระบบpostgres
ให้รันเซิร์ฟเวอร์ db และผู้ใช้ระบบนี้มักจะกำหนดค่าไว้ล่วงหน้าแล้วดังนั้นจึงสามารถเชื่อมต่อกับเซิร์ฟเวอร์ภายในโดยใช้การตรวจสอบความน่าเชื่อถือเมื่อทำการเชื่อมต่อผ่านซ็อกเก็ตยูนิกซ์ คุณสามารถรัน cronjob ของคุณในฐานะผู้ใช้ระบบ postgres เชื่อมต่อกับซ็อกเก็ตท้องถิ่นแล้วสลับบทบาทหากคุณไม่ต้องการให้กระบวนงานที่เก็บไว้ของคุณทำงานด้วยสิทธิ์ผู้ใช้ระดับสูง
ในการตั้งค่าเริ่มต้นคุณสามารถทำได้ดังนี้
$ sudo -u postgres crontab -e
ในตัวแก้ไขเพิ่มไปยังรายการ crontab ดังนี้:
0 0 * * * bash /path/to/run_stored_procedure.sh
และในไฟล์ /path/to/run_stored_procedure.sh คุณเพียงแค่ใช้ psql เพื่อเรียกขั้นตอนการจัดเก็บของคุณ
#!/usr/bin/env bash
psql my_db_name <<END
SET ROLE limited_user;
SELECT my_stored_proc();
SELECT 1 FROM my_stored_proc();
END