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