0% ont trouvé ce document utile (0 vote)
5 vues1 page

Postgres SQL (PSQL)

psql est une interface en mode texte pour interagir avec PostgreSQL, permettant d'exécuter des requêtes et d'automatiser des tâches. Il offre diverses options en ligne de commande pour personnaliser le comportement, comme l'exécution de commandes à partir de fichiers ou l'affichage des résultats dans différents formats. Les utilisateurs peuvent se connecter à une base de données en spécifiant des paramètres tels que le nom de la base, l'hôte, le port et l'utilisateur.

Transféré par

patricienniriko
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues1 page

Postgres SQL (PSQL)

psql est une interface en mode texte pour interagir avec PostgreSQL, permettant d'exécuter des requêtes et d'automatiser des tâches. Il offre diverses options en ligne de commande pour personnaliser le comportement, comme l'exécution de commandes à partir de fichiers ou l'affichage des résultats dans différents formats. Les utilisateurs peuvent se connecter à une base de données en spécifiant des paramètres tels que le nom de la base, l'hôte, le port et l'utilisateur.

Transféré par

patricienniriko
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Accueil Actualités Documentation Forums Association Développeurs Planète Support

Versions supportées 15 14 13 12 11 Versions obsolètes 10 9.6 9.5 9.4 9.3 9.2 9.1 9.0 8.4 8.3 8.2 8.1 Version originale EN

Rechercher 10 (1105 pages) Rechercher

Documentation PostgreSQL 10.23 » Référence » Applications client de PostgreSQL » psql

Précédent Niveau supérieur Suivant


pg_restore Sommaire reindexdb

psql
psql — terminal interactif PostgreSQL

Synopsis
psql [option...] [nombase [nomutilisateur]]

Description
psql est une interface en mode texte pour PostgreSQL. Il vous permet de saisir des requêtes de façon interactive, de les exécuter sur
PostgreSQL et de voir les résultats de ces requêtes. Alternativement, les entrées peuvent être lues à partir d'un chier ou à partir des
arguments de la ligne de commande. De plus, il fournit un certain nombre de métacommandes et plusieurs fonctionnalités style shell
pour faciliter l'écriture des scripts et automatiser une grande variété de tâches.

Options
-a
--echo-all

A che toutes les lignes non vides en entrée sur la sortie standard lorsqu'elles sont lues. (Ceci ne s'applique pas aux lignes
lues de façon interactive.) C'est équivalent à initialiser la variable ECHO à all.

-A
--no-align

Bascule dans le mode d'a chage non aligné. (Le mode d'a chage par défaut est aligné.) Ceci est équivalent à \pset format
unaligned.

-b
--echo-errors

A che les commandes SQL qui ont échoué sur la sortie standard des erreurs. C'est équivalent à con gurer la variable ECHO à
errors.

-c commande
--command=commande

Indique que psql doit exécuter la commande indiquée dans le paramètre commande. Cette option peut être répétée et
combinée avec l'option -f dans n'importe quel ordre. Quand soit -c soit -f est utilisée, psql ne lit pas les commandes à
partir de l'entrée standard ; à la place, il quitte après avoir traité toutes les options -c et -f dans la séquence indiquée.

commande doit être soit une chaîne de commande complètement analysable par le serveur (autrement dit, elle ne contient
pas de fonctionnalités spéci ques à psql), soit une simple métacommande. De ce fait, vous ne pouvez pas mixer les
commandes SQL et les métacommandes psql dans une option -c. Pour ce faire, vous pouvez utiliser plusieurs options -c ou
envoyer la chaîne par un tube (pipe) dans psql, par exemple :

psql -c '\x' -c 'SELECT * FROM foo;'

or

echo '\x \\ SELECT * FROM foo;' | psql

(\\ est le séparateur de métacommandes.)

Chaque chaîne de commande SQL passée à -c est envoyée au serveur comme une requête unique. De ce fait, le serveur
l'exécute comme une seule transaction, même si la chaîne contient plusieurs commandes SQL, sauf si des commandes
BEGIN/COMMIT explicites sont incluses dans la chaîne pour la diviser en plusieurs transactions. De plus, psql n'a che que le
résultat de la dernière commande SQL dans la chaîne. Ce comportement est di érent de celui où la même chaîne est lue à
partir d'un chier ou envoyée à psql via l'entrée standard, parce qu'alors psql envoie chaque commande SQL séparément.

À cause de ce comportement, placer plus d'une commande dans une option -c a souvent des résultats inattendus. Il est
préférable d'utiliser plusieurs options -c ou d'envoyer les di érentes commandes à psql via l'entrée standard, soit en
utilisant echo comme dans l'exemple ci-dessus, soit en utilisant une redirection de type « here-document », comme ci-
dessous :

psql <<EOF
\x
SELECT * FROM foo;
EOF

-d nombase
--dbname=nombase

Indique le nom de la base de données où se connecter. Ceci est équivalent à spéci er nombase comme premier argument de
la ligne de commande qui n'est pas une option. Le nom de la base, dbname, peut être remplacé par une chaîne de connexion.
Dans ce cas, les paramètres de la chaîne de connexion surchargeront toutes les options en ligne de commande con ictuelles.

-e
--echo-queries

Copie toutes les commandes SQL envoyées au serveur aussi sur la sortie standard. Ceci est équivalent à initialiser la variable
ECHO à queries.

-E
--echo-hidden

A che les requêtes réelles générées par \d et autres commandes antislash. Vous pouvez utiliser ceci pour étudier les
opérations internes de psql. Ceci est équivalent à initialiser la variable ECHO_HIDDEN à on.

-f nomfichier
--file=nomfichier

Lit les commandes à partir du chier nomfichier, plutôt que l'entrée standard. Cette option peut être répétée et combinée
dans tout ordre avec l'option -c. Quand ni -c ni -f n'est indiquée, psql ne lit pas les commandes à partir de l'entrée
standard ; à la place, il termine après avoir traité toutes les options -c et -f dans la séquence indiquée. En dehors de ça,
cette option est fortement équivalente à la métacommande \i.

Si nomfichier est un - (tiret), alors l'entrée standard est lue jusqu'à la détection d'une n de chier ou de la métacommande
\q. Ceci peut être utilisé pour intercaler une saisie interactive entre des entrées depuis des chiers. Néanmoins, notez que
Readline n'est pas utilisé dans ce cas (un peu comme si -n a été précisé).

Utiliser cette option est légèrement di érent d'écrire psql < nomfichier. En général, les deux feront ce que vous souhaitez,
mais utiliser -f active certaines fonctionnalités intéressantes comme les messages d'erreur avec les numéros de ligne. Il y a
aussi une petite chance qu'utiliser cette option réduira la charge au démarrage. D'un autre côté, la variante utilisant la
redirection de l'entrée du shell doit (en théorie) pour ramener exactement le même a chage que celui que vous auriez eu en
saisissant tout manuellement.

-F séparateur
--field-separator=séparateur

Utilisez séparateur comme champ séparateur pour un a chage non aligné. Ceci est équivalent à \pset fieldsep ou \f.

-h nomhôte
--host=nomhôte

Indique le nom d'hôte de la machine sur lequel le serveur est en cours d'exécution. Si la valeur commence avec un slash, elle
est utilisée comme répertoire du socket de domaine Unix.

-H
--html

Active l'a chage en tableau HTML. Ceci est équivalent à \pset format html ou à la commande \H.

-l
--list

Liste toutes les bases de données disponibles puis quitte. Les autres options non relatives à la connexion sont ignorées. Ceci
est similaire à la métacommande \list.

Quand cette option est utilisée, psql se connectera à la base de données postgres, sauf si une base de données di érente
est nommée sur la ligne de commande (via l'option -d, via le dernier argument de la ligne de commande, via l'enregistrement
du service, mais pas via une variable d'environnement).

-L nomfichier
--log-file=nomfichier

Écrit tous les résultats des requêtes dans le chier nomfichier en plus de la destination habituelle.

-n
--no-readline

N'utilise pas Readline pour l'édition de ligne et n'utilise pas l'historique des commandes. Ceci est utile quand on veut
désactiver la gestion de la tabulation quand on copie/colle.

-o nomfichier
--output=nomfichier

Dirige tous les a chages de requêtes dans le chier nomfichier. Ceci est équivalent à la commande \o.

-p port
--port=port

Indique le port TCP ou l'extension du chier socket de domaine local Unix sur lequel le serveur attend les connexions. Par
défaut, il s'agit de la valeur de la variable d'environnement PGPORT ou, si elle n'est pas initialisée, le port spéci é au moment
de la compilation, habituellement 5432.

-P affectation
--pset=affectation

Vous permet de spéci er les options d'a chage dans le style de \pset sur la ligne de commande. Notez que, ici, vous devez
séparer nom et valeur avec un signe égal au lieu d'un espace. Du coup, pour initialiser le format d'a chage en LaTeX, vous
devez écrire -P format=latex.

-q
--quiet

Indique que psql doit travailler silencieusement. Par défaut, il a che des messages de bienvenue et diverses informations. Si
cette option est utilisée, rien de ceci n'est a ché. C'est utile avec l'option -c. Ceci est équivalent à con gurer la variable
QUIET à on.

-R séparateur
--record-separator=séparateur

Utilisez séparateur comme séparateur d'enregistrement pour un a chage non aligné. Ceci est équivalent à \pset
recordsep.

-s
--single-step

S'exécute en mode étape par étape. Ceci signi e qu'une intervention de l'utilisateur est nécessaire avant l'envoi de chaque
commande au serveur, avec une option pour annuler l'exécution. Utilisez cette option pour déboguer des scripts.

-S
--single-line

S'exécute en mode simple ligne, où un retour à la ligne termine une commande SQL, de la même façon qu'un point-virgule.

Note
Ce mode est fourni pour ceux qui insistent pour l'avoir, mais vous n'êtes pas
nécessairement encouragé à l'utiliser. En particulier, si vous mixez SQL et
métacommandes sur une ligne, l'ordre d'exécution peut ne pas être toujours clair pour un
utilisateur inexpérimenté.

-t
--tuples-only

Désactive l'a chage des noms de colonnes, le pied de page contenant le nombre de résultats, etc. Ceci est équivalent à la
métacommande \t ou à \pset tuples_only.

-T options_table
--table-attr=options_table

Indique les options à placer à l'intérieur d'une balise table en HTML. Voir \pset tableattr pour plus de détails.

-U nomutilisateur
--username=nomutilisateur

Se connecte à la base de données en tant que l'utilisateur nomutilisateur au lieu de celui par défaut. (Vous devez aussi
avoir le droit de le faire, bien sûr.)

-v affectation
--set=affectation
--variable=affectation

Réalise une a ectation de variable, comme la métacommande \set. Notez que vous devez séparer le nom et la valeur, s'il y
en a une, par un signe égal sur la ligne de commande. Pour désinitialiser une variable, enlevez le signe d'égalité. Pour
initialiser une variable avec une valeur vide, utilisez le signe égal sans passer de valeur. Ces a ectations sont réalisées lors
du traitement de la ligne de commande, du coup les variables re étant l'état de la connexion seront écrasées plus tard.

-V
--version

A che la version de psql et quitte.

-w
--no-password

Ne demande jamais un mot de passe. Si le serveur en réclame un pour l'authenti cation et qu'un mot de passe n'est pas
disponible d'une autre façon (par exemple avec le chier .pgpass), la tentative de connexion échouera. Cette option peut être
utile pour les scripts où aucun utilisateur n'est présent pour saisir un mot de passe.

Notez que cette option restera positionnée pour l'ensemble de la session, et qu'elle a ecte aussi l'utilisation de la
métacommande \connect en plus de la tentative de connexion initiale.

-W
--password

Force psql à demander un mot de passe avant de se connecter à une base de données, même si le mot de passe ne sera pas
utilisé.

Si le serveur requiert une authenti cation par mot de passe et qu'un mot de passe n'est pas disponible par d'autres sources
que le chier .pgpass, psql demandera un mot de passe. Néanmoins, psql perdra une tentative de connexion pour trouver
que le serveur veut un mot de passe. Dans certains cas, il est préférable d'ajouter l'option -W pour éviter la tentative de
connexion.

Notez que cette option sera conservée pour la session entière, et que du coup elle a ecte l'utilisation de la métacommande
\connect ainsi que la tentative de connexion initiale.

-x
--expanded

Active le mode de formatage de table étendu. Ceci est équivalent à \x ou \pset expanded.

-X,
--no-psqlrc

Ne lit pas le chier de démarrage (ni le chier système psqlrc ni le ~/.psqlrc de l'utilisateur).

-z
--field-separator-zero

Con gure le séparateur de champs pour une sortie non alignée avec un octet zéro. Ceci est équivalent à \pset
fieldsep_zero.

-0
--record-separator-zero

Con gure le séparateur d'enregistrement pour une sortie non alignée avec un octet zéro. C'est intéressant pour l'interfacer
avec xargs -0. Ceci est équivalent à \pset recordsep_zero.

-1
--single-transaction

Cette option peut seulement être utilisée en combinaison avec une ou plusieurs options -c et/ou -f. Cela force psql à
exécuter une commande BEGIN avant la première option de ce type et une commande COMMIT après la dernière, englobant la
totalité des commandes dans une seule transaction. Ceci garantit que soit toutes les commandes réussissent, soit aucun
changement n'est appliqué.

Si les commandes elles-mêmes contiennent BEGIN, COMMIT ou ROLLBACK, cette option n'aura pas les e ets désirés. De plus, si
une commande en particulier ne peut pas être exécutée à l'intérieur d'un bloc de transaction, indiquer cette option causera
l'échec de toute la transaction.

-?
--help[=thème]

A che de l'aide sur psql puis quitte. Le paramètre optionnel thème (par défaut à options) sélectionne les parties de psql à
expliquer : commands décrit les métacommandes de psql ; options décrit les options en ligne de commande de psql ; et
variables a che de l'aide sur les variables de con guration de psql.

Code de sortie
psql renvoie 0 au shell s'il s'est terminé normalement, 1 s'il y a eu une erreur fatale de son fait (par exemple : pas assez de mémoire,
chier introuvable), 2 si la connexion au serveur s'est interrompue et que la session n'était pas interactive, 3 si une erreur est survenue
dans un script et si la variable ON_ERROR_STOP était positionnée.

