This is an old revision of the document!


Migracija podataka, linkova i izveštaja na PostgreSQL

Neophodne aplikacije i alati:

  1. PostgreSQL server (PGS) download za Windows
  2. PostgreSQL ODBC driver download
  3. Query Analyzer (QA) download
  4. Formula Checker (FC) download

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

Na kompjuteru sa koga će se prebacivati podaci iz JET baze podataka treba instalirati PostgreSQL ODBC driver.
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

Opcije drajvera koje utiču na Crystal Reports izveštaje

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.


Da bi Sabirnica/Transporter znali da treba da se vežu na Postgres bazu posle broja firme u parametru komandne linije za njihovo pokretanje treba dodati @DSN_naziv . Umesto naziva DSN-a može se zadati i ime txt fajla iz ..BalansData foldera u kome su šifrovani parametri pristupa Postgres serveru.

Primer upotrebe Posgres ODBC DSN za pokretanje Transportera nad firmom 3 upotrebom PostgreSQL35W ODBC DSN-a

BLSyncSrv.exe 3@PostgreSQL35W

Primer upotrebe fajla PgODBCalboka.txt za povezivanje nad firmom 3

BLSyncSrv.exe 3@PgODBCalboka.txt

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.


U PostgreSQL-u ne postoje linkovi u smislu JET baza (pokazivači na tabele u drugim bazama). Ako su tabele u shemama iste baze (firme) npr. prethodne godine onda im se pristupa navodjenjem imena sheme ispred imena baze npr. SELECT * FROM “2015”.Racuni tako da se umesto JET linka Racuni2015 može napraviti view Racuni2015. Ako je JET link na bazu druge firme (npr. Albo –> Boka) 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 PGS 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 4. Otvoriti formu za linkovanje 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)

Izveštaji koji se sami kače na bazu moraju se prebaciti na Command objekat koji se takođe sam kači na bazu, ali iz nekog razloga može da vidi parametrizovane upite u PGS serveru.
TTX i COM izveštaji se ne moraju prepravljati jer njima Balans prosleđuje podatke. Postupak za prepravku takvih izveštaja je sledeći:

Na računaru na kojem je instaliran Balans i ima pristup bazama podataka u Data 20 folderu treba pokrenuti Formula Checker, odabrati opciju 'obradi i podfoldere' i kliknuti na sličicu PGS slona.
Direktorijum JET baze koja sadrži upite na koje se izveštaji oslanjaju zadaje se klikom na dugme foldera iznad sličice PGS slona.

Na kraju procesa u folderu Data 20 ili u folderu sa izveštajima će biti napravljen fajl Izvestaj_o_izvestajima.txt
Sadržaj tog fajla će biti spisak izveštaja sa pripadajućim SQL komandama za dobijanje podataka iz PGS baze. Npr.

E:\Razvoj\Assets\Reports_4\Artikli i Usluge\Kartica artikla (prosirena).rpt
Parametri: 5
{?inElID} {?inSklID} {?inDatStart} {?inDatEnd} {?InFal}
Tabele: 1
tabela rptProveraArtikla: ODBC —> SELECT * FROM {?dbSchemaName}rptProveraArtiklaMP({?inElID},{?inSklID},{?inDatStart},{?inDatEnd},{?InFal}::boolean)

Otvoriti prvi izveštaj, desni klik na Database Fields pa opcija Set Datasource Location…

U novom prozoru u gornjem polju 'Current Data Source' kliknuti na ime tabele/upita koji se koristi, a u donjem polju 'Replace with' kliknuti na 'Create New Connection'
i unutar toga ODBC (RDO). Pojaviće se forma za odabir ODBC konekcije pa treba odabrati prethodno napravljeni PGS ODBC konektor npr. PostgreSQL35W.

Nakon toga treba kliknuti na Add Command u ODBC (RDO) odeljku pa na dugme 'Update'. Pojaviće se forma za unos SQL komande i parametara.
U polje za SQL treba copy–paste komandu iz fajla Izvestaj_o_izvestajima.txt pa za svaki parametar u {?…} zagradama treba dodati odgovarajući bez tih zagrada
klikom na dugme Create…

Value Type za parametre koji su dodatno uokvireni u apostrofe i za dbSchemaName je String, a za ostale je najbolje pogledati kroz QA za svaki slučaj.
Uglavnom su parametri čiji naziv počinje sa InDat tipa DateTime, parametri koji se kastuju sa CBool() ili ::boolean su tipa Boolean, a ostali su tipa Number.
Na kraju, kada se dodaju svi parametri u spisak, posle klika na OK pojaviće se forma za unos parametara (iz nepoznatog razloga pojavi se 2 puta) pa
ako sve prođe kako treba u polju 'Current Data Source' će za Table Name pisati Command umesto imena tabele/upita.

Ako izveštaj ima podizveštaje koji koriste svoje upite onda u polju 'Current Data Source' treba za svaki od njih ponoviti postupak zamene upita SQL komandom iz fajla Izvestaj_o_izvestajima.txt

Ponoviti postupak za sve ostale izveštaje, ali ne zatvarati prozor Crystal Reports-a tako da se ne mora svaki put praviti nova ODBC (RDO) konekcija.

Postoji nekoliko načina za pristup bazi kroz ADO konekciju setovanjem svojstva ConnectionString:

  1. Korišćenjem DSN-a: DSN=naziv_DSNa ili Provider=MSDASQL.1;Extended Properties=“DSN=naziv_DSNa;DATABASE=dbname;SERVER=servername_orIP;PORT=portnum;UID=username;PWD=password” što je korisno za promenu baze bez prepravke DSN-a
  2. Korišćenjem Postgres ODBC drivera: “Driver={PostgreSQL Unicode};Server=servername_orIP;Port=portnum;Database=dbname;Uid=username;Pwd=password;ByteaAsLongVarBinary=1;BoolsAsChar=0;” (u početku je radilo OK, ali je odjednom vreme izvršenja skočilo na 40-50 sec. http://www.pgoledb.com)
  3. Korišćenjem Native OLEDB PGS drivera koji se plaća: “Provider=PostgreSQL OLE DB Provider;Data Source=servername_orIP;location=dbname;User ID=username;password=password;” (poslednja besplatna verzija je 1.0.0.20 iz 2005 god. http://pgfoundry.org/projects/oledb)
  4. Korišćenjem 3rd party drivera npr. PM PostgreSQL OLEDB by Pavel Krejcir: “Provider=PMDAPGS;Server=servername_orIP;Database=dbname;User=username;Password=password;Port=portnum (http://sourceforge.net/projects/pmpostgresqlole/files okida grešku pri kačenju)


  • kb/pg/migracija_jet_na_pg_main.1519295807.txt.gz
  • Last modified: 2018/02/22 10:36
  • by nessa