Tag Archive | PostgreSQL

PgAdminIV

Om det kommer att heta PgAdminIV eller PgAdmin4 får vi väl se, och det spelar kanske inte så stor roll.

Hur står sig PgAdmin4 mot PgAdmin3? Här kommer mina första intryck… Läs mer…

Geosupportsystem IT-plattform – Installationsguide del 2

I detta inlägg så är det ”städning” av den OpenGeo Suite installation som gjordes i förra inlägget.

Det mesta är beskrivet i den dokumentation som följer med installationen och det jag ändrat på eller anpassat rör sådant jag vill uppnå senare för att ytterligare öka flexibiliteten i IT-plattformen. Det finns även en del steg som helt enkelt inte fungerade för mig, så jag fick klura ut ett annat sätt att få det att fungera.

Jag börjar med PostgreSQL och PostGIS.

Läs mer…

En databas på annan plats…

Nu när jag skaffat mig en ny dator med många diskar, så ville jag sätta upp PostGIS så att geodatabasen lagrades på min RAID enhet med 4 TB.

Hur man istallerar PostGIS lokalt (eller på en server) har jag gått igenom flera gånger tidigare, vilket även hjälpte mig nu, så det hoppar jag över här.

Postgres och PostGIS är installerat på min systemdisk (SSD), men där vill jag inte lagra ”enorma mängder” geodata, som sällan används.

Efter lite efterforskningar så visade det sig vara väldigt enkelt att få till.

  1. Skapa en tom katalog på enheten där den nya databasen skall placeras. Jag skapar katalogen /home/postgis, vilket är en sökväg som ligger på min RAID enhet.
  2. Skapa ett nytt ”Tablespace” i pgAdminIII genom att högerklicka i Tablespaces och välja ”New Tablespace…”Fyll i ett namn och en ägare på första fliken och sökvägen till den tidigare skapade katalogen på den andra.
  3. Skapa en ny databas på samma sätt (högerklick, ”New Database…”) och ange namn och ägare på första fliken.
    På den andra fliken skall du välja en PostGIS databas som mall (template) och det tidigare skapade ”Tablespace” för att tala om var databasen skall lagra sina data.

Mer än så är det inte.

Sedan är det bara att koppla upp sig och köra på. Postgres och PostGIS tar hand om resten.

Det stod i instruktionen att användaren ”postgres” skulle vara ägare till katalogen som skapades i steg ett, men jag är inte säker på att det behövs…

Om det behövs så är terminalkommandot i linux för detta:

sudo chown -R postgres /home/postgis

Då får du naturligtvis byta ut sökvägen på slutet till din egen motsvarighet.

PostGIS uppföljning

I går så installerade jag PostGIS för användning i QGIS och nu tänkte jag mest för egen skull dokumentera några erfarenheter till.

När man lägger upp användare i Postgresql (roller) så kan man använda dessa för att skapa nya data i QGIS. Om andra skall kunna läsa eller redigera dessa så måste man dock tilldela dem dessa rättigheter eftersom den användare som skapat tabellen blir ensam ägare av den.

I OpenGeo Explorer så kan man markera databasen och välja ”Run SQL…”

Om man skapat en tabell kallad ”data” och vill att rollen ”users” skall ha alla rättigheter i detta lager så skriver man:

GRANT ALL PRIVILEGES ON data TO users;

Om man har en funktion för att räkna upp id automatiskt (default när man skapar ny tabell) så måste man även tilldela rättigheter till denna ”sekvens”:

GRANT ALL ON SEQUENCE data_id_seq TO users;

Vad sekvensen heter kan man kontrollera i OpenGeo Explorer genom att klicka på tabellen. Som standard döps den till ”tabellnamn_fältnamn_seq”.

Nu bör alla i gruppen ”users” kunna läsa och redigera data i lagret.

Vill man ge andra rättigheter eller begränsa det till vissa användare så går det också att göra…

GRANT SELECT ... rätt att läsa
GRANT UPDATE ... rätt att ändra
GRANT INSERT ... rätt att lägga till

Det går även att styra om en specifik användare endast skall kunna läsa allt (eller vissa kolumner) men bara kunna uppdatera data i en specifik kolumn genom att lägga till kolumnnamnet inom parentes efter kommandot.

GRANT SELECT(kolumn1, kolumn3, kolumn6), UPDATE(kolumn3) ON data TO some_user;

Glöm nu slutligen inte heller att om man sparar QGIS projektet så sparas inskrivna lösenord också… i klartext!

Egen server för geodatatjänster – Del 2

I denna andra del installeras OpenGeo Suite 4.0. Jag har tidigare visat hur sviten installeras flera gånger, men företaget bakom envisas med att uppdatera mjukvaran hela tiden, så mina instruktioner inte längre fungerar så bra. Jag vill också passa på att varna för att kopiera och klistra in kommandon i texten nedan direkt i terminalen på servern. Det är inte alltid som ett ”-tecken blir rätt när WordPress har formaterat om alla texter jag skriver, så se upp lite.