Usage

Se connecter à une base de données


psql est une application client PostgreSQL standard. Pour se connecter à une base de données, vous devez connaître le nom de votre
base de données cible, le nom de l'hôte et le numéro de port du serveur ainsi que le nom de l'utilisateur sous lequel vous voulez vous
connecter. On peut indiquer ces paramètres à psql à partir d'options en ligne de commande, respectivement -d, -h, -p et -U. Si un
argument est rencontré qui ne correspond à aucune option, il sera interprété comme le nom de la base de données (ou le nom de
l'utilisateur si le nom de la base de données est déjà donné). Toutes ces options ne sont pas requises, il y a des valeurs par défaut
convenables. Si vous omettez le nom de l'hôte, psql se connectera via un socket de domaine Unix à un serveur sur l'hôte local, ou par
TCP/IP sur localhost pour les machines qui n'ont pas de sockets de domaine Unix. Le numéro de port par défaut est déterminé au
moment de la compilation. Comme le serveur de bases de données utilise la même valeur par défaut, vous n'aurez pas besoin de
spéci er le port dans la plupart des cas. Le nom de l'utilisateur par défaut est votre nom d'utilisateur pour le système d'exploitation, de
même pour le nom de la base de données par défaut. Notez que vous ne pouvez pas simplement vous connecter à n'importe quelle
base de données avec n'importe quel nom d'utilisateur. Votre administrateur de bases de données doit vous avoir informé de vos
droits d'accès.

Quand les valeurs par défaut ne sont pas idéales, vous pouvez vous épargner de la frappe en con gurant les variables
d'environnement PGDATABASE, PGHOST, PGPORT et/ou PGUSER avec les valeurs appropriées (pour les variables d'environnement
supplémentaires, voir Section 33.14). Il est aussi pratique d'avoir un chier ~/.pgpass pour éviter d'avoir régulièrement à saisir les
mots de passe. Voir Section 33.15 pour plus d'informations.

Une autre façon d'indiquer les paramètres de connexion est dans une chaîne conninfo ou une URI qui est utilisée à la place du nom
d'une base de données. Ce mécanisme vous donne un grand contrôle sur la connexion. Par exemple :

$ psql "service=monservice sslmode=require"


$ psql postgresql://dbmaster:5433/mydb?sslmode=require

De cette façon, vous pouvez aussi utiliser LDAP pour la recherche de paramètres de connexion, comme décrit dans Section 33.17. Voir
Section 33.1.2 pour plus d'informations sur toutes les options de connexion disponibles.

Si la connexion ne peut pas se faire, quelle qu'en soit la raison (c'est-à-dire droits non su sants, serveur arrêté sur l'hôte cible, etc.),
psql renverra une erreur et s'arrêtera.

Si l'entrée et la sortie standard correspondent à un terminal, alors psql xe le paramètre d'encodage client à la valeur « auto », a n de
pouvoir détecter l'encodage approprié d'après les paramètres régionaux (dé nis par la variable système LC_CTYPE pour les systèmes
Unix). Si cela ne fonctionne pas comme attendu, il est possible de forcer l'encodage du client en renseignant la variable
d'environnement PGCLIENTENCODING.

Saisir des commandes SQL


Dans le cas normal, psql fournit une invite avec le nom de la base de données sur laquelle psql est connecté suivi par la chaîne =>. Par
exemple

$ psql basetest
psql (10.23)
Type "help" for help.

basetest=>

À l'invite l'utilisateur peut saisir des commandes SQL. Ordinairement, les lignes en entrée sont envoyées vers le serveur quand un
point-virgule de n de commande est saisi. Une n de ligne ne termine pas une commande. Du coup, les commandes peuvent être
saisies sur plusieurs lignes pour plus de clarté. Si la commande a été envoyée et exécutée sans erreur, ses résultats sont a chés sur
l'écran.

Si des utilisateurs en qui vous n'avez pas con ance ont accès à une base qui n'a pas adopté la méthode sécurisée d'utilisation des
schémas, démarrez votre session en supprimant de votre search_path les schémas ouverts en écriture au public. On peut ajouter
options=-csearch_path= à la chaîne de connexion ou exécuter SELECT pg_catalog.set_config('search_path', '', false) avant
toute autre commande SQL. Cette considération n'est pas propre à psql ; elle s'applique à chaque interface qui exécute des
commandes SQL quelconques.

À chaque fois qu'une commande est exécutée, psql véri e aussi les événements de noti cation générés par LISTEN et NOTIFY.

Alors que les blocs de commentaire de type C sont transmis au serveur pour traitement et suppression, les commentaires au standard
SQL sont supprimés par psql.

Métacommandes
Tout ce que vous saisissez dans psql qui commence par un antislash non échappé est une métacommande psql, traitée par psql lui-
même. Ces commandes aident à rendre psql plus utile pour l'administration ou pour l'écriture de scripts. Les métacommandes sont
plus souvent appelées les commandes slash ou antislash.

Le format d'une commande psql est l'antislash suivi immédiatement d'un verbe de commande et de ses arguments. Les arguments
sont séparés du verbe de la commande et les uns des autres par un nombre illimité d'espaces blancs.

Pour inclure des espaces blancs dans un argument, vous pouvez le mettre entre des guillemets simples. Pour inclure un guillemet
simple dans un argument, vous devez écrire deux guillemets simples dans un texte compris entre guillemets simples. Tout ce qui est
contenu dans des guillemets simples est sujet aux substitutions du style langage C : \n (nouvelle ligne), \t (tabulation), \b (retour
arrière), \r (retour chariot), \f (saut de page), \chiffres (octal), and \xchiffres (hexadécimal). Un antislash précédant tout autre
caractère dans une chaîne entre guillemets reproduit ce caractère, quel qu'il soit.

Si un deux-points sans guillemets (:) suivi d'un nom de variable psql apparaît dans un argument, il est remplacé par la valeur de la
variable, comme décrit dans Interpolation SQL. Les formes :'variable_name' et :"variable_name" décrites ici fonctionnent
également.

