pgs_dump

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pgs_dump [2017/05/08 08:18] milicapgs_dump [2022/08/31 15:57] (current) – [Izvoz u tekstualnu datoteku (plain text)] milano
Line 1: Line 1:
-==== PG Dump ====+====== PG Dump ====== 
 + 
 +===== pg_dump ===== 
 + 
 +Za kopiranje PostgreSQL baze podataka najsvrsishodnije je koristiti postojeci pg_dump koji je lociran u folderu kome je instaliran Postgres, i to u folderu Bin. 
 + 
 +Primer lokacije na Windows platformi 
 + 
 +<file> 
 +c:\Program Files\PostgreSQL\9.6\bin\pg_dump.exe 
 +</file> 
 + 
 +===== Izvoz u kompresovanu datoteku ===== 
 + 
 +Preporučeni način izvoza baze podataka sa najviše opcija pri uvozu na drugi server jeste upotreba //custom// formata zapisa (-Fc). 
 + 
 +Pri prenosu celih baza podataka, veoma je važno da izlazni fajl bude kompresovan jer se može desiti da zbog veličine bude nepodesan za prenos/manipulaciju. Kompresijom upravlja **pg _dump**, a niže je primer prenosa baze pod nazivom **b1**, sa **extenzijama**, šemama i svim ostalim Pg objektima. Operaciju izvodim pod sistemskim //postgres// nalogom, iako to može biti bilo koji drugi korisnik sa odgovarajućim pravima : 
 +<code> 
 +pg_dump -U postgres -Fc -d b1 -f b1.backup 
 +</code> 
 + 
 +Objašnjenje parametara: 
 + 
 +**-U postgres** znači da operaciju izvodim pod korisničkim nalogom //postgres//.\\ 
 +**-Fc** znači da koristim //custom format// fajla, koji dozvoljava najviše opcija pri raspakivanju ( pg _ restore ) baze. Istovremeno, ovaj format automatski podrazumeva kompresovanje podataka.\\ 
 +**-d b1** je ime baze podataka koju prenosim/bekapujem/čuvam\\ 
 +**-f b1.backup** je ime fajla u koji se podaci pohranjuju. 
 + 
 +Ako se dump pravi sa računara na kom nije PGS server sintaksa je sledeća (--verbose može da se izostavi kada nema potrebe da se ispisuje trenutna dump akcija u CMD prozoru): 
 + 
 +<code> 
 +pg_dump --dbname=postgresql://korisnik:lozinka@imePGServera:port/nekabaza --schema=nekaschema --verbose -Fc --file="Putanja_do_dump_fajla" 
 +</code> 
 + 
 +Preporuka za izradu kopije za potrebe prenosa na drugi server (npr. kada stavljamo bazu na kanal) jeste da se prilikom //dump-a// izostave podaci o vlasniku, odnosno privilegijama pristupa objektima. 
 +Tako izbegavamo neophodnost postojanja identičnog korisničkog naloga na serveru na kom će se baza raspakivati. 
 + 
 +''-x'' isključiće prenos privilegija 
 +''-O'' isključiće prenos vlasnika 
 +''-n'' omogućava navođenje šema koje treba ubaciti u bekap, i ponavlja se onoliko puta koliko šema treba preneti. 
 + 
 +Primer tipične komande za izradu bekapa namnjenog prenosu "na kanal" bi bio: 
 + 
 +<code> 
 +pg_dump -U postgres -Fc -d b1 -n bcus -n bpub -n btek -O -x -f b1.backup 
 +</code> 
 +===== Izvoz u tekstualnu datoteku (plain text) ===== 
 + 
 +Ovaj format omogućava proizvoljne aktivnosti na prilagođavanju fajla za naknadni uvoz u običnom uređivaču teksta jer se baza izvozi kao SQL skript. Kako se pri zameni delova teksta izbegla mogućnost oštećenja podataka, toplo se preporučuje odvojiti definicije od podataka u dva zasebna fajla.
  
