Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
pgs_restore [2017/09/21 14:30] – nessa | pgs_restore [2021/02/14 12:06] – milano | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== PG Restore ==== | + | ====== PG Restore |
- | Za restore PostgreSQL baze podataka najsvrsishodnije je koristiti postojeci psql.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: | + | ===== pg_restore ===== |
- | | + | Ovaj alat sadrži brojne opcije prilikom vraćanja baze podataka, i predstavlja prirodnog parnjaka **[[: |
- | - navigacija | + | |
- | - pokretanje | + | |
+ | ==== Prenos baze podataka na drugi server ==== | ||
+ | |||
+ | 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/ | ||
+ | < | ||
+ | pg_dump -U postgres -Fc -d b1 -f b1.backup | ||
+ | </ | ||
+ | |||
+ | Objašnjenje parametara: | ||
+ | |||
+ | **-U postgres** znači da operaciju izvodim pod korisničkim nalogom // | ||
+ | **-Fc** znači da koristim //custom format// fajla, koji dozvoljava najviše opcija pri raspakivanju (pg_restore) baze. Istovremeno, | ||
+ | **-d b1** je ime baze podataka koju prenosim/ | ||
+ | **-f b1.backup** je ime fajla u koji se podaci pohranjuju. | ||
+ | |||
+ | Ovako kompresovana baza može se vratiti na drugi server sledećom komandom: | ||
+ | |||
+ | < | ||
+ | pg_restore -U balans_admin -C --disable-triggers -d postgres b1.backup | ||
+ | </ | ||
+ | |||
+ | Objašnjenje parametara: | ||
+ | |||
+ | **-U balans_admin** znači da operaciju izvodim, na novom serveru, pod korisničkim nalogom // | ||
+ | **-C** znači da se na će se pri raspakivanju napraviti nova baza podataka, sa istim imenom kao što ga je imala izvorna.\\ | ||
+ | **--disable-triggers** se koristi kada postoje podaci unutar baze koja se restaurira kako bi se izbegle greške u referencijalnim vezama među podacima koji nisu u potpunosti vraćeni. \\ | ||
+ | **-d postgres** je parametar koji pravi najviše zabune, jer izgleda kao da dajemo instrukciju da se baza raspakuje u bazu sa imenom // | ||
+ | **b1.backup** je ime fajla u kom se nalazi spakovana i kompresovana baza koju raspakujemo. | ||
+ | |||
+ | |||
+ | ===== psql - vraćanje iz " | ||
+ | |||
+ | Za restore PostgreSQL baze podataka < | ||
+ | ==== Procedura ==== | ||
+ | |||
+ | | ||
+ | - Navigacija | ||
+ | - Pokretanje | ||
- **psql -U < | - **psql -U < | ||
- znacenje opcija: -U < | - znacenje opcija: -U < | ||
Line 13: | Line 50: | ||
" | " | ||
- | Psql alatu se može zadati i server, port, baza, korisničko ime i lozinka u ovom formatu, npr: psql.exe –dbname=postgresql:// | + | Psql alatu se može zadati i server, port, baza, korisničko ime i lozinka u ovom formatu, |
+ | |||
+ | ===== Aktivna opcija " | ||
+ | |||
+ | Usled razloga opisanih u [[pgs_dump|pg_dump]] proceduri, a ukoliko prilikom bekapovanja baze nisu preduzeti nikakvi koraci, rekonstrukcija baze treba da ide sledećim tokom. \\ | ||
+ | Opisan je najgori scenario: poslovni period u bekapovanij bazi je bio je zaključan na tekući dan u momentu bekapa. \\ | ||
+ | Primer je iz realnog sveta, bekap je napravljen na bazi MgMivela, a rekonstruišu se samo šeme **bcus**, **bpub** i **btek** (tekuća godina). \\ | ||
+ | |||
+ | Rekonstrukcija šema i podataka istovremeno ne može biti sprovedena. Prvo je neophodno rekonstruisati šeme. \\ | ||
+ | |||
+ | < | ||
+ | #> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n bcus -n bpub -n btek -O -d b3 -x -s c: | ||
+ | </code> | ||
+ | |||
+ | Objašnjavam ređe opcije: | ||
+ | |||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | Sada kada imamo definiciju svih objekata može se promeniti funkcija '' | ||
+ | < | ||
+ | CREATE OR REPLACE FUNCTION bpub.maxdatstocklock() RETURNS timestamp AS | ||
+ | $BODY$ | ||
+ | DECLARE result timestamp; | ||
+ | BEGIN | ||
+ | | ||
+ | THEN ' | ||
+ | ELSE MAX(datStockLock) | ||
+ | END | ||
+ | FROM btek.firme | ||
+ | INTO result; | ||
+ | | ||
+ | END; | ||
+ | $BODY$ | ||
+ | LANGUAGE plpgsql | ||
+ | STABLE; | ||
+ | </ | ||
+ | |||
+ | Kako je rečeno, u ovom primeru je pored svega još i zaključan period na tekući dan, te rekonstrukcija zapisa nije moguća pre njegovog otključavanja. Za ovaj korak potrebni su nam samo podaci tabele '' | ||
+ | < | ||
+ | #> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n btek -t firme -O -d b3 -x -a c: | ||
+ | </ | ||
+ | |||
+ | Objašnjavam ređe opcije: | ||
+ | |||
+ | '' | ||
+ | '' | ||
+ | |||
+ | Otključavam period: | ||
+ | < | ||
+ | UPDATE btek.firme SET datStockLock=NULL | ||
+ | </ | ||
+ | Ukoliko je potrebno vratiti zaključavanje u prethodno stanje pre postavke u NULL treba očitati tekuću vrednost. | ||
+ | |||
+ | Sada smo spremni da preuzmemo i ostale podatke, ali ovaj put dodajemo i '' | ||
+ | < | ||
+ | #> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n bcus -n bpub -n btek -O -d b3 -x -a --disable-triggers c: | ||
+ | </ | ||
+ | |||
+ | Po završetku procesa otvoriti fajl '' | ||
+ | Očekivana je samo jedna greška - tabela '' | ||
+ | Vreme je da se funkcija '' | ||
+ | < | ||
+ | CREATE OR REPLACE FUNCTION bpub.maxdatstocklock() RETURNS timestamp AS | ||
+ | $BODY$ | ||
+ | DECLARE result timestamp; | ||
+ | BEGIN | ||
+ | | ||
+ | THEN ' | ||
+ | ELSE MAX(datStockLock) | ||
+ | END | ||
+ | FROM firme -- <<< | ||
+ | INTO result; | ||
+ | | ||
+ | END; | ||
+ | $BODY$ | ||
+ | LANGUAGE plpgsql | ||
+ | STABLE; | ||
+ | </ | ||
+ | Ukoliko treba sada je trenutak da se vrati i prethodni datum zaključavanja u '' | ||
+ | Proveriti broj zapisa u tabelama '' | ||
+ | Trebalo bi da je sve savršeno ! |