OpenGeo Suite 4.0

Denna svit från Boundless består av ett antal Open Source program, anpassade och paketerade för att fungera ihop på ett bra sätt. Genom att installera OpenGeo Suite så får man följande installerat:

  • Postgresql, databas
  • PostGIS, rumsligt tillägg till Postgresql
  • GeoServer, tjänsteserver för OGC-tjänster
  • OpenLayers, javaskript-bibliotek för hantering av webbkartor
  • GeoExplorer, grafiskt skapa webbkartor på ett enkelt sätt.

En mängd tillägg och beroenden löses också automatiskt genom att installera sviten i stället för alla paket var för sig.

Installationen görs genom nedanstående kommandon.

sudo su
wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -
echo ”deb http://apt.opengeo.org/suite/v4/ubuntu precise main” > /etc/apt/sources.list.d/opengeo.list
apt-get update
apt-get install opengeo

Nu körs en ganska omfattande installation, som i princip gör i ordning allt det ovanstående, men det behöver justeras lite för att fungera helt och hållet.

Två konfigurationsfiler behöver ändra för att Postgresql skall fungera. Jag använder ”vim”, men det går bra med ”nano” eller annan editor.

Först så behöver man ta reda på serverns IP-adress med kommandot:

ifconfig

I filen /etc/postgresql/9.3/main/postgresql.conf så letar man reda på raden som börjar med #listen_addresses och tar bort brädgårdstecknet och ändrar ‘localhost’ till ‘192.168.1.10’, där IP-adressen är serverns.

I filen /etc/postgresql/9.3/main/pg_hba.conf skall rätt adressrymd läggas till på en ny rad under ”IPv4”. På samma format som den raden som redan är där lägger man till:

host all all 192.168.1.1/24 md5

Adressen ovan är samma som serverns, förutom att sista siffran byts mot en ”etta” med tillägget ”/24”. Detta innebär att man avser alla adresser som börjar på 192.168.1. Ett annat sätt att ange nätmask 255.255.255.0 om det är mer bekant.

Starta om Postgresql med kommandot:

/etc/init.d/postgresql restart

För att kunna använda PostGIS så måste även en sådan databas skapas. Detta görs genom att köra ett antal skript, men först så måste man sätta lösenord för användaren ”postgres”. Detta görs först i operativsystemet och sedan internt i postgres. Det behöver inte vara samma lösenord, men det blir betydligt enklare att komma ihåg om man skapar ett ”super-admin lösen”. Ytterligare användare och lösenord för olika syften kan skapas separat.

passwd postgres
sudo -u postgres psql 
\password postgres
\q

Ange lösenordet när det efterfrågas ovan. Mera kommandon i terminalen:

cd /usr/share/postgresql/9.3/contrib/postgis-2.1/
sudo -u postgres createdb geodata
sudo -u postgres psql -d geodata -f postgis.sql
sudo -u postgres psql -d geodata -f spatial_ref_sys.sql
sudo -u postgres psql -d geodata -f postgis_comments.sql
sudo -u postgres psql -d geodata -f rtpostgis.sql
sudo -u postgres psql -d geodata -f raster_comments.sql
sudo -u postgres psql -d geodata -f topology.sql
sudo -u postgres psql -d geodata -f topology_comments.sql

Kommandona ovan skapar en PostGIS databas kallad ”geodata”, men vill du att den skall heta något annat så är det bara att ändra på alla rader.

Om man inte vill använda ett kommersiellt företags paketlösning för en geoserver så behöver man inte det heller. Om man exempelvis inte tänker använda GeoExplorer för att skapa webbkartor och nöjer sig med det alternativ till OGC-tjänster som redovisas i senare delar så kan ett alternativ vara att installera endast Postgresql och PostGIS. Då får man fördelarna med databaslagring, men utan en stor programpaketsinstallation som man ändå inte använder.

PgAdmin3 och Postgresql 9.2

Om du som jag använder Ubuntu som klient så får du en föråldrad version av PgAdmin via standard repository.

Skriv in nedanstående kommando i terminalen:

sudo apt-add-repository ppa:pitti/postgresql
sudo apt-get update
sudo apt-get upgrade

Nu skall du förhoppningsvis ha PgAdmin som klarar av att hantera Postgresql 9.2, som bland annat är en del i OpenGeo Suite 3.0.2 (om du kör Linux).

Egen Open Street Map Server

Detta inlägg är lite av ett experiment, och jag har inte fått riktigt allt att fungera.

Open Street Map är en karttjänst där användarna själva bidrar med informationen, lite som Wikipedia fast för kartor. Skall man vara noga så får inte kommersiella data användas som källa för dessa data och exempelvis så får man inte hämta gatunamn från ENIRO eller motsvarande, utan man måste själv ta reda på vad gator heter om man skall mata in informationen i OSM.

