postmaster

Name

postmaster -- Serveur multi-utilisateurs PostgreSQL

Synopsis

postmaster [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-F] [-h hostname] [-i] [-k directory] [-l] [-N max-connections] [-o extra-options] [-p port] [-S] [--name=value] [-n | -s]

Description

Le postmaster est le serveur multi-utilisateurs PostgreSQL. Afin d'accéder à une base, une application cliente se connecte (localement ou à travers un réseau) à un postmaster. Le postmaster démarre alors un processus serveur distinct ("postgres(1)") pour maintenir la connexion. Le postmaster gère aussi la communication parmi les processus serveur.

Par défaut, le postmaster démarre en premier plan et affiche les messages de log sur la sortie standard. En pratique le postmaster sera démarré comme processus d'arrière-plan, peut-être au boot de la machine.

Un postmaster gère toujours les données depuis un cluster de base. Un cluster de base est un ensemble de bases stocké dans un système de fichier commun. Quand le postmaster démarre il doit connaître la localisation des fichiers de cluster de base ("zone de données"). Ce qui est réalisé par l'option -D de la variable d'environnement PGDATA; ce n'est pas le cas par défaut. Plusieurs processus postmaster peuvent tourner sur un même système au même moment, tant qu'ils utilisent des zones de données différentes et des ports de communication différents (voir plus bas). Une zone de données est créée avec initdb(1).

Options

Le postmaster accepte les arguments en ligne de commande suivants. Pour plus de détail sur les options voir le Guide de l'administrateur. Vous pouvez aussi éviter de taper ces options en les mettant dans le fichier de configuration.

-A 0|1

Active les vérifications au lancement, ce qui est une aide de débugage pour détecter les diverses erreurs de programmation. Seulement disponible si activé lors de la compilation. Dans ce cas, activé par défaut.

-B nbuffers

Place les divers tampons partagés pour leur utilisation par les processus serveur. La valeur par défaut est de 64 tampons, où chaque tampon est de 8 kb.

-c name=value

Place un paramètre de lancement. Consultez le Guide de l'administrateur pour la liste et les descriptions. La plupart des autres options en ligne de commande sont en fait des formes courtes d'affectation de paramètres. -c peut apparaître plusieurs fois pour placer plusieurs paramètres.

-d debug-level

Place le niveau débugage. La valeur la plus haute est placée, et le maximum de débugage est envoyé dans le log du serveur. Par défaut c'est 0, ce qui indique aucun débugage. Les valeurs supérieures à 4 sont pratiques; les chiffres plus élevés renvoient des sorties additionnelles.

-D datadir

Spécifie le répertoire des données dans le système de fichiers. Voir plus bas.

-F

Désactive les appels fsync pour améliorer la performance, avec le risque de corruption de données dans le cas de crash du système. Lisez la documentation avant de l'utiliser !

-h hostname

Spécifie le nom d'hôte TCP/IP ou l'adresse sur laquelle le postmaster est en attente de connexions par les applications clientes. Par défaut il est à l'écoute sur toutes les adresses configurées (incluant localhost).

-i

Permet aux clients de se connecter via des connexions TCP/IP (domaine Internet). Sans cette option, seules les connexions locales par socket de domaine Unix sont acceptées.

-k directory

Spécifie le répertoire de socket de domaine Unix sur lequel le postmaster est à l'écoute de connexions des applications clientes. Par défaut c'est normalement /tmp, mais peut être changé à la compilation.

-l

Active les connexions sécurisées par SSL. L'option -i est également nécessaire. Vous devez avoir compilé avec l'activation SSL pour utiliser cette option.

-N max-connections

