Bạn thực sự, thực sự không muốn làm điều này. Postgres không phải là một hệ điều hành, nó là một máy chủ cơ sở dữ liệu. Ngay cả khi cơ sở dữ liệu hỗ trợ chạy các tác vụ theo lịch trình, thì thực sự không nên lạm dụng cơ sở dữ liệu như vậy.
Nếu mối quan tâm của bạn là bạn không muốn thiết lập mật khẩu và nội dung, điều đó thật dễ giải quyết. Thay vào đó, hãy thiết lập kết nối ổ cắm Unix cục bộ bằng xác thực hoặc xác thực danh tính , chạy cronjob của bạn với tư cách là người dùng đó.
Trong cấu hình bên ngoài của nó, thông thường các postgres sẽ thiết lập người dùng hệ thống postgres
để chạy máy chủ db và người dùng hệ thống này thường được cấu hình sẵn để nó có thể kết nối với máy chủ cục bộ bằng xác thực tin cậy khi kết nối qua ổ cắm unix cục bộ. Bạn có thể chạy cronjob của mình với tư cách là người dùng hệ thống postgres, kết nối với ổ cắm cục bộ và sau đó chuyển đổi vai trò nếu bạn không muốn quy trình được lưu trữ của mình chạy với đặc quyền superuser.
Trong thiết lập mặc định, bạn chỉ có thể làm điều này:
$ sudo -u postgres crontab -e
Trong trình chỉnh sửa, thêm vào mục crontab như vậy:
0 0 * * * bash /path/to/run_stored_procedure.sh
và trong tệp /path/to/run_stored_procedure.sh của bạn, bạn chỉ cần sử dụng psql để gọi thủ tục lưu trữ của bạn
#!/usr/bin/env bash
psql my_db_name <<END
SET ROLE limited_user;
SELECT my_stored_proc();
SELECT 1 FROM my_stored_proc();
END