Migracija sa MySQL-a na PostgreSQL

From RCUB
Jump to: navigation, search
(Copy paste poruka sa mailing liste)
m
 
Line 1: Line 1:
Ova poruka se najviše tiče BIS i NetIS ekipa.
+
Timovi koji imaju nameru da MySQL zamene sa PostgreSQL-om, ovaj dokument mogu da koriste kao polaznu osnovu. PostgreSQL se čita kao "Postgres Kju El" ili samo "Postgres". Takodje, pogledajte stranicu [[PostgreSQL]]
  
U četvrtak i petak smo obavili testnu migraciju IS Univerziteta sa
+
==Promene na aplikaciji==
MySQL-a na PostgreSQL.
+
  
S obzirom da koristimo JPA (Apache OpenJPA) i da nigde nismo koristili
+
U slučaju da se koristi JPA za apstrakciju pristupa bazi, i da se koriste
native upite, nisu bile neophodne nikakve prepravke na aplikaciji, osim
+
samo JPQL upiti, nikakve promene na aplikaciji nisu potrebne. Jedino je potrebno
stringa za konekciju, korisničkog imena i lozinke.
+
promeniti parametre konekcije.
  
Ono što je bilo potrebno prepraviti su SQL skriptovi za kreiranje i  
+
U slucaju da se koriste Native upiti pod JPA-om, ili da se koristi JDBC, potrebno je
insertovanje podataka. Sve promene koje je trebalo obaviti na njima su  
+
nekoliko zahvata na MySQL upitima (npr. skriptovi za kreiranje i  
 +
insertovanje podataka) da bi bili kompatibilni sa Postgresom. Sve promene koje treba obaviti na njima su  
 
lepo dokumentovane na:
 
lepo dokumentovane na:
  
  http://www.markslade.name/Articles.html?a=9
+
http://www.markslade.name/Articles.html?a=9
  
 
Pored navedenih, naišli smo na još dve stvari:
 
Pored navedenih, naišli smo na još dve stvari:
  
1. U MySQL-u u insert statmentu za BOOLEAN polje je dozvoljeno staviti  
+
# U MySQL-u u insert statmentu za BOOLEAN polje je dozvoljeno staviti vrednost 1, u Postgresu mora '1' (pod apostrofima)
vrednost 1, u Postgresu mora '1' (pod apostrofima)
+
# LONGBLOB u MySQL-u se escape-uje heksadekadno, a BYTEA u Postgresu oktalno
2. LONGBLOB u MySQL-u se escape-uje heksadekadno, a BYTEA u Postgresu  
+
oktalno
+
  
 
Pored toga, vredi pomenuti da je UTF-8 podržan i u Postgresu, kao i  
 
Pored toga, vredi pomenuti da je UTF-8 podržan i u Postgresu, kao i  
 
srpsko sortianje (zavisi od podešavanja locale-a prilikom kreiranja baze).
 
srpsko sortianje (zavisi od podešavanja locale-a prilikom kreiranja baze).
  
U petak nam se učinilo neviđen dobitak u ubrzanju na jednom složenom
+
==Performanse==
upitu (EAGER JOIN, 33 tabele) - od neverovatnih 12 puta. Merenje je
+
urađeno pod vrlo neravnopravnim uslovima, tako da rezultat nije ni
+
približan realnosti (izvinjenje Jovani Vuleti za dezinformaciju - ne
+
treba donositi važne zaključke u petak uveče).
+
  
Danas smo ponovili merenje pod koliko-toliko ravnopravnim uslovima (isti  
+
Vrlo površno merenje pod koliko-toliko ravnopravnim uslovima (isti  
server, isti skup podataka, isti upit, deset ponavljanja). Performanse
+
server, isti skup podataka, isti upit, deset ponavljanja) je pokazalo +30% u brzini u korist Postgresa.
za ovaj konkretan upit su bile +30% u korist Postgresa.
+
 
+
Ukoliko je potrebno još informacija, ili pomoć oko migracije, javite.
+
 
+
Obratite takođe pažnju, hijerarhija u Postgresu je baza, šema, tabela.
+
JDBC string za konekciju prima kao parametar samo ime baze, a ne i šemu.
+
Tako da je verovatno najlakše kreirati posebne baze i koristiti njihove
+
default "public" šeme.
+
 
+
psql komande koje vam mogu biti od interesa:
+
 
+
\l - listanje baza podataka
+
\c - izbor aktivne baze podataka
+
\dn - listanje svih sema u izabranoj bazi
+
\du - listanje svih korisnika
+
 
+
CREATE USER username PASSWORD 'l0zinka' - kreiranje korisnika
+
GRANT ALL ON SCHEMA public TO username; - dodeljivanje privilegija
+
 
+
Da bi ste omogućili pristup serveru preko JDBC-ja odnosno TCP/IP-ja,
+
potrebno je da u data/postgresql.conf navedete:
+
 
+
listen_addresses = '*'          # what IP address(es) to listen on;
+
port = 5432                    # (change requires restart)
+
 
+
i da u data/pg_hba.conf dodate:
+
 
+
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
+
host    mydb        ognjen      147.91.4.66/32        md5
+
 
+
JDBC connection string je oblika:
+
 
+
jdbc:postgresql://netis-test.rcub.bg.ac.yu/e_university_v5
+
 
+
Default port je 5432, drajver je: org.postgresql.Driver.
+

Latest revision as of 12:03, 14 May 2009

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox