Menu
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

Ny PostGIS server

Posted on 2020-09-142020-12-21

Då har jag kunnat använda min egen blogg för ett av syftena med den. Jag har nyligen byggt en ny dator och då skulle såklart PostGIS installeras. Det i sig finns dokumenterat på bloggen med allt man behöver exempelvis för att skapa ett dedikerat tablespace på en separat disk. Kommandon för hur man läser in rasterdata i PostGIS kunde också användas för att snabbt få igång servern som jag vill ha den.

Jag fick en del tips under arbetet, och gjorde en del förändringar, och detta handlar detta inlägg om.

Optimera för snabbhet

Datorn har en AMD CPU med 12/24 kärnor och rejält med Ram och en extremt snabb NVMe disk. I och med att jag ersätter en tidigare dator så fick jag dessutom ett par traditionella SSD diskar över som jag satte upp som MD/RAID 0. Den enheten monterades direkt i roten av datorn via fstab för att helt användas för PostGIS installationen. Jag hade tänkt att använda disken till lite mera, men PostGIS tablespace visade sig behöva finnas på enheter som är direkt i roten, så det enkla valet var att använda hela disken till PostGIS och inget annat.

$ sudo chown postgres:postgres /ssd_raid
$ sudo -u postgres psql 
postgres=# create tablespace ts location '/ssd_raid';
postgres=# create database geodata with tablespace = ts;
postgres=# \q
$ sudo -u postgres psql -d geodata 
geodata=# create extension postgis;
geodata=# create extension postgis_raster;
geodata=# \q

Ovanstående kommandon utgår från att PostGIS redan är installerat och att pg_hba.conf samt postgresql.conf är grundkonfigurerade (sök bland tidigare inlägg).

När jag läst in vektordata så var jag inte speciellt imponerad av prestanda på servern, tills jag insåg att jag inte hade några spatiala index i mina lager. När dessa väl var byggda så gick allt ruggigt snabbt.

Jag fick även tipset att optimera serverns inställningar för att anpassas till datorns prestanda. Via https://pgtune.leopard.in.ua/#/ så kan man mata in värden för den hårdvara och det syfte man har med servern, och få optimeringsförslag som man sedan kan redigera i postgresql.conf eller så genereras ett SQL skript som kan köras mot servern som lägger till inställningarna ”ovanpå” inställningarna i konfigurationsfilen.

Jag märkte inte någon enorm skillnad efter denna optimering, mer än att fläkten i datorn jobbade lite mer, vilket är ett tecken på att saker faktiskt går lite fortare.

Ytterligare ett tips jag ännu inte testat är att klustra efter spatialat index. Detta innebär att data ordnas i samma ordning som indexet är ordnat. Att hitta data går snabbt med ett spatialt index, men om de data som skall hämtas är utspridda på en disk så är det inte optimalt. Jag inbillar mig att detta framför allt påverkar databaser med mekaniska diskar och inte i lika stor utsträckning SSD.

För att bygga dessa kluster använder man ST_GeoHash som i sig kräver data i EPSG:4326, men det skall enligt utsago gå att skapa kluster med on-the-fly ST_Transform så att man kan behålla originalgeometrin i geometrikolumnen.

Jag har som sagt inte testat klustring av data, men jag kan tänka mig att det är en bra idé framför allt om man lagrar data på mekaniska diskar.

Raster i PostGIS

Även detta har jag som sagt skrivit om tidigare, men nu gjorde jag en del justeringar, så det var dags att uppdatera bloggen.

QGIS är inte lika bra på att hantera raster i PostGis som vektordata. Att ladda raster till PostGis får man exempelvis göra med ett terminalkommando och inte via GUI i QGIS. Anledningen till detta är antagligen att nuvarande GDAL endast kan läsa PostGIS raster. Det första man behöver göra är att lägga till raster som extension i PostGIS, om man inte redan gjort det när man skapade databasen.

$ psql -U postgres -d databas
databas=# CREATE EXTENSION postgis_raster;

Sedan använder man raster2pgsql för att ladda rasterdata från terminalen. Som tidigare så måste det schema som man vill lägga in rasterdata i existera innan man kör kommandot nedan. Jämfört med tidigare lägger jag nu även till pyramider vid inläsningen av raster, och några ytterligare justeringar. Kommandot som utförs från katalogen där alla mina *.tif filer finns blir då:

$ raster2pgsql -d -C -t 512x512 -s 3006 -I -l 2,4,8,16 *.tif schema.tabell | psql -U användare -d databas -h localhost -p 5432

I den första delen skapas ett sql kommando där -d ”droppar” tabellen om den redan finns. -C är en kontroll av att data registreras korrekt och -I bygger index. Det som jag lagt till den här gången är -l med de nivåer som det skall byggas pyramider för, samt -t som anger hur stora ”tiles” som skall skapas. Jag har även provat att lägga till -Y som istället för INSERT använder COPY för att lägga in data, vilket går snabbare framför allt när man har mycket data.

Den andra delen tar den genererade sql strängen och applicerar den på den utpekade databasen med psql kommandot.

Hantera PostGis raster i QGIS

Även inläsning av PostGIS raster i QGIS är lite problematiskt. Det går exempelvis inte att lägga till PostGIS raster från ”Browser”, det måste man göra från ”DB Manager”.

Om man läst in raster med indexerade färger, så behöver man även fixa färgerna. Det kan man göra genom att kopiera stilen från en originalfil till PosgGis lagret. Stilen kan man sedan spara som ”standard” i datakällan, vilket gör att färger visas korrekt i QGIS senare. Vill man kunna använda raster även i andra tillämpningar än QGIS, då får man göra om rasterfilerna till 3-band 8-bit i stället. Precis som är standard i GeoPackage.

Efter att bara ha använt raster i PostGIS ett kort tag så vet jag inte direkt om det finns så många fördelar med det när man är få användare. PostGIS med vektordata är en helt annan sak då man kan använda ST-kommandon för att bearbeta och manipulera dessa data otroligt mycket. Hur omfattande man kan använda ST-kommandon för raster har jag ännu inte hunnit kontrollera. Är man många som skall komma åt rasterdata så kan jag tänka mig att det finns fördelar med PostGIS raster, men är man själv så tycker jag att raster i GeoPackage är enklare och mera integrerat i QGIS.


UPPDATE

För att använda raster i GeoPackage som källa för raster2pgsql så använder man GDAL standard för att peka ut tabeller i GeoPackage:

GPKG:filnamn.gpkg:tabellnamn

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.
     

Bok om QGIS på Svenska

Bok

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

Senaste kommentarer

  • Gabriel om Punktmoln i QGIS 3.18
  • klakar om Punktmoln i QGIS 3.18
  • Gabriel om Punktmoln i QGIS 3.18
  • Hector Garrido om QGIS LTR vs LTR
  • Christian om Stildelning för QGIS

Arkiv

Prenumerera på Geosupportsystem

Skriv in namn och epost för att prenumerera på meddelanden från denna blogg.
Loading

geosupport

YouTube video to frames. Processed in OpenDroneMap YouTube video to frames. Processed in OpenDroneMap and visualized in QGIS 3.17.
Japp! Dubbelbeställde TVÅ gånger. En annan mode Japp! Dubbelbeställde TVÅ gånger. En annan modell levererades idag.
Ooops. Tryckte nog för många gånger på bestäl Ooops. Tryckte nog för många gånger på beställ-knappen...
Ladda mer...

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2021 Geosupportsystem | WordPress Theme by Superbthemes.com