PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 14.15 » Administration du serveur » Configuration du serveur et mise en place » Arrêter le serveur

19.5. Arrêter le serveur

Il existe plusieurs façons d'arrêter le serveur de bases de données. Au final, elles se basent toutes sur l'envoi d'un signal au processus serveur principal.

Si vous utilisez une version pré-packagée de PostgreSQL et que vous avez utilisé les outils du paquet pour démarrer le serveur, alors vous devriez aussi utiliser les outils du paquet pour arrêter le serveur. Consultez la documentation du paquet pour les détails.

Lors d'une gestion directe du serveur, vous pouvez contrôler le type d'arrêt en envoyant différents signaux au processus postgres :

sigterm

C'est le mode d'arrêt intelligent. Après réception de sigterm, le serveur désactive les nouvelles connexions mais permet aux sessions en cours de terminer leur travail normalement. Il s'arrête seulement après que toutes les sessions se sont terminées normalement. C'est l'arrêt intelligent (smart shutdown). Si le serveur est en mode de sauvegarde en ligne, il attends en plus la désactivation du mot de sauvegarde en ligne. Lorsque le mode de sauvegarde est actif, les nouvelles connexions sont toujours autorisées, mais seulement pour les super-utilisateurs (cette exception permet à un super-utilisateur de se connecter pour terminer le mode de sauvegarde en ligne). Si le serveur est en restauration quand une demande d'arrêt intelligent est envoyée, la restauration et la réplication en flux seront stoppées seulement une fois que toutes les autres sessions ont terminé.

sigint

C'est le mode d'arrêt rapide. Le serveur désactive les nouvelles connexions et envoie à tous les processus serveur le signal sigterm, qui les fera annuler leurs transactions courantes pour quitter rapidement. Il attend ensuite la fin de tous les processus serveur et s'arrête finalement. Si le serveur est en mode de sauvegarde en ligne, le mode est annulé, rendant la sauvegarde inutilisable.

sigquit

C'est le mode d'arrêt immédiat. Le serveur enverra SIGQUIT à tous les processus fils et attendra qu'ils se terminent. Ceux qui ne se terminent pas au bout de cinq secondes se verront envoyés un signal SIGKILL par le processus père postgres, qui les arrêtera sans attendre plus. Ceci peut amener à un redémarrage en mode restauration (de ce fait, ceci n'est recommandé que dans les cas d'urgence).

Le programme pg_ctl fournit une interface agréable pour envoyer ces signaux dans le but d'arrêter le serveur. Autrement, vous pouvez envoyer le signal directement en utilisant kill sur les systèmes autres que Windows. Le PID du processus postgres peut être trouvé en utilisant le programme ps ou à partir du fichier postmaster.pid dans le répertoire des données. Par exemple, pour exécuter un arrêt rapide :

$ kill -int `head -1 /usr/local/pgsql/data/postmaster.pid`

Important

Il vaux mieux de ne pas utiliser SIGKILL pour arrêter le serveur. Le faire empêchera le serveur de libérer la mémoire partagée et les sémaphores. De plus, SIGKILL tue le processus postgres sans lui laisser le temps de relayer ce signal à ses sous-processus, donc il peut aussi être nécessaire de tuer chaque sous-processus à la main.

Pour terminer une session donnée tout en permettant aux autres de continuer, utilisez pg_terminate_backend() (voir Tableau 9.86) ou envoyez un signal SIGTERM au processus fils associé à cette session.