pg_ctl

Nom

pg_ctl -- lance, arrête ou relance le serveur PostgreSQL

Synopsis

pg_ctl start [-w] [-s] [-D répertoire_données] [-l nomfichier] [-o options] [-p chemin]
pg_ctl stop [-W] [-s] [-D répertoire_données] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D répertoire_données] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D répertoire_données]
pg_ctl status [-D répertoire_données]
pg_ctl kill [nom_signal] [id_processus]
pg_ctl register [-N nom_service] [-U nom_utilisateur] [-P mot_de_passe] [-D répertoire_données] [-w] [-o options]
pg_ctl unregister [-N nom_service]

Description

pg_ctl est un outil de lancement, d'arrêt et de redémarrage du serveur PostgreSQL (postmaster). Il permet aussi d'afficher le statut d'un serveur en cours d'exécution. Bien que le serveur doive être lancé manuellement, pg_ctl encapsule les tâches comme la redirection des traces ou le détachement du terminal et du groupe de processus. Il fournit aussi des options intéressantes pour un arrêt contrôlé.

Dans le mode start, un nouveau serveur est lancé. Le serveur est lancé en tâche de fond et l'entrée standard est attachée à /dev/null. La sortie standard et la sortie d'erreurs standard sont soit envoyées dans un journal de traces (si l'option -l est utilisée) soit redirigées dans la sortie standard de pg_ctl (et non pas la sortie d'erreurs standard). Si aucun journal de traces n'est donné, la sortie standard de pg_ctl devrait être redirigée dans un fichier ou envoyée via un tube à un autre processus, par exemple un programme de rotation de journaux de trace, comme rotatelogs sinon postmaster écrit sa sortie dans le terminal de contrôle (à partir de l'arrière-plan) et ne se détache pas du groupe de processus du shell.

Dans le mode stop, le serveur en cours d'exécution dans le répertoire spécifié est arrêté. Trois méthodes différentes d'arrêt peuvent être choisies avec l'option -m : le mode << Smart >> attend la déconnexion de tous les clients. C'est la valeur par défaut. Le mode << Fast >> n'attend pas la déconnexion des clients. Toutes les transactions actives sont annulées et les clients sont forcés à se déconnecter. Le serveur est ensuite arrêté. Le mode << Immediate >> tue tous les processus serveurs sans leur laisser la possibilité de faire un arrêt propre. Ceci amènera une tentative de récupération au prochain lancement.

Le mode restart exécute en fait un arrêt suivi d'un lancement. Ceci permet de modifier les options en ligne de commande de postmaster.

Le mode reload envoie simplement au processus postmaster un signal SIGHUP ce qui le fait relire ses fichiers de configuration (postgresql.conf, pg_hba.conf, etc.). Ceci permet de modifier les options du fichier de configuration sans nécessiter un redémarrage complet pour que les modifications soient prises en compte.

Le mode status vérifie si un serveur est toujours en cours d'exécution sur le répertoire de données spécifié. Si c'est le cas, le PID et les options en ligne de commande utilisées lors de son lancement sont affichés.

Le mode kill vous permet d'envoyer un signal à un processus spécifique. Ceci est particulièrement utile pour Microsoft Windows, qui ne possède pas de commande kill. Utilisez --help pour voir une liste des noms de signaux supportés.

Le mode register vous permet d'enregistrer un service système sur Microsoft Windows.

Le mode unregister vous permet d'annuler un service système sur Microsoft Windows, précédemment enregistré avec la commande register.

Options

-D répertoire_données

Spécifie l'emplacement des fichiers de la base de données sur le système de fichiers. Si cette option est omise, la variable d'environnement PGDATA est utilisée.

-l nomfichier

Ajoute la sortie des traces du serveur dans nomfichier. Si le fichier n'existe pas, il est créé. L'umask est configuré à 077, donc l'accès au journal des traces est interdit aux autres utilisateurs par défaut.

-m mode

Spécifie le mode d'arrêt. mode fait partie de smart, fast ou immediate, ou encore de la première lettre d'un de ces trois-là.

-o options

Spécifie les options à passer directement à la commande postmaster.

Les options sont habituellement entourées par des guillemets simples ou doubles pour s'assurer qu'elles sont passées comme un groupe.

-p chemin

