Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
kb:pg:pgs_restore [2025/03/29 15:44] – removed - external edit (Unknown date) 127.0.0.1 | kb:pg:pgs_restore [2025/03/29 15:44] (current) – ↷ Page moved from pgs_restore to kb:pg:pgs_restore milano | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== PG Restore ====== | ||
+ | ===== pg_restore ===== | ||
+ | |||
+ | Ovaj alat sadrži brojne opcije prilikom vraćanja baze podataka, i predstavlja prirodnog parnjaka **[[kb: | ||
+ | |||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | === Vraćanje samo tekuće baze === | ||
+ | |||
+ | Kada je baze sadrže mnogo arhiva a potrebno je izvući samo tekuću godinu koristi se sledeći format komande: | ||
+ | |||
+ | < | ||
+ | pg_restore -U balans_admin -C --disable-triggers -O -x -d bxx -n bcus -n bpub -n btek -f b1.backup | ||
+ | </ | ||
+ | |||
+ | Objašnjenje parametara: | ||
+ | |||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | ===== psql - vraćanje iz " | ||
+ | |||
+ | Za restore PostgreSQL baze podataka < | ||
+ | ==== Procedura ==== | ||
+ | |||
+ | - Pokretanje command prompta (cmd.exe) u administratorskom rezimu | ||
+ | - Navigacija u folder gde se nalazi psql.exe npr: cd Program Files\PostgreSQL\9.6\bin | ||
+ | - Pokretanje komande za restore sa opcijama restore-a: | ||
+ | - **psql -U < | ||
+ | - znacenje opcija: -U < | ||
+ | |||
+ | Sa psql alatom se može odraditi i skript za pravljenje nulte baze npr. psql -f " | ||
+ | |||
+ | " | ||
+ | |||
+ | Psql alatu se može zadati i server, port, baza, korisničko ime i lozinka u ovom formatu kao u primerima na https:// | ||
+ | |||
+ | |||
+ | ===== Aktivna opcija " | ||
+ | |||
+ | Usled razloga opisanih u [[kb: | ||
+ | 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: | ||
+ | </ | ||
+ | |||
+ | 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 ! |