postgres
postgres — Serveur de bases de données PostgreSQL™
Description
postgres
est le
serveur de bases de données PostgreSQL™. Pour qu'une application
cliente puisse accéder à une base de données, elle se connecte
(soit via le réseau soit localement) à un processus
postgres
en cours d'exécution.
L'instance
postgres
démarre ensuite un processus serveur séparé pour gérer la
connexion.
Une instance
postgres
gère toujours les données d'un seul cluster. Un cluster est un
ensemble de bases de données stocké à un même emplacement dans le
système de fichiers (le « répertoire des
données »). Plus d'un processus
postgres
peut être en cours
d'exécution sur un système à un moment donné, s'ils utilisent des
répertoires différents et des ports de communication différents
(voir ci-dessous). Quand
postgres
se lance, il a besoin de
connaître l'emplacement du répertoire des données. Cet emplacement
doit être indiquée par l'option -D ou par
la variable d'environnement PGDATA ; il n'y
a pas de valeur par défaut. Typiquement, -D
ou PGDATA pointe directement vers le
répertoire des données créé par
initdb(1). D'autres dispositions de fichiers
possibles sont discutés dans Section 17.2,
« Emplacement des fichiers ». Un répertoire de
données est créé avec
initdb(1). Un répertoire de données est créé
avec
initdb(1).
Par défaut,
postgres
s'exécute en avant-plan et affiche ses messages dans le flux
standard des erreurs. En pratique,
postgres
devrait être exécuté en
tant que processus en arrière-plan, par exemple au lancement.
La commande
postgres
peut aussi être appelé en mode mono-utilisateur. L'utilisation
principal de ce mode est lors du « bootstrap » utilisé par
initdb(1). Quelque fois, il est utilisé pour
du débogage et de la récupération suite à un problème (mais noter
qu'exécuter un serveur en mode mono-utilisateur n'est pas vraiment
convenable pour déboguer le serveur car aucune communication
inter-processus réaliste et aucun verrouillage n'interviennent.)
Quand il est appelé en mode interactif à partir du shell,
l'utilisateur peut saisir des requêtes et le résultat sera affiché
à l'écran mais dans une forme qui est plus utile aux développeurs
qu'aux utilisateurs. Dans le mode mono-utilisateur, la session
ouverte par l'utilisateur sera configurée avec l'utilisateur
d'identifiant 1 et les droits implicites du superutilisateur lui
sont donnés. Cet utilisateur n'a pas besoin d'exister, donc le mode
mono-utilisateur peut être utilisé pour récupérer manuellement
après certains types de dommages accidentels dans les catalogues
systèmes.
Options
postgres
accepte les
arguments suivants en ligne de commande. Pour une discussion
détaillée des options, consultez Chapitre 17,
Configuration du serveur. Vous pouvez éviter de saisir la
plupart de ces options en les initialisant dans le fichier de
configuration. Certaines options (sûres) peuvent aussi être
configurées à partir du client en cours de connexion d'une façon
dépendante de l'application, configuration qui ne sera appliquée
qu'à cette session. Par exemple si la variable d'environnement
PGOPTIONS est configurée, alors les clients
basés sur libpq passeront cette
chaîne au serveur qui les interprétera comme les options en ligne
de commande de
postgres
.
Général
-
-A 0|1
-
Active les vérifications d'assertion à l'exécution, donc
une aide au débogage pour détecter les erreurs de
programmation. Cette option est seulement disponible si les
assertions on été activées lors de la compilation de
PostgreSQL™. Dans ce
cas, la valeur par défaut est « on ».
-
-B
ntampons
-
Configure le nombre de tampons partagés utilisés par les
processus serveur. La valeur par défaut de ce paramètre est
choisi automatiquement par initdb ; référez-vous à Section 17.4.1,
« Mémoire » pour plus d'informations.
-
-c
nom
=
valeur
-
Configure un parammètre d'exécution nommé. Les paramètres
de configuration supportés par PostgreSQL™ sont décrits dans
Chapitre 17,
Configuration du serveur. La plupart des autres options
en ligne de commande sont en fait des formes courtes d'une
affectation de paramères. -c peut
apparaître plusieurs fois pour configurer différents
paramètres.
-
-d
niveau-débogage
-
Configure le niveau de débogage. Plus haute est sa valeur,
plus importante seront les traces écrites dans les
journaux. Les valeurs vont de 1 à 5. Il est aussi possible
de passer -d 0 pour une session
spécifique qui empêchera le niveau des traces serveur du
processus
postgres
parent d'être
propagé jusqu'à cette session.
-
-D
repdonnées
-
Indique le répertoire des données ou des fichier(s) de
configuration. Voir Section 17.2,
« Emplacement des fichiers » pour les
détails.
-
-e
-
Configure le style de date par défaut à « European », c'est-à-dire l'ordre
DMY pour les champs en entrée.
Ceci cause aussi l'affichage de la date avant le mois dans
certains formats de sortie de date. Voir Section 8.5, « Types
date/heure » pour plus d'informations.
-
-F
-
Désactive les appels fsync pour
améliorer les performances au risque de corrompre des
données dans l'idée d'un arrêt brutal du système. Spécifier
cette option est équivalent à désactiver le paramètre de
configuration fsync. Lisez la
documentation détaillée avant d'utiliser ceci !
-
-h
hôte
-
Indique le nom d'hôte ou l'adresse IP sur lequel
postgres
attend les connexions TCP/IP d'applications clientes. La
valeur peut aussi être une liste d'adresses séparées par
des virgules ou * pour indiquer
l'attente sur toutes les interfaces disponibles. Une valeur
vide indique qu'il n'attend sur aucune adresse IP, auquel
cas seuls les sockets de domaine Unix peuvent être utilisés
pour se connecter au serveur. Par défaut, attend les
connexions seulement sur localhost. Spécifier cette option est
équivalent à la configurer dans le paramètre listen_addresses.
-
-i
-
Autorise les clients distants à se connecter via TCP/IP
(domaine Internet). Sans cette option, seules les
connexions locales sont autorisées. Cette option est
équivalent à la configuration du paramètre listen_addresses à * dans postgresql.conf ou via -h.
Cette option est obsolète car il ne permet plus l'accès à
toutes les fonctionnalités de listen_addresses.
Il est généralement mieux de configurer directement
listen_addresses.
-
-k
directory
-
Indique le répertoire de la socket de domaine Unix sur
laquelle
postgres
est en attente
des connexions des applications clients. La valeur par
défaut est habituellement /tmp
mais cela peut se changer au moment de la construction.
-
-l
-
Active les connexions sécurisées utilisant SSL. PostgreSQL™ doit avoir été
compilé avec SSL pour
que cette option soit disponible. Pour plus d'informations
sur SSL, référez-vous à
Section 16.7,
« Connexions tcp/ip sécurisées avec ssl ».
-
-N
max-connections
-
Initialise le nombre maximum de connexions clientes que le
serveur acceptera. Par défaut, la valeur est 32 mais elle
peut vakiur autant que le système peut supporter. (Notez
que -B doit valoir au moins deux
fois -N. Voir Section 16.4,
« Gérer les ressources du noyau » pour une
discussion des besoins en ressources système pour un gros
nombre de connexions clientes. Indiquer cette option est
équivalent à la configurer abec le paramètre max_connections.
-
-o
extra-options
-
Les options en ligne de commande indiquées dans
extra-options
sont passées à
tous les processus serveur exécutés par ce processus
postgres
. Si
la chaîne d'option contient des espaces, la chaîne entière
doit être entre guillemets.
Cette option est obsolète ; toutes les options en ligne de
commande des processus serveur peuvent être spécifiées
directement sur la ligne de commande de
postgres
.
-
-p
port
-
Indique le port TCP/IP ou l'extension du fichier socket de
domaine Unix sur lequel
postgres
attend les
connexions des applications clientes. Par défaut, la valeur
de la variable d'environnement PGPORT environment ou, si cette variable n'est
pas configurer, la valeur connue à la compilation
(habituellement 5432). Si vous indiquez un port autre que
celui par défaut, alors toutes les applications clientes
doivent indiquer le même numéro de port soit dans les
options en ligne de commande soit avec PGPORT.
-
-s
-
Affiche une information de temps et d'autres statistiques à
la fin de chaque commande. Ceci est utile pour créer des
rapports de performance ou pour configurer finement le
nombre de tampons.
-
-S
work-mem
-
Indique la quantité de mémoire à utiliser par les tris
internes et par les hachages avant d'utiliser des fichiers
disque temporaires. Voir la description du paramètre
work_mem dans Section 17.4.1,
« Mémoire ».
-
--
nom
=
valeur
-
Configure un paramètre à l'exécution ; c'est une version
courte de -c.
-
--describe-config
-
Cette option affiche les variables de configuration
internes du serveur, leurs descriptions et leurs valeurs
par défaut dans un format
COPY
délimité par des
tabulations. Elle est conçue principalement pour les outils
d'administration.
Options semi-internes
Il existe plusieurs autres options, utilisées principalement dans
un but de débogage et pouvant quelque fois aider à la
récupération de bases de données très endommagées/ Il n'y a
aucune raison pour les utiliser dans la configuration d'un
système en production. Elles sont listées ici à l'intention des
développeurs PostgreSQL™.
De plus, une de ces options pourrait disparaître ou changer dans
le futur sans avertissement.
-
-f
{ s | i | m | n | h }
-
Interdit l'utilisation de parcours et de méthode de
jointure particulières. s and
i désactivent respectivement les
parcours séquentiels et d'index alors que n, m et h désactivent respectivement les jointures
de boucles imbriquées, jointures d'assemblage et hash.
Ni les parcours séquentiels ni les jointures de boucles
imbriquées ne peuvent être désactivés complètement ; les
options -fs et -fn ne font que décourager l'optimiseur
d'utiliser ce type de plans.
-
-n
-
Cette option est présente pour les problèmes de débogage du
genre mort brutal d'un processus serveur. La stratégie
habituelle dans cette situation est de notifier tous les
autres processus serveur qu'ils doivent se terminer, puis
réinitialiser la mémoire partagée et les sémaphores. Tout
ceci parce qu'un processus serveur errant peut avoir
corrompu certains états partagés avant de terminer. Cette
option spécifie seulement que
postgres
ne
réinitialisera pas les structures de données partagées. Un
développeur système avec quelques connaissances peut
utiliser un débogueur pour examiner l'état de la mémoire
partagée et des sémaphores.
-
-O
-
Autorise la modification de la structure des tables
système. C'est utilisé par
initdb
.
-
-P
-
Ignore les index système lors de la lecture des tables
système (mais les met à jour lors de la modification des
tables). Ceci est utile lors de la récupération d'index
système endommagés.
-
-t
pa[rser] | pl[anner] | e[xecutor]
-
Affiche les statistiques en temps pour chaque requête en
relation avec un des modules majeurs du système. Cette
option ne peut pas être utilisée avec l'option -s.
-
-T
-
Cette option est présente pour les problèmes de débogage du
genre mort brutal d'un processus serveur. La stratégie
habituelle dans cette situation est de notifier tous les
autres processus serveur qu'ils doivent se terminer, puis
réinitialiser la mémoire partagée et les sémaphores. Tout
ceci parce qu'un processus serveur errant peut avoir
corrompu certains états partagés avant de terminer. Cette
option spécifie seulement que
postgres
arrêtera tous
les autres processus serveur en leur envoyant le signal
SIGSTOP mais ne les arrêtera pas.
Ceci permet aux développeurs système de récupérer
manuellement des « core
dumps » de tous les processus serveur.
-
-v
protocole
-
Indique le numéro de version utilisé par le protocole
interface/moteur pour une session particulière. Cette
option est uniquement utilisée en interne.
-
-W
secondes
-
Un délai de ce nombre de secondes survient quand un nouveau
processus serveur est lancé, une fois la procédure
d'authentification terminée. Ceci a pour but de permettre
au développeur d'attacher un débogueur au processus
serveur.
-
-y
base
-
Indique qu'il est un sous-processus exécuté par un
processus
postgres
parent et
indique la base à utiliser. Cette option est uniquement à
usage interne.
Options en mode mono-utilisateur
Les options suivantes s'appliquent uniquement en mode
mono-utilisateur.
-
--single
-
Sélectionne le mode mono-utilisateur. Cette option doit
être la première sur la ligne de commande.
-
base
-
Indique le nom de la base à accèder. Si elle est omise, le
nom de l'utilisateur est utilisé par défaut.
-
-E
-
Affiche toutes les commandes.
-
-j
-
Désactive l'utilisation du retour chariot comme délimiteur
d'instruction.
-
-r
fichier
-
Envoie toute la sortie des traces du serveur dans
fichier
. Dans le mode
normal, cette option est ignorée et stderr est utilisé par tous les
processus.
Environnement
-
PGCLIENTENCODING
-
Jeu de caractères utilisé par défaut par tous les clients.
(Les clients peuvent surcharger ce paramètre
individuellement.) Cette valeur est aussi configurable dans
le fichier de configuration.
-
PGDATA
-
Emplacement du répertoire des données par défaut
-
PGDATESTYLE
-
Valeur par défaut du paramètre en exécution datestyle.
(Cette variable d'environnement est obsolète.)
-
PGPORT
-
Port par défaut (à configurer de préférence dans le fichier
de configuration)
-
TZ
-
Fuseau horaire du serveur
Diagnostiques
Un message d'erreur mentionnant semget ou
shmget indique probablement que vous devez
configurer votre noyau pour fournir la mémoire partagée et les
sémaphores adéquates. Pour plus de discussion, voir Section 16.4,
« Gérer les ressources du noyau ». Vous pouvez aussi
repousser la configuration du noyau en diminuant shared_buffers
pour réduire la consommation de la mémoire partagée utilisée par
PostgreSQL™, et/ou en
diminuant max_connections
pour réduire la consommation de sémaphores.
Un message d'erreur suggérant qu'un autre serveur est déjà en cours
d'exécution devra vous demander une vérification attentive, par
exemple en utilisant la commande ps should be checked carefully,
for example by using the command
$ ps ax | grep postgres
ou
$ ps -ef | grep postgres
suivant votre système. Si vous êtes certain qu'il n'y a aucun
serveur en conflit, vous pouvez supprimer le fichier verrou
mentionné dans le message et tenter de nouveau.
Un message d'erreur indiquant une incapacité à se lier à un port
indique que ce port est déjà utilisé par des processus autres que
PostgreSQL™. Vous pouvez
aussi obtenir cette erreur si vous quittez
postgres
et le relancez
immédiatement en utilisant le même port ; dans ce cas, vous devez
tout simplement attendre quelques secondes pour que le système
d'exploitation ferme bien le port avant de tenter de nouveau.
Enfin, vous pouvez obtenir cette erreur si vous indiquez un numéro
de port que le système considère comme réservé. Par exemple,
beaucoup de versions d'Unix considèrent les numéros de port sous
1024 comme de « confiance » et
permettent seulement leur accès par le superutilisateur Unix.
Notes
Si possible,
ne pas
utiliser
SIGKILL pour tuer le serveur
postgres
principal. Le fait
empêchera
postgres
de
libérer les ressources système (c'est-à-dire mémoire partagée et
sémaphores) qu'il détient avant de s'arrêter. Ceci peut poser
problèmes lors du lancement d'un
postgres
frais.
Pour terminer le serveur
postgres
normalement, les signaux
SIGTERM, SIGINT
ou SIGQUIT peuvent être utilisés. Le
premier attendra que tous les clients terminent avant de quitter,
le second forcera la déconnexion de tous les clients et le
troisième quittera immédiatement sans arrêt propre. Ce dernier
amènera une récupération lors du redémarrage. Le signal SIGHUP rechargera les fichiers de configuration du
serveur. Il est aussi possible d'envoyer SIGHUP à un processus serveur individuel mais ce
n'est pas perceptible.
L'outil
pg_ctl(1)
peut être utilisé pour lancer et arrêter le serveur
postgres
d'une façon simple et
sûre.
Pour annuler une requête en cours d'exécution, envoyez le signal
SIGINT au processus exécutant cette
commande.
Le serveur
postgres
utilise SIGTERM pour indiquer aux
processus serveur de quitter normalement et SIGQUIT pour terminer sans le nettoyage habituel.
Ces signaux
ne devraient pas
être utilisés par les utilisateurs. Il est aussi déconseillé
d'envoyer SIGKILL à un processus serveur
-- le serveur
postgres
principal interprétera
ceci comme un arrêt brutal et forcera tous les autres processus
serveur à quitter dans le cas d'une procédure standard de
récupération après arrêt brutal.
Bogues
Les options -- ne fonctionneront pas sous
FreeBSD et OpenBSD. Utilisez -c à la
place. C'est un bogue dans les systèmes d'exploitation affectés ;
une prochaine version de PostgreSQL™ fournira un contournement si
ce n'est pas corrigé.
Utilisation
Pour démarrer un serveur en mode mono-utilisateur, utilisez une
commande comme
postgres --single -D /usr/local/pgsql/data autres-options ma_base
Fournissez le bon chemin vers le répertoire des bases avec l'option
-D ou assurez-vous que la variable
d'environnement PGDATA est configurée. De
plus, spécifiez le nom de la base particulière avec laquelle vous
souhaitez travailler.
Habituellement, le serveur en mode mono-utilisateur traite le
retour chariot comme le terminateur d'une commande ; il n'y a pas
le concept du point-virgule contraitement à psql. Pour saisir une commande sur plusieurs
lignes, vous devez saisir un antislash juste avant un retour
chariot, sauf pour le dernier.
Mais si vous utilisez l'option -j, alors le
retour chariot ne termine pas une commande. Dans ce cas, le serveur
lira l'entrée standard jusqu'à une marque de fin de fichier
(EOF), puis il traitera la
saisie comme une seule chaîne de commande. Les retours chariot avec
antislash ne sont pas traités spécialement dans ce cas.
Pour quitter la session, saisissez EOF (habituellement,
Control
+
D
). Si vous avez utilisé l'option
-j, deux EOF consécutifs sont nécessaires pour quitter.
Notez que le serveur en mode mono-utilisateur ne fournit pas de
fonctionnalités avancées sur l'édition de lignes (par exemple, pas
d'historique des commandes).
Exemples
Pour lancer
postgres
en tâche de fond avec les valeurs par défaut, saisissez :
$ nohup postgres >logfile 2>&1 </dev/null &
Pour lancer
postgres
avec un port spécifique :
$ postgres -p 1234
Cette commande exécutera un
postgres
qui communiquera sur le
port 1234. Pour se connecter à ce serveur en utilisant psql, vous aurez besoin de saisir :
$ psql -p 1234
ou de configurer la variable d'environnement PGPORT :
$ export PGPORT=1234
$ psql
Les paramètres nommés peuvent être configurés suivant deux façons :
$ postgres -c work_mem=1234
$ postgres --work-mem=1234
Ces deux formes surchargent le paramétrage qui pourrait exister
pour work_mem dans postgresql.conf. Notez que les tirets bas dans les
noms de paramètres sont écrits avec soir des tirets bas soit des
tirets sur la ligne de commande. Sauf pour les expériences à court
terme, il est probablement mieux de modifier le paramétrage dans
postgresql.conf que de se baser sur une
option en ligne de commande.
Voir aussi
initdb(1),
pg_ctl(1)