Seuraa

PostgreSQL:n päivittäminen uusimpaan versioon

Tässä tukipalveluartikkelissa käydään läpi PostgreSQL-päivitysprosessin päävaiheet. Ohjeessa päivitetään PostgreSQL 9.6.9 uusimpaan versioon, joka on artikkelin kirjoitushetkellä toukokuussa 2018 PostgreSQL 10.4. Tämä on ns. pääversioiden välinen päivitys, joka vaatii enemmän toimenpiteitä ja valmistelua kuin saman pääversion sisäinen päivitys. Päivitys toteutetaan Gispon koulutuksissa käytetyllä Ubuntu 16.04-virtuaalikoneella, mutta päävaiheet ovat samankaltaiset ympäristöstä riippumatta.

Versioon 9.6 asti Postgres on versioitu siten, että kaksi ensimmäistä numeroa määrittävät pääversion. Tämä tarkoittaa, että esim. versiosta 9.5.1 voidaan päivittää versioon 9.5.2 asentamalla uusi versio vanhan version päälle. Versiosta 9.5.n ei kuitenkaan voi suoraan päivittää versioon 9.6.n, eikä versiosta 9.6.n versioon 10. Postgres 10:tä alkaen käytetään vain yhtä pääversionumeroa, ja esim. Postgres 10.3 voidaan päivittää suoraan 10.4-versioon.

PostgreSQL:n versiopäivityksiin voidaan käyttää pg_upgrade-työkalua. Työkalun dokumentaatio sisältää englanninkieliset ohjeet päivitysprosessista sekä tietoa pg_upgrade-komennon yhteydessä käytettävistä optioista ja argumenteista. pg_upgrade-työkalulla voidaan päivittää tietokanta uuteen versioon joko kopioimalla tai linkittämällä tiedot versioiden välillä. Linkitys on usein huomattavasti nopeampi vaihtoehto, mutta aiheuttaa suuremman riskin tiedonmenetykselle. Kopiointi pg_upgraden avulla vastaa käytännössä tietokantadumpin tekemistä ja palauttamista uuteen versioon ja vie enemmän aikaa, mutta toimii varmemmin kuin linkitys.

Päivitykseen valmistautuminen

Ensimmäinen vaihe on selvittää, mikä Postgres-versio on asennettuna ja mikä on uusin versio. Käytössä olevan version näkee esimerkiksi kyselyllä SELECT version();. Tässä vaiheessa kannattaa myös tutustua kantaan ja dokumentoida, mitä laajennoksia ja paketteja on asennettu.

Ennen päivitykseen ryhtymistä kannattaa aina varmuuskopioida kriittiset tiedot ja konfiguraatiotiedostot. Datahakemiston ja konfiguraatiotiedostojen sijainnit saadaan komennoilla SHOW data_directory; ja SHOW config_file;. Erityisesti Debian-pohjaisilla järjestelmillä, kuten Gispon koulutuskone, nämä hakemistot saattavat poiketa toisistaan, mikä tulee ottaa huomioon pg_upgrade-komentoa suorittaessa.

Päivitettäessä Postgres pg_upgrade-työkalulla voidaan alkuperäinen tietokantaklusteri säilyttää koskemattomana, jolloin siihen voidaan tarvittaessa palata myös päivityksen jälkeen. Tästä huolimatta on suositeltavaa harkita tietokantadumpin tekemistä pg_dump-työkalulla ennen päivitysprosessin aloittamista.

Ennen uuden version asennusta voi olla tarpeen siirtää vanha tietokantaklusteri. Jos PostgreSQL on asennettu versioriippuvaiseen hakemistoon, kuten /usr/lib/postgresql/9.6, tämä vaihe ei ole tarpeellinen. Muussa tapauksessa on tarpeen siirtää asennuskansio, jotta uuden ja vanhan Postgres-version välille ei tule konflikteja. Tämä onnistuu helpoiten pysäyttämällä ensin Postgres-palvelin ja nimeämällä tämän jälkeen asennuskansio uudelleen. Esim. jos PostgreSQL on asennettu hakemistoon /usr/local/postgresql, voidaan kansio nimetä klusterin pysäyttämisen jälkeen uudelleen nimellä postgresql.old.

Uuden version asentaminen

