Det är ingen större sensation att det kommer en serviceuppgradering av PostGIS och vill du läsa om vad den innehåller för fixar och förbättringar så kan du göra det HÄR.
Själv så slarvar jag med att uppdatera min PostGIS server, men jag är å andra sidan inte ekonomiskt beroende av att jag har en geodatabas som är vid god hälsa.
Detta inlägg blir i form av dokumentation av det jag gör för att uppgradera just min PostGIS server till den senaste versionen. Om du använder instruktionen så kan det se annorlunda ut för dig.PostGIS 2.1 släpptes i Augusti 2013 och det har kommit serviceuppgraderingar kontinuerligt sedan dess.
För att kontrollera PostGIS version så finns det ett SQL kommando som kan köras i exempelvis PgAdminIII:
För att öppna dialogen ovan så behöver du klicka på ”SQL-knappen” i verktygsfältet. Kontrollera även att du kör din SQL-fråga mot den önskade databasen i valrutan uppe till höger.
När jag skriver in ”SELECT postgis_full_version();” och väljer Execute Query (F5) så får jag svaret att jag kör version 2.1.2…
Denna släpptes 31 Mars förra året.
Man behöver kanske inte uppdatera varje gång det släpps en serviceuppgradering, men det kan vara lönt att läsa om vilka fixar och förbättringar som gjorts och sedan bestämma sig för om man skall uppgradera eller ej.
För 2.1.6 så rekommenderar man uppgradering speciellt för alla med stora tabeller med punktdata då man utlovar att omkring 50% mindre diskutrymme kommer att krävas! Bara detta är tillräckligt intressant för mig för att jag skall ge mig på att uppdatera…
Jag kommer inte att testa på en separat server, göra extra backup på data, med mera som man borde göra innan man uppdaterar en viktig databas. Det är ingen annan än jag själv som använder min databas och jag kommer inte gråta om jag misslyckas. Du måste dock själv avgöra vilka risker du är beredd att ta med din geodatabas.
Till att börja med så måste det nya PostGIS-tillägget installeras och då behöver jag även installera ett utvecklingstillägg till Postgres och även utvecklingsmiljöer för exempelvis gdal:
sudo apt-get install postgresql-server-dev-9.3 sudo apt-get install libgdal-dev
Hämta uppgraderingen:
wget http://download.osgeo.org/postgis/source/postgis-2.1.6.tar.gz tar xvfc postgis-2.1.6.tar.gz cd postgis-2.1.6 ./configure make sudo make install
När du kör ”./configure” så kan du få felmeddelanden som pekar på beroenden som inte är uppfyllda. Detta brukar kunna lösas genom att man installerar ”dev” paketet för det bibliotek som saknas. I mitt fall klagade loggen på att gdal saknades, så jag installerade libgdal-dev, vilket löste problemet.
Nu är då PostGIS 2.1.6 installerat, vilket jag kan bekräfta genom att köra samma kommando som tidigare i PgAdminIII:
Nu är då inte mina befintliga databaser uppgraderade utan dessa ligger kvar i den tidigare versionen, men har jag tur så är det enkelt att lösa detta.
I bilden ovan så ser det ut som texten på rad 1 är klippt, och det är den. Det är en lång text där jag tyvärr kan konstatera att jag inte kommer att klara mig med en så kallad ”soft upgrade” då mina tillägg är för gamla. Det står …procs from ”…” need upgrade… annars hade jag nog klarat mig med ett ganska enkelt skriptkommando för att uppgradera mina databaser.
”Hard upgrade” innebär kortfattat:
- Gör backup på databasen
- Skapa en helt ny PostGIS databas
- Läs in data från backup
Det finns funktioner för att underlätta en fullständig backup av den gamla databasen och kommandot för detta är:
pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/sökväg/gamla_databasen.backup" gamla_databasen
En ny databas kan skapas på många sätt, men här använder jag terminalen och de kommandon som beskrivs i instruktionen, fast anpassat för mina val:
sudo -u postgres createdb geodata-2.1.6 sudo -u postgres psql -d geodata-2.1.6 -c "CREATE EXTENSION postgis;" sudo -u postgres psql -d geodata-2.1.6 -c "CREATE EXTENSION postgis_topology;"
Jag skapar en databas med ett nytt lite krångligt namn, men detta tänker jag ändra senare.
För att återläsa den gjorda backupen så skall ett skript i perl användas. Detta finns i den tidigare hämtade och uppackade katalogen med källkoden till PostGIS 2.1.6. Gå till denna katalog och skriv sedan in:
perl utils/postgis_restore.pl "/sökväg/gamla_databasen.backup" | sudo -u postgres pgpassword=XXXXX psql -h localhost -p 5432 -U -postgres newdb 2>errors.txt
Det är inte säkert att du behöver ”pgpassword=XXX” men om så är fallet så skall du använda det lösenord som används för postgres användaren. Om allt fungerar så skall det bläddra förbi en massa rader med REVOKE, GRANT, ALTER TABLE med mera…
Om man inte behöver läsa om hela databasen (vilket jag behöver) så kan man ta tabell för tabell (eller schema) och använda pg_restore i stället. I mitt fall så är det dock inte bara ”data” som behöver flyttas, utan även exempelvis hur data lagras, därför gjordes pg_dump på hela databasen, och därför så måste jag använda postgis_restore.pl.
Efter att skriptet körts så använder jag samma kommando som tidigare på den nya databasen och nu ser allt ut som det skall.
För att slippa ändra en massa i tjänster och projekt så raderar jag den gamla databasen och byter namn på den nya till det gamla namnet. Allt detta gör jag i PgAdminIII, men det går att göra i terminalen också. Jag är inte så orolig om det inte skall fungera eftersom jag har kvar min ”backup” så att jag kan återläsa data. Är man lite smart så kan ett försiktigare steg vara att döpa om den gamla databasen till ”geodata_old” eller motsvarande och testa den nya först, innan man gör något drastiskt.
I QGIS så testar jag också att ansluta till den nya databasen och kontrollerar att alla data ser ut att vara med.
Reflektioner
Jag har aldrig uppdaterat PostGIS på det här sättet tidigare, och visst gjorde jag lite fel här och där så det tog lite tid att göra allt. Instruktionerna på nätet är inte helt entydiga och lätta att förstå om man inte jobbar med PostGIS i vanliga fall.
Så här i efterhand så tycker jag dock inte att det var så krångligt och nästa gång jag skall uppgradera så kanske det räcker med en ”soft upgrade” så jag får testa det också.
När jag läst på så har jag förstått att sättet att uppgradera kan skilja sig beroende på hur den ursprungliga installationen gjordes. Då jag inte kom ihåg hur jag gjorde i detalj så fick jag testa lite, men det blev inga problem i mitt fall.
Jag har inte enorma mängder data (bara vektordata) i min databas och min ”backup” blev bara ca 500 Mb. Det hade inte varit så svårt att exempelvis läsa in den i en annan databas på en annan dator först för att säkerställa att säkerhetskopieringen fungerade. En sådan kontroll hade gjort att det blivit lite mindre fjärilar i magen under långa väntetider då jag skrivit in ett kommando felaktigt och väntade i onödan.
Jag hoppas att någon kan ha nytta av det jag dokumenterat här, och jag vet att jag kommer att använda det nästa gång det är dags att uppgradera.