Dans un argument, le texte entre des guillemets inverses (`) est pris comme une ligne de commande, qui est passée au shell. La sortie
de la commande (dont tous les retours à la ligne sont supprimés) remplace le texte entre guillemets inverses. Dans le texte à l'intérieur
des guillemets inverses, ne se déroule ni échappement ni autre traitement, à l'exception de :variable_name où variable_name est
une variable psql, qui sera remplacée par sa valeur. De plus, les occurences de :'variable_name' sont remplacées par la valeur de la
variable correctement échappée pour devenir un unique argument de commande shell (cette dernière forme est presque toujours
préférable, sauf à être absolument sûr du contenu de la variable). Comme les caractères retour chariot et saut de ligne ne peuvent
être échappés correctement sur toutes les plateformes, la forme :'variable_name' renvoie un message d'erreur et ne remplace pas
la valeur de la variable quand ces caractères sont présents dans la valeur.

Quelques commandes prennent un identi ant SQL (comme un nom de table) en argument. Ces arguments suivent les règles de la
syntaxe SQL : les lettres sans guillemets sont forcées en minuscule alors que les guillemets doubles (") protègent les lettres de la
conversion de casse et autorisent l'incorporation d'espaces blancs dans l'identi ant. À l'intérieur des guillemets doubles, les guillemets
doubles en paire se réduisent à un seul guillemet double dans le nom résultant. Par exemple, FOO"BAR"BAZ est interprété comme
fooBARbaz et "Un nom ""bizarre" devient Un nom "bizarre.

L'analyse des arguments se termine à la n de la ligne ou quand un autre antislash non entre guillemets est rencontré. Un antislash
non entre guillemets est pris pour le début d'une nouvelle métacommande. La séquence spéciale \\ (deux antislashes) marque la n
des arguments et continue l'analyse des commandes SQL, si elles existent. De cette façon, les commandes SQL et psql peuvent être
mixées librement sur une ligne. Mais dans tous les cas, les arguments d'une métacommande ne peuvent pas continuer après la n de
la ligne.

De nombreuses métacommandes utilisent le bu er de la requête actuelle. Ce bu er contient simplement le texte de la commande SQL
qui a été écrite mais pas encore envoyée au serveur pour exécution. Cela comprendra les lignes saisies précédentes ainsi que tout
texte présent avant la métacommande de la même ligne.

Les métacommandes suivantes sont dé nies :

\a

Si le format d'a chage de table actuel est non aligné, il est basculé à aligné. S'il n'est pas non aligné, il devient non aligné.
Cette commande est conservée pour des raisons de compatibilité. Voir \pset pour une solution plus générale.

\c ou \connect [ -reuse-previous=on|off ] [ nom_base [ nom_utilisateur ] [ hôte ] [ port ] | conninfo ]

Établit une nouvelle connexion à un serveur PostgreSQL. Les paramètres de connexion utilisés peuvent être spéci és en
utilisant soit la syntaxe par position (une ou plusieurs parmi le nom de la base, le nom de l'utilisateur, l'hôte et le port) soit
une chaîne de connexion conninfo telle qu'elle est détaillée dans Section 33.1.1. Si aucun argument n'est donné, une
nouvelle connexion est réalisée en utilisant les mêmes paramètres qu'auparavant.

Utiliser - comme valeur d'un des paramètres nom_base, nom_utilisateur, hôte ou port est équivalent à l'omission de ce
paramètre.

La nouvelle connexion peut réutiliser les paramètres de connexion de la précédente connexion ; non seulement le nom de la
base, de l'utilisateur, l'hôte et le port, mais aussi les autres paramètres tels que sslmode. Par défaut, les paramètres sont ré-
utilisés dans la syntaxe par position, mais pas quand une chaîne de connexion conninfo est donnée. Passer en premier
argument -reuse-previous=on ou -reuse-previous=off surcharge ce comportement par défaut. Si les paramètres sont ré-
utilisés, alors tout paramètre non spéci é explicitement comme un paramètre de position ou dans une chaîne de connexion
conninfo est pris dans les paramètres de la connexion existante. Une exception concerne le changement du paramètre host
de sa valeur précédente utilisant la syntaxe par position, et tout paramétrage de hostaddr présent dans les paramètres de la
connexion existant est supprimé. De plus, tout mot de passe utilisé pour la connexion existante sera réutilisé seulement si
l'utilisateur, l'hôte et le port ne sont pas modi és. Quand la commande ne spéci e pas ou ne réutilise pas une paramètre
particulier, sa valeur libpq par défaut est utilisé.

Si la nouvelle connexion est réussie, la connexion précédente est fermée. Si la tentative de connexion échoue (mauvais nom
d'utilisateur, accès refusé, etc.), la connexion précédente est conservée si psql est en mode interactif. Lors de l'exécution d'un
script non interactif, le traitement s'arrêtera immédiatement avec une erreur. Cette distinction a été choisie d'une part
comme facilité pour l'utilisateur confronté aux fautes de frappe, d'autre part en tant que sécurité pour que des scripts
n'agissent pas par erreur sur la mauvaise base de données.

Exemples :

=> \c mydb myuser [Link] 6432


=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require -- change uniquement sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp

\C [ titre ]

Initialise ou supprime le titre des tables a chées en résultat d'une requête. Cette commande est équivalente à \pset title
titre. (Le nom de cette commande provient de « caption », car elle avait précédemment pour seul but d'initialiser l'en-tête
dans une table HTML.)

\cd [ répertoire ]

Change le répertoire courant en répertoire. Sans argument, le répertoire personnel de l'utilisateur devient le répertoire
courant.

Astuce
Pour a cher votre répertoire courant, utilisez \! pwd.

\conninfo

A che des informations sur la connexion en cours à la base de données.

\copy { table [ ( liste_colonnes ) ] | ( requête ) } { from | to } { 'nomfichier' | program 'commande' | stdin |


stdout | pstdin | pstdout } [ [ with ] ( option [, ...] ) ]

Réalise une opération de copie côté client. C'est une opération qui exécute une commande SQL, COPY, mais au lieu que le
serveur lise ou écrive le chier spéci é, psql lit ou écrit le chier en faisant le routage des données entre le serveur et le
système de chiers local. Ceci signi e que l'accès et les droits du chier sont ceux de l'utilisateur local, pas celui du serveur,
et qu'aucun droit de superutilisateur n'est requis.

Quand la clause program est présente, commande est exécuté par psql et les données provenant ou fournies à commande sont
routées entre le serveur et le client. Encore une fois, les droits d'exécution sont ceux de l'utilisateur local, et non du serveur,
et les droits superutilisateur ne sont pas nécessaires.

Pour \copy ... from stdin, les lignes de données sont lues depuis la même source qui a exécuté la commande, continuant
jusqu'à ce que \. soit lu ou que le ux atteigne EOF. Cette option est utile pour remplir des tables depuis les scripts SQL
même. Pour \copy ... to stdout, la sortie est envoyée au même endroit que la sortie des commandespsql, et le statut de
la commande COPY count n'est pas a ché (puisqu'il pourrait être confondu avec une ligne de données). Pour lire et écrire
sur les entrées et sorties de psql sans prendre en compte la source de commande courante ou l'option \o, écrivez from
pstdin ou to pstdout.

La syntaxe de cette commande est similaire à celle de la commande SQL COPY. Toutes les options autres que les
source/destination des données sont spéci é comme pour COPY. À cause de cela, des règles spéciales d'analyse sont
appliquées à la métacommande \copy. Contrairement à la majorité des autres métacommandes, l'intégralité du reste de la
ligne est toujours pris en compte en tant qu'arguments de \copy, et ni l'interpolation des variables ni la substitution par
guillemets inverses ne seront e ectuées sur les arguments.

Astuce
Une autre façon d'obtenir le même résultat que \copy ... to est d'utiliser la commande
SQL COPY ... TO STDOUT et de la nir avec \g nom_fichier ou \g |programme.
Contrairement à \copy, cette méthode permet à la commande d'aller sur plusieurs lignes.
De plus, l'interpolation de variable et l'expansion des guillemets inverses peuvent être
utilisées.

Astuce
Ces opérations ne sont pas aussi e caces que la commande SQL COPY avec un chier ou
avec les données fournies pour/par un programme car toutes les données doivent passer
via la connexion client/serveur. Pour les grandes quantités de données, la commande SQL
pourrait être préférable.

\copyright

A che le copyright et les termes de distribution de PostgreSQL.

\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]

Exécute le tampon de requête actuel (tout comme \g) et a che le résultat dans un tableau croisé. La requête doit renvoyer
au moins trois colonnes. La colonne en sortie identi ée par colV devient l'en-tête vertical et la colonne en sortie identi ée par
colH devient l'en-tête horizontal. colD identi e la colonne en sortie à a cher à l'intérieur de la grille. sortcolH identi e une
colonne optionnelle de tri pour l'en-tête horizontal.

Chaque spéci cation de colonne peut être un numéro de colonne (en commençant à 1) ou un nom de colonne. Les règles SQL
habituelles de casse et de guillemet s'appliquent aux noms de colonne. En cas d'omission, la colonne 1 est utilisée pour colV
et la colonne 2 est utilisée pour colH. colH doit di érer de colV. Si colD n'est pas indiqué, alors il doit y avoir exactement
trois colonnes dans le résultat de la requête et la colonne qui n'est ni colV ni colH est utilisée pour colD.

L'en-tête vertical, a ché comme colonne la plus à gauche, contient les valeurs trouvées dans la colonne colV, dans le même
ordre que dans les résultats de la requête, mais sans les duplicats.

L'en-tête horizontal, a ché comme la première ligne, contient les valeurs trouvées dans la colonne colH, sans duplicats. Par
défaut, ils apparaissent dans le même ordre que les résultats de la requête. Mais si l'argument optionnel sortcolH est
renseigné, il identi e une colonne dont les valeurs doivent être des entiers et les valeurs provenant de colH apparaîtront
dans l'en-tête horizontal trié suivant les valeurs correspondantes de sortcolH.

À l'intérieur du tableau croisé, pour chaque valeur x distincte de colH et pour chaque valeur y distincte de colV, la cellule
située à l'intersection (x,y) contient la valeur de la colonne colD dans la ligne de résultat de la requête pour laquelle la
valeur de colH est x et la valeur de colV est y. Si cette ligne n'existe pas, la cellule est vide. S'il existe plusieurs lignes, une
erreur est renvoyée.

\d[S+] [ motif ]

Pour chaque relation (table, vue, vue matérialisée, index, séquence ou table distante) ou type composite correspondant au
motif, a che toutes les colonnes, leurs types, le tablespace (s'il ne s'agit pas du tablespace par défaut) et tout attribut
spécial tel que NOT NULL ou les valeurs par défaut. Les index, contraintes, règles et déclencheurs associés sont aussi a chés.
Pour les tables distantes, le serveur distant associé est aussi a ché. (Ce qui « correspond au motif » est dé ni dans motifs ci-
dessous.)

Pour certains type de relation, \d a che des informations supplémentaires pour chaque colonne ; colonne valeur pour les
séquences, expression indexée pour les index, options du wrapper de données distantes pour les tables distantes.

Le forme de la commande \d+ est identique, sauf que des informations plus complètes sont a chées : tout commentaire
associé avec les colonnes de la table est a ché, ainsi que la présence d'OID dans la table, la dé nition de la vue (si la relation
ciblée est une vue), un réglage de replica identity autre que celui par défaut.

Par défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les
objets système.

Note
Si \d est utilisé sans argument motif, il est équivalent, en plus commode, à \dtvmsE qui
a che une liste de toutes les tables, vues, vues matérialisées, séquences et tables
distantes. Ce n'est qu'un outil pratique.

\da[S] [ motif ]

Liste toutes les fonctions d'agrégat disponibles, avec le type en retour et les types de données sur lesquels elles opèrent. Si
motif est spéci é, seuls les agrégats dont les noms commencent par le motif sont a chés. Par défaut, seuls les objets créés
par les utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les objets système.

\dA[+] [ motif ]

Liste les méthodes d'accès. Si motif est précisé, seules sont a chées les méthodes d'accès dont le nom correspond au motif.
Si + est ajouté au nom de la commande, chaque méthode d'accès est listée avec sa fonction gestionnaire et sa description
associées.

\db[+] [ motif ]

Liste tous les tablespaces disponibles. Si motif est spéci é, seuls les tablespaces dont le nom correspond au motif sont
a chés. Si + est ajouté au nom de commande, chaque tablespace est listé avec ses options associées, sa taille sur disque,
ses droits et sa description.

\dc[S+] [ motif ]

Liste les conversions entre les encodages de jeux de caractères. Si motif est spéci é, seules les conversions dont le nom
correspond au motif sont listées. Par défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le
modi cateur S pour a cher les objets système. Si + est ajouté au nom de la commande, chaque objet est listé avec sa
description associée.

\dC[+] [ motif ]

Liste les conversions de types. Si motif est indiqué, seules sont a chées les conversions dont le type source ou cible
correspond au motif. Si + est ajouté au nom de la commande, chaque objet est listé avec sa description associée.

\dd[S] [ motif ]

A che les descriptions des objets du type contrainte, classe d'opérateur, famille d'opérateur, règle et trigger. Tous
les autres commentaires peuvent être visualisés avec les commandes antislash respectives pour ces types d'objets.

\dd A che les descriptions des objets correspondant au motif ou des objets du type approprié si aucun argument n'est
donné. Mais dans tous les cas, seuls les objets qui ont une description sont listés. Par défaut, seuls les objets créés par les
utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les objets système.

Les descriptions des objets peuvent être créées avec la commande SQL COMMENT.

\dD[S+] [ motif ]

Liste les domaines. Si motif est spéci é, seuls les domaines dont le nom correspond au motif sont a chés. Par défaut, seuls
les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les objets système. Si
+ est ajouté au nom de la commande, chaque objet est listé avec sa description associée.

\ddp [ motif ]

Liste les paramètres par défaut pour les privilèges d'accès. Une entrée est a chée pour chaque rôle (et schéma, si c'est
approprié) pour lequel les paramètres par défaut des privilèges ont été modi és par rapport aux paramètres par défaut
intégrés. Si motif est spéci é, seules les entrées dont le nom de rôle ou le nom de schéma correspond au motif sont listées.

La commande ALTER DEFAULT PRIVILEGES sert à positionner les privilèges d'accès par défaut. La signi cation de l'a chage
des privilèges est expliquée à la page de GRANT.

\dE[S+] [ motif ]
\di[S+] [ motif ]
\dm[S+] [ motif ]
\ds[S+] [ motif ]
\dt[S+] [ motif ]
\dv[S+] [ motif ]

Dans ce groupe de commandes, les lettres E, i, m, s, t et v correspondent respectivement à table distante, index, vue
matérialisée, séquence, table et vue. Vous pouvez indiquer n'importe quelle combinaison de ces lettres, dans n'importe quel
ordre, pour obtenir la liste de tous les objets de ces types. Par exemple, \dit liste les index et tables. Si + est ajouté à la n
de la commande, chaque objet est listé avec sa taille physique sur disque et sa description associée s'il y en a une. Si motif
est spéci é, seuls les objets dont les noms correspondent au motif sont listés. Par défaut, seuls les objets créés par les
utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les objets système.

\des[+] [ motif ]

Liste les serveurs distants (mnémonique : « external servers »). Si motif est spéci é, seuls les serveurs dont le nom
correspond au motif sont a chés. Si la forme \des+ est utilisée, une description complète de chaque serveur est a chée,
incluant liste de contrôle d'accès du serveur (ACL), type, version, options et description.

\det[+] [ motif ]

Liste les tables distantes (mnémotechnique : « tables externes »). Si un motif est fourni, seules les entrées concernant les
tables ou les schémas en correspondance seront listées. Si vous utilisez la forme \det+, les options génériques et la
description de la table distante seront également a chées.

\deu[+] [ motif ]

Liste les correspondances d'utilisateurs (mnémonique : « external users »). Si motif est spéci é, seules les correspondances
dont le nom correspond au motif sont a chées. Si la forme \deu+ est utilisée, des informations supplémentaires sur chaque
correspondance d'utilisateur sont a chées.

Attention
\deu+ risque aussi d'a cher le nom et le mot de passe de l'utilisateur distant, il est donc
important de faire attention à ne pas les divulguer.

\dew[+] [ motif ]

Liste les wrappers de données distantes (mnémonique : « external wrappers »). Si motif est spéci é, seuls les wrappers dont
le nom correspond au motif sont a chés. Si la forme \dew+ est utilisée, les ACL, options et description du wrapper sont aussi
a chées.

\df[antwS+] [ motif ]

Liste les fonctions, ainsi que leurs types de données pour le résultat, leurs types de données pour les arguments et les types
de fonctions, qui sont classés comme « agg » (agrégat), « normal », « trigger », or « window ». A n de n'a cher que les
fonctions d'un type spéci é, ajoutez les lettres correspondantes, respectivement a, n, t, or w à la commande. Si motif est
spéci é, seules les fonctions dont le nom correspond au motif sont a chées. Par défaut, seuls les objets créés par les
utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les objets système. Si la forme \df+ est
utilisée, des informations supplémentaires sur chaque fonction sont a chées, incluant la volatibilité, le parallélisme, le
propriétaire, la classi cation en sécurité, les droits d'accès, le langage, le code source et la description.

Astuce
Pour rechercher des fonctions prenant des arguments ou des valeurs de retour d'un type
spéci que, utilisez les capacités de recherche du paginateur pour parcourir la sortie de
\df.

\dF[+] [ motif ]

Liste les con gurations de la recherche plein texte. Si motif est spéci é, seules les con gurations dont le nom correspond au
motif seront a chées. Si la forme \dF+ est utilisée, une description complète de chaque con guration est a chée, ceci
incluant l'analyseur de recherche plein texte et la liste de dictionnaire pour chaque type de jeton de l'analyseur.

\dFd[+] [ motif ]

Liste les dictionnaires de la recherche plein texte. Si motif est spéci é, seuls les dictionnaires dont le nom correspond au
motif seront a chés. Si la forme \dFd+ est utilisée, des informations supplémentaires sont a chées pour chaque
dictionnaire, ceci incluant le motif de recherche plein texte et les valeurs des options.

\dFp[+] [ motif ]

Liste les analyseurs de la recherche plein texte. Si motif est spéci é, seuls les analyseurs dont le nom correspond au motif
seront a chés. Si la forme \dFp+ est utilisée, une description complète de chaque analyseur est a chée, ceci incluant les
fonctions sous-jacentes et la liste des types de jeton reconnus.

\dFt[+] [ motif ]

Liste les motifs de la recherche plein texte. Si motif est spéci é, seuls les motifs dont le nom correspond au motif seront
a chés. Si la forme \dFt+ est utilisée, des informations supplémentaires sont a chées pour chaque motif, ceci incluant les
noms des fonctions sous-jacentes.

\dg[S+] [ pattern ]

Liste les rôles des bases de données. (Comme les concepts d'« utilisateurs » et « groupes » ont été uni és dans les « rôles »,
cette commande est maintenant équivalente à \du.) Par défaut, seuls les rôles créés par des utilisateurs sont a chés ;
ajoutez le modi cateur S pour inclure les rôles système. Si motif est spéci é, seuls les rôles dont le nom correspond au motif
sont listés. Si la forme \dg+ est utilisée, des informations supplémentaires sont a chées pour chaque rôle ; actuellement,
cela ajoute le commentaire pour chaque rôle.

\dl

Ceci est un alias pour \lo_list, qui a che une liste des Large Objects.

\dL[S+] [ motif ]

A che les langages procéduraux. Si un motif est spéci é, seuls les langages dont les noms correspondent au motif sont
listés. Par défaut, seuls les langages créés par les utilisateurs sont a chés ; il faut spéci er l'option S pour inclure les objets
système. Si + est ajouté à la n de la commande, chaque langage sera a ché avec ses gestionnaire d'appels, validateur,
droits d'accès, et ce même s'il s'agit d'un objet système.

\dn[S+] [ motif ]

Liste les schémas (espaces de noms). Si motif est spéci é, seuls les schémas dont le nom correspond au motif sont listés. Par
défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les
objets système. Si + est ajouté à la n de la commande, chaque objet sera a ché avec ses droits et son éventuelle
description.

\do[S+] [ motif ]

Liste les opérateurs avec les types de leur opérande et résultat. Si motif est spéci é, seuls les opérateurs dont le nom
correspond au motif sont listés. Par défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le
modi cateur S pour a cher les objets système. Si + est ajouté au nom de la commande, des informations supplémentaire sur
chaque opérateur est a ché, actuellement uniquement le nom de la fonction sous-jacente.

\dO[S+] [ motif ]

A che les collationnements. Si motif est spéci é, seuls les collationnements dont le nom correspond au motif sont listés. Par
défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le modi cateur S pour a cher les
objets système. Si + est ajouté à la n de la commande, chacun des collationnements sera a ché avec son éventuelle
description. Notez que seuls les collationnements compatibles avec l'encodage de la base de données courante sont a chés,
les résultats peuvent donc varier selon les di érentes bases d'une même instance.

\dp [ motif ]

Liste les tables, vues et séquences avec leur droits d'accès associés. Si motif est spéci é, seules les tables, vues et séquences
dont le nom correspond au motif sont listées.

Les commandes GRANT et REVOKE sont utilisées pour con gurer les droits d'accès. Les explications sur le sens de l'a chage
des privilèges sont sous GRANT.

\drds [ role-pattern [ database-pattern ] ]

Liste les paramètres de con guration dé nis. Ces paramètres peuvent être spéci ques à un rôle, spéci ques à une base, ou
les deux. role-pattern et database-pattern servent à choisir sur quels rôles spéci ques ou quelles bases de données les
paramètres sont listés. Si ces options sont omises, ou si on spéci e *, tous les paramètres sont listés, y compris ceux qui ne
sont pas spéci ques, respectivement, à un rôle ou une base.

Les commande ALTER ROLE et ALTER DATABASE servent à dé nir les paramètres de con guration par rôle et par base de
données.

\dRp[+] [ pattern ]

Liste les publications de réplication. Si pattern est spéci é, seules les publications dont le nom correspond au motif sont
listées. Si + est ajouté à la n du nom de la commande, les tables associées à chaque publication sont également a chées.

\dRs[+] [ pattern ]

Liste les souscriptions de réplication. Si pattern est spéci é, seules les souscriptions dont le nom correspond au motif sont
listées. Si + est ajouté à la n du nom de la commande, des propriétés supplémentaires de la souscription sont a chées.

\dT[S+] [ motif ]

Liste les types de données. Si motif est spéci é, seuls les types dont le nom correspond au motif sont a chés. Si + est ajouté
à la n de la commande, chaque type est listé avec son nom interne et sa taille, ses valeurs autorisées si c'est un type enum,
et ses permissions associées. Par défaut, seuls les objets créés par les utilisateurs sont a chés ; fournissez un motif ou le
modi cateur S pour a cher les objets système.

\du[S+] [ pattern ]

Liste les rôles de la base de données. (Depuis que les concepts des « utilisateurs » et « groupes » ont été uni és en des
« rôles », cette commande est équivalent à \dg.) Par défaut, seuls les rôles créés par des utilisateurs sont a chés. Ajoutez le
modi cateur S pour inclure les rôles système. Si motif est indiqué, seuls les rôles dont le nom correspond au motif sont
listés. Si la forme \du+ est utilisée, des informations supplémentaires sont a chées pour chaque rôle ; actuellement, cela
ajoute le commentaire pour chaque rôle.

\dx[+] [ motif ]

A che les extensions installées. Si motif est spéci é, seules les entensions dont le nom correspond au motif sont a chées.
Avec la forme \dx+, tous les objets dépendants de chacune des extensions correspondantes sont également listés.

\dy[+] [ motif ]

Liste les triggers d'événements. Si motif est indiqué, seuls les triggers d'événements dont les noms correspondent au motif
sont listés. Si + est ajouté au nom de la commande, chaque objet est listé avec sa description.

\e (or \edit) [ nomfichier ] [ numero_ligne ]

Si nomfichier est spéci é, le chier est édité ; en quittant l'éditeur, le contenu du chier est recopié dans le tampon de
requête. Si aucun paramètre nomfichier n'est fourni, le tampon de requête courant est copié dans un chier temporaire qui
édité de la même manière. Ou bien, si le tampon actuel de requête est vide, la dernière requête exécutée est copiée vers un
chier temporaire et éditée de la même manière.

Le nouveau tampon de requête est ensuite ré-analysé suivant les règles habituelles de psql, où le tampon complet est traité
comme une seule ligne. Toute requête complète est exécutée immédiatemment ; c'est-à-dire que si le tampon de requête
contient ou se termine par un point-virgule, tout ce qui précède est exécuté. Tout ce qui reste attendra dans le tampon de
requête ; en tapant point-virgule ou \g, le contenu sera envoyé, tandis que \r annulera en e açant le tampon de requête.
Traiter le bu er comme une ligne unique a ecte principalement les métacommandes : tout ce qui se trouve dans le tampon
après une métacommande sera pris en tant qu'argument(s) de la métacommande, même si cela s'étend sur plusieurs lignes
(du coup, vous ne pouvez pas faire de scripts de cette façon. Utilisez \i pour cela).

Si vous indiquez un numéro de ligne, psql positionnera le curseur sur cette ligne du chier ou du tampon de requête. Notez
que si un seul argument comportant uniquement des caractères numériques est fourni à la commande, psql considère qu'il
s'agit d'un numéro de ligne, et non pas un nom de chier.

Astuce
Voir dans Environnement comment con gurer et personnaliser votre éditeur.

\echo texte [ ... ]

A che les arguments sur la sortie standard, séparés par un espace et suivis par une nouvelle ligne. Ceci peut être utile pour
intégrer des informations sur la sortie des scripts. Par exemple :

=> \echo `date`


Tue Oct 26 21:40:57 CEST 1999

Si le premier argument est -n sans guillemets, alors la n de ligne n'est pas écrite.

Astuce
Si vous utilisez la commande \o pour rediriger la sortie de la requête, vous pouvez aussi
utiliser \qecho au lieu de cette commande.

\ef [ description_fonction [ line_number ] ]

Cette commande récupère et édite la dé nition de la fonction désignée sous la forme d'une commande CREATE OR REPLACE
FUNCTION. L'édition est faite de la même façon que pour \edit. Une fois l'éditeur fermé, la commande mise à jour attend
dans le tampon de requête ; tapez ; ou \g pour l'envoyer, ou \r pour l'annuler.

La fonction cible peut être spéci ée par son nom seul, ou par son nom et ses arguments, par exemple foo(integer, text).
Les types d'arguments doivent être fournis s'il y a plus d'une fonction du même nom.

Si aucune fonction n'est spéci ée, un modèle d'ordre CREATE FUNCTION vierge est a ché pour édition.

Si vous indiquez un numéro de ligne, psql positionnera le curseur sur cette ligne dans le corps de la fonction. (Notez que le
corps de la fonction, typiquement, ne commence pas sur la première ligne du chier.)

Contrairement à la plupart des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en compte en tant
qu'argument(s) de \ef, et ni l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées sur
les arguments.

Astuce
Voir dans Environnement la façon de con gurer et personnaliser votre éditeur.

\encoding [ codage ]

Initialise l'encodage du jeu de caractères du client. Sans argument, cette commande a che l'encodage actuel.

\errverbose

Répète le message d'erreur le plus récent avec une verbosité maximale, comme si VERBOSITY était con guré à verbose et
SHOW_CONTEXT à always

\ev [ nom_vue [ numero_ligne ] ]

Cette commande récupère et édite la dé nition de la vue désignée, sous la forme d'une commande CREATE OR REPLACE
VIEW. L'édition se termine de la même façon que pour \edit. Après avoir quitté l'éditeur, la commande mise à jour attend
dans le tampon de requête ; saisir un point- virgule ou \g pour l'envoyer, ou \r pour annuler.

Si aucune vue n'est indiquée, un CREATE VIEW modèle est présenté pour l'édition.

Si un numéro de ligne est indiqué, psql positionnera le curseur sur la ligne indiquée pour la dé nition de la vue.

Contrairement à la majorité des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en compte en tant
qu'arguments de \ev, et ni l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées sur les
arguments.

\f [ chaîne ]

Initialise le champ séparateur pour la sortie de requête non alignée. La valeur par défaut est la barre verticale (|). C'est
équivalent à \pset fieldsep.

\g [ nomfichier ]
\g [ |commande ]

Envoie le tampon de requête en entrée vers le serveur et stocke en option la sortie de la requête dans nomfichier ou envoie
dans un tube (pipe) la sortie vers un autre shell exécutant commande au lieu de l'exécuter comme habituellement. Le chier
ou la commande n'est écrit que si la requête renvoit zéro ou plus enregistrements, mais pas si la requête échoue ou s'il s'agit
d'une commande SQL ne renvoyant pas de données.

Si le tampon de la requête est vide, la dernière requête envoyée est ré-exécutée à la place. En dehors de cette exception, \g
sans argument est essentiellement équivalent à un point-virgule. Un \g avec argument est une alternative ponctuelle à la
commande \o.

Si l'argument débute par |, alors l'intégralité du reste de la ligne est pris en tant que commande à exécuter et ni l'interpolation
des variables ni la substitution par guillemets inverses n'y sont e ectuées. Le reste de la ligne est simplement passé
littéralement au shell.

\gexec

Envoie le tampon de requête actuel au serveur, puis traite chaque colonne de chaque ligne du résultat de la requête (s'il y en
a) comme une requête à exécuter. Par exemple, pour créer un index sur chaque colonne de ma_table :

=> SELECT format('create index on ma_table(%I)', attname)


-> FROM pg_attribute
-> WHERE attrelid = 'ma_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

Les requêtes générées sont exécutées dans l'ordre dans lequel les lignes sont renvoyées, et de gauche à droite sur chaque
ligne s'il y a plus d'une colonne. Les champs NULL sont ignorés. Les requêtes générées sont envoyées litéralement au serveur
pour traitement, donc elles ne peuvent pas être des métacommandes psql ni contenir des références de variables psql. Si
une requête individuelle échoue, l'exécution des requêtes suivantes continue, sauf si ON_ERROR_STOP est con guré.
L'exécution de chaque requête est sujette au traitement de ECHO. (Con gurer ECHO à all ou à queries est souvent conseillé
lors de l'utilisation de \gexec.) La trace de requêtes, le mode étape par étape, le chronométrage et les autres fonctionnalités
d'exécution des requêtes s'appliquent aussi à chaque requête générée.

Si le tampon de requête courant est vide, la dernière requête envoyée est ré-exécutée à la place.

\gset [ préfixe ]

Envoie la requête courante du tampon au serveur et stocke le résultat de la requête dans des variables psql (voir Variables).
La requête à exécuter doit renvoyer exactement une ligne. Chaque colonne de la ligne est enregistrée dans une variable
séparée, nommée de la même façon que la colonne. Par exemple :

=> SELECT 'bonjour' AS var1, 10 AS var2


-> \gset
=> \echo :var1 :var2
bonjour 10

Si vous précisez un pré xe préfixe, cette chaîne est ajoutée aux noms de colonne de la requête pour créer les noms de
variable à utiliser :

=> SELECT 'bonjour' AS var1, 10 AS var2


-> \gset result_
=> \echo :result_var1 :result_var2
bonjour 10

Si le résultat d'une colonne est NULL, la variable correspondante n'est pas initialisée.

Si la requête échoue ou ne renvoie pas une ligne, aucune variable n'est modi ée.

Si le tampon de requête courant est vide, la dernière requête envoyée est ré-exécutée à la place.

\gx [ filename ]
\gx [ |command ]

\gx est équivalent à \g, mais force l'a chage étendu pour cette requête. Voir \x.

\h (ou \help) [ commande ]

Fournit la syntaxe sur la commande SQL spéci ée. Si commande n'est pas spéci ée, alors psql liste toutes les commandes pour
lesquelles une aide en ligne est disponible. Si commande est un astérisque (*), alors l'aide en ligne de toutes les commandes
SQL est a chée.

Contrairement à la plupart des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en compte en tant
qu'argument(s) de \help, et ni l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées sur
les arguments.

Note
Pour simpli er la saisie, les commandes qui consistent en plusieurs mots n'ont pas besoin
d'être entre guillemets. Du coup, il est correct de saisir \help alter table.

\H ou \html

Active le format d'a chage HTML des requêtes. Si le format HTML est déjà activé, il est basculé au format d'a chage défaut
(texte aligné). Cette commande existe pour la compatibilité et la praticité, mais voyez \pset pour con gurer les autres options
d'a chage.

\i ou \include nomfichier

Lit l'entrée à partir du chier nomfichier et l'exécute comme si elle avait été saisie sur le clavier.

Si nomfichier est - (tiret), l'entrée standard est lue jusqu'à une indication EOF ou la métacommande \q. Ceci peut être utilisé
pour intercaler des entrées interactives entre des entrées de chiers. Notez que le comportement de Readline ne sera activé
que s'il est actif au niveau supérieur.

Note
Si vous voulez voir les lignes sur l'écran au moment de leur lecture, vous devez initialiser
la variable ECHO à all.

\if expression
\elif expression
\else
\endif

Ce groupe de commandes implémente les blocs conditionnels imbriqués. Un bloc conditionnel doit commencer par un \if et
se terminer par un \endif. Entre les deux, il peut y avoir plusieurs clauses \elif, pouvant être suivies facultativement par
une unique clause \else. Des requêtes ordinaires et d'autres commandes antislash peuvent apparaître (et c'est
généralement le cas) entre les commandes formant le bloc conditionnel.

Les commandes \if et \elif lisent leurs arguments et les évaluent en tant qu'expression booléenne. Si l'expression renvoie
true, alors le traitement continue normalement ; sinon, les lignes sont ignorées jusqu'à un \elif, \else, ou \endif
correspondant. Dès qu'un test \if ou \elif a réussi, les arguments des commandes \elif ultérieures du même bloc ne
sont pas évaluées mais sont traitées comme fausses. Les lignes qui suivent un \else ne sont traitées que si aucune
commande \if or \elif correspondante n'a réussie.

L'argument d'expression d'une commande \if or \elif est soumis à l'interpolation des variables et la substitution par
guillemets inverses, tout comme n'importe quelle autre commande antislash. Après cela, il est évalué comme la valeur d'une
variable d'option on/o . Une valeur valide est n'importe quelle correspondance non sensible à la case et non-ambiguë
parmi : true, false, 1, 0, on, off, yes, no. Par exemple, t, T et tR seront tous considérés comme true.

Les expressions ne s'évaluant pas correctement à vrai ou faux généreront un avertissement et seront traitées comme fausses.

Les lignes qui sont évitées sont analysées syntaxiquement pour identi er les requêtes et les commandes antislash, mais les
requêtes ne sont pas envoyées au serveur, et les commandes antislash autres que conditionnelles (\if, \elif, \else,
\endif) sont ignorées. Les commandes conditionnelles sont véri ées seulement pour valider l'emboîtement. Les références
des variables des lignes évitées ne sont pas interpolées et les substitutions par guillemets inverses ne seront pas e ectuées
non plus.

Toutes les commandes antislash d'un bloc conditionnel doivent apparaître dans le même chier source. Si EOF est atteint
dans le chier d'entrée principal ou un chier \include avant que tous les blocs \if locaux ne soient fermés, alors psql
générera une erreur.

Voici un exemple :

-- vérifier l'existence de deux enregistrements distincts dans la base et


-- enregistrer les résultats dans deux variables psql différentes
SELECT
EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :est_client
SELECT * FROM customer WHERE customer_id = 123;
\elif :est_employe
\echo 'est un employé mais pas un client'
SELECT * FROM employee WHERE employee_id = 456;
\else
\if yes
\echo 'ni un client ni un employé'
\else
\echo 'ce message ne s\'affichera jamais'
\endif
\endif

\ir ou \include_relative nom_fichier

La commande \ir est similaire à \i, mais résout les chemins di éremment. Lors d'une exécution en mode interactif, les deux
commandes se comportent de la même façon. Néanmoins, lorsqu'elles sont appelées par un script, \ir interprète les
chemins à partir du répertoire où le script est enregistré, plutôt qu'à partir du répertoire courant.

\l[+] ou \list[+] [ motif ]

Liste les bases de données du serveur en indiquant leur nom, propriétaire, encodage de caractères, et droits d'accès. Si
pattern est spéci é, seules les bases de données dont le nom correspond au motif sont listées. Si + est ajouté à la n de la
commande, la taille des bases, les tablespaces par défaut et les descriptions sont aussi a chées. (Les tailles ne sont
disponibles que pour les bases auxquelles l'utilisateur courant a le droit de se connecter.)

\lo_export loid nomfichier

Lit l'objet large d'OID loid à partir de la base de données et l'écrit dans nomfichier. Notez que ceci est subtilement di érent
de la fonction serveur lo_export, qui agit avec les droits de l'utilisateur avec lequel est exécuté le serveur de base de
données et sur le système de chiers du serveur.

Astuce
Utilisez \lo_list pour trouver l'OID de l'objet large.

\lo_import nomfichier [ commentaire ]

Stocke le chier dans un Large Object PostgreSQL. En option, il associe le commentaire donné avec l'objet. Exemple :

foo=> \lo_import '/home/pierre/pictures/[Link]' 'une


photo de moi'
lo_import 152801

La réponse indique que le Large Object a reçu l'ID 152801, qui peut être utilisé pour accéder de nouveau à l'objet créé. Pour
une meilleure lisibilité, il est recommandé de toujours associer un commentaire compréhensible par un humain avec chaque
objet. Les OID et les commentaires sont visibles avec la commande \lo_list.

Notez que cette commande est subtilement di érente de la fonction serveur lo_import car elle agit en tant qu'utilisateur
local sur le système de chier local plutôt qu'en tant qu'utilisateur du serveur et de son système de chiers.

\lo_list

A che une liste de tous les Large Objects PostgreSQL actuellement stockés dans la base de données, avec tous les
commentaires fournis par eux.

\lo_unlink loid

Supprime le Large Object d'OID loid de la base de données.

Astuce
Utilisez \lo_list pour trouver l'OID d'un Large Object.

\o ou \out [ nomfichier ]
\o ou \out [ |commande ]

S'arrange pour sauvegarder les résultats des prochaines requêtes dans le chier nomfichier ou d'envoyer les résultats à la
commande shell commande. Si aucun argument n'est fourni, le résultat de la requête va sur la sortie standard.

Si l'argument commence par |, alors l'intégralité du reste de la ligne est considérée en tant que commande à exécuter et ni
l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées. Le reste de ligne est simplement
envoyée littéralement au shell.

Les « résultats de requête » incluent toutes les tables, réponses de commande et messages d'avertissement obtenus du
serveur de bases de données, ainsi que la sortie de di érentes commandes antislash qui envoient des requêtes à la base de
données (comme \d), mais sans message d'erreur.

Astuce
Pour intercaler du texte entre des résultats de requête, utilisez \qecho.

\p ou \print

A che le tampon de requête actuel sur la sortie standard. Si le tampon de requête actuel est vide, la requête la plus
récemment exécutée est a chée à la place.

\password [ nom_utilisateur ]

Modi e le mot de passe de l'utilisateur indiqué (par défaut, l'utilisateur en cours). Cette commande demande le nouveau mot
de passe, le chi re et l'envoie au serveur avec la commande ALTER ROLE. Ceci vous assure que le nouveau mot de passe
n'apparaît pas en clair dans l'historique de la commande, les traces du serveur ou ailleurs.

\prompt [ texte ] nom

Demande la saisie d'un texte par l'utilisateur. Ce texte sera a ecté à la variable nom. Une chaîne supplémentaire, texte, peut
être donnée. (Pour pouvoir saisir plusieurs mots, entourez le texte par des guillemets simples.)

Par défaut, \prompt utilise le terminal pour les entrées et sorties. Néanmoins, si la bascule -f est utilisée, \prompt utilise
l'entrée et la sortie standard.

\pset [ option [ valeur ] ]

Cette commande initialise les options a ectant l'a chage des tableaux de résultat de requête. option décrit l'option à
initialiser. La sémantique de valeur varie en fonction de l'option sélectionnée. Pour certaines options, omettre valeur a pour
conséquence de basculer ou désactiver l'option, tel que cela est décrit pour chaque option. Si aucun comportement de ce
type n'est mentionné, alors omettre valeur occasionne simplement l'a chage de la con guration actuelle.

\pset sans aucun argument a che l'état actuel de toutes les options d'a chage.

Les options ajustables d'a chage sont :

border

Le valeur doit être un nombre. En général, plus grand est ce nombre, plus les tables ont de bordures et de lignes mais
ceci dépend du format. Dans le format HTML, cela se traduira directement en un attribut border=.... Dans la plupart
des autres formats, seules les valeurs 0 (sans bordure), 1 (lignes interne de séparation) et 2 (cadre du tableau) ont un
sens, et les valeurs au-dessus de 2 seront traitées de la même façon que border = 2. Les formats latex et latex-
longtable autorisent en plus une valeur de 3 pour ajouter des lignes de séparation entre les lignes de données.

columns

Positionne la largeur pour le format wrapped , ainsi que la largeur à partir de laquelle la sortie est su samment longue
pour nécessiter le paginateur ou pour basculer sur l'a chage vertical dans le mode étendu automatique. Si l'option est
positionnée à zéro (la valeur par défaut), la largeur de la colonne est contrôlée soit par la variable d'environnement
COLUMNS, soit par la largeur d'écran détectée si COLUMNS n'est pas positionnée. De plus, si columns vaut zéro, alors le
format wrapped a ecte seulement la sortie écran. Si columns ne vaut pas zéro, alors les sorties chier et tubes (pipes)
font l'objet de retours à la ligne à cette largeur également.

expanded (ou x)

Si une valeur est précisée, elle doit être soit on soit off, ce qui activera ou désactivera le mode étendu, soit auto. Si
valeur est omis, la commande bascule le paramètre entre les valeurs on et o . Quand le mode étendu est activé, les
résultats des requêtes sont a chés sur deux colonnes, avec le nom de la colonne sur la gauche et ses données sur la
droite. Ce mode est utile si la donnée ne tient pas sur l'écran dans le mode « horizontal » habituel. Dans le mode auto, le
mode étendu est utilisé quand la sortie de la requête a plus d'une colonne et est plus large que l'écran. Sinon, le mode
habituel est utilisé. Le mode auto est seulement intéressant lors de l'utilisation des formats aligné et wrapped . Si
d'autres formats sont sélectionnés, il se comporte toujours comme si le mode étendu était désactivé.

fieldsep

Indique le séparateur de champ à utiliser dans le mode d'a chage non aligné. De cette façon, vous pouvez créer, par
exemple, une sortie séparée par des tabulations ou des virgules, que d'autres programmes pourraient préférer. Pour
con gurer une tabulation comme champ séparateur, saisissez \pset fieldsep '\t'. Le séparateur de champ par
défaut est '|' (une barre verticale).

fieldsep_zero

Con gure le séparateur de champs pour qu'il utilise un octet zéro dans le format non aligné en sortie.

footer

Si le paramètre valeur est précisé, il doit valoir soit on, soit off, ce qui a pour e et d'activer ou de désactiver l'a chage
du pied de tableau (le compte : (n rows)). Si le paramètre valeur est omis, la commande bascule entre l'a chage du
pied de table ou sa désactivation.

format

Initialise le format d'a chage parmi unaligned, aligned, wrapped, html, asciidoc, latex (utilise tabular), latex-
longtable ou troff-ms. Les abréviations uniques sont autorisées.

Le format unaligned écrit toutes les colonnes d'un enregistrement sur une seule ligne, séparées par le séparateur de
champ courant. Ceci est utile pour crééer des sorties qui doivent être lues par d'autres programmes (au format séparé
par des caractère tabulation ou par des virgules, par exemple).

Le format aligned est le format de sortie texte standard, lisible par les humains, joliement formaté ; c'est le format par
défaut.

Le format wrapped est comme aligned, sauf qu'il retourne à la ligne dans les données de grande taille a n que la sortie
tienne dans la largeur de colonne cible. La largeur cible est déterminée comme décrit à l'option columns. Notez que psql
n'essaie pas de revenir à la ligne dans les titres de colonnes. Par conséquent, si la largeur totale nécessaire pour le titre
de colonne est plus grande que la largeur cible, le format wrapped se comporte de la même manière que aligned.

Les formats html, asciidoc, latex, latex-longtable et troff-ms produisent des tableaux destinées à être inclus dans
des documents utilisant les langages de balisage respectifs. Ce ne sont pas des documents complets ! Ce n'est pas
forcément nécessaire en HTML mais en LaTeX, vous devez avoir une structure de document complet. latex-longtable
nécessite aussi les paquets LaTeX longtable et booktabs.

linestyle

Positionne le style des lignes de bordure sur ascii, old-ascii unicode. Les abréviations uniques sont autorisées. (Cela
signi e qu'une lettre su t.) La valeur par défaut est ascii. Cette option a ecte seulement les formats de sortie aligned
et wrapped.

Le style ascii utilise les caractères basiques ASCII. Les retours à la ligne dans les données sont représentés par un
symbole + dans la marge de droite. Quand le format wrapped déroule les données d'une ligne à l'autre sans caractère
retour à la ligne, un point (.) est a ché dans la marge droite de la première ligne et à nouveau dans la marge gauche de
la ligne suivante.

Le style old-ascii utilise des caractères basiques ASCII, utilisant le style de formatage utilisé dans PostgreSQL 8.4 and
et les versions plus anciennes. Les retours à la ligne dans les données sont représentés par un symbole : à la place du
séparateur de colonnes placé à gauche. Quand les données sont réparties sur plusieurs lignes sans qu'il y ait de
caractère de retour à la ligne dans les données, un symbole ; est utilisé à la place du séparateur de colonne de gauche.

Le style unicode utilise les caractères Unicode de dessin de boîte. Les retours à la ligne dans les données sont
représentés par un symbole de retour à la ligne dans la marge de droite. Lorsque les données sont réparties sur
plusieurs lignes, sans qu'il y ait de caractère de retour à la ligne dans les données, le symbole ellipse est a ché dans la
marge de droite de la première ligne, et également dans la marge de gauche de la ligne suivante.

Quand le paramètre border vaut plus que zéro, l'option linestyle détermine également les caractères utilisés pour
dessiner les lignes de bordure. Les simples caractères ASCII fonctionnent partout, mais les caractères Unicode sont plus
jolis sur les a chages qui les reconnaissent.

null

Positionne la chaîne de caractères à a cher à la place d'une valeur null. Par défaut rien n'est a ché, ce qui peut
facilement être confondu avec une chaîne de caractères vide. Par exemple, on peut préférer \pset null '(null)'.

numericlocale

Si valeur est précisée, elle doit valoir soit on, soit off a n d'activer ou désactiver l'a chage d'un caractère dépendant
de la locale pour séparer des groupes de chi res à gauche du séparateur décimal. Si valeur est omise, la commande
bascule entre la sortie numérique classique et celle spéci que à la locale.

pager

Contrôle l'utilisation d'un paginateur pour les requêtes et les a chages de l'aide de psql. Si la variable d'environnement
PAGER est con gurée, la sortie est envoyée via un tube (pipe) dans le programme spéci é. Sinon, une valeur par défaut
dépendant de la plateforme (comme more) est utilisée.

Quand l'option pager vaut off, le paginateur n'est pas utilisé. Quand l'option pager vaut on, et que cela est approprié,
c'est-à-dire quand la sortie est dirigée vers un terminal et ne tient pas dans l'écran, le paginateur est utilisé. L'option
pager peut également être positionnée à always, ce qui a pour e et d'utiliser le paginateur pour toutes les sorties
terminal, que ces dernières tiennent ou non dans l'écran. \pset pager, sans préciser valeur, bascule entre les états
"paginateur activé" et "paginateur désactivé".

pager_min_lines

Si pager_min_lines est con guré à un numéro supérieur à la hauteur de page, le programme de pagination ne sera
appelé que s'il y a au moins ce nombre de lignes à a cher. La con guration par défaut est 0.

recordsep

Indique le séparateur d'enregistrement (ligne) à utiliser dans le mode d'a chage non aligné. La valeur par défaut est un
caractère de retour chariot.

recordsep_zero

Con gure le séparateur d'enregistrements pour qu'il utilise un octet zéro dans le format non aligné en sortie.

tableattr (ou T)

Dans le format HTML, ceci indique les attributs à placer dans la balise table. Ce pourrait être par exemple cellpadding
ou bgcolor. Notez que vous ne voulez probablement pas spéci er border puisqu'il est déjà pris en compte par \pset
border. Si valeur n'est pas précisée, aucun attribut de table n'est positionné.

Dans le format latex-longtable, ceci contrôle la largeur proportionnelle de chaque colonne contenant un type de
données aligné à gauche. Il est spéci é en tant que liste de valeurs séparées par des espaces blancs, par exemple '0.2
0.2 0.6'. Les colonnes en sortie non spéci ées utilisent la dernière valeur indiquée.

title (or C)

Initialise le titre de la table pour toutes les tables a chées ensuite. Ceci peut être utilisé pour ajouter des balises de
description à l'a chage. Si aucun valeur n'est donné, le titre n'est pas initialisé.

tuples_only (ou t)

Si valeur est spéci ée, elle doit valoir soit on, soit off, ce qui va activer ou désactiver le mode « tuples seulement ». Si
valeur est omise, la commande bascule entre la sortie normale et la sortie « tuples seulement ». La sortie normale
comprend des informations supplémentaires telles que les en-têtes de colonnes, les titres, et di érents pieds. Dans le
mode « tuples seulement », seules les données de la table sont a chées.

unicode_border_linestyle

Con gure le style d'a chage de la bordure pour le style de ligne unicode soit à single soit à double.

unicode_column_linestyle

Con gure le style d'a chage de la colonne pour le style de ligne unicode soit à single soit à double.

unicode_header_linestyle

Con gure le style d'a chage de l'en-tête pour le style de ligne unicode soit à single soit à double.

Des exemples d'utilisation de ces di érents formats sont disponibles dans la section Exemples.

Astuce
Il existe plusieurs raccourcis de commandes pour \pset. Voir \a, \C, \f, \H, \t, \T et \x.

\q ou \quit

Quitte le programme psql. Avec un script, seule l'exécution du script est terminée.

\qecho texte [ ... ]

Cette commande est identique à \echo sauf que les a chages sont écrits dans le canal d'a chage des requêtes, con guré
par \o.

\r ou \reset

Réinitialise (e ace) le tampon de requêtes.

\s [ nomfichier ]

Envoie l'historique de la ligne de commandes de psql dans nomfichier. Si nomfichier est omis, l'historique est écrit sur la
sortie standard (en utilisant le paginateur si approprié). Cette commande n'est pas disponible si psql a été construit sans le
support de Readline.

\set [ nom [ valeur [ ... ]]]

Initialise la variable nom de psql à valeur ou, si plus d'une valeur est donnée, à la concaténation de toutes les valeurs. Si un
seul argument est donné, la variable est con gurée avec une valeur vide. Pour désinitialiser une variable, utilisez la
commande \unset.

\set sans arguments a che le nom et la valeur de toutes les variables psql actuellement con gurées.

Les noms de variables valides peuvent contenir des lettres, chi res et tirets bas (_). Voir la section Variables ci-dessous pour
les détails. Les noms des variables sont sensibles à la casse.

Certaines variables sont spéciales, dans le sens qu'elles contrôlent le comportement de psql ou qu'elles sont mises à jour
pour re éter l'état de la connexion. Ces variables sont documentées plus bas dans Variables.

Note
Cette commande est sans relation avec la commande SQL SET.

\setenv nom [ valeur ]

Con gure la variable d'environnement nom à valeur, ou si la valeur n'est pas fournie, désinitialise la variable
d'environnement. Par exemple :

testdb=> \setenv PAGER less


testdb=> \setenv LESS -imx4F

\sf[+] description_fonction

Cette commande récupère et a che la dé nition d'une fonction sous la forme d'une commande CREATE OR REPLACE
FUNCTION. La dé nition est a chée via le canal de sortie courant, tel que dé ni par \o.

La fonction cible peut être spéci ée par son seul nom, ou bien par ses nom et arguments, par exemple, foo(integer,
text). Fournir les types des arguments devient obligatoire si plusieurs fonctions portent le même nom.

Si + est ajouté à la commande, les numéros de lignes sont a chés, la ligne 1 débutant à partir du corps de la fonction.

Contrairement à la majorité des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en tant
qu'argument(s) de \sf et ni l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées.

\sv[+] view_name

Cette commande récupère et a che la dé nition de la vue nommée, dans la forme d'une commande CREATE OR REPLACE
VIEW. La dé nition est a chée au travers du canal de sortie actuel, comme con guré par \o.

Si + est ajouté au nom de commande, les lignes de sorties sont numérotées à partir de 1.

Contrairement à la majorité des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en tant
qu'argument(s) de \sv et ni l'interpolation des variables ni la substitution par guillemets inverses ne sont e ectuées dans les
arguments.

\t

Bascule l'a chage des en-têtes de nom de colonne en sortie et celle du bas de page indiquant le nombre de lignes. Cette
commande est équivalente à \pset tuples_only et est fournie pour en faciliter l'accès.

\T options_table

Spéci e les attributs qui seront placés dans le tag table pour le format de sortie HTML. Cette commande est équivalente à
\pset tableattr options_table.

\timing [ on | off ]

Avec un paramètre, a che ou supprime l'a chage du temps d'exécution de chaque requête. Sans paramètre, commute
l'a chage entre on et o . L'a chage est en millisecondes ; les intervalles plus longs qu'une seconde sont a chés au format
minutes:secondes et les champs heures et jours sont ajoutés si nécessaires.

\unset nom

Désinitialise (supprime) la variable psql nom.

La plupart des variables qui contrôlent le comportement de psql ne peuvent pas être désinitialisées ; la commande \unset
est interprétée comme les remettant à leur valeur par défaut. Voir Variables plus bas.

\w ou \write nomfichier
\w ou \write |commande

Place le tampon de requête en cours dans le chier nomfichier ou l'envoie via un tube à la commande shell commande. Si le
tampon de requête actuel est vide, la dernière requête exécutée est a chée à nouveau.

Si l'argument débute par |, alors l'intégralité du reste de la ligne est pris en tant que commande à exécuter et ni l'interpolation
des variables ni la substitution par guillemets inverses n'y sont e ectuées. Le reste de la ligne est simplement passé
littéralement au shell.

\watch [ seconds ]

Exécute en répété le tampon de requête courant (comme \g) jusqu'à être interrompu explicitement ou que la requête
échoue. Attend le nombre spéci é de secondes (2 par défaut) entre les exécutions. Chaque résultat de requête est a ché
avec un en-tête qui inclut la chaîne \pset title (si c'est activé), l'heure du début de la requête, et l'intervalle.

Si le tampon de requête actuel est vide, la dernière requête envoyée est exécutée à nouveau.

\x [ on | off | auto ]

Con gure ou bascule le mode étendu de formatage en table. C'est équivalent à \pset expanded.

\z [ motif ]

Liste les tables, vues et séquences avec leur droits d'accès associés. Si un motif est spéci é, seules les tables, vues et
séquences dont le nom correspond au motif sont listées.

Ceci est un alias pour \dp (« a chage des droits »).

\! [ commande ]

Sans argument, échappe vers un sous-shell ; psql reprendra quand le sous-shell se terminera. Avec un argument, exécute la
commande shell commande.

Contrairement à la majorité des autres métacommandes, l'intégralité du reste de la ligne est toujours pris en compte en tant
qu'arguments de \!, et ni l'interpolation des variables ni la substitution par guillemets inverses ne seront e ectuées sur les
arguments. Le reste de la ligne est simplement envoyé directement au shell.

\? [ thème ]

A che l'aide. Le paramètre optionnel thème (par défaut à commands) sélectionne les parties de psql à expliquer : commands
décrit les métacommandes de psql ; options décrit les options en ligne de commande de psql ; et variables a che de l'aide
sur les variables de con guration de psql.

Motifs

Les di érentes commandes \d acceptent un paramètre motif pour spéci er le(s) nom(s) d'objet à a cher. Dans le cas le plus simple,
un motif est seulement le nom exact de l'objet. Les caractères à l'intérieur du motif sont normalement mis en minuscule comme pour
les noms SQL ; par exemple, \dt FOO a chera la table nommée foo. Comme pour les noms SQL, placer des guillemets doubles autour
d'un motif empêchera la mise en minuscule. Si vous devez inclure un guillemet double dans un motif, écrivez-le en double en accord
avec les règles sur les identi ants SQL. Par exemple, \dt "FOO""BAR" a chera la table nommée FOO"BAR (et non pas foo"bar).
Contrairement aux règles normales pour les noms SQL, vous pouvez placer des guillemets doubles simplement autour d'une partie
d'un motif, par exemple \dt FOO"FOO"BAR a chera la table nommée fooFOObar.

Lorsque le paramètre motif est complètement absent, la commande \d a che tous les objets visibles dans le chemin de recherche
courant -- cela est équivalent à l'utilisation du motif *. (Un objet est dit visible si le schéma qui le contient est dans le chemin de
recherche et qu'aucun objet de même type et même nom n'apparaît avant dans le chemin de recherche. Cela est équivalent à dire que
l'objet peut être référencé par son nom sans préciser explicitement le schéma.) Pour voir tous les objets de la base quelle que soit leur
visibilité, utilisez le motif *.* .

À l'intérieur d'un motif, * correspond à toute séquence de caractères (et aussi à aucun) alors que ? ne correspond qu'à un seul
caractère. (Cette notation est comparable à celle des motifs de nom de chier Unix.) Par exemple, \dt int* a che les tables dont le
nom commence avec int. Mais à l'intérieur de guillemets doubles, * et ? perdent leurs signi cations spéciales et sont donc traités
directement.

Un motif qui contient un point (.) est interprété comme le motif d'un nom de schéma suivi par celui d'un nom d'objet. Par exemple,
\dt foo*.*bar* a che toutes les tables dont le nom inclut bar et qui sont dans des schémas dont le nom commence avec foo. Sans
point, le motif correspond seulement aux objets qui sont visibles dans le chemin de recherche actuel des schémas. De nouveau, un
point dans des guillemets doubles perd sa signi cation spéciale et est traité directement.

Les utilisateurs avancés peuvent utiliser des expressions rationnelles comme par exemple les classes de caractère ([0-9] pour tout
chi re). Tous les caractères spéciaux d'expression rationnelle fonctionnent de la façon indiquée dans Section 9.7.3, sauf pour le . qui
est pris comme séparateur (voir ci-dessus), l'étoile (*) qui est transformée en l'expression rationnelle .* et ? qui est transformée en .,
et $ qui est une correspondance littérale. Vous pouvez émuler ces caractères si besoin en écrivant ? pour ., (R+|) pour R* et (R|)
pour R?. $ n'est pas nécessaire en tant que caractère d'une expression rationnelle car le motif doit correspondre au nom complet,
contrairement à l'interprétation habituelle des expressions rationnelles (en d'autres termes, $ est ajouté automatiquement à votre
motif). Écrivez * au début et/ou à la n si vous ne souhaitez pas que le motif soit ancré. Notez qu'à l'intérieur de guillemets doubles,
tous les caractères spéciaux des expressions rationnelles perdent leur signi cation spéciale et sont traités directement. De plus, ces
caractères sont traités littéralement dans les motifs des noms d'opérateurs (par exemple pour l'argument de \do).

Fonctionnalités avancées

Variables

psql fournit des fonctionnalités de substitution de variable similaire aux shells de commandes Unix. Les variables sont simplement des
paires nom/valeur où la valeur peut être toute chaîne, quelle que soit sa longueur. Le nom doit consister en lettres (incluant les lettres
non latines), chi res et tirets bas.

Pour con gurer une variable, utilisez la métacommande psql \set. Par exemple :

basetest=> \set foo bar

initialise la variable foo avec la valeur bar. Pour récupérer le contenu de la variable, précédez le nom avec un caractère deux-points,
par exemple :

basetest=> \echo :foo


bar

Ceci fonctionne avec les commandes SQL et les métacommandes standards. Il y a plus de détails dans Interpolation SQL, ci-dessous.

Si vous appelez \set sans second argument, la variable est initialisée avec une chaîne vide. Pour désinitialiser (c'est-a-dire supprimer)
une variable, utilisez la commande \unset. Pour a cher les valeurs de toutes les variables, appelez \set sans argument.

Note
Les arguments de \set sont sujets aux même règles de substitution que les autres
commandes. Du coup, vous pouvez construire des références intéressantes comme \set :foo
'quelquechose' et obtenir des « liens doux » ou des « variables de variables » comme,
respectivement, en Perl ou PHP. Malheureusement (ou heureusement ?), on ne peut rien faire
d'utile avec ces constructions. D'un autre côté, \set bar :foo est un moyen parfaitement
valide de copier une variable.

Un certain nombre de ces variables sont traitées d'une façon particulière par psql. Elles représentent certaines con gurations
d'options pouvant être changées à l'exécution en modi ant la valeur de la variable ou, dans certains cas, représentent un état
modi able de psql. La convention veut que tous les noms de variables traités spécialement utilisent des lettres ASCII en majuscule (et
éventuellement des chi res et des tirets bas). Pour s'assurer une compatibilité maximum dans le futur, éviter d'utiliser de tels noms de
variables pour vos propres besoins.

Les variables qui contrôlent le comportement de psql ne peuvent pas être désinitialisées ou se voir a ecter des valeurs incorrectes.
Une commande \unset est autorisée mais interprétée comme remettant la variable à sa valeur par défaut. Une commande \set sans
second argument est interprétée comme a ectant on à la variable, pour les variables de contrôle qui acceptent cette valeur, et sera
rejeté pour les autres. Les variables de contrôle qui acceptent les valeurs on et off accepteront également d'autres formes communes
d'écriture des valeurs booléennes, comme true et false.

Voici une liste des variables spéciales :

AUTOCOMMIT

Si actif (on, valeur par défaut), chaque commande SQL est automatiquement validée si elle se termine avec succès. Pour
suspendre la validation dans ce mode, vous devez saisir une commande SQL BEGIN ou START TRANSACTION. Lorsqu'elle est
désactivée (off) ou non initialisée, les commandes SQL ne sont plus validées tant que vous ne lancez pas explicitement
COMMIT ou END. Le mode sans autocommit fonctionne en lançant implicitement un BEGIN, juste avant toute commande qui
n'est pas déjà dans un bloc de transaction et qui n'est pas elle-même un BEGIN ou une autre commande de contrôle de
transaction, ou une commande qui ne peut pas être exécutée à l'intérieur d'un bloc de transaction (comme VACUUM).

Note
Dans le mode sans autocommit, vous devez annuler explicitement toute transaction
échouée en saisissant ABORT ou ROLLBACK. Gardez aussi en tête que si vous sortez d'une
session sans validation, votre travail est perdu.

Note
Le mode auto-commit est le comportement traditionnel de PostgreSQL alors que le mode
sans autocommit est plus proche des spéci cations SQL. Si vous préférez sans
autocommit, vous pouvez le con gurer dans le chier psqlrc global du système ou dans
votre chier ~/.psqlrc.

COMP_KEYWORD_CASE

Détermine la casse à utiliser lors de la complétion d'un mot clé SQL. S'il est con guré à lower ou upper, le mot complété sera,
respectivement, en minuscule ou en majuscule. Si la variable est con gurée à preserve-lower ou preserve-upper (valeur
par défaut), le mot complété sera dans la casse du mot déjà saisi, mais les mots qui n'ont pas eu un début de saisie seront
complétés, respectivement, soit en minuscule soit en majuscule.

DBNAME

Le nom de la base de données à laquelle vous êtes actuellement connecté. Ceci est con guré à chaque fois que vous vous
connectez à une base de données (ainsi qu'au lancement du programme) mais peut être changé ou désinitialisé.

ECHO

Si cette variable est initialisée à all, toutes les lignes non vides saisies sont envoyées sur la sortie standard tout de suite
après leur lecture. (Ceci ne s'applique pas aux lignes lues de façon interactive.) Pour sélectionner ce comportement au
lancement du programme, utilisez l'option -a. Si ECHO vaut queries, psql a che chaque requête sur la sortie standard
comme elle est envoyée au serveur. L'option pour choisir ce comportement est -e. Si elle est con gurée à errors, seules les
requêtes échouées seront a chées sur la sortie standard des erreurs. L'option en ligne de commande pour ce comportement
est -b. Si elle est con gurée à none (valeur par défaut), alors aucune requête n'est a chée.

ECHO_HIDDEN

Quand cette variable est initialisée à on et qu'une commande antislash est envoyée à la base de données, la requête est
d'abord a chée. Cette fonctionnalité vous aide à étudier le fonctionnement interne de PostgreSQL et fournir des
fonctionnalités similaires dans vos propres programmes. (Pour sélectionner ce comportement au lancement du programme,
utilisez l'option -E.) Si vous con gurez la variable avec la valeur noexec, les requêtes sont juste a chées mais ne sont pas
réellement envoyées au serveur ni exécutées. La valeur par défaut est off.

ENCODING

Le codage courant du jeu de caractères du client. Il est xé à chaque fois que vous vous connectez à une base de données (y
compris au démarrage du programme), et quand vous changez l'encodage avec \encoding, mais il peut être changé ou
désinitialisé.

FETCH_COUNT

Si cette variable est un entier plus grand que zéro, les résultats des requêtes SELECT sont récupérés et a chés en groupe de
ce nombre de lignes, plutôt que par le comportement par défaut (récupération de l'ensemble complet des résultats avant
l'a chage). Du coup, seule une petite quantité de mémoire est utilisée, quelle que soit la taille de l'ensemble des résultats.
Une con guration entre 100 et 1000 est habituellement utilisée lors de l'activation de cette fonctionnalité. Gardez en tête que
lors de l'utilisation de cette fonctionnalité, une requête pourrait échouer après avoir a ché quelques lignes.

Astuce
Bien que vous puissiez utiliser tout format de sortie avec cette fonctionnalité, le format
par défaut, aligned, rend mal car chaque groupe de FETCH_COUNT lignes sera formaté
séparément, modi ant ainsi les largeurs de colonnes suivant les lignes du groupe. Les
autres formats d'a chage fonctionnent mieux.

HISTCONTROL

Si cette variable est con gurée à ignorespace, les lignes commençant avec un espace n'entrent pas dans la liste de
l'historique. Si elle est initialisée avec la valeur ignoredups, les lignes correspondant aux précédentes lignes de l'historique
n'entrent pas dans la liste. Une valeur de ignoreboth combine les deux options. Si elle est con gurée avec none), toutes les
lignes lues dans le mode interactif sont sauvegardées dans la liste de l'historique.

Note
Cette fonctionnalité a été plagiée sans vergogne sur Bash.

HISTFILE

Le nom du chier utilisé pour stocker l'historique. Si désinitialisé, le nom du chier sera la valeur de la variable
d'environnement PSQL_HISTORY. Si celle-ci n'est pas initialisée, la valeur par défaut sera ~/.psql_history ou
%APPDATA%\postgresql\psql_history sur Windows. Par exemple, mettre :

Note
Cette fonctionnalité a été plagiée sans vergogne sur Bash.

HISTSIZE

Le nombre maximum de commandes à stocker dans l'historique des commandes (par défaut 500). Aucune limite ne sera
appliquée si une valeur négative est donnée.

Note
Cette fonctionnalité a été plagiée sans vergogne sur Bash.

HOST

L'hôte du serveur de la base de données sur lequel vous êtes actuellement connecté. Ceci est con guré à chaque fois que
vous vous connectez à une base de données (ainsi qu'au lancement du programme) mais peut être changé ou désinitialisé.

IGNOREEOF

Si con guré à 1 ou inférieur, envoyer un caractère EOF (habituellement Ctrl+D) dans une session interactive de psql ferme
l'application. Si con guré à une valeur numérique supérieure, alors autant de caractères EOF consécutifs doivent être saisis
pour terminer une session interactive. Une valeur non numérique sera interprétée comme valant 10. La valeur par défaut est
0.

Note
Cette fonctionnalité a été plagiée sans vergogne sur Bash.

LASTOID

La valeur du dernier OID a ecté, renvoyée à partir d'une commande INSERT ou lo_import. La validité de cette variable est
seulement garantie jusqu'à l'a chage du résultat de la commande SQL suivante.

ON_ERROR_ROLLBACK

Lorsqu'il est actif (on), si une instruction d'un bloc de transaction génère une erreur, cette dernière est ignorée et la
transaction continue. Lorsqu'il vaut interactive, ces erreurs sont seulement ignorées lors des sessions interactives, mais ne
le sont pas lors de la lecture de scripts. Lorsqu'il est con guré à off (valeur par défaut), une instruction générant une erreur
dans un bloc de transaction annule la transaction complète. Le mode avec on fonctionne en exécutant un SAVEPOINT implicite
pour vous, juste avant chaque commande se trouvant dans un bloc de transaction, et annule jusqu'au point de sauvegarde si
la commande échoue.

ON_ERROR_STOP

Par défaut, le traitement des commandes continue après une erreur. Quand cette variable est positionnée à on, le traitement
sera immédiatement arrêté dès la première erreur rencontrée. En mode interactif, psql reviendra à l'invite de commande ;
sinon psql quittera en renvoyant le code d'erreur 3 pour distinguer ce cas des conditions d'erreurs fatales, qui utilisent le
code 1. Dans tous les cas, tout script en cours d'exécution (le script de plus haut niveau, s'il y a, et tout autre script qui
pourrait avoir été appelé) sera terminé immédiatement. Si la chaîne de commande de plus haut niveau contient plusieurs
commandes SQL, le traitement s'arrêtera à la commande en cours.

PORT

Le port du serveur de la base de données sur lequel vous êtes actuellement connecté. Ceci est con guré à chaque fois que
vous vous connectez à une base de données (ainsi qu'au lancement du programme) mais peut être changé ou désinitialisé.

PROMPT1
PROMPT2
PROMPT3

Ils spéci ent à quoi doit ressembler l'invite psql. Voir Invite ci-dessous.

QUIET

Con gurer cette variable à on est équivalent à l'option -q en ligne de commande. Elle n'est probablement pas très utile en
mode interactif.

SERVER_VERSION_NAME
SERVER_VERSION_NUM

Le numéro de version du serveur sous la forme d'une chaîne de caractères, par exemple 9.6.2, 10.1 ou 11beta1, et sous sa
forme numérique, par exemple 90602 ou 100001. Ces variables sont con gurées à chaque fois que vous vous connectez à
une base de données (y compris au lancement du programme) mais peuvent être modi ées ou décon gurées.

SHOW_CONTEXT

Cette variable peut être con gurée avec les valeurs never, errors ou always pour contrôler si les champs CONTEXT sont
a chés dans les messages du serveur. La valeur par défaut est errors (signi ant que ce contexte sera a ché dans les
messages d'erreur et non pas dans les notes et avertissements). Ce paramètre n'a pas d'e et quand VERBOSITY est con guré
à terse. (Voir aussi \errverbose, à utiliser quand vous voulez une version verbose du dernier message d'erreur reçu.)

SINGLELINE

Con gurer cette variable à on est équivalent à l'option -S en ligne de commande.

SINGLESTEP

Con guer cette variable à on est équivalent à l'option -s en ligne de commande.

USER

L'utilisateur de la base de données sur laquelle vous êtes actuellement connecté. Ceci est con guré à chaque fois que vous
vous connectez à une base de données (ainsi qu'au lancement du programme) mais peut être changé ou désinitialisé.

VERBOSITY

Cette variable peut être con gurée avec les valeurs default, verbose (bavard) ou terse (succinct) pour contrôler la verbosité
des rapports d'erreurs. (Voir aussi \errverbose à utiliser quand vous avez besoin d'une version verbeuse de l'erreur que
vous venez de récupérer.)

VERSION
VERSION_NAME
VERSION_NUM

Ces variables sont con gurées au démarrage du programme pour re éter la version de psql respectivement sous la forme
d'une chaîne de caractères, d'une chaîne courte (par exemple 9.6.2, 10.1 ou 11beta1) d'un nombre (par exemple 90602 ou
100001). Elles peuvent être modi ées ou désinitialisées.

Interpolation SQL

Une fonctionnalité clé des variables psql est que vous pouvez les substituer (« interpolation ») dans des requêtes SQL standards, ainsi
qu'en arguments de métacommandes. De plus, psql fournit des fonctionnalités vous assurant que les valeurs des variables utilisées
comme constantes et identi ants SQL sont correctement mises entre guillemets. La syntaxe pour l'interpolation d'une valeur sans
guillemets est de pré xer le nom de la variable avec le symbole deux-points (:). Par exemple :

basetest=> \set foo 'ma_table'


basetest=> SELECT * FROM :foo;

envoie alors la requête pour la table ma_table. Notez que cela peut être dangereux ; la valeur de la variable est copiée de façon
litérale, elle peut même contenir des guillemets non fermés, ou bien des commandes antislash. Vous devez vous assurer que cela a du
sens à l'endroit où vous les utilisez.

Lorsqu'une valeur doit être utilisée comme une chaîne SQL litérale ou un identi ant, il est plus sûr de s'arranger pour qu'elle soit entre
guillemets. A n de mettre en guillemets la valeur d'une variable en tant que chaîne SQL litérale, écrivez un caractère deux-points, suivi
du nom de la variable entouré par des guillemets simples. Pour mettre entre guillemet la valeur en tant qu'identi ant SQL, écrivez un
caractère deux-points suivi du nom de la valeur entouré de guillemets doubles. Ces constructions gèrent correctement les guillemets
et autres caractères spéciaux intégrés dans la valeur de la variable. L'exemple précédent peut s'écrire de façon plus sûre ainsi :

testdb=> \set foo 'my_table'


testdb=> SELECT * FROM :"foo";

L'interpolation de variables ne sera pas réalisée à l'intérieur de litéraux et d'identi ants SQL mis entre guillemets. Du coup, une
construction comme ':foo' ne fonctionne pas pour avoir un litéral entre guillemets à partir de la valeur d'une variable (il serait même
dangereux que cela fonctionne car ça ne peut pas gérer correctement les guillemets embarqués dans la valeur).

Un exemple de l'utilisation de ce mécanisme est la copie du contenu d'un chier dans la colonne d'une table. Tout d'abord, chargez le
chier dans une variable puis interpolez la valeur de la valeur en tant que chaîne de caractères :

basetest=> \set contenu `cat mon_fichier.txt`


basetest=> INSERT INTO ma_table VALUES (:'contenu');

(Notez que cela ne fonctionnera par si le chier mon_fichier.txt contient des octets nuls. psql ne gère pas les octets nuls inclus dans
les valeurs de variable.)

Comme des caractères deux-points peuvent légitimement apparaître dans les commandes SQL, une tentative apparente
d'interpolation (comme :nom, :'nom', ou :"nom") n'est pas remplacée, sauf si la variable nommée est actuellement positionnée. Dans
tous les cas, vous pouvez échapper un caractère deux-points avec un antislash pour le protéger des substitutions.

La syntaxe deux-points pour les variables est du SQL standard pour les langages de requête embarqués, comme ECPG. La syntaxe avec
les deux-points pour les tranches de tableau et les conversions de types sont des extensions PostgreSQL, qui peut parfois provoquer
un con it avec l'utilisation standard. La syntaxe avec le caractère deux-points pour échapper la valeur d'une variable en tant que
chaîne SQL litérale ou identi ant est une extension psql.

Invite

Les invites psql peuvent être personnalisées suivant vos préférences. Les trois variables PROMPT1, PROMPT2 et PROMPT3 contiennent des
chaînes et des séquences d'échappement spéciales décrivant l'apparence de l'invite. L'invite 1 est l'invite normale qui est lancée
quand psql réclame une nouvelle commande. L'invite 2 est lancée lorsqu'une saisie supplémentaire est attendue lors de la saisie de la
commande, par exemple parce que la commande n'a pas été terminée avec un point-virgule ou qu'un guillemet n'a pas été fermé.
L'invite 3 est lancée lorsque vous exécutez une commande SQL COPY FROM stdin et que vous devez saisir les valeurs des lignes sur le
terminal.

La valeur de la variable prompt sélectionnée est a chée littéralement sauf si un signe pourcentage (%) est rencontré. Suivant le
prochain caractère, certains autres textes sont substitués. Les substitutions dé nies sont :

%M

Le nom complet de l'hôte (avec le nom du domaine) du serveur de la base de données ou [local] si la connexion est établie
via une socket de domaine Unix ou [local:/répertoire/nom], si la socket de domaine Unix n'est pas dans l'emplacement
par défaut dé ni à la compilation.

%m

Le nom de l'hôte du serveur de la base de données, tronqué au premier point ou [local] si la connexion se fait via une
socket de domaine Unix.

%>

Le numéro de port sur lequel le serveur de la base de données écoute.

%n

Le nom d'utilisateur de la session. (L'expansion de cette valeur peut changer pendant une session après une commande SET
SESSION AUTHORIZATION.)

%/

Le nom de la base de données courante.

%~

Comme %/ mais l'a chage est un ~ (tilde) si la base de données est votre base de données par défaut.

%#

Si l'utilisateur de la session est un superutilisateur, alors un # sinon un >. (L'expansion de cette valeur peut changer durant
une session après une commande SET SESSION AUTHORIZATION.)

%p

L'identi ant du processus serveur (PID) pour cette connexion.

%R

Dans le prompt 1 normalement =, mais @ si la session est dans une branche inactive d'un bloc conditionnel, ou ^ en mode
simple ligne, ou ! si la session est déconnectée de la base (ce qui peut arriver si \connect échoue). Dans le prompt 2, %R est
remplacé par un caractère qui dépend de la raison pour laquelle psql attend des entrées supplémentaires : - si la
commande n'est juste pas terminée, mais * s'il y a un commentaire /* ... */ non terminé, un guillemet simple pour une
chaîne de caractères entre guillemets simples non terminée, un guillemet double pour un identi ant échappé non terminé,
un signe dollar pour une chaîne de caractères entre dollars, ou ( s'il y a une parenthèse ouvrante sans correspondance.
Dans le prompt 3, %R n'a aucun e et.

%x

État de la Transaction : une chaîne vide lorsque vous n'êtes pas dans un bloc de transaction, ou * si vous y êtes, ou ! dans
une transaction échouée, ou ? lorsque l'état de la transaction est indéterminé (par exemple parce qu'il n'y a pas de
connexion).

%l

Le numéro de ligne dans la requête courante, en partant de 1.

%chiffres

Le caractère avec ce code numérique est substitué.

%:nom:

La valeur de la variable nom de psql. Voir la section Variables pour les détails.

%`commande`

La sortie de la commande, similaire à la substitution par « guillemets inverse » classique.

%[ ... %]

Les invites peuvent contenir des caractères de contrôle du terminal qui, par exemple, modi ent la couleur, le fond ou le style
du texte de l'invite, ou modi ent le titre de la fenêtre du terminal. Pour que les fonctionnalités d'édition de ligne de Readline
fonctionnent correctement, les caractères de contrôle non a chables doivent être indiqués comme invisibles en les
entourant avec %[ et %]. Des paires multiples de ceux-ci peuvent survenir à l'intérieur de l'invite. Par exemple :

basetest=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

a pour résultat une invite en gras (1;), jaune sur noir (33;40) sur les terminaux compatibles VT100.

Pour insérer un pourcentage dans votre invite, écrivez %%. Les invites par défaut sont '%/%R%# ' pour les invites 1 et 2 et '>> ' pour
l'invite 3.

Note
Cette fonctionnalité a été plagiée sans vergogne sur tcsh.

Édition De La Ligne De Commande

psql supporte la bibliothèque Readline pour une édition et une recherche simpli ée et conviviale de la ligne de commande.
L'historique des commandes est automatiquement sauvegardé lorsque psql quitte et est rechargé quand psql est lancé. La complétion
par tabulation est aussi supportée bien que la logique de complétion n'ait pas la prétention d'être un analyseur SQL. Les requêtes
générées par complétion peuvent aussi interférer avec les autres commandes SQL, par exemple SET TRANSACTION ISOLATION LEVEL.
Si pour quelque raison que ce soit vous n'aimez pas la complétion par tabulation, vous pouvez la désactiver en plaçant ceci dans un
chier nommé .inputrc de votre répertoire personnel :

$if psql
set disable-completion on
$endif

(Ceci n'est pas une fonctionnalité psql mais Readline. Lisez sa documentation pour plus de détails.)

Environnement
COLUMNS

Si \pset columns vaut zéro, contrôle la largeur pour le format wrapped et la largeur pour déterminer si une sortie large a
besoin du paginateur ou doit être basculé en format vertical dans le mode automatique étendu.

PAGER

Si les résultats d'une requête ne tiennent pas sur l'écran, ils sont envoyés via un tube sur cette commande. Les valeurs
typiques sont more ou less. La valeur par défaut dépend de la plateforme. L'utilisation du paginateur peut être désactivée en
con gurant PAGER à vide ou en utilisant les options relatives au paginateur de la commande \pset.

PGDATABASE
PGHOST
PGPORT
PGUSER

Paramètres de connexion par défaut (voir Section 33.14).

PSQL_EDITOR
EDITOR
VISUAL

Éditeur utilisé par les commandes \e \ef et \ev. Les variables sont examinées dans l'ordre donné ; la première initialisée est
utilisée.

Les éditeurs intégrés par défaut sont vi sur les systèmes Unix et [Link] sur les systèmes Windows.

PSQL_EDITOR_LINENUMBER_ARG

Lorsque les commandes \e ou \ef sont utilisées avec un argument spéci ant le numéro de ligne, cette variable doit indiquer
l'argument en ligne de commande à fournir à l'éditeur de texte. Pour les éditeurs les plus courants, tels qu'emacs ou vi, vous
pouvez simplement initialiser cette variable avec le signe +. Il faut inclure le caractère d'espacement en n de la valeur de la
variable si la syntaxe de l'éditeur nécessite un espace entre l'option à spéci er et le numéro de ligne. Par exemple :

PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

La valeur par défaut est + sur les systèmes Unix (ce qui correspond à la bonne con guration pour l'éditeur par défaut, vi, et
est utilisable généralement avec la plupart des éditeurs courants) ; par contre, il n'y a pas de valeur par défaut pour les
systèmes Windows.

PSQL_HISTORY

Emplacement alternatif pour le chier d'historique des commandes. L'expansion du symbole ~ est réalisée.

PSQLRC

Emplacement alternatif pour le chier .psqlrc de l'utilisateur. L'expansion du symbôle ~ est réalisée.

SHELL

Commande exécutée par la commande \!.

TMPDIR

Répertoire pour stocker des chiers temporaires. La valeur par défaut est /tmp.

Cet outil, comme la plupart des autres outils PostgreSQL, utilise aussi les variables d'environnement supportées par la bibliothèque
libpq (voir Section 33.14).

Fichiers
psqlrc et ~/.psqlrc

Sauf si une option -X est fournie, psql tente de lire et exécuter les commandes provenant du chier global au système
(psqlrc), puis du chier utilisateur (~/.psqlrc) après la connexion à la base de données mais avant d'accepter les
commandes interactives. Ces chiers sont utilisés pour con gurer le client et le serveur à votre goût, généralement en
utilisant les commandes \set et SET.

Le chier de con guration au niveau système est nommé psqlrc et est placé dans le répertoire de con guration système de
l'installation. Il est facilement identi able en exécutant pg_config --sysconfdir. Par défaut, ce répertoire doit être ../etc/
relatif au répertoire contenant les exécutables PostgreSQL. Le nom de ce répertoire peut être con guré explicitement avec la
variable d'environnement PGSYSCONFDIR.

Le chier de con guration personnel de l'utilisateur est nommé .psqlrc et est placé à la racine du répertoire personnel de
l'utilisateur. Sur Windows, qui manque d'un tel concept, le chier de con guration personnel est nommé
%APPDATA%\postgresql\[Link]. L'emplacement du chier de con guration personnel peut être con guré
explicitement via la variable d'environnement PSQLRC.

Le chier niveau système et le chier de l'utilisateur peuvent être spéci ques à la version de psql en ajoutant un tiret et la
version mineure ou majeure, par exemple ~/.psqlrc-9.2 ou ~/.psqlrc-9.2.5. Le chier dont la version est la plus proche
sera lu à la place d'un chier sans indication de version.

.psql_history

L'historique de la ligne de commandes est stocké dans le chier ~/.psql_history ou %APPDATA%\postgresql\psql_history


sur Windows.

L'emplacement du chier historique peut aussi être con guré explicitement avec la variable psql HISTFILE ou avec la
variable d'environnement PSQL_HISTORY.

Notes
psql fonctionne mieux avec des serveurs de la même version ou d'une version majeure plus ancienne. Les commandes
antislashs peuvent échouer si le serveur est plus récent que psql. Néanmoins, les commandes antislashs de la famille \d
devraient fonctionner avec tous les serveurs jusqu'à la version 7.4, bien que pas nécessairement avec des serveurs plus
récents que psql lui-même. Les fonctionnalités générales d'exécution de commandes SQL et d'a chage des résultats des
requêtes devraient aussi fonctionner avec les serveurs d'une version majeure plus récente mais ce ne peut être garanti
dans tous les cas.

Si vous voulez utiliser psql pour vous connecter à di érentes versions majeures, il est recommandé d'utiliser la dernière
version de psql. Autrement, vous pouvez conserver une copie de psql pour chaque version majeure utilisée et vous assurer
que la version utilisée correspond au serveur respectif. En pratique, cette complication supplémentaire n'est pas
nécessaire.

Avant PostgreSQL 9.6, l'option -c impliquait -X (--no-psqlrc) ; ceci n'est plus le cas.

Avant PostgreSQL 8.4, psql autorisait le premier argument d'une commande antislash à une seule lettre à commencer
directement après la commande, sans espace supplémentaire. Maintenant, un espace blanc est requis.

Notes pour les utilisateurs sous Windows


psql est construit comme une « application de type console ». Comme les fenêtres console de Windows utilisent un codage di érent du
reste du système, vous devez avoir une attention particulière lors de l'utilisation de caractères sur 8 bits à l'intérieur de psql. Si psql
détecte une page de code problématique, il vous avertira au lancement. Pour modi er la page de code de la console, deux étapes sont
nécessaires :

Con gurez la page code en saisissant [Link] /c chcp 1252. (1252 est une page code appropriée pour l'Allemagne ;
remplacez-la par votre valeur.) Si vous utilisez Cygwin, vous pouvez placer cette commande dans /etc/profile.

Con gurez la police de la console par Lucida Console parce que la police raster ne fonctionne pas avec la page de code
ANSI.

Exemples
Le premier exemple montre comment envoyer une commande sur plusieurs lignes d'entrée. Notez le changement de l'invite :

basetest=> CREATE TABLE ma_table (


basetest(> premier integer not NULL default 0,
basetest(> second text)
basetest-> ;
CREATE TABLE

Maintenant, regardons la dé nition de la table :

basetest=> \d ma_table
Table "public.ma_table"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+---------
premier | integer | | not null | 0
second | text | | |

Maintenant, changeons l'invite par quelque chose de plus intéressant :

basetest=> \set PROMPT1 '%n@%m %~%R%# '


pierre@localhost basetest=>

Supposons que nous avons rempli la table de données et que nous voulons les regarder :

pierre@localhost basetest=> SELECT * FROM ma_table;


premier | second
---------+--------
1 | un
2 | deux
3 | trois
4 | quatre
(4 rows)

Vous pouvez a cher cette table de façon di érente en utilisant la commande \pset :

pierre@localhost basetest=> \pset border 2


Border style is 2.
pierre@localhost basetest=> SELECT * FROM ma_table;
+---------+--------+
| premier | second |
+---------+--------+
| 1 | un |
| 2 | deux |
| 3 | trois |
| 4 | quatre |
+---------+--------+
(4 rows)

pierre@localhost basetest=> \pset border 0


Border style is 0.
pierre@localhost basetest=> SELECT * FROM ma_table;
premier second
------- ------
1 un
2 deux
3 trois
4 quatre
(4 rows)

pierre@localhost basetest=> \pset border 1


Border style is 1.
pierre@localhost basetest=> \pset format unaligned
Output format is unaligned.
pierre@localhost basetest=> \pset fieldsep ","
Field separator is ",".
pierre@localhost basetest=> \pset tuples_only
Showing only tuples.
pierre@localhost basetest=> SELECT second, premier FROM
ma_table;
un,1
deux,2
trois,3
quatre,4

Vous pouvez aussi utiliser les commandes courtes :

pierre@localhost basetest=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
pierre@localhost basetest=> SELECT * FROM ma_table;
-[ RECORD 1 ]---
premier | 1
second | un
-[ RECORD 2 ]---
premier | 2
second | deux
-[ RECORD 3 ]---
premier | 3
second | trois
-[ RECORD 4 ]---
premier | 4
second | quatre

En cas de besoin, les résultats de la requête peuvent être a chés dans une représentation croisée avec la commande \crosstabview :

testdb=> SELECT first, second, first > 2 AS gt2 FROM my_table;


premier | second | gt2
---------+--------+-----
1 | un | f
2 | deux | f
3 | trois | t
4 | quatre | t
(4 rows)

testdb=> \crosstabview premier second


premier | un | deux | trois | quatre
---------+----+------+-------+--------
1 | f | | |
2 | | f | |
3 | | | t |
4 | | | | t
(4 rows)

Ce deuxième exemple montre une table de multiplication avec les lignes triées en ordre numérique inverse et les colonnes dans un
ordre numérique ascendant indépendant.

testdb=> SELECT [Link] as "A", [Link]+100 AS "B", [Link]*([Link]+100) as "AxB",


testdb(> row_number() over(order by [Link]) AS ord
testdb(> FROM ma_table t1 CROSS JOIN ma_table t2 ORDER BY 1 DESC
testdb(> \crosstabview "A" "B" "AxB" ord
A | 101 | 102 | 103 | 104
---+-----+-----+-----+-----
4 | 404 | 408 | 412 | 416
3 | 303 | 306 | 309 | 312
2 | 202 | 204 | 206 | 208
1 | 101 | 102 | 103 | 104
(4 rows)

Vous aimerez peut-être aussi