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”.

Annonser

Taggar:,

One response to “Migrera PostGIS databasen”

  1. Klas Karlsson says :

    Kommentar av mig själv. Här dumpar jag hela databasen till en fil, vilket egentligen är onödigt. Det hade räckt att dumpa endast de schema som jag lagrar data i. Vilka jag sedan återskapar i den nya databasen. Då hade jag undvikit många felmeddelanden vid återläsning, som beror på att skriptet försöker göra saker som inte går, eller skapa sådant som redan finns. I samband med detta är det även viktigt att trycka på att man ALDRIG skall spara data i schemat Public, även om det är enkelt och det som är förvalt. Skapa ALLTID ett dedikerat schema för att lagra data. I public lagras systemfunktioner, och dessa är inte alltid kompatibla med den databas man migrerar till. Att migrera endast data i egna scheman fungerar dock alltid även om man byter version av Postgresql eller PostGIS. Detta kompliceras dock av att QGIS lagrar stilar i public…

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Google-foto

Du kommenterar med ditt Google-konto. Logga ut /  Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s

%d bloggare gillar detta: