

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 :
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 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é.
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.
   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`
    Il vaut 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.96) ou envoyez un signal
   SIGTERM au processus fils associé à cette session.