Databasen och verktygen för att redigera dessa data har utvecklats under lång tid och vill man snabbt komma igång med att producera geodata så är OSM en bra start. Om man inte kan jobba online så blir det svårare, men helt omöjligt är det inte. Jag använder i grunden en instruktion som går att hitta här, men jag har försökt uppdatera till nuvarande standard.

Instruktionen nedan är inte förklarande i stor detalj och det är lätt att glömma något, så var noggrann.

För att skapa en egen OSM server så börjar man med en Ubuntu Server 12.04 LTS. Under installationen läggs LAMP och SSH till.

När installationen är klar så skall systemet uppdateras (sudo apt-get update/upgrade) och ytterligare program läggas till:

sudo apt-get install subversion autoconf screen munin-node munin htop unzip
mkdir src bin data
cd data

Man kan välja att ladda hem olika mycket data, och då hela ”planeten” är 28 Gb så väljer jag att bara ladda hem Sverige med kommandot:

wget http://download.geofabrik.de/europe/sweden-latest.osm.bz2

Databasen installeras:

sudo apt-get install postgresql-9.1-postgis postgresql-contrib-9.1
sudo apt-get install postgresql-server-dev-9.1
sudo apt-get install build-essential libxml2-dev libtool
sudo apt-get install libgeos-dev libpq-dev libbz2-dev proj

För att ladda in OSM data i PostGIS databasen behövs några tillägg:

cd ~/bin
wget https://github.com/openstreetmap/osm2pgsql/archive/master.zip
unzip master.zip
cd osm2pgsql-master
./autogen.sh
./configure
make

Ändra i /etc/postgresql/9.1/main/postgresql.conf

shared_buffers = 128MB
maintenance_work_mem = 256MB
checkpoint_segments = 20
autovacuum = off

Maximera det delade minnet:

sudo sysctl -w kernel.shmmax=268435456
sudo sysctl -p /etc/sysctl.conf
sudo /etc/init.d/postgresql restart

Skapa databasen ”gis” och ditt eget användarnamn nedan, välj att sätta användaren som superuser. Detta användarnamn skall användas på flera ställen senare.

sudo -u postgres -i
createuser användarnamn
createdb -E UTF8 -O användarnamn gis
createlang plpgsql gis (behövs nog inte)
exit

Dags för PostGIS och att skapa en databas kallad ”gis”:

psql -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql -d gis

Byt ut ”användarnamn” mot ditt eget val (två ställen). Observera att texten nedan är fyra rader och att det sannolikt inte fungerar med copy-paste.

echo ”ALTER TABLE geometry_columns OWNER TO användarnamn; ALTER TABLE spatial_ref_sys OWNER TO användarnamn;” | psql -d gis
psql -f ~/bin/osm2pgsql-master/900913.sql -d gis
cd ~/bin/osm2pgsql-master
./osm2pgsql -S default.style –slim -d gis -C 2048 –number-processes=1 –cache-strategy=dense ~/data/sweden-latest.osm.bz2

Observera att om du valt att ladda hem andra data än jag gjort så heter din osm-fil något annat. Sedan är det bara att vänta, beroende på hur mycket data du valde att ladda hem. Det kan ta timmar och dagar om det är mycket data som skall läggas in, så tålamod.

Mapnik

Detta är verktyg för att skapa snygga kartor (enligt dom själva) så det är bara att knappa in:

sudo apt-get install -y python-software-properties
sudo add-apt-repository ppa:mapnik/v2.1.0
sudo apt-get update
sudo apt-get install libmapnik mapnik-utils python-mapnik

Ladda hem Mapnik OSM konfiguration.

mkdir ~/bin/mapnik
cd ~/bin/mapnik
wget https://github.com/openstreetmap/mapnik-stylesheets/archive/master.zip
unzip master.zip
cd mapnik-stylesheet-master
mv * ../
cd ..
rmdir mapnik-stylesheet-master
mkdir world_boundaries
wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
tar xvzf world_boundaries-spherical.tgz
wget http://tile.openstreetmap.org/processed_p.tar.bz2
tar xvjf processed_p.tar.bz2 -C world_boundaries
wget http://tile.openstreetmap.org/shoreline_300.tar.bz2
tar xjf shoreline_300.tar.bz2 -C world_boundaries
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip
unzip ne_10m-populated-places.zip -d world_boundaries
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip
unzip 110m-admin-0-boundary-lines.zip -d world_boundaries
./generate_xml.py –dbname gis –host ‘localhost’ –user användarnamn –port 5432 –password ”
./generate_image.py

Om allt fungerat så har du nu skapat en bild över Storbritannien. Det är här någonstans som jag inte riktigt får det att fungera, men PostGIS fungerar.

Om du ”öppnar” servern för databasanslutning (se tidigare inlägg om PostGIS) så kan du nu bland annat använda din OSM databas i QGIS (PostGIS).

Nu skall jag se om jag kan få igång mapnik som det är tänkt.