-Za kopiranje PostgreSQL baze podataka najsvrsishodnije je koristiti postojeci pg_dump.exe koji je lociran u folderu kome je instaliran Postgres, i to u folderu Bin, npr c:\Program Files\PostgreSQL\9.6\bin\. 
 Procedura za dampovanje je: Procedura za dampovanje je:
 +
   - pokretanje command prompta (cmd.exe) u administratorskom rezimu   - pokretanje command prompta (cmd.exe) u administratorskom rezimu
   - navigacija u folder gde se nalazi pg_dump.exe npr: cd Program Files\PostgreSQL\9.6\bin   - navigacija u folder gde se nalazi pg_dump.exe npr: cd Program Files\PostgreSQL\9.6\bin
-  - pokretanje komande za dump sa opcijama dupm-a:  +  - pokretanje komande za dump sa opcijama dupm-a: 
-     **pg_dump -U <postgres> -d <b1> -n <public> -f <mydbPA.sql>**  +      ''pg_dump -U <postgres> -d <b1> -n <public> -f <mydbPA.sql>'' 
-     - znacenje opcija: -U <user>, -d <ime baze>, -n <ime scheme> -f <format i ime fajla za izvoz>+      - znacenje opcija: -U <user>, -d <ime baze>, -n <ime scheme> -f <format i ime fajla za izvoz> 
 + 
 +Ime baze se može navesti i kao ''<nowiki>postgresql://nessa:deus@MOC:5432/b100</nowiki>'', što je posebno značajno kada se radi sa mašine koja nije PG server. 
 + 
 +Samo struktura baze se može izvesti komandom ''-s (–schema-only)'' npr.  
 +<code>pg_dump -U postgres -s -d b1 -f b1_SCHEMA.sql</code> 
 +Samo podaci baze se mogu izvesti komandom ''-a (–data-only)'' npr. <code>pg_dump -U postgres -a –disable-triggers -d b1 -f b1_DATA.sql</code> 
 +Opcija ''–disable-triggers'' zahteva da se prosledi superuser ime, u ovom slučaju je to postgres. 
 + 
 + 
 +===== Aktivna opcija "zaključavanja perioda" ===== 
 + 
 +Kada je aktivirana opcija //Uključiti mogućnost apsolutnog zaključavanja poslovnog perioda// potrebno je preduzeti **dodatne korake** kako bi se bekapovana baza mogla rekonstruisati. 
 + 
 +Zaključavanje se izvodi dodavanjem ''CONSTRAINT'' na tabele ''racuni'',''otpremnice'',''ulaz'' i ''nalozi''. Ograničenje se oslanja na funkciju ''bpub.maxdatstocklock()'' koja se kreira dinamički prilikom aktiviranja opcije kroz parametre programa (znači, nema je u ''b0'' ili //Dbupdate//).  
 + 
 +Funkcija se oslanja na tabelu ''firme'' (polje ''datStockLock''), koja se nalazi u tekućoj bazi i arhivama. Da bi zaključavanje tekućeg perioda i arhiva bilo razdvojeno u funkciji nije eksplicitno određena šema tabele ''firme'' već se koristi ''search_path'' za to. 
 + 
 +Pošto ''pg_restore'' resetuje ''search_path'' povrat podataka u ''CONSTRAINT-om'' zaštićene tabele neće biti moguć zbog greške ''relation 'firme' not found''
 +Da bi se ovo prevazišlo potrebno je: 
 + 
 +  - Pre bekapovanja promeniti funkciju ''bpub.maxdatstocklock()'' tako da se doda eksplictno šema tabele - ''btek.firme'' 
 +  - U tabeli ''btek.firme'' postaviti vrednost polja ''datStockLock'' u ''NULL'' 
 +  - Nakon bekapovanja vratiti funkciju na staro kao i vrednost polja ''datStockLock'' 
 +  - Nakon ''pg_restore'' komande (otvaranja bekapa) opet korigovati funkciju (ukloniti ekslplicitno navedenu šemu). 
 + 
 +Ukoliko se sve ovo ne uradi i dalje će biti moguća rekonstrukcija baze iz bekapa ali dodatnim koracima u **[[pgs_restore|pg_restore]]** procesu.
  • pgs_dump.1494231484.txt.gz
  • Last modified: 2017/05/08 08:18
  • by milica