Indique le nombre maximum de connexions clientes que le postmaster acceptera. Par defaut, cette valeur est de 32, mais peut être aussi haute que votre système le permet. (Notez que -B est nécessaire et doit être au moins deux fois -N. Voir le Guide de l'administrateur pour les détails sur les ressources système nécessaires pour les connexions clientes importantes.

-o extra-options

Les options dans le style ligne de commande spécifiées dans extra-options sont passées à tous les processus serveur démarrés par le postmaster. Voir postgres(1) pour les possibilités. Si la chaîne d'option sontient des espaces, la chaîne entière doit être entre parenthèses.

-p port

Spécifie le port TCP/IP ou l'extension de socket de domaine Unix sur lequel le postmaster est en attente de connexions des applications clientes. Par défaut la valeur de la variable d'environnement PGPORT, ou si PGPORT n'est pas placée, sera celle établie pendant la compilation (normalement 5432). Si vous spécifiez un port autre que le port par défaut, toutes les applications clientes devront spécifier le même port en utilisant soit les options en ligne de commande soit PGPORT.

-S

Spécifie que le processus postmaster démarrera en mode silencieux. Ainsi, il se dissocie du terminal de contrôle utilisateur, démarre son propre groupe de processus, et redirige les sorties et erreurs standard vers /dev/null.

L'utilisation de ce commutateur décharge toutes les sorties de log, ce qui n'est probablement pas ce que vous voulez, car il devient difficile d'expertiser les problèmes. Voir plus bas pour un meilleur moyen de démarrer le postmaster en arrière-plan.

--name=value

Place un paramètre de lancement; forme abrégée de -c.

Deux options additionnelles en ligne de commande sont disponibles pour débuguer les problèmes causés par un serveur qui meurt de façon anormale. Ces options contrôlent le comportement du postmaster dans cette situation, et ne sont pas prévues pour être utilisées dans les opérations ordinaires.

La stratégie ordinaire pour cette situation est de notifier à tous les autres serveurs qu'ils doivent se terminer et réinitialiser la mémoire partagée et les sémaphores. Car un serveur errant pourrait corrompre certains états partagés avant de se terminer.

Les options de ces cas spéciaux sont :

-n

le postmaster ne réinitialise pas les structures de données partagées. Un programmeur peut alors utiliser un débugueur pour examiner l'état de la mémoire partagée et des sémaphores.

-s

le postmaster arrête tous les autres processus en arrière-plan en envoyant le signal SIGSTOP, mais ils ne se terminent pas. Ce qui permet aux programmeurs de récupérer les core dumps de tous les processus à la main.

Sorties

semget: No space left on device

Si vous voyez ce message, vous lancerez la commande ipcclean. Après ça, essayez de démarrer le postmaster de nouveau. Si ça ne fonctionne pas, vous devrez probablement configurer votre noyau pour la mémoire partagée et les sémaphores comme décrit dans les notes d'installation. Si vous lancez plusieurs instances du postmaster sur un hôte unique, ou si vous avez un noyau avec une mémoire partagée et/ou des limites de sémaphores particulièrement petites, vous aurez à reconfigurer votre noyau pour accroître les paramètres de mémoire partagée et de sémaphores.

Tip

Vous pourrez ajourner la reconfiguration de votre noyau en abaissant -B pour réduire la consommation de mémoire partagée de PostgreSQL, et/ou en abaissant -N pour réduire la consommation de sémaphore.

StreamServerPort: cannot bind to port

Si vous voyez ce message vous devrez être certain qu'il n'y a pas d'autre processus postmaster qui tourne sur le même numéro de port. Le moyen le plus facile de le déterminer est d'utiliser la commande :

$ ps ax | grep postmaster
ou
$ ps -e | grep postmaster
selon votre système.

Si vous êtes sûr qu'aucun autre processus postmaster tourne et que vous obtenez toujours cette erreur, essayez de spécifier un port différent par l'option -p Vous pouvez aussi obtenir cette erreur si vous arrêtez le postmaster et le redémarrez aussitôt en utilisant le même port; dans ce cas, vous devez simplement attendre quelques secondes jusqu'à ce que le système d'exploitation ferme le port avant d'essayez à nouveau. Enfin, vous pouvez obtenir cette erreur si vous spécifiez un numéro de port que votre système considère comme réservé. Par exemple, plusieurs versions d'Unix considèrent les numéros de ports inférieurs à 1024 comme de confiance et permet seulement au super-utilisateur Unix d'y accéder.

Notes

Si possible, ne pas utiliser SIGKILL pour tuer le postmaster. Ce qui empêchera le postmaster de libérer les ressources système (ex., mémoire partagée et sémaphores) avant de se terminer.

Pour terminer un postmaster normalement, les signaux SIGTERM, SIGINT, ou SIGQUIT peuvent être utilisés. Le premier attendra que tous les clients se terminent avant de quitter, le second forcera la déconnexion de tous les clients, et le troisième quittera immédiatement sans faire d'arrêt propre, ce qui provoquera une récupération lors du redémarrage.

L'utilitaire pg_ctl(1) peut être utilisé pour démarrer et arrêter le postmaster proprement et confortablement.

Les options -- ne fonctionnent pas sur FreeBSD ou OpenBSD. Utilisez -c à la place. C'est un bug des systèmes d'exploitation; une prochaine version de PostgreSQL règlera sans ce problème.

Utilisation

Pour démarrer le postmaster en arrière-plan en utilisant les valeurs par défaut, tapez :

$ nohup postmaster >logfile 2>&1 </dev/null &

Pour démarrer le postmaster avec un port spécifique :

$ postmaster -p 1234
Cette commande lance le postmaster qui communiquera sur le port 1234. Pour se connecter à ce postmaster en utilisant psql, vous devrez le lancer comme :
$ psql -p 1234
ou placer la variable d'environnement PGPORT:
$ export PGPORT=1234
$ psql

Les paramètres de lancement peuvent être indiqués dans un des ces styles :

$ postmaster -c sort_mem=1234
$ postmaster --sort-mem=1234
La forme sort_mem peut exister dans in postgresql.conf. Notez que les souligné dans les noms de paramètres peuvent être écrits soit comme souligné soit comme tiret dans la ligne de commande.

Tip

Excepté pour les expérimentations à court-terme, il est probablement mieux d'éditer les options dans postgresql.conf que d'utiliser la ligne de commande pour placer un paramètre.