Migracija sa MySQL-a na PostgreSQL
From RCUB
(Copy paste poruka sa mailing liste) |
|||
| Line 1: | Line 1: | ||
| − | + | Ova poruka se najviše tiče BIS i NetIS ekipa. | |
| + | |||
| + | U četvrtak i petak smo obavili testnu migraciju IS Univerziteta sa | ||
| + | MySQL-a na PostgreSQL. | ||
| + | |||
| + | S obzirom da koristimo JPA (Apache OpenJPA) i da nigde nismo koristili | ||
| + | native upite, nisu bile neophodne nikakve prepravke na aplikaciji, osim | ||
| + | stringa za konekciju, korisničkog imena i lozinke. | ||
| + | |||
| + | Ono što je bilo potrebno prepraviti su SQL skriptovi za kreiranje i | ||
| + | insertovanje podataka. Sve promene koje je trebalo obaviti na njima su | ||
| + | lepo dokumentovane na: | ||
| + | |||
| + | http://www.markslade.name/Articles.html?a=9 | ||
| + | |||
| + | Pored navedenih, naišli smo na još dve stvari: | ||
| + | |||
| + | 1. U MySQL-u u insert statmentu za BOOLEAN polje je dozvoljeno staviti | ||
| + | vrednost 1, u Postgresu mora '1' (pod apostrofima) | ||
| + | 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 | ||
| + | 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 | ||
| + | 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 | ||
| + | server, isti skup podataka, isti upit, deset ponavljanja). Performanse | ||
| + | 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. | ||