Pravljenje rezervnih kopija i vraćanje PostgreSQL na Linuxu pomoću pg_dump i pg_restore

Article Image

Zašto treba da pravite bekap PostgreSQL baza na Linux serveru

Kao administrator ili programer, vi ste odgovorni da minimizujete rizik gubitka podataka. PostgreSQL je robusna baza podataka, ali hardverske greške, ljudske greške ili greške u aplikaciji mogu dovesti do nepotpunih ili oštećenih podataka. Logičko bekapovanje pomoću pg_dump omogućava vam da izvezete strukturu i sadržaj baze u prenosivom formatu koji je nezavisan od verzije servera i fizičkog layout-a diska.

Na Linuxu je upravljanje bekapima često automatizovano skriptama i cron job-ovima, a poznavanje osnovnih razlika između vrsta bekapa i alata štedi vreme pri oporavku. U narednim sekcijama naučićete kada koristiti pg_dump/pg_restore, koje formate izabrati i osnovne bezbednosne mere pre pokretanja procesa bekapovanja ili restauracije.

Osnovni koncepti: šta rade pg_dump i pg_restore i koje su opcije važne

pg_dump pravi logički izvoz baze — SQL naredbe ili prilagođeni arhivni format — dok pg_restore služi da iz tog izvoza ponovo kreira objekte i ubaci podatke u ciljnu bazu. Ovaj pristup je idealan za migracije, verzionisanje šeme i selektivno vraćanje tabela ili shema.

Formati izbacivanja i njihova upotreba

  • Plain SQL (podrazumevani): proizvede .sql fajl koji možete pročitati ili izvršiti kroz psql. Dobar za audit, loš za paralelno vraćanje.
  • Custom (-Fc): binarni, fleksibilan za pg_restore, podržava paralelno vraćanje (-j) i selektivno vraćanje objekata.
  • Directory (-Fd): izlaz u folder sa mnogim fajlovima, odličan za veliki dataset i paralelizaciju.

Ključne opcije koje treba poznavati pre izvoza/uvoza

  • -f file: ciljna datoteka ili direktorijum.
  • -U user, -h host, -p port: konekcioni parametri.
  • –format (Fc, Ft, psql): odabir formata.
  • –clean i –create u pg_restore: brišu postojeće objekte i rekreiraju bazu prema dumpu.
  • –no-owner i –role: korisno pri vraćanju na drugom serveru ili pod drugim korisnikom.
  • -j n u pg_restore: upotrebite višestruke tokove za brže vraćanje (samo za custom/directory).

Bezbednosne i operativne napomene pre izvođenja bekapa

Pre nego što pokrenete pg_dump, uverite se da korisnik ima dovoljne privilegije za čitanje objekata i da su poverljivi podaci bezbedno preneseni (koristite SSH tunel ili SSL). Izbegavajte upisivanje lozinki u skripte — koristite .pgpass ili environment promenljive s pažnjom. Takođe, testirajte proces vraćanja na razvojnoj mašini pre nego što izvršite oporavak na produkciji.

U sledećem delu predstaviću praktične komande i korak-po-korak primere kako da napravite, kompresujete i vratite backup pomoću pg_dump i pg_restore, uključujući scenarije za male i velike baze.

Praktični primeri: kreiranje i kompresovanje bekapa

Prvo praktično pravilo: izaberite format prema potrebi vraćanja. Za audit ili brzo pregledanje koristite plain SQL; za brže i fleksibilno vraćanje koristite custom (-Fc) ili directory (-Fd). Evo nekoliko uobičajenih primera.


pg_dump -h db-server -p 5432 -U backup_user -F p -c mydb > /backups/mydb_$(date +%F).sql


pg_dump -h db-server -p 5432 -U backup_user -F c -b -v -f /backups/mydb_$(date +%F).dump mydb


pg_dump -h db-server -p 5432 -U backup_user -F c mydb | gzip > /backups/mydb_$(date +%F).dump.gz


pg_dump -h db-server -p 5432 -U backup_user -F d -j 8 -f /backups/mydb_dir mydb

Objašnjenje: u custom i directory formatima možete naknadno koristiti pg_restore sa više tokova (-j). Opcija -b uključuje BLOB-ove, -v je verbose za praćenje. Streaming preko gzip-a omogućava čuvanje na udaljenom fajl-sistemu ili upload na object storage bez privremenog fajla.

