kb:pg:priprema_za_migraciju

Priprema za migraciju na Postgres

Treba izbegavati specijalne karaktere []{}(),;?*=!@ u šifri za Postgres bazu podataka. Ako se oni ipak koriste, šifra mora biti uokvirena u {…} zagrade.
Više o specijalnim karakterima na ovom linku.

Pre migracije obavezno proveriti strukturu JET baze upoređivanjem sa nultom bazom.

  • Migracija podataka nije invazivna za Jet baze, ali nije dobro raditi na aktivnim bazama jer može doći do promene podataka u toku izvoza u SQL
  • Prvo se migriraju arhive, pa tek onda tekuća baza

Na kompjuteru sa koga će se prebacivati podaci iz JET baze podataka ili na kome će raditi Balans 4 treba instalirati 32bitni PostgreSQL ODBC driver.

Opciono:
Kroz Administrative tools –> ODBC data sources (32 bit) treba napraviti System DSN koristeći unicode PostgreSQL ODBC driver, čiji naziv može biti proizvoljan (npr. PostgreSQL35W) i podesiti mu svojstva u skladu sa ovim primerom.

Detalji o svim parametrima Postgres ODBC drajvera nalaze se na ovoj adresi: http://psqlodbc.projects.pgfoundry.org/docs/config.html
Opcija “Unknowns as LongVarChar” služi da se JSON kolone pri čitanju ne seku na 255 karaktera.

Use Declare/Fetch Kada se DSN koristi za Crystal treba uključiti na mašinama gde se okida greška “Out of memory while reading tuples” kada je rezultat sa mnogo slogova, jer DSN pokuša da uvuče sve slogove iz rezultata pre nego što ga vrati Crystal-u. Kada se DSN koristi za Balans treba isključiti jer se okida greška na WITH jfrom … iskazima.
True is -1 Treba isključiti uvek jer zbunjuje Crystal, a Balans radi u obe varijante.

Povezivanje Balansa na Postgres bazu može se izvesti i bez registrovanja Postgres ODBC DSN tako što se u korenu foldera sa bazama podataka (..\Balans\Data\) napravi fajl PgODBC.txt u kome se u šifrovanom obliku navedu osnovni parametri pristupa serveru.

Primer parametara veze

Server=nekiServer;Port=5432;Uid=nessa;Pwd=exMachina

Čitanje fajla PgODBC.txt vrši BLRBasic.dll i dodaje ostala svojstva (UseDeclareFetch, BoolsAsChar, TrueIsMinus1 itd). pre ostvarivanja veze sa Postgres bazom. Ostali moduli kojima treba direktna konekcija na Postgres bazu (npr. BLRReports.dll) mogu dobiti sadržaj fajla PgODBC.txt od objekta klase BLRBasic.SyBal2 i po potrebi zadati ostala svojstva konekcije.


U PostgreSQL-u ne postoje linkovi u smislu JET baza (pokazivači na tabele u drugim bazama) - umesto toga se koriste Foreign Data Wraperi// , koji mogu spojiti baze sa istog ili različitih servera.

Za razliku od JET-a, gde su arhive bile zasebne baze podataka, u Postgresu su one samo scheme unutar iste baze. Kako su u istoj bazi, nema potrebe za linkovanjem već im se pristupa navodjenjem imena sheme ispred imena baze. Na primer:

SELECT * FROM "2015".Racuni

*) Ime šeme je uokvireno u znake navoda zato što počinje brojem, a ne slovom, kako je podrazumevano očekivano.

Tako imamo da se umesto JET linka Racuni2015 može napraviti pogled Racuni2015, iako bi najbolje bilo prepraviti takve upite da koriste šeme umesto pogleda.

Ako je JET link na bazu druge firme (npr. Firma 1 –> Firma 2) onda se koristi FDW (foreign data wrapper) PGS ekstenzija.

Skoro ceo posao je automatizovan iz QA i potrebno je uraditi sledeće:

  1. Uvesti sve baze (tekuće i prethodne godine) u Postgres bazu
  2. Pokrenuti QA i spojiti se na JET bazu tekuće godine željene firme
  3. Spojiti se i na PGS bazu tekuće godine željene firme (kroz Postgres meni u okviru QA)
  4. Otvoriti formu za vezivanje u QA
  5. Kliknuti na tab “Link manager” da bi se učitali podaci o linkovima
  6. Kliknuti na tab “JET > PostgreSQL” i na njemu dugme sa oznakom (i) da bi se proverilo koje “linkove” je moguće napraviti, a koje ne (zelene i crvene sličice u poslednjoj koloni grida)
  7. Kliknuti na dugme sa PGS logom da bi se napravio skript za linkovanje koji treba odraditi iz pgAdmin aplikacije nad tekućom godinom (public shema) željene firme

Ako se u neku od FDW tabela doda kolona ona se (verovatno) neće videti u upitima jer je nema u FDW definiciji koju treba ponovo napraviti ako je moguće jer će možda komanda DROP FOREIGN TABLE xxx okinuti grešku da se koristi u nekim upitima. Nisam isprobao.

