postmaster

Nom

postmaster — Lance le serveur multi-utilisateurs Postgres.
postmaster [ -B nBuffers ] [ -D DataDir ] [ -i ]
postmaster [ -B nBuffers ] [ -D DataDir ] [ -N nBackends ] [ -S ]
   [ -d [ DebugLevel ] [ -i ] [ -o BackendOptions ] [ -p port ]
postmaster [ -n | -s ] ...
  

Entrées

postmaster accepte les arguments en ligne de commande suivants :

-B nBuffers

Nombre de tampons de mémoire partagée que le postmaster alloue et gère pour les processus serveurs qu'il démarre. La valeur par défaut est de 64 tampons, où chaque tampon est de 8 kilo octet (ou quelconque BLCKSZ si placé dans config.h).

-D DataDir

Spécifie le répertoire racine de larborescence des répertoires de la base. Si -D n'est pas indiqué, le nom de répertoire par défaut est la valeur de la variable d'environnement PGDATA. Si PGDATA n'est pas placé, le répertoire utilisé sera $POSTGRESHOME/data. Si la variable d'environnement n'est pas placée et les options de la ligne de commande ne sont pas spécifiées, le répertoire par défaut sera celui utilisé lors de la compilation.

-N nBackends

Nombre maximum de processus serveurs que le Postmaster peut lancer. Dans la configuration par défaut cette valeur est de 32, et placée aussi haut que 1024 si votre système supporte autant de processus. Ces deux valeurs, par défaut et limite supérieure, peuvent être modifiées lors de la compilation de Postgres (voir src/include/config.h).

-S

Spécifie que le processus postmaster démarrera en mode silencieux. Il se dissociera du tty (controlling) de l'utilisateur et demarrera son propre processus. Ceci ne sera pas utilisé en combinaison avec les options de débugage car certains messages envoyés vers la sortie standard et standard error sont discarded.

-d [ DebugLevel ]

L'argument optionnel DebugLevel détermine le niveau de débugage que les serveurs produiront. Si DebugLevel est unique, le postmaster tracera toutes les connections du traffic, et rien d'autre. Pour les niveaux deux et supérieur, le débugage est activé dans le processus serveur et le postmaster fournit d'avantage d'information, incluant l'environnement du serveur et le processus traffic. Notez que si aucun fichier dans lequel les serveurs peuvent envoyer leurs rapports de débugage n'est spécifié, c'est le tty de contrôle de leur parent postmaster qui sera utilisé.

-i

Active TCP/IP ou Internet domain socket communication. Sans cette option, seule local Unix domain socket communication est possible.

-o BackendOptions

Les options postgres spécifiées dans BackendOptions sont passées à tous les processus serveurs démarrés par le postmaster. Si l'option chaîne contient des espaces, la chaîne entière devra être entre guillemets.

-p port

Specifies the TCP/IP port or local Unix domain socket file extension sur lequel le postmaster est en attente de connections depuis les applications clientes.. La valeur par défaut est celle de la variable d'environnement PGPORT ou si PGPORT n'est pas placé, la valeur par défaut est celle utilisée lors de la compilation, (normalement 5432). Si vous spécifiez un port autre que celui par défaut toutes les applications clientes (y compris psql) doivent spécifier le même port en utilisant ou les options en ligne de commande ou PGPORT.

Peu d'options en ligne de commande sont disponibles pour le débugage lorsque le serveur meurt anormalement. Ces options contrôlent le comportement du postmaster dans cette situation, et ces options ne doivent pas être utilisées pour les opérations ordinaires.

La stratégie habituelle dans cette situation est de notifier à tous les autres serveurs qu'ils doivent s'arrêter et réinitialiser la mémoire partagée et les sémaphores. Ceci parce qu'un serveur errant peut avoir corrompu certains state partagés avant terminating.

Les options pour ces cas spéciaux sont :

-n

le postmaster ne réinitialisera pas les structures de données partagées. Un programmeur système peut alors utiliser le programme shmemdoc pour examiner l'état de la mémoire partagée et des sémaphores.

-s

le postmaster stoppera tous les autres processus serveurs en envoyant le signal SIGSTOP, mais ne cause pas l'arrêt. Ceci permet aux programmeurs système de récuperer les fichiers core à la main depuis les serveurs.

Sorties

semget: No space left on device

Si vous voyez ce mesage, vous devrez lancer la commande ipcclean. Après ça, essayez de démarrer le postmaster de nouveau. S'il ne fonctionne toujours pas, vous aurez sans doute besoin de reconfigurer votre noyau pour la mémoire partagée et les sémaphores comme décrit dans les notes d'installation. Si vous lancez de multiples instances de postmaster sur un hôte unique, ou avez un noyau avec une mémoire partagée particulièrement petite et/ou des semaphore limités, vous aurez à reconfigurer votre noyau pour augmenter la mémoire partagée et les paramètres des sémaphores.

Tuyau

Vous pourrez éviter de reconfigurer votre noyau en diminuant -B pour réduire la consommation de mémoire partégée par Postgres ou en réduisant -N pour réduire la consommation des sémaphores de Postgres.

StreamServerPort: cannot bind to port

Si vous voyez ce message soyez certain qu'il n'y a pas d'autre processus postmaster qui tourne déja. Le moyen le plus facile de le savoir est d'utiliser la commande
% ps -ax | grep postmaster
	
sur les systèmes basés sur BSD, ou
% ps -e | grep postmast
	
pour System V-like ou les systèmes conformes POSIX comme HP-UX.

Si vous êtes sûr qu'aucun autre processus postmaster tourne, et que vous obtenez encore cette erreur, essayez un autre port en utilisant l'option -p Vous pouvez aussi obtenir cette erreur si vous arrêtez le postmaster et le redémarrer immédiatement avec 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"essayer de nouveau. Enfin, vous pouvez obtenir cette erreur si vous spécifiez un numéro de port que votre système d'exploitation considère comme réservé. Par exemple, diverses versions d'Unix considèrent que les numéros de port inférieurs à 1024 sont réservés et permettent seulement à l'administrateur Unix (root) d'y accéder.

IpcMemoryAttach: shmat() failed: Permission denied

Une explication probable est qu'un autre utilisateur essaie de démarrer un processus postmaster sur le même port qui a acquit les ressources partagées et alors died. Depuis que les clés de mémoire partagée de Postgres sont basées sur le numéro de port assigné au postmaster, des conflits sont possibles si il y a plus d'une installation sur un même hôte. S'il n'y a pas d'autre processus postmaster qui tourne lancez ipccleanet essayez de nouveau. Si d'autres postmaster images tournent, vous devez trouver les propriétaires de ces processus pour coordonner l'affectation des numéros de port et/ou supprimer les segments de mémoire partagée inutilisés.

Description

Le postmaster gère la communication entre les processus clients et serveurs, de même que l'allocation du tampon de requête partagé et les sémaphores SysV (sur les machines sans instruction test-and-set). Le postmaster n'interagit pas lui-même avec l'utilisateur et doit être démarré comme processus d'arrière plan.

Un seul postmaster peut être lancé à la fois dans une installation Postgres. Ici, une installation signifie un seul répertoire et un seul numéro de port pour le postmaster. Vous pouvez lancer plus d'un postmaster sur une machine seulement si chacun a un répertoire et un numéro de port séparé.

Notes

Si possible ne pas utiliser SIGKILL quand vous tuez le postmaster. SIGHUP, SIGINT, ou SIGTERM (le signal par défaut de kill(1))" seront utilisés à la place. Utilisons
% kill -KILL
   
ou sa forme alternative
% kill -9
   
ceci préviendra le postmaster de libérer les ressources système (e.x.,la mémoire partagée et les sémaphores) avant de s'arrêter. Ce qui vous évitera d'avoir des problèmes avec la mémoire partagée.

Useful utilities for dealing with shared memory problems include ipcs(1), ipcrm(1), et ipcclean(1).

Utilisation

Pour démarrer le postmaster en utilisant les valeurs par défaut, tapez :
% nohup postmaster >logfile 2>&1 &
   
Cette commande démarrera le postmaster sur le port par défaut (5432). C'est le moyen le plus simple et le plus courant de lancer le postmaster.

Pour démarrer le postmaster avec un port spécifique et un nom exécutable
% nohup postmaster -p 1234 &
   
Cette commande lancera le postmaster sur le port 1234. Afin de vous connecter à ce postmaster utilisez psql, que vous lancerez comme suit :
% psql -p 1234
   
ou placez la variable d'environnement PGPORT:
% setenv PGPORT 1234
% psql
   
.