psql : PostgreSQL
Vous ouvrez un terminal, tapez `psql`, et vous vous retrouvez soudain face à une invite qui ressemble à `postgres=#`. Pas de boutons, pas de menus, pas de souris. Juste un curseur qui attend du SQL.
Pour qui travaille quotidiennement avec PostgreSQL, ce n'est pas une limitation. C'est le chemin le plus rapide de la pensée à la requête, et retour. psql est le client terminal standard fourni avec chaque installation PostgreSQL, sur Linux, macOS et Windows. Ce n'est pas un outil graphique et il n'essaie pas de l'être.
Ce qui rend psql particulier, c'est la combinaison de deux langages. Vous tapez du SQL ordinaire, mais psql possède en plus ses propres méta-commandes qui commencent par une barre oblique inverse. `\l` affiche toutes les bases de données, `\dt` toutes les tables du schéma courant, `\d` les détails d'une table ou d'une vue. Pas besoin de consulter les tables système, pas de jointures sur `pg_catalog`. Juste une barre oblique inverse, une lettre, Entrée.
Ces méta-commandes ne sont pas du SQL. psql les intercepte avant qu'elles n'atteignent la base de données et les traduit en interne en requêtes que vous auriez sinon dû écrire vous-même. Cela réduit la frappe, mais l'essentiel est que vous n'ayez pas à sortir constamment de votre réflexion SQL pour vous rappeler comment cette requête système était structurée.
L'historique fonctionne comme on peut l'attendre d'un outil en ligne de commande digne de ce nom. Chaque requête saisie est automatiquement enregistrée, et lors de la session suivante, vous la parcourez avec les touches fléchées. Sur les systèmes de type Unix, cet historique se trouve dans `~/.psql_history`, sur Windows dans `%APPDATA%\postgresql\psql_history`.
Si vous ne voulez pas de l'historique à l'emplacement standard, vous pouvez le déplacer avec la variable d'environnement `PSQL_HISTORY`. Placez-la dans votre `.bashrc` ou `.zshrc` et chaque session écrira dans le fichier de votre choix. Il existe aussi une variable interne `HISTFILE`, que vous pouvez définir par session. Pratique si vous travaillez sur plusieurs projets sur une même machine et que vous voulez garder les requêtes séparées. Ou si vous ne voulez pas qu'un collègue retrouve ce `DROP TABLE` d'hier soir dans votre historique.
Pour ceux qui utilisent psql surtout dans des scripts, les commandes de fichiers sont plus importantes. Avec `\i fichier.sql`, vous lisez un fichier SQL, et avec `-f fichier.sql` en ligne de commande, vous faites la même chose sans session interactive. Vous capturez la sortie d'une requête avec `\o sortie.txt` vers un fichier. Cela rend psql utilisable dans des tâches cron et des pipelines CI/CD, précisément là où un client graphique n'a rien à faire.
La connexion elle-même est gérée par psql via les mêmes mécanismes que tout autre client PostgreSQL. Chiffrement SSL, authentification via `.pgpass` ou ident, connexion via sockets Unix ou TCP/IP — tout est inclus. Vous pouvez accéder à une base de données de production sur un autre serveur depuis un poste de développement, ou l'exécuter sur un serveur via SSH sans qu'un environnement graphique ne soit jamais impliqué.
psql ne crée pas de sauvegardes. C'est le rôle de `pg_dump` et `pg_dumpall`. Mais restaurer une sauvegarde au format SQL brut, cela se fait bien avec psql : `psql -d nom_base -f sauvegarde.sql`. Le programme est ainsi le canal d'exécution pour la restauration, même s'il n'a jamais créé la sauvegarde lui-même.
Le PostgreSQL Global Development Group décrit psql dans la documentation officielle comme une frontale basée sur terminal pour PostgreSQL. Cette formulation est inchangée depuis la version 7.0, ce qui est révélateur. Le programme n'a pas suivi la mode des interfaces graphiques ou des tableaux de bord web. Il a continué à faire ce qu'il a toujours fait : offrir une interface textuelle vers une base de données relationnelle, sans fioritures.
Cela signifie aussi qu'il faut y consacrer un apprentissage. Les méta-commandes ne sont pas découvrables depuis l'interface elle-même ; il faut les connaître ou les rechercher. Ceux qui sont habitués à un client de base de données cliquable taperont régulièrement `\?` les premiers jours pour voir la liste des commandes disponibles. Cette liste est longue, et c'est honnêtement aussi la faiblesse de psql : la difficulté ne réside pas dans le SQL, mais dans la mémorisation de toutes ces combinaisons de barres obliques inverses.
En contrepartie, vous n'avez rien à installer de plus. Chaque installation PostgreSQL fournit psql, sur chaque plateforme prise en charge. Pas de paquet séparé, pas de plugin, pas de version incompatible avec le serveur. Il est simplement là, et il fonctionne avec la version de PostgreSQL que vous utilisez.
Pour qui travaille régulièrement avec PostgreSQL, psql n'est donc pas un outil parmi d'autres. C'est l'outil vers lequel on se tourne quand le client graphique est trop lent, trop limité, ou tout simplement indisponible sur le serveur où l'on doit intervenir. C'est le dénominateur commun entre un ordinateur portable, un serveur de production et un conteneur qui s'exécute dans un environnement où rien de graphique n'existe.
La question n'est pas de savoir si psql est meilleur qu'un client graphique. La question est de savoir où vous travaillez et ce que vous faites. Celui qui exécute occasionnellement une requête sur une base de données locale a suffisamment d'un outil graphique. Celui qui gère des serveurs, exécute des migrations ou restaure des sauvegardes se retrouvera tôt ou tard dans un terminal. Et là, cette barre oblique inverse s'avère soudain plus rapide que n'importe quelle souris.