Ce face pg_dump și pg_restore
pg_dump este utilitarul oficial de linie de comandă pentru realizarea copiilor de siguranță logice ale unei baze de date PostgreSQL. Datorită arhitecturii MVCC, pg_dump realizează un backup 100% consistent la un moment dat în timp (snapshot) fără a bloca citirile sau scrierile aplicației aflate în producție.
Deși implicit pg_dump generează un script SQL text (care se restaurează cu psql -f backup.sql), în producție se recomandă formatul binar comprimat Custom (-Fc) sau formatul Directory (-Fd). Acestea sunt restaurate cu utilitarul pg_restore, care permite restaurarea în paralel pe mai multe nuclee CPU (-j) sau extragerea unui singur tabel dintr-o arhivă întreagă.
Clauze, operatori și argumente
| Clauză / Operator | Descriere |
|---|---|
-Fc (--format=custom) |
Recomandat: creează o arhivă binară comprimată și flexibilă, restaurabilă cu pg_restore. |
-Fd -j N (--format=directory) |
Salvează câte un fișier per tabel într-un director, permițând rularea pg_dump în paralel pe N fire de execuție. |
-Fp (--format=plain) |
Formatul implicit: generează un fișier text SQL simplu (se restaurează cu psql, nu cu pg_restore). |
-s / -a |
Exportă doar schema DDL fără date (-s, --schema-only) sau doar datele fără structură (-a, --data-only). |
-t nume_tabel |
Exportă sau restaurează doar tabelul specificat (poate fi repetat pentru mai multe tabele). |
--no-owner --no-privileges (-O -x) |
Omite comenzile ALTER OWNER și GRANT/REVOKE, util când restaurezi baza pe un alt utilizator (ex: de pe producție pe local). |
pg_restore -j N -c --if-exists |
Restaurează folosind N joburi paralele și șterge obiectele existente înainte de recreare. |
Exemple
Exemplul 1: Backup în format Custom comprimat (-Fc) și restaurare paralelă pe 4 fire cu pg_restore
Salvăm baza de date magazin_prod într-o arhivă comprimată și o restaurăm rapid într-o bază de staging folosind 4 procese paralele.
# 1. Crearea arhivei de backup (în terminalul sistemului de operare, nu în psql)
pg_dump -h localhost -U postgres -Fc --no-owner -f /backups/magazin_2025_03.dump magazin_prod
# 2. Restaurarea rapidă în paralel (4 nuclee) într-o bază de date nouă
createdb -h localhost -U postgres magazin_staging
pg_restore -h localhost -U postgres -d magazin_staging -j 4 --no-owner -v /backups/magazin_2025_03.dump
Rezultat interogare
pg_restore: connecting to database for restore
pg_restore: creating TABLE "public.clienti"
pg_restore: creating TABLE "public.comenzi"
pg_restore: creating TABLE "public.produse"
pg_restore: processing data for table "public.comenzi"
pg_restore: creating INDEX "public.idx_comenzi_client_data"
pg_restore: implied data-only restore
Exemplul 2: Exportul doar al schemei (-s) sau restaurarea unui singur tabel (-t) din arhivă
Extragem structura DDL a bazei pentru versionare în Git și recuperăm doar tabelul produse dintr-un backup complet.
# Export doar structura (fără date) în format SQL text
pg_dump -U postgres -s --no-owner -f schema_magazin.sql magazin_prod
# Restaurarea unui singur tabel dintr-o arhivă -Fc existentă
pg_restore -U postgres -d magazin_staging -t produse --clean --if-exists /backups/magazin_2025_03.dump
Rezultat interogare
(fără ieșire — comenzile s-au finalizat cu codul 0)
Greșeli frecvente
- Încercarea de a restaura un fișier
.sql(creat fără-Fc) folosindpg_restore: vei primi eroareainput file appears to be a text format dump. Please use psql. - Rularea
pg_dumpdin interiorul promptuluipsql: atâtpg_dump, cât șipg_restoresunt programe de sistem independente și se rulează direct în terminalul Bash/Zsh.
Comenzi și funcții înrudite
Comenzi psql (\l, \c, \dt, \d, \timing, \copy): Navighează rapid prin baze de date, tabele, scheme și exportă/importă CSV direct din clientul interactiv de terminal psql.VACUUM și ANALYZE: Recuperează spațiul ocupat de rândurile șterse/modificate (MVCC dead tuples) și actualizează statisticile pentru optimizator.BEGIN, COMMIT, ROLLBACK și SAVEPOINT: Controlează tranzacțiile ACID și punctele intermediare de salvare (SAVEPOINT) pentru recuperarea din erori.