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
Last revisionBoth sides next revision
pgs_dump [2017/05/08 08:16] milicapgs_dump [2022/08/31 15:56] – [Izvoz u kompresovanu datoteku] 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>'' 
-  (-U <user>, -d <ime baze>, -n <ime scheme> -f <format i ime fajla za izvoz>Ordered List Item+      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 -S 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.txt
  • Last modified: 2022/08/31 15:57
  • by milano