Skip to content

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.

Najpre ćemo instalirati PostgreSQL komandom

pacman -S postgresql

Zatim ćemo pomoću komande

passwd postgres

da postavimo lozinku za korisnika postgres. Sada sa

su - postgres

prelazimo u ulogu korisnika postgres i inicijalizujemo klaster baza podataka:

initdb --locale en_GB.UTF-8 -E UTF8 -D '/var/lib/postgres/data'

Baze podataka će fizički biti smeštane u direktorijum /var/lib/postgres što je podrazumevana lokacija. Ova lokacija se nalazi na root particiji, a kako je korena particija po pravilu uvek premala da na sebi drži i projekte u /srv/http direktorijumu, i baze i logove i sve ostalo za šta nikad ne znamo unapred da će nam zatrebati, ja taj postgres direktorijum premestim na home particiju a u /var/lib napravim simbolički link ka njemu. Samo je potrebno voditi računa da je vlasnik postgres direktorijuma korisnik postgres i da ostalim korisnicima treba zabraniti pristup.

Sada možemo da pokrenemo servis sa

systemctl start postgres.service

Klasično

systemctl status postgresql.service

prikazuje status servisa, a da bismo ga naterali da se pokrene svaki put kada se računar startuje, otkucaćemo

systemctl enable postgresql.service

Idemo da kreiramo našu prvu bazu. Kucamo

psql -U postgres

i trebalo bi da kao korisnik postgres i bez lozinke uđemo u šel. Sada iz SQL-a možemo da kreiramo i bazu i korisnika i da dodelimo prava korisniku nad tom bazom:

create database test; create user test with password 'lozinka'; grant all privileges on database test to test;

Možemo sa Ctrl+D da izađemo iz šela i da pokušamo da se ulogujemo na bazu kao korisnik test:

psql -U test

pri čemu će psql da nas pita za lozinku korisnika test. Ako ne želimo svaki put da kucamo lozinku, u svoj home direktorijum ćemo kreirati fajl ~/.pgpass u koji ćemo upisati lozinke za sve naše baze u formatu:

localhost:*:baza:korisnik:lozinka

Za prikaz raspoloživih baza koristićemo komandu \l. Ako želimo da dampujemo bazu u fajl, možemo da koristimo program pg_dump:

pg_dump -h 192.168.1.100 -U test -f ./test.dump

a da bismo taj damp posle ubacili u bazu, kucaćemo

psql -U test -f ~/test.dump

Da bismo naterali PHP i PostgreSQL da sarađuju, potrebno je da instaliramo paket php-pgsql i da u datoteci php.ini odtarabimo linije extension=pdo_pgsql.so i extension=pgsql.so. Nakon toga je neophodan restart Apača.

Majstor Kvariš