Psql

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Commande psql
Connexion locale sudo -u postgres psql
Connexion réseau psql -h host -U user -d base -W
Voir aussi PostgreSQL install · Pg dump

psql est le client interactif en ligne de commande fourni avec PostgreSQL. Il permet de se connecter à une instance, d'exécuter des requêtes SQL et dispose de méta-commandes (préfixées par \) pour l'introspection (lister les bases, tables, rôles...).

Connexion

# Compte système postgres, connexion locale par socket (peer)
sudo -u postgres psql

# Connexion réseau explicite
psql -U username -h localhost -W

# Via un fichier de service (voir PostgreSQL debian)
psql service=<service>

Bannière de connexion typique :

psql (9.3.13)
Type "help" for help.

postgres=#

Méta-commandes utiles

Commande Effet
\l lister les bases de données
\c <base> se connecter à une autre base
\dt lister les tables de la base courante
\d <table> structure d'une table
\d+ structure de tous les objets, avec détails supplémentaires
\du lister les rôles
\db lister les tablespaces
\q quitter

Administration

Créer une base

createdb -T template0 worlddb
psql worlddb < world.sql
psql worlddb

Changer le mot de passe d'un rôle

ALTER USER postgres WITH PASSWORD 'mot_de_passe';

Créer un rôle (CLI)

createuser login -P -D -A

(à vérifier) : syntaxe issue d'une version ancienne de createuser ; sur les versions récentes, les options courantes sont -P (demande le mot de passe), -s/-S (super-utilisateur ou non), -d/-D (autorise ou non CREATEDB), -r/-R (autorise ou non CREATEROLE) — se référer à createuser --help pour la version installée.

Créer un utilisateur et une base (SQL)

CREATE DATABASE databasename;
CREATE USER username WITH PASSWORD 'mot_de_passe';
GRANT ALL PRIVILEGES ON DATABASE databasename TO username;

Exécuter un script SQL en ligne de commande

psql -f lefichier.sql basecible

Transactions préparées bloquées

Une transaction préparée (two-phase commit, PREPARE TRANSACTION) laissée en suspens après un incident (connexion coupée avant le COMMIT PREPARED/ROLLBACK PREPARED) reste visible et peut bloquer le VACUUM sur les tables concernées tant qu'elle n'est pas résolue :

SELECT * FROM pg_prepared_xacts;
ROLLBACK PREPARED '<id>';

Voir aussi