Comenzi psql (\l, \c, \dt, \d, \timing, \copy) în PostgreSQL

Indecși, performanță și terminalul psql PostgreSQL 9.0+ (psql în PostgreSQL 15–17)

Navighează rapid prin baze de date, tabele, scheme și exportă/importă CSV direct din clientul interactiv de terminal psql.

Sintaxă SQL
psql -h host -U utilizator -d baza_de_datenl   c db   dt+   d+ tabel   timing   x auto   copy

Ce face Comenzi psql (\l, \c, \dt, \d, \timing, \copy)

psql este clientul oficial în linie de comandă pentru PostgreSQL. Pe lângă rularea instrucțiunilor SQL (terminate cu ;), psql oferă meta-comenzi puternice care încep cu caracterul backslash (\) și nu necesită punct și virgulă la final.

Adăugarea semnului + la majoritatea comenzilor de inspecție (de exemplu \dt+, \d+ tabel, \l+) afișează informații suplimentare valoroase, precum dimensiunea fizică pe disc, descrierile și opțiunile de stocare.

Clauze, operatori și argumente

Clauză / Operator Descriere
\l sau \l+ Listează toate bazele de date de pe server (cu + arată și dimensiunea pe disc).
\c nume_db [utilizator] Se conectează la o altă bază de date fără a ieși din psql.
\dt și \dt+ Listează tabelele din schema curentă (\dn pentru scheme, \dv pentru vederi, \df pentru funcții, \du pentru roluri/utilizatori).
\d+ nume_tabel Descrie structura completă a unui tabel: coloane, tipuri, valori implicite, indecși, constrângeri și chei străine.
\x [on|off|auto] Comută afișarea extinsă pe verticală (\x auto trece automat pe verticală când tabelul e prea lat pentru terminal).
\timing Afișează durata exactă în milisecunde după fiecare interogare executată.
\copy (...) TO / FROM 'fisier.csv' CSV HEADER Exportă sau importă date în format CSV direct pe mașina clientului (fără a necesita drepturi de superuser pe server).
\i fisier.sql și \q Execută comenzile SQL dintr-un fișier extern (\i) sau închide sesiunea psql (\q).

Exemple

Exemplul 1: Inspectarea dimensiunii tabelelor (\dt+) și a structurii unui tabel (\d)

Verificăm ce tabele există în baza de date și inspectăm coloanele și indecșii tabelului produse.

\dt+
\d produse

Rezultat interogare

                                    List of relations
 Schema |   Name    | Type  |  Owner   | Persistence | Access method |  Size   | Description 
--------+-----------+-------+----------+-------------+---------------+---------+-------------
 public | clienti   | table | postgres | permanent   | heap          | 1280 kB | 
 public | comenzi   | table | postgres | permanent   | heap          | 14 MB   | 
 public | produse   | table | postgres | permanent   | heap          | 512 kB  | 
(3 rows)

                                        Table "public.produse"
   Column     |           Type           | Collation | Nullable |             Default              
--------------+--------------------------+-----------+----------+----------------------------------
 id           | bigint                   |           | not null | generated always as identity
 sku          | text                     |           | not null | 
 denumire     | text                     |           | not null | 
 pret         | numeric(10,2)            |           | not null | 
 specificatii | jsonb                    |           |          | '{}'::jsonb
Indexes:
    "produse_pkey" PRIMARY KEY, btree (id)
    "produse_sku_key" UNIQUE CONSTRAINT, btree (sku)
    "idx_produse_specificatii_gin" gin (specificatii)

Exemplul 2: Măsurarea timpului (\timing) și exportul unei interogări în CSV cu \copy

Activăm cronometrul și exportăm rezultatul unei interogări direct într-un fișier CSV local cu antet de coloane.

\timing on
\copy (SELECT id, sku, denumire, pret FROM produse ORDER BY id) TO '/tmp/export_produse.csv' WITH (FORMAT csv, HEADER true);

Rezultat interogare

Timing is on.
COPY 42
Time: 1.842 ms

Greșeli frecvente

  • Confuzia între comanda SQL COPY și meta-comanda \copy din psql: COPY caută fișierul pe sistemul de fișiere al serverului PostgreSQL și cere drepturi de superuser, pe când \copy citește/scrie fișierul pe mașina ta locală (client).
  • Uitarea punctului și virgulei la o comandă SQL anterioară înainte de a tasta o altă comandă SQL (observă promptul: db=# înseamnă că așteaptă o comandă nouă, iar db-# înseamnă că instrucțiunea precedentă este încă neterminată; poți anula bufferul curent cu \r).

Comenzi și funcții înrudite

  • pg_dump și pg_restore: Creează copii de siguranță (backup) consistente online și restaurează selectiv sau în paralel bazele de date PostgreSQL.
  • EXPLAIN (ANALYZE, BUFFERS): Afișează planul de execuție al optimizatorului, timpii reali pe fiecare nod și blocurile de memorie citite.
  • VACUUM și ANALYZE: Recuperează spațiul ocupat de rândurile șterse/modificate (MVCC dead tuples) și actualizează statisticile pentru optimizator.