あなたは本当に、本当にこれをしたくありません。Postgresはオペレーティングシステムではなく、データベースサーバーです。データベースがスケジュールされたタスクの実行をサポートしている場合でも、そのようなデータベースを悪用することはあまり良い考えではありません。
パスワードやその他のものを設定したくない場合は、簡単に解決できます。代わりに信頼またはident認証を使用してローカルUnixソケット接続をセットアップし、そのユーザーとしてcronjobを実行します。
初期設定では、通常、postgresはシステムユーザーpostgres
を設定してdbサーバーを実行します。通常、このシステムユーザーはローカルUNIXソケット経由で接続するときに信頼認証を使用してローカルサーバーに接続できるように事前構成されています。ストアドプロシージャをスーパーユーザー権限で実行したくない場合は、cronジョブを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