Hoppa till innehåll
Meny
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

Migrera PostGIS databasen

Publicerat den 2018-12-07

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

2 svar på ”Migrera PostGIS databasen”

  1. Klas Karlsson skriver:
    2018-12-07 kl. 13:45

    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…

    Svara
  2. Anders Jackson skriver:
    2018-12-14 kl. 17:24

    Tips. Man kan ändra båda användare och grupp i samma chmod(1), om man vill.

    chmod postgress:postgress /raid/postgis

    När det gäller att kopiera över hela databasen, så kan man ju använda pipe som du nämner, dvs ”|”, om man inte vill mellanlagra på en fil. Vilket kan vara bra som en säkerhetsuppdatering. Men vill man kopiera mellan olika maskiner, så är ju ssh(1) lämpligt kommando. Detta fungerar från machine2, med den nya databasen.

    ssh login@machine1 -Tq -f ”sudo -u postgres pg_dump old_database” | sudo -u postgres psql -d geodata

    Det går tom att köra ssh mot två andra maskiner än den man använder själv. 🙂
    ssh login1@machine1 … | ssh login2@machine2 …

    Då tar data omvägen över den lokala maskinen på väg från machine1 till machine2.

    Samma om man vill kopiera filer med scp(1). Här kopieras fil.txt på login1:s hemmakatalog till login2:s hemmakatalog.

    scp login1@machine1:fil.txt login1@machine2:

    Eventuellt så behöver man ange filnamnet ”-” (med växeln -f) för att mata in från föregående program via stdin för psgl(1). Samt göra de ändringar som du nämner i din kommentar.

    Att detta fungerar behöver man kontrollera, exempelvis i manualsidan för psql(1). Detta eftersom jag gör det här från det du skrev och hur program brukar fungerar. Dvs jag har inte testat själv. 🙂

    Svara

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Translate with Google

GBR In English
GER Auf Deutch
FRA En Français
ESP En Español
Swedish is a hard language for a machine to translate. Nuance and detail will likely be lost.
     Mastodon  

Bok om QGIS på Svenska

Bok

Beställ Boken/E-bok genom att klicka på bilden (även förhandsgranskning).

Senaste kommentarer

  • Daniel Nilsson om QField
  • denis Empisse om SpaceMouse Python
  • klakar om SpaceMouse Python
  • Anders Jackson om Återbesök, WebODM
  • Anders Jackson om SpaceMouse Python

Arkiv

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2025 Geosupportsystem | WordPress-tema av Superbthemes.com