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\copydinpsql:COPYcaută fișierul pe sistemul de fișiere al serverului PostgreSQL și cere drepturi de superuser, pe când\copyciteș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ă, iardb-#î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.