16.3. Lancer le serveur de bases de donn�es

Avant qu'une personne ait acc�s � la base de donn�es, vous devez d�marrer le serveur de bases de donn�es. Le programme serveur est appel� postmaster.. Le postmaster doit savoir o� trouver les donn�es qu'il est suppos� utiliser. Ceci se fait avec l'option -D. Du coup, la fa�on la plus simple de lancer le serveur est :

$ postmaster -D /usr/local/pgsql/data

qui laissera le serveur s'ex�cuter en avant plan. Pour cela, vous devez �tre connect� en utilisant le compte de l'utilisateur PostgreSQL. Sans -D, le serveur essaiera d'utiliser le r�pertoire de donn�es nomm� par la variable d'environnement PGDATA. Si cette variable ne le fournit pas non plus, le lancement �chouera.

Habituellement, il est pr�f�rable de lancer postmaster en t�che de fond. Pour cela, utilisez la syntaxe shell habituelle :

$ postmaster -D /usr/local/pgsql/data >journaux_trace 2>&1 &

Il est important de sauvegarder les sorties stdout et stderr du serveur quelque part, comme montr� ci-dessus. Cela vous aidera dans des buts d'audits ou pour diagnostiquer des probl�mes (voir la Section 21.3 pour une discussion plus d�taill�e de la gestion de journaux de trace).

Le postmaster prend aussi un certain nombre d'autres options en ligne de commande. Pour plus d'informations, voir la page de r�f�rence postmaster ainsi que le Section 16.4 ci-dessous.

Cette syntaxe shell peut rapidement devenir ennuyante. Donc, le programme d'emballage pg_ctl est fourni pour simplifier certaines t�ches. Par exemple :

pg_ctl start -l journaux_trace

lancera le serveur en t�che de fond et placera les sorties dans le journal de trace indiqu�. L'option -D a la m�me signification ici qu'avec postmaster. pg_ctl est aussi capable d'arr�ter le serveur.

Normalement, vous lancerez le serveur de bases de donn�es lors du d�marrage de l'ordinateur. Les scripts de lancement automatique sont sp�cifiques au syst�me d'exploitation. Certains sont distribu�s avec PostgreSQL dans le r�pertoire contrib/start-scripts. En installer un demandera les droits de root.

Diff�rents syst�mes ont diff�rentes conventions pour lancer les d�mons au d�marrage. La plupart des syst�mes ont un fichier /etc/rc.local ou /etc/rc.d/rc.local. D'autres utilisent les r�pertoires rc.d. Quoi que vous fassiez, le serveur doit �tre ex�cut� par le compte utilisateur PostgreSQL et non pas par root ou tout autre utilisateur. Donc, vous devriez probablement former vos commandes en utilisant su -c '...' postgres. Par exemple :

su -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog' postgres

Voici quelques suggestions suppl�mentaires par syst�me d'exploitation (dans chaque cas, assurez-vous d'utiliser le bon r�pertoire d'installation et le bon nom de l'utilisateur o� nous montrons des valeurs g�n�riques).

Tant que postmaster est lanc�, son PID est stock� dans le fichier postmaster.pid du r�pertoire de donn�es. C'est utilis� pour emp�cher les nombreux processus postmaster d'�tre ex�cut� dans le m�me r�pertoire de donn�es et peut aussi �tre utilis� pour arr�ter le processus postmaster.

16.3.1. �checs de lancement

Il existe de nombreuses raisons habituelles pour lesquelles le serveur �chouerait au lancement. V�rifiez le journal des traces du serveur ou lancez-le manuellement (sans redirection des sorties standard et d'erreur) et regardez les messages d'erreurs qui apparaissent. Nous en expliquons certains ci-dessous parmi les messages d'erreurs les plus communs.

LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
FATAL:  could not create TCP/IP listen socket

Ceci signifie seulement ce que cela sugg�re : vous avez essay� de lancer un autre postmaster sur le m�me port o� un autre est en cours d'ex�cution. N�anmoins, si le message d'erreur du noyau n'est pas Address already in use ou une quelconque variante, il pourrait y avoir un autre probl�me. Par exemple, essayer de lancer un postmaster sur un num�ro de port r�serv� pourrait avoir ce r�sultat :

$ postmaster -p 666
LOG:  could not bind IPv4 socket: Permission denied
HINT:  Is another postmaster already running on port 666? If not, wait a few seconds and retry.
FATAL:  could not create TCP/IP listen socket

Un message du type

FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=5440001, size=4011376640, 03600).

signifie probablement que les limites de votre noyau sur la taille de la m�moire partag�e est plus petite que l'aire de fonctionnement que PostgreSQL essaie de cr�er (4011376640 octets dans cet exemple). Ou il pourrait signifier que vous n'avez pas du tout configur� le support de la m�moire partag�e de type System-V dans votre noyau. Comme contournement temporaire, vous pouvez essayer de lancer le serveur avec un nombre de tampons plus petit que la normale (option -B). Vous voudrez �ventuellement reconfigurer votre noyau pour accro�tre la taille de m�moire partag�e autoris�e. Vous pourriez voir aussi ce message en essayant de lancer plusieurs serveurs sur la m�me machine si le total de l'espace qu'ils requi�rent d�passe la limite du noyau.

Une erreur du type

FATAL:  could not create semaphores: No space left on device
DETAIL:  Failed system call was semget(5440126, 17, 03600).

ne signifie pas qu'il vous manque de l'espace disque. Elle signifie que la limite de votre noyau sur le nombre de s�maphores System V est inf�rieur au nombre que PostgreSQL veut cr�er. Comme ci-dessus, vous pourriez contourner le probl�me en lan�ant le serveur avec un nombre r�duit de connexions autoris�es (option -N) mais vous voudrez �ventuellement augmenter la limite du noyau.

Si vous obtenez une erreur <<�illegal system call�>>, il est probable que la m�moire partag�e ou les s�maphores ne sont pas du tout support�s par votre noyau. Dans ce cas, votre seule option est de reconfigurer le noyau pour activer ces fonctionnalit�s.

Des d�tails sur la configuration des capacit�s IPC System V sont donn�s dans la Section 16.5.1.

16.3.2. Probl�mes de connexion du client

Bien que les conditions d'erreurs possibles du c�t� client sont assez vari�es et d�pendantes de l'application, certaines pourraient �tre en relation direct avec la fa�on dont le serveur a �t� lanc�. Les conditions autres que celles montr�es ici devraient �tre document�es avec l'application client respective.

psql: could not connect to server: Connection refused
        Is the server running on host "server.joe.com" and accepting
        TCP/IP connections on port 5432?

Ceci est l'�chec g�n�rique <<�Je n'ai pas trouv� de serveur � qui parler�>>. Cela ressemble au message ci-dessus lorsqu'une connexion TCP/IP est tent�e. Une erreur commune est d'oublier de configurer le serveur pour qu'il autorise les connexions TCP/IP.

Autrement, vous obtiendrez ceci en essayant une communication de type socket de domaine Unix vers un serveur local :

psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

La derni�re ligne est utile pour v�rifier si le client essaie de se connecter au bon endroit. Si aucun serveur n'est ex�cut� ici, le message d'erreur du noyau sera typiquement soit Connection refused soit No such file or directory, comme ce qui est illustr� (il est important de r�aliser que Connection refused, dans ce contexte, ne signifie pas que le serveur a obtenu une demande de connexion et l'a refus�. Ce cas produira un message diff�rent comme indiqu� dans la Section 19.3). D'autres messages d'erreurs tel que Connection timed out pourraient indiquer des probl�mes plus fondamentaux comme un manque de connexion r�seau.