Vraćanje i selektivni oporavak: male i velike baze

Restauracija zavisi od formata bekapa. Za plain SQL koristite psql; za custom/directory koristite pg_restore. Primeri za najčešće scenarije:


psql -h db-server -p 5432 -U restore_user -d postgres -f /backups/mydb_2026-06-30.sql


gzip -d -c /backups/mydb_2026-06-30.dump.gz | pg_restore -h db-server -p 5432 -U restore_user -C -d postgres -v


pg_restore -h db-server -p 5432 -U restore_user -C -d postgres -j 4 -v /backups/mydb.dump


pg_restore -h db-server -p 5432 -U restore_user -C -d postgres -j 8 -v /backups/mydb_dir

Za selektivni oporavak koristite -t (tabela) ili -n (shema). Ako želite da izbegnete vraćanje vlasništava iz originalnog servera koristite –no-owner, a ako ciljnoj bazi želite dodeliti poseban vlasnik koristite –role.


pg_restore -h db-server -p 5432 -U restore_user -d target_db -t public.orders /backups/mydb.dump


pg_restore -h db-server -p 5432 -U restore_user --schema-only -d target_db /backups/mydb.dump
pg_restore -h db-server -p 5432 -U restore_user --data-only -d target_db /backups/mydb.dump

Korisna tehnika: izlistajte sadržaj dump-a i izmenite ga pre vraćanja. To se radi sa -l i -L:

pg_restore -l /backups/mydb.dump > mydb.list
# ručno editovanje mydb.list (izbrišite ili komentarišite stavke)
pg_restore -L mydb.list -d target_db /backups/mydb.dump

Optimizacija restauracije kod velikih baza i praktični saveti

Za velike baze fokusirajte se na paralelno vraćanje i smanjivanje transakcijskih zahteva:

  • Koristite directory ili custom format i -j sa brojem jezgara/2-4 za najbolje rezultate.
  • Isključite indeksiranje tokom vraćanja ako je moguće (pg_restore često odlaže rekreiranje indeksa do kraja); ako ne, razmislite o DROP/CREATE indeksa nakon bulk insert-a.
  • Vratite velike tabele paralelno, ali pazite na I/O ograničenja diska i mreže.
  • Ako vraćate na drugom serveru, koristite –no-owner i –role, i unapred kreirajte potrebne korisnike/privilegije.
  • Testirajte cele procese na staging okruženju i merite vreme; automatski skripti bi trebalo da loguju greške (-v) i vraćaju izlazni status za monitoring.

U narednom delu ćemo pokriti primere automatizacije (cron, rotacija i retention politica) i kako integrisati pg_dump u CI/CD pipeline bez kompromisa na sigurnosti.

Završne napomene i sledeći koraci

Rad sa bekapima nije jednokratan zadatak — to je proces koji zahteva disciplinu, dokumentovanje i redovno testiranje. Postavite automatizovane rutine, osigurajte pristupne kredencijale, i redovno verifikujte da su vaši fajlovi čitljivi i da se mogu restaurirati u prihvatljivom vremenu. Planirajte off-site kopije i retention politiku koja odgovara poslovnim zahtevima i regulatornim obavezama.

  • Automatizujte bekape i rotaciju (cron, systemd timer ili orkestracija) i pratite uspeh/greške kroz logovanje i alerting.
  • Šifrujte backup fajlove u miru i pri prenosu; čuvajte ključeve bezbedno van servera za bekapove.
  • Redovno testirajte vraćanje (disaster recovery drill) na izolovanom okruženju kako biste proverili procedure i vreme oporavka.
  • Verifikujte backup integritet — koristi se test-restore ili lista sadržaja (pg_restore -l) pre nego što se oslonite na fajl kao validan izvor oporavka.
  • Uvedite verzionisanje skripti za bekap i dokumentujte korake, privilegije i odgovorne osobe.
  • Razmotrite dodatne opcije kao što su PITR i fizički (base) bekapi ako vam je potrebna granularnija tačka oporavka.

Za detaljnija tehnička objašnjenja i zvanične opcije alata pogledajte pg_dump dokumentaciju. Implementacija dobrog procesa za bekap i obnovu zahteva kombinaciju automatizacije, bezbednosti i redovnog testiranja — to su ključni elementi da vaši podaci ostanu dostupni i pouzdani kada zatreba obnova.