Andreas Bruns

Softwareentwicklung für Oldenburg und Bremen

Installation von PostgreSQL mit PostGIS auf MAC Lion

Wenn man sich mit OpenStreetMap und GIS (Geoinformationssystem) beschäftigt, wird man irgendwann unweigerlich mit Datenbankerweiterungen für Geo-Daten konfrontiert. Eine sehr ausgereifte Erweiterung bildet PostGIS für die freie relationale Datenbank PostgreSQL.
PostgreSQL+PostGIS auf einem MAC mit Lion zu installieren – sowas ist doch heutzutage meistens kein Problem mehr. Entsprechende Image-Datei gibt es hier, einfach installieren, fertig ist der Lack – warum also einen Blog-Artikel dazu? Ich habe leider vorweg im Netz recherchiert und bin auf einige (mehr oder weniger relevante) Probleme gestoßen:

  1. ist PostgresSQL vielleicht sogar schon installiert?
  2. wird der Installer mit der Image-Datei funktionieren oder soll ich eine Alternative für die Installation wählen?
  3. muss ich die Einstellungen in der README bezüglich Speicher (/etc/sysctl.conf) beachten?
  4. klappt die Installation von PostGIS?
  5. war die Installation erfolgreich?
  6. wie erstelle ich eine PostGIS-Datenbank?

Falls also jemand gerade PostgreSQL mit PostGIS auf einem MAC Lion installieren möchte, bei mir klappte es so (MAC OS – Lion 10.7.3, PostgreSQL 9.1.2.1):

1. ist PostgresSQL vielleicht sogar schon installiert?

Nein  – Auf meinem Rechner konnte ich den Befehl psql ausführen, aber eine Datenbank schien nicht installiert zu sein. Tatsächlich gibt es vorinstallierte PosgreSQL-Datenbanken auf Lion, allerdings handelt es sich um die Server-Version von Lion.

2. wird der Installer mit der Image-Datei funktionieren oder soll ich eine Alternative für die Installation wählen?

Ja größtenteils funktioniert der Installer, Alternative nicht nötig – die hier diskutierten Probleme hatte ich mit dem Installer nicht (mehr) und deswegen habe ich auch diese Alternativen nicht ausprobiert. PostgreSQL wurde einwandfrei installiert, aber die Installation von PostGIS mit dem PostgreSQL – Application Stack Builder klappte nicht.

3. muss ich die Einstellungen in der README bezüglich Speicher (/etc/sysctl.conf) beachten?

Nein – In der README der Image-Datei wird darauf hingewiesen, dass auf einem MAC in der Datei /etc/sysctl.conf bestimmte Anpassungen vorgenommen werden sollen. Die Datei war auf meinem Rechner nicht vorhanden und ich habe mich gefragt, ob ich die anlegen muss. Die Datei wird von dem Installer automatisch erzeugt und anschließend muss ein Neustart durchgeführt werden.

4. klappt die Installation von PostGIS?

Nein – Mit dem PostgreSQL – Application Stack Builder klappte bei mir die Installation nicht. Aber netterweise wird unten in dem Dialog angezeigt, wo sich die heruntergeladene Installationsdatei edb_postgis_1_5_pg91.app.zip befindet. Die Datei muss nur entpackt werden und danach kann die entpackte Datei installiert werden.

5. war die Installation erfolgreich?

Ja – wenn man sich mit dem PostgreSQL – Application Stack Builder die installierten Programme anschaut, sind Database Server und PostGIS mit installed markiert. Das UI-Tool pgAdmin3 zeigt unter Databases das Template von PostGIS an: template_postgis.

6. wie erstelle ich eine PostGIS-Datenbank?

Mit dem UI-Tool pgAdmin3 muss man beim Erzeugen einer Datenbank das Template template_postgis auswählen, damit PostGIS eingebunden wird. Dann enthält die Datenbank bereits die beiden Tabellen geometry_columns und spatial_ref_sys. Im SQL-Fenster sollte dann nicht nur der erste Befehl, sondern auch der zweite Befehl funktionieren:

SELECT version();
SELECT postgis_full_version();

6. Alternative: Shell
Mit der Shell sollten auch folgende Befehle funktionieren:

psql -U postgres -c "CREATE DATABASE mypois WITH TEMPLATE = template_postgis;"
psql -U postgres mypois
SELECT postgis_full_version();

create table akw (id serial NOT NULL, description varchar(24), CONSTRAINT pk PRIMARY KEY (id)) WITH OIDS;
select addgeometrycolumn('akw','location',4326,'POINT',2);

INSERT INTO akw (description, location) VALUES ('Brunsbüttel', GeometryFromText('POINT(9.201667 53.891667)', 4326));
INSERT INTO akw (description, location) VALUES ('Brokdorf', GeometryFromText('POINT(9.344722 53.850833)', 4326));

SELECT a.description, Distance (a.location, GeometryFromText('POINT(9.993215 53.553232)', 4326)) AS entfernung FROM akw AS a ORDER BY entfernung;
q

Ich habe für die Installation von PostgreSQL mit PostGIS etwas mehr als zwei Stunden gebraucht und hoffe, dass jemand mit dieser Anleitung maximal fünf Minuten benötigt 😉