Spécifie l'emplacement de l'exécutable postmaster. Par défaut, l'exécutable postmaster est pris à partir du même répertoire que pg_ctl ou, si cela échoue, à partir du répertoire d'installation codé en dur. Il n'est pas nécessaire d'utiliser cette option sauf si vous faites quelque chose d'inhabituel et obtenez des erreurs comme quoi l'exécutable postmaster serait introuvable.

-s

Affiche seulement les erreurs, pas les messages d'information.

-w

Attend la fin du lancement ou de l'arrêt. S'interrompt au bout de 60 secondes. Ceci est la valeur par défaut pour les arrêts. Un arrêt avec succès est indiqué par la suppression du fichier PID. Pour le lancement, un psql -l se terminant avec succès indique que tout va bien. pg_ctl tente d'utiliser le bon port pour psql. Si la variable d'environnement PGPORT existe, elle est utilisée. Sinon, il cherche si un port a été configuré dans le fichier postgresql.conf. Si aucun des deux n'est utilisé, il utilise le port par défaut avec lequel PostgreSQL a été compilé (5432 par défaut). S'il a attendu, pg_ctl renvoie un code de sortie précis basé sur le succès du démarrage ou de l'arrêt.

-W

Ne pas attendre le lancement ou l'arrêt pour se terminer. Ceci est la valeur par défaut pour les lancements et redémarrages.

Options Windows

-N nom_service

Nom du service système à enregistrer. Le nom est utilisé à la fois comme nom de service et comme nom affiché.

-P mot_de_passe

Mot de passe de l'utilisateur pour lancer le service.

-U nom_utilisateur

Nom de l'utilisateur qui va lancer le service. Pour les utilisateurs de domaine, utilisez le format DOMAIN\nom_utilisateur.

Environnement

PGDATA

Emplacement du répertoire des données par défaut.

PGPORT

Port par défaut pour psql (utilisé par l'option -w).

Pour les autres, voir postmaster.

Fichiers

postmaster.pid

Ce fichier dans le répertoire des données est utilisé pour aider pg_ctl à déterminer si le serveur est actuellement en cours d'exécution.

postmaster.opts.default

Si ce fichier existe dans le répertoire des données, pg_ctl (dans le mode start) passe le contenu du fichier comme options de la commande postmaster, sauf en cas de surcharge par l'option -o. Le contenu de ce fichier est aussi affiché en mode status

postmaster.opts

Si ce fichier existe dans le répertoire des données, pg_ctl (en mode restart) passe le contenu du fichier comme options de postmaster, sauf en cas de surcharge par l'option -o.

postgresql.conf

Ce fichier, situé dans le répertoire des données, est analysé pour trouver le bon port à utiliser avec psql lorsque -w est donné en mode start.

Notes

Attendre le lancement complet n'est pas une opération bien définie et peut échouer si le contrôle d'accès est configuré pour qu'un client local ne puisse pas se connecter sans interaction manuelle (par exemple, une authentification par mot de passe).

Exemples

Lancer le serveur

Pour lancer un serveur :

$ pg_ctl start

Un exemple de lancement de serveur, bloquant tant que le serveur n'est pas complètement lancé :

$ pg_ctl -w start

Pour un serveur utilisant le port 5433 et s'exécutant sans fsync, utilisez :

$ pg_ctl -o "-F -p 5433" start

Arrêt du serveur

$ pg_ctl stop

arrête le serveur. Utiliser l'option -m vous permet de contrôler comment le serveur s'arrête.

Relance du serveur

Relancer le serveur est pratiquement équivalent à l'arrêter puis à le relancer de nouveau sauf que pg_ctl sauvegarde et réutilise les options en ligne de commande qui ont été passées à l'instance précédente. Pour relancer le serveur de la façon la plus simple, utilisez :

$ pg_ctl restart

Pour relancer le serveur, en attendant qu'il s'arrête puis qu'il se relance :

$ pg_ctl -w restart

Pour relancer en utilisant le port 5433 et en désactivant fsync après redémarrage :

$ pg_ctl -o "-F -p 5433" restart

Affichage de l'état du serveur

Voici un exemple de statut affiché à partir de pg_ctl :

$ pg_ctl status
pg_ctl: postmaster is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

Ceci est la ligne de commande qui serait appelée en mode relance.

Voir aussi

postmaster