Napomena: JET linkovi na ne JET baze (npr. SQL Server) ne mogu se preneti u PGS jer postojeća rešenja kao što je tds_fdw ne podržavaju upis u SQL Server tabelu. Zato je jednostavnije napraviti link iz SQL Servera na PGS server pomoću PGS ODBC driver-a www.mssqltips.com/sqlservertip/3662/sql-server-and-postgresql-linked-server-configuration--part-2/

Na kompjuteru sa koga će se prebacivati podaci iz JET baze podataka ili na kome će raditi Balans 4 treba instalirati 32bitni PostgreSQL ODBC driver. Opciono: Kroz Administrative tools –> ODBC data sources (32 bit) treba napraviti System DSN, čiji naziv može biti proizvoljan (npr. PostgreSQL35W) i podesiti mu svojstva u skladu sa ovim primerom. Detalji o svim parametrima Postgres ODBC drajvera nalaze se na ovoj adresi: http://psqlodbc.projects.pgfoundry.org/docs/config.html

Use Declare/Fetch Treba uključiti na mašinama gde se okida greška “Out of memory while reading tuples” kada je rezultat sa mnogo slogova, jer DSN pokuša da uvuče sve slogove iz rezultata pre nego što ga vrati Crystal-u
True is -1

Povezivanje Balansa na Postgres bazu može se izvesti i bez registrovanja Postgres ODBC DSN tako što se u korenu foldera sa bazama podataka (..\Balans\Data\) napravi fajl PgODBC.txt u kome se u šifrovanom obliku navedu osnovni parametri pristupa serveru.

Primer parametara veze

Server=nekiServer;Port=5432;Uid=nessa;Pwd=exMachina

Čitanje fajla PgODBC.txt vrši BLRBasic.dll i dodaje ostala svojstva (UseDeclareFetch, BoolsAsChar, TrueIsMinus1 itd). pre ostvarivanja veze sa Postgres bazom. Ostali moduli kojima treba direktna konekcija na Postgres bazu (npr. BLRReports.dll) mogu dobiti sadržaj fajla PgODBC.txt od objekta klase BLRBasic.SyBal2 i po potrebi zadati ostala svojstva konekcije.

U PostgreSQL-u ne postoje linkovi u smislu JET baza (pokazivači na tabele u drugim bazama) - umesto toga se koriste Foreign Data Wraperi//, koji mogu spojiti baze sa istog ili različitih servera.

Za razliku od JET-a, gde su arhive bile zasebne baze podataka, u Postgresu su one samo scheme unutar iste baze. Kako su u istoj bazi, nema potrebe za linkovanjem već im se pristupa navodjenjem imena sheme ispred imena baze. Na primer:

SELECT * FROM "2015".Racuni

*) Ime šeme je uokvireno u znake navoda zato što počinje brojem, a ne slovom, kako je podrazumevano očekivano.

Tako imamo da se umesto JET linka Racuni2015 može napraviti pogled Racuni2015, iako bi najbolje bilo prepraviti takve upite da koriste šeme umesto pogleda.

Ako je JET link na bazu druge firme (npr. Firma 1 –> Firma 2) onda se koristi FDW (foreign data wrapper) PGS ekstenzija.

Skoro ceo posao je automatizovan iz QA i potrebno je uraditi sledeće:

  1. Uvesti sve baze (tekuće i prethodne godine) u Postgres bazu
  2. Pokrenuti QA i spojiti se na JET bazu tekuće godine željene firme
  3. Spojiti se i na PGS bazu tekuće godine željene firme (kroz Postgres meni u okviru QA)
  4. Otvoriti formu za vezivanje u QA
  5. Kliknuti na tab “Link manager” da bi se učitali podaci o linkovima
  6. Kliknuti na tab “JET > PostgreSQL” i na njemu dugme sa oznakom (i) da bi se proverilo koje “linkove” je moguće napraviti, a koje ne (zelene i crvene sličice u poslednjoj koloni grida)
  7. Kliknuti na dugme sa PGS logom da bi se napravio skript za linkovanje koji treba odraditi iz pgAdmin aplikacije nad tekućom godinom (public shema) željene firme

Ako se u neku od FDW tabela doda kolona ona se (verovatno) neće videti u upitima jer je nema u FDW definiciji koju treba ponovo napraviti ako je moguće jer će možda komanda DROP FOREIGN TABLE xxx okinuti grešku da se koristi u nekim upitima. Nisam isprobao.

Napomena: JET linkovi na ne JET baze (npr. SQL Server) ne mogu se preneti u PGS jer postojeća rešenja kao što je tds_fdw ne podržavaju upis u SQL Server tabelu.
Zato je jednostavnije napraviti link iz SQL Servera na PGS server pomoću PGS ODBC driver-a
www.mssqltips.com/sqlservertip/3662/sql-server-and-postgresql-linked-server-configuration--part-2/

Posle prebačenih tabela, linkova i upita u PGS baze treba odraditi skriptove iz DBupdate4 foldera (PG_2xxxx.sql fajlovi)


  • kb/pg/priprema_za_migraciju.txt
  • Last modified: 2020/03/09 12:12
  • by nessa