postgres — Serveur de bases de données PostgreSQL
postgres
[option
...]
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. D'autres dispositions de fichiers
possibles sont discutés dans Section 19.2.
Un répertoire de données est créé avec initdb.
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.
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.
postgres
accepte les arguments suivants en ligne de
commande. Pour une discussion détaillée des options, consultez Chapitre 19. 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
.
-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. Indiquer cette option est équivalent à configurer le paramètre shared_buffers.
-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 19. La plupart des autres options en ligne
de commande sont en fait des formes courtes d'une affectation de
paramètres. -c
peut apparaître plusieurs fois pour
configurer différents paramètres.
-C nom
Affiche la valeur d'un paramètre d'exécution nommé, ouis quitte.
(Voir l'option -c
ci-dessus pour les détails.) Cela
peut être utilisé sur un serveur en cours d'exécution, et renvoie les
valeurs du postgresql.conf
, modifiées par tout
paramètre fourni lors de cet appel. Cela ne reflète pas les paramètres
fournis lors de la création de l'instance.
Cette option a pour but de permettre aux autres programmes d'interagir
avec un outil comme pg_ctl pour récupérer des
valeurs de configuration. Les applications utilisateurs devraient plutôt
utiliser la commande SHOW ou la vue
pg_settings
.
-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 fichier(s) de configuration. Voir Section 19.2 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 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. Ce paramètre peut aussi contenir une liste
de répertoires séparés par des virgules. Une valeur vide précise
que le serveur ne doit pas écouter à des sockets de domaine Unix,
auquel cas seul les sockets TCP/IP pourront être utilisés pour se
connecter. La valeur par défaut est habituellement
/tmp
, mais cela peut être changé au moment de
la compilation. Spécifier cette option est équivalent à configurer
le paramètre unix_socket_directories.
-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 18.9.
-N max-connections
Initialise le nombre maximum de connexions clientes que le serveur acceptera. La valeur par défaut de ce paramètre est choisi automatiquement par initdb. Indiquer cette option est équivalent à configurer 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
.
Les espaces dans extra-
options
sont considérés comme séparant les arguments,
sauf s'ils sont échappés avec un antislash
(\
) ; écrire \\
pour
représenter un antislash litéal. Plusieurs arguments peuvent aussi être
spécifiés avec plusieurs utilisations de -o
.
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 19.4.1.
-V
--version
Affiche la version de postgres, puis quitte.
--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.
-?
--help
Affiche l'aide des arguments en ligne de commande sur postgres, puis quitte.
Les options décrites ici sont 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 | o | b | t | n | m | h }
Interdit l'utilisation de parcours et de méthode de jointure
particulières. s
et i
désactivent respectivement les parcours séquentiels et d'index,
o
, b
et t
désactivent respectivement les parcours d'index seul, les parcours
d'index bitmap et les parcours de TID alors que n
,
m
et h
désactivent respectivement
les jointures de boucles imbriquées, jointures de fusion et de hachage.
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.
Les options suivantes s'appliquent uniquement en mode mono-utilisateur (voir Mode simple utilisateur ci-dessous).
--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. Il doit être le dernier argument. Si elle est omise, le nom de l'utilisateur est utilisé par défaut.
-E
Affiche toutes les commandes sur la sortie standard avant de les exécuter.
-j
Utilise un point-virgule suivi par deux retours à la ligne, plutôt qu'une seule comme marqueur de fin de commande.
-r
fichier
Envoie toute la sortie des traces du serveur dans fichier
. Cette option est seulement
honorée quand elle est fournie en tant qu'option de ligne de
commande.
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
Numéro de port par défaut (à configurer de préférence dans le fichier de configuration)
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 18.4. 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 ls commandes
$
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.
L'outil pg_ctl est utilisable pour lancer et
arrêter le serveur postgres
de façon sûre et confortable.
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.
Pour annuler une requête en cours d'exécution, envoyez le signal
SIGINT
au processus exécutant cette commande. Pour
tuer un processus serveur de façon propre, envoyez le signal
SIGTERM
à ce processus. Voir aussi
pg_cancel_backend
et pg_terminate_backend
dans Section 9.27.2 pour leur équivalents appelables
avec une requête SQL.
Le serveur postgres
utilise aussi SIGQUIT
pour dire à ses processus-fils de terminer sans le nettoyage habituel.
Ce signal ne doit pas être envoyé 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.
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é.
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 saisie ; 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. L'antislash et le retour à la ligne qui suit sont supprimés de la saisie en entrée. Notez que ceci survient même à l'intérieur d'un chaîne litérale ou d'un commentaire.
Si vous utilisez l'option en ligne de commande -j
, un seul
retour à la ligne ne suffira pas à terminer la saisie. Dans
ce cas, il faut utiliser la séquence point-virgule - retour à la ligne -
retour à la ligne. Autrement dit, saisir un point-virgule suivi d'une ligne
entièrement vide. La séquence antislash - retour à la ligne n'est pas traitée
spécialement dans ce mode. Encore une fois, il n'y a aucune intelligence sur
une séquence apparaissant à l'intérieur d'une chaîne litérale ou d'un
commentaire.
Dans les modes de saisie, si vous saisissez un point-virgule qui ne se trouve ni avant ni partie prenant d'une fin de saisie, il est considéré comme un séparateur de commande. Quand vous saisissez une fin de commande, les différentes requêtes saisies seront exécutées dans la même transaction.
Pour quitter la session, saisissez EOF (habituellement, Control+D). Si vous avez saisi du texte depuis la fin de la commande précédente, alors EOF sera pris comme une fin de commande et un autre EOF sera nécessaire 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). De plus, le mode mono-utilisateur ne lance pas de processus en tâche de fond, comme par exemple les checkpoints automatiques ou la réplication.
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, e.g. 1234 :
$
postgres -p 1234
Pour se connecter à ce serveur avec psql, indiquez le numéro de port avec l'option -p :
$
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.