Skip to content

PostgreSQL migracija

Prelazak sa jedne major verzije PostgreSQL-a na drugu (npr. sa verzije 10 na 11) zahteva migraciju baze. Procedura:

Najpre zaustavimo servis:

systemctl stop postgresql.service

Zatim izmestimo naše podatke i kreiramo direktorijum za nove podatke:

mv /data/postgres/data /data/postgres/olddata
mkdir /data/postgres/data /data/postgres/tmp
chown postgres:postgres /data/postgres/data /data/postgres/tmp

Pošto ja baze čuvam na nestandardnom mestu, imam dodatni korak da postgresu kažem gde se nalaze podaci. To se radi tako što se u fajlu

/usr/lib/systemd/system/postgresql.service

izmene putanje za Environment i PIDFile. Ili, još bolje, napravimo simbolički link tako da

/var/lib/postgres/data

pokazuje na naš novi data direktorijum.

Sledeći korak je da se ulogujemo kao korisnik postgres i kreiramo novi klaster baza:

su - postgres
initdb -D '/data/postgres/data'

Na kraju ide sama migracija podataka:

pg_upgrade -b /opt/pgsql-10/bin - B /usr/bin -d /data/postgres/olddata -D /data/postgres/data

U slučaju da radimo migraciju između verzija PostgreSQL-a koje "nisu jedna do druge" (npr. sa verzije 9.5 na 11), lakše će biti da bazu još dok smo pod starim PostgreSQL-om snimimo u fajl pa da je nakon nadogradnje vratimo iz fajla u klaster.

Kao i u gornjem primeru, prvo izmestimo naše podatke:

mv /data/postgres/data /data/postgres/olddata
mkdir /data/postgres/data /data/postgres/tmp
chown postgres:postgres /data/postgres/data /data/postgres/tmp

Zatim pokrećemo stari server:

/opt/pgsql-9.5/bin/pg_ctl -D /data/postgres/olddata/ start

i prebacujemo bazu u fajl:

pg_dumpall -f /data/postgres/old_backup.sql

Sada možemo da zaustavimo server

/opt/pgsql-9.6/bin/pg_ctl -D /data/postgres/olddata/ stop

instaliramo novi PostgreSQL, kreiramo novi klaster baza, pokrenemo servis i vratimo podatke iz fajla u bazu sa:

psql -f /data/postgres/old_backup.sql postgres

Ako sve radi kako treba možemo da obrišemo /data/postgres/old_backup.sql, /data/postgres/olddata i /data/postgres/tmp.

Leave a Reply

Your email address will not be published. Required fields are marked *