pgs_restore

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revisionBoth sides next revision
pgs_restore [2018/02/22 10:33] – [Prenos baze podataka na drugi server] milanopgs_restore [2021/01/22 21:38] milano
Line 51: Line 51:
 Psql alatu se može zadati i server, port, baza, korisničko ime i lozinka u ovom formatu, (ispred reči dbname treba da budu 2 crtice, ali ih docuwiki spaja u jednu) npr: \\ psql.exe –dbname=postgresql://korisnik:lozinka@:pgserver:5432/b4 //ostale_opcije_i_parametri Psql alatu se može zadati i server, port, baza, korisničko ime i lozinka u ovom formatu, (ispred reči dbname treba da budu 2 crtice, ali ih docuwiki spaja u jednu) npr: \\ psql.exe –dbname=postgresql://korisnik:lozinka@:pgserver:5432/b4 //ostale_opcije_i_parametri
  
 +===== Aktivna opcija "zaključavanja perioda" =====
  
 +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. \\ 
 +
 +<code>
 +#> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n bcus -n bpub -n btek -O -d b3 -x -s c:\b3_mivela.backup 2>restore.log
 +</code> 
 +
 +Objašnjavam ređe opcije: 
 +
 +''-v'' - //verbose// režim rada, znači bogatiji opisi grešaka i akcija \\ 
 +''-n'' - navodim šeme koje želim da izvučem iz bekapa \\
 +''-O'' - naređujem da se ne rekonstruiše vlasništvo nad objektima (vlasnik postaje korisnik naveden pod ''-U'' opcijom) \\
 +''-x'' - naređujem da se ne rekonstruišu ni posebne privilegije nad objektima \\ 
 +''-s'' - naređujem da se radi **samo rekonstrukcija šeme objekata baze** (definicije tabela, pogleda, funkcija itd.) \\ 
 +''2>'' - ovo nije vezano za ''pg_restore'' već ukazuje //shell-u// da izlaz (opis radova) usmeri u fajl ''restore.log'' umesto na ekran (beskorisno). \\ \\
 +
 +Sada kada imamo definiciju svih objekata može se promeniti funkcija ''bpub.maxdatstocklock()'' \\
 +<code>
 +CREATE OR REPLACE FUNCTION bpub.maxdatstocklock() RETURNS timestamp AS 
 +$BODY$
 +    DECLARE result timestamp;
 +    BEGIN
 +         SELECT CASE WHEN (MAX(datStockLock) IS NULL)
 +                     THEN '1970-03-22'::timestamp
 +                     ELSE MAX(datStockLock)
 +                END
 +         FROM btek.firme   -- <<< u potpunosti zakucavamo na koju tabelu firme mislimo; search_path više nije bitan
 +         INTO result;
 +         RETURN result;
 +    END;
 +$BODY$
 +LANGUAGE plpgsql
 +STABLE;
 +</code>
 +
 +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 ''btek.firme'' pa ćemo izvući samo njih:
 +<code>
 +#> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n btek -t firme -O -d b3 -x -a c:\b3_mivela.backup 2>restore2.log
 +</code>
 +
 +Objašnjavam ređe opcije: 
 +
 +''-t'' - navodim tabelu čije podatke želim rekonstruisati \\
 +''-a'' - naređujem da želim samo podatke \\ \\
 +
 +Otključavam period:
 +<code>
 +UPDATE btek.firme SET datStockLock=NULL
 +</code>
 +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:
 +<code>
 +#> pg_restore -h 192.168.0.5 -p 5432 -U postgres -v -n bcus -n bpub -n btek -O -d b3 -x -a c:\b3_mivela.backup 2>restore3.log
 +</code>
 +
 +Po završetku procesa otvoriti fajl ''restore3.log'' i proveriti ima li grešaka zbog kojih podaci nisu mogli biti učitani.
 +Očekivana je samo jedna greška - tabela ''firme'' neće biti učitana jer su podaci već bili u njoj.
 +
 +Vreme je da se funkcija ''bpub.maxdatstocklock()'' vrati u izvorni oblik \\
 +<code>
 +CREATE OR REPLACE FUNCTION bpub.maxdatstocklock() RETURNS timestamp AS 
 +$BODY$
 +    DECLARE result timestamp;
 +    BEGIN
 +         SELECT CASE WHEN (MAX(datStockLock) IS NULL)
 +                     THEN '1970-03-22'::timestamp
 +                     ELSE MAX(datStockLock)
 +                END
 +         FROM firme   -- <<< sada opet search_path upravlja odabirom tabele za regulisanje zaključavanja
 +         INTO result;
 +         RETURN result;
 +    END;
 +$BODY$
 +LANGUAGE plpgsql
 +STABLE;
 +</code>
 +
 +Ukoliko treba sada je trenutak da se vrati i prethodni datum zaključavanja u ''firme.datStockLock''. \\ 
 +Proveriti broj zapisa u tabelama ''racuni'',''otpremnice'',''ulaz'' i ''nalozi''. \\ 
 +Trebalo bi da je sve savršeno !
  • pgs_restore.txt
  • Last modified: 2024/01/31 12:29
  • by milano