Vous ne voulez vraiment pas vraiment faire ça. Postgres n'est pas un système d'exploitation, c'est un serveur de base de données. Même si la base de données prend en charge l'exécution de tâches planifiées, ce n'est pas vraiment une bonne idée d'abuser de la base de données.
Si votre préoccupation est que vous ne voulez pas configurer de mot de passe et de contenu, c'est facile à résoudre. Configurez une connexion de socket Unix locale en utilisant plutôt une authentification trust ou ident , exécutez votre travail cron en tant qu'utilisateur.
Dans sa configuration prête postgres
à l'emploi , postgres configure généralement l'utilisateur système pour qu'il exécute le serveur de base de données. Cet utilisateur système est généralement déjà préconfiguré afin de pouvoir se connecter au serveur local à l'aide d'une authentification sécurisée lors d'une connexion via un socket Unix local. Vous pouvez exécuter votre cronjob en tant qu'utilisateur système postgres, vous connecter au socket local, puis changer de rôle si vous ne souhaitez pas que votre procédure stockée s'exécute avec le privilège de superutilisateur.
Dans la configuration par défaut, vous pouvez simplement faire ceci:
$ sudo -u postgres crontab -e
Dans l'éditeur, ajoutez à l'entrée de la crontab comme suit:
0 0 * * * bash /path/to/run_stored_procedure.sh
et dans votre fichier /path/to/run_stored_procedure.sh, il vous suffit d'utiliser psql pour appeler la procédure de votre magasin.
#!/usr/bin/env bash
psql my_db_name <<END
SET ROLE limited_user;
SELECT my_stored_proc();
SELECT 1 FROM my_stored_proc();
END