psql — Der interaktive PostgreSQL-Client
Praxis-Guide zu psql, dem interaktiven PostgreSQL-Client: verbinden, Queries ausführen und Schemas per Meta-Kommandos verwalten.
psql ist das interaktive Terminal von PostgreSQL: Hier verbindest du dich mit einer Datenbank, setzt SQL-Queries ab und steuerst den Client über Meta-Kommandos, die alle mit einem Backslash beginnen – etwa \l für alle Datenbanken, \dt für die Tabellen oder \d zum Beschreiben einer Tabelle. Neben dem reinen Abfragen erledigst du damit auch Administration: Rollen anlegen, Rechte vergeben, Datenbanken sichern und wiederherstellen. Dieser Guide bündelt die Befehle, die du im Alltag am häufigsten brauchst – vom Verbindungsaufbau bis zum CSV-Export.
Verbinden
psql -U <user> -d <database> — Verbindet sich als bestimmter Benutzer mit einer Datenbank.
psql -U postgres -d myapppsql -h <host> -p <port> -U <user> -d <database> — Verbindet sich mit einem entfernten PostgreSQL-Server.
psql -h db.example.com -p 5432 -U admin -d myapppsql '<connection-string>' — Verbindet sich über eine Verbindungs-URI.
psql 'postgresql://user:pass@host:5432/dbname'psql -U <user> -d <database> -c '<query>' — Führt eine Query aus und beendet sich anschließend.
psql -U postgres -d myapp -c 'SELECT count(*) FROM users;'psql -U <user> -d <database> -f <file> — Führt SQL aus einer Datei aus.
psql -U postgres -d myapp -f schema.sqlMeta-Kommandos — Information
\l — Listet alle Datenbanken auf.
\l\c <database> — Wechselt zu einer anderen Datenbank.
\c myapp\dt — Listet alle Tabellen im aktuellen Schema auf.
\dt\dt+ — Listet Tabellen mit Größen und Beschreibungen auf.
\dt+\d <table> — Beschreibt eine Tabelle (Spalten, Typen, Indizes).
\d users\di — Listet alle Indizes auf.
\di\dv — Listet alle Views auf.
\dv\dn — Listet alle Schemas auf.
\dn\df — Listet alle Funktionen auf.
\dfMeta-Kommandos — Werkzeuge
\x — Schaltet die erweiterte Anzeige um (vertikale Ausgabe).
\x auto\timing — Schaltet die Anzeige der Ausführungszeit von Queries um.
\timing\i <file> — Führt SQL aus einer Datei aus.
\i /path/to/migration.sql\o <file> — Leitet die Query-Ausgabe in eine Datei um.
\o output.txt\e — Öffnet den Query-Puffer in einem Editor.
\e\q — Beendet psql.
\q\? — Zeigt die Hilfe zu den Meta-Kommandos an.
\?Rollen & Rechte
\du — Listet alle Rollen/Benutzer auf.
\duCREATE ROLE <name> WITH LOGIN PASSWORD '<pass>'; — Legt eine neue Rolle mit Login-Berechtigung an.
CREATE ROLE appuser WITH LOGIN PASSWORD 'secretpass';GRANT ALL PRIVILEGES ON DATABASE <db> TO <role>; — Vergibt alle Rechte an einer Datenbank.
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;GRANT SELECT ON ALL TABLES IN SCHEMA public TO <role>; — Vergibt Lesezugriff auf alle Tabellen eines Schemas.
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;ALTER ROLE <name> WITH <options>; — Ändert die Attribute einer Rolle.
ALTER ROLE appuser WITH CREATEDB;Import & Export
pg_dump -U <user> <database> > <file> — Exportiert eine Datenbank als SQL.
pg_dump -U postgres myapp > backup.sqlpg_dump -U <user> -Fc <database> > <file> — Exportiert im eigenen, komprimierten Format.
pg_dump -U postgres -Fc myapp > backup.dumppg_restore -U <user> -d <database> <file> — Stellt aus einem Dump im Custom-Format wieder her.
pg_restore -U postgres -d myapp backup.dump\COPY <table> TO '<file>' CSV HEADER — Exportiert eine Tabelle als CSV.
\COPY users TO '/tmp/users.csv' CSV HEADER\COPY <table> FROM '<file>' CSV HEADER — Importiert CSV-Daten in eine Tabelle.
\COPY users FROM '/tmp/users.csv' CSV HEADERpg_dumpall -U <user> > <file> — Exportiert alle Datenbanken inklusive Rollen.
pg_dumpall -U postgres > all-databases.sqlHäufige Muster
psql -U <user> -d <database> -t -A -c '<query>' — Query ohne Kopfzeilen und ohne Ausrichtung (fürs Scripting).
psql -U postgres -d myapp -t -A -c 'SELECT email FROM users LIMIT 5'SELECT pg_size_pretty(pg_database_size('<database>')); — Zeigt die Datenbankgröße in lesbarer Form an.
SELECT pg_size_pretty(pg_database_size('myapp'));SELECT * FROM pg_stat_activity; — Zeigt aktuelle Verbindungen und laufende Queries an.
SELECT pid, state, query FROM pg_stat_activity;SELECT version(); — Zeigt die PostgreSQL-Version an.
SELECT version(); Fazit
psql ist weit mehr als eine Eingabeaufforderung für SQL: Mit den Backslash-Meta-Kommandos inspizierst du Schemas, Indizes und Rollen in Sekunden, und über pg_dump/pg_restore hast du vollständige Backups in der Hand. Ein wichtiger Punkt zur Sicherheit: DROP, TRUNCATE und ein DELETE ohne WHERE sind nicht umkehrbar – arbeite auf Produktivdatenbanken am besten in einer Transaktion (BEGIN; … COMMIT;), damit du im Zweifel ein ROLLBACK machen kannst. Schreibe Passwörter nie im Klartext in Skripte oder die Befehlszeile: Lege sie in ~/.pgpass ab (mit chmod 600) oder gib sie über die Umgebungsvariable PGPASSWORD weiter – das gilt genauso für die Credentials von pg_dump.
Weiterführende Links
- PostgreSQL – psql-Dokumentation – vollständige Referenz aller Optionen und Meta-Kommandos (englisch)
- PostgreSQL – Handbuch – offizielle Dokumentation zu SQL-Befehlen, Rollen und Backups (englisch)