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(1). D'autres dispositions de fichiers possibles sont discutés dans Section 19.2, « Emplacement des fichiers ». 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.
postgres accepte les arguments suivants en ligne de commande. Pour une discussion détaillée des options, consultez Chapitre 19, 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.
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.
Configure un parammètre d'exécution nommé. Les paramètres de configuration supportés par PostgreSQL™ sont décrits dans Chapitre 19, 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.
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(1) pour récupérer des valeurs de configuration. Les applications utilisateurs devraient plutôt utiliser la commande SHOW(7) ou la vue pg_settings.
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.
Indique le répertoire des fichier(s) de configuration. Voir Section 19.2, « Emplacement des fichiers » pour les détails.
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.
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 !
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.
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.
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.
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, « Connexions tcp/ip sécurisées avec ssl ».
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.
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.
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.
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.
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, « Mémoire ».
Affiche la version de postgres, puis quitte.
Configure un paramètre à l'exécution ; c'est une version courte de -c.
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.
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.
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.
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.
Autorise la modification de la structure des tables système. C'est utilisé par initdb.
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.
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.
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.
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.
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).
Sélectionne le mode mono-utilisateur. Cette option doit être la première sur la ligne de commande.
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.
Affiche toutes les commandes sur la sortie standard avant de les exécuter.
Utilise un point-virgule suivi par deux retours à la ligne, plutôt qu'une seule comme marqueur de fin de commande.
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.
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.
Emplacement du répertoire des données par défaut
Valeur par défaut du paramètre en exécution datestyle. (Cette variable d'environnement est obsolète.)
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, « 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 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(1) 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.26.2, « Fonctions d'envoi de signal du serveur » 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.