16.6. Arrêter le 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 postmaster.

SIGTERM

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).

SIGINT

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).

SIGQUIT

Voici l'arrêt immédiat (Immediate Shutdown), qui demande au processus postmaster 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.

Important : Il est préférable de ne pas utiliser SIGKILL pour arrêter le serveur. Ceci empêchera le serveur de vider la mémoire partagée et les sémaphores, ce qui, du coup, devra être fait manuellement.

Le PID du processus postmaster est récupérable avec le programme ps ou à partir du fichier postmaster.pid dans le répertoire des données. Donc, par exemple, pour demander un arrêt rapide :

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

Le programme pg_ctl est un script shell qui fournit une interface agréable pour arrêter le serveur.