Ennen päivitystä tulee ladata ja asentaa uusin PostgreSQL-versio normaaliin tapaan. Uuden version asennuksen ja käynnistämisen (initdb) lisäksi tulee asentaa laajennokset jotka ovat käytössä vanhassa kannassa, kuten PostGIS ja pgRouting. Laajennoksista tulee olla asennettuna sama versio sekä uudessa että vanhassa kannassa. Koulutuskoneen 9.6-kannassa on asennettuna PostGIS-versio 2.3, mutta Postgres 10-versiolle suositellaan PostGIS-versiota 2.4. Tässä tapauksessa on helpointa päivittää vanhan kannan PostGIS-versio asentamalla ensin Postgres 9.6-klusteriin PostGIS 2.4, ja päivittämällä vanhat PostGIS-kannat komennolla ALTER EXTENSION postgis UPDATE;. Laajennoksia ei tule ottaa käyttöön uudessa klusterissa CREATE EXTENSION-komennolla, vaan pelkkä niiden asennus uuteen tietokantaversioon riittää.

Käynnissä olevia Postgres-klustereita voi tarkastella komennolla pg_lsclusters. Käynnissä pitäisi nyt olla sekä uusi että vanha klusteri:

Päivitysprosessin aikana pg_upgrade ottaa vuorotellen tietokantayhteyden uuteen ja vanhaan palvelimeen. Tästä syystä on hyödyllistä muokata pg_hba.conf konfiguraatiotiedostosta autentikaatiomenetelmäksi peer:

Ennen pg_upgrade-komennon ajamista tulee vielä pysäyttää sekä uusi että vanha tietokantapalvelin. Unix-järjestelmillä voidaan käyttää pg_ctl-komentorivityökalua (Debian-pohjaisilla järjestelmillä pg_ctlcluster) palvelimien pysäyttämiseen. Windows-käyttöympäristössä palvelimet voidaan pysäyttää komennoilla

NET STOP postgresql-9.6
NET STOP postgresql-10

missä versionumerot 9.6 ja 10 on korvattu uuden ja vanhan version versionumeroilla. Tarkistetaan vielä lopuksi, että molemmat klusterit on pysäytetty komennolla pg_lsclusters.

pg_upgrade

Nyt voidaan suorittaa pg_upgrade-komento. Windows-käyttäjien tulee ensin avata komentorivi järjestelmänvalvojan oikeuksilla ja suorittaa komennot

RUNAS /USER:postgres "CMD.EXE"
SET PATH=%PATH%;C:\Program Files\PostgreSQL\10\bin;

missä toisen komennon polku on uusimman Postgres-version asennuskansio. Unix-käyttöympäristössä tulee varmistaa, että käytetään uuden version pg_upgrade-työkalua vanhan version sijaan.

Tärkeimmät pg_upgrade-työkalulle syötettävät argumentit ovat uusi ja vanha datahakemisto (-d, -D tai --old-datadir, --new-datadir) sekä uusi ja vanha bin-hakemisto (-b, -B tai --old-bindir, --new-bindir). Esimerkkikomento Windows-ympäristössä:

pg_upgrade.exe
        --old-datadir "C:/Program Files/PostgreSQL/9.6/data"
        --new-datadir "C:/Program Files/PostgreSQL/10/data"
        --old-bindir "C:/Program Files/PostgreSQL/9.6/bin"
        --new-bindir "C:/Program Files/PostgreSQL/10/bin"

Debian-pohjaisessa ympäristössä voi olla tarpeen antaa konfiguraatiotiedostojen sijainti:

sudo -u postgres /usr/lib/postgresql/10/bin/pg_upgrade \
-b /usr/lib/postgresql/9.6/bin/ \
-B /usr/lib/postgresql/10/bin/ \
-d /var/lib/postgresql/9.6/main/ \
-D /var/lib/postgresql/10/main/ \
-o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \
-O '-c config_file=/etc/postgresql/10/main/postgresql.conf'

Yllä oleva esimerkkikomento toimii Gispon Ubuntu 16.04 koulutuskoneella. Kun pg_upgrade on valmis,  se generoi skriptin, jolla voidaan analysoida uusi tietokantaklusteri. Tämä kannattaa suorittaa, sillä vanhan tietokannan tilastot eivät siirry päivityksen mukana.

Vanhan klusterin voi jättää pysäytettyyn tilaan tai poistaa kokonaan pg_upgraden luomalla skriptillä. Ennen vanhan version poistamista kannattaa varmistaa, että päivitys onnistui ja tiedot siirtyivät uuteen klusteriin oikein.

Oliko tämä artikkeli hyödyllinen?
1/1 koki tästä olevan apua
Lisäkysymyksiä? Lähetä pyyntö

Kommentit