Documentation PostgreSQL 8.3.23 > Administration du serveur > Environnement du système d'exploitation > Arrêter le serveur | |
Gérer les ressources du noyau | Empêcher l'usurpation de serveur |
Il existe plusieurs façons d'arrêter le serveur de bases de données. Vous contrôlez le type d'arrêt en envoyant différents signaux au processus serveur maître.
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).
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 des processus serveur et s'arrête finalement. C'est l'arrêt rapide (fast shutdown).
Voici l'arrêt immédiat (immediate shutdown), qui demande au processus postgres maître d'envoyer un signal sigquit à tous les processus fils et à quitter immédiatement non proprement. Les processus fils quittent immédiatement à réception du signal sigquit. ceci amènera une tentative de récupération (en rejouant les traces WAL) au prochain lancement. Ceci n'est recommandé que dans les cas d'urgence.
Le programme pg_ctl(1) 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`
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, ce qui pourrait devoir être fait manuellement avant qu'un nouveau serveur ne soit lancé. De plus, SIGKILL tue le processus postgres sans que celui-ci ait le temps de relayer ce signal à ses sous-processus, donc il sera aussi nécessaire de tuer les sous-processus individuels à la main.