Publicerad den Lämna en kommentar

Migrera PostGIS databasen

Jag har en dator med PostGIS, där databasen ligger på en disk där utrymmet börjar ta slut. Nu har jag lagt till några diskar i en ny RAID partition och tänkte flytta databasen dit.

Jag har monterat min raid på /raid, naturligtvis!

På denna plats skapar jag en katalog ”postgis” där jag vill skapa den nya databasen. Denna katalog måste ”ägas” av användaren postgres.

sudo chown postgres /raid/postgis
sudo chgrp postgres /raid/postgis

Sedan är det dags att skapa en ny databas på denna sökväg.

sudo -u postgres psql
postgres=# create tablespace ts location '/raid/postgis';
postgres=# create database geodata with tablespace = ts;
postgres=# \q

Initiera databasen som vanligt.

sudo -u postgres psql -d geodata
geodata=# create extension postgis;
geodata=# select PostGIS_version();

Det finns säkert flera sätt att flytta data från en databas till en annan, men jag kör ”universalmetoden” att ”dumpa” hela databasen till en fil och sedan läsa in den i den nya databasen.

sudo -u postgres pg_dump old_database > /raid/old_database.sql
sudo -u postgres psql -d geodata -f /raid/old_database.sql

När jag tänker efter så borde jag kunna köra båda kommandon samtidigt med ett ”|” kommando, eftersom jag dumpar och importerar på samma maskin… Ovanstående fungerar dock bra även om man har databaserna på olika maskiner och skall flytta data mellan dessa, eller om man vill ta en backup…

Det brukar bli en massa felmeddelanden när man kör skriptet, men det brukar vara i sin ordning då en del som skriptet försöker skapa i den nya databasen redan finns. Ha tålamod och vänta bara på resultatet. Radera sedan inte något gammalt vare sig i databasen eller den genererade filen förrän allt i den nya databasen är testat.

För mig gick det betydligt snabbare att dumpa den 36 Gb stora sql-filen än att läsa in den.

Ett problem dock! De QGIS stilar som var lagrade i databasen och direkt kopplade till varje lager fungerar inte. Tabellerna med stilarna finns i den nya databasen, men tabellen är tom. Jag kan inte heller dumpa tabellen separat och läsa in den då det verkar som att sql skriptet inte riktigt är kompatibelt med koden för stilerna som de lagras…

Skärmbild_2018-12-05_13-21-48

Projektfiler som är lagrade i databasen överförs dock, men då dessa har data som pekar på den gamla databasen så är de inte speciellt användbara heller. Projektfilerna sparas i ett binärformat och inte som xml, vilket kan vara anledningen till att dessa överförs korrekt. Lösningen är att dels se till att dumpningen görs i ”plain” format och att man lägger till en rad överst i det genererade skriptet:

SET XML OPTION DOCUMENT;

Med detta så importeras stilarna till den nya databasen, men de är inte längre kopplade till lagerna, så den inläsningen får ändå göras manuellt. Jag kan tänka mig att det vore bättre att göra om hela skiten, men med texten ovan i dump-filen.

echo "SET XML OPTION DOCUMENT;" > /raid/backup.sql
sudo -u postgres pg_dump gammal_databas >> /raid/backup.sql
sudo -u postgres psql -d ny_databas -f /raid/backup.sql

Så det provade jag också… Men nix! Stilarna följde med men de applicerades inte på lagren. Det blir till att göra detta manuellt för varje lager. Om det skulle se annorlunda ut om man flyttade data mellan två databaser med samma namn har jag inte provat, men jag kan tänka mig att det kan fungera bättre då man inte ändrar några grundläggande förutsättningar.

Som sista kommentar kring PostGIS vill jag trycka på att om ni är beroende av PostGIS databasen så är nog inte ”pg_dump” den bästa metoden för att hantera backup… Det finns andra alternativ som är bättre, exempelvis ”pgbackrest”.

Nyhet från Geosupportsystem , orginal inlägg

Lämna ett svar