Wie erstelle ich eine PostGIS-Vorlage?

19

Ich folge einem Tutorial zur Installation von Pgrouting. Allerdings habe ich das Teil nicht bekommen, als es heißt

Starten Sie pgAdmin und erstellen Sie eine neue Datenbank basierend auf Ihrer PostGIS-Vorlage

Woher bekomme ich diese Postgis-Vorlage? Ich weiß, dass ich PostGIS mit Homebrew installiert habe. Aber ich konnte die Vorlage nicht finden. Ich lasse jetzt macos laufen.

Rajan Sthapit
quelle
1
Welche Version von PostGIS verwenden Sie?
RK

Antworten:

16

Neue Methode mit PostgreSQL 9.1

Dank der Ratschläge von RK unten habe ich mir dieses Tutorial angesehen und festgestellt, dass Sie für PostgreSQL 9.1 nur die Erweiterungen postgisund postgis_topologyeine vorhandene Datenbank mithilfe der Kontextmenüs von pgAdmin hinzufügen müssen. Um eine Postgis-Vorlage zu erstellen, habe ich eine neue Datenbank mit dem Namen erstellt template-postgisund diese Erweiterungen hinzugefügt. Ich habe dann meine andere Datenbank mit dieser Vorlage erstellt. Bei der Verwendung stellte pg_dumpich fest, dass der Export viel kleiner war, da er nur diese Zeilen zu enthalten scheint und die Erweiterungsfunktionen nicht auswertet:

CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology;

Alte redundante Methode:

Am Ende habe ich die .sql-Dateien hier verwendet:

/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql

Außerdem trat dieser Fehler auf, als ich eine vorhandene PostGIS-Datenbank in eine neue Datenbank aus dieser Vorlage importierte:

ERROR:  type "spheroid" already exists

Also habe ich die Anweisungen hier befolgt und ON_ERROR_ROLLBACK=ondie Vorlage eingerichtet, nachdem ich eine leere Datenbank mit dem Namen "template_postgis" erstellt hatte:

psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql -v ON_ERROR_ROLLBACK=on

Und dann meine Backup-Datenbank importiert, zB:

psql -U someuser -d somedb -1 -f somefile.sql -v ON_ERROR_ROLLBACK=on

Noch ältere Methode:

Ich tat dies:

createdb -E UTF8 -T template0 template_postgis
createlang -d template_postgis plpgsql
psql --quiet -d template_postgis -f /Applications/Postgres.app/Contents/MacOS/share/extension/postgis--2.0.1.sql

Der Pfad postgis--2.0.1.sqlist je nach Konfiguration unterschiedlich.

Aram Kocharyan
quelle
Um Ihre Antwort zu vervollständigen (funktioniert auf meinem Mac): Wenn Sie auf einem Mac Postgis von Kyngchaos-Ports installiert haben, lautet die Postgis-Installationsdatei: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris
Wird für die neueste Methode "SCHEMA" benötigt? Wofür ist das? (Dein ist das einzige Beispiel, das ich bisher gesehen habe.)
matt wilkie
14

Wenn Sie PostgreSQL 9.1 oder höher ausführen, müssen Sie sich nicht mit der Vorlagendatenbank befassen . Erstellen Sie einfach eine Datenbank und geben Sie in der SQL-Ansicht in pgAdmin Folgendes ein und führen Sie es aus

CREATE EXTENSION postgis;

Dadurch wird Ihre Datenbank räumlich aktiviert.

RK
quelle
Kann die Template-Methode weiterhin verwendet werden? Oder gibt es eine Möglichkeit, diese Informationen zum Dialogfeld "Neue Datenbank" in pgAdminIII hinzuzufügen?
Monkut
Sie möchten wahrscheinlich auch hinzufügenCREATE EXTENSION postgis_topology;
Matt Wilkie
1
@monkut in pgAdmin4 Dies ist verfügbar, indem Sie mit der rechten Maustaste auf "Erweiterungen" im Navigationsbaum klicken
matt wilkie
CREATE EXTENSIONBenötigt Superuser-Rechte, daher ist das Erstellen / Verwenden einer Vorlage möglicherweise eine sehr gute Idee.
Cromax
3

Tatsächlich ist dies die Grundlage für die Postgis-Installation.

Wenn Sie eine Postgis-Vorlage haben, können Sie daraus eine neue Datenbank erstellen:

 createdb -T postgistemplate -O gis gisdb

Wenn Sie es nicht haben, können Sie dies auf folgende Weise tun:

sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/spatial_ref_sys.sql

Sie können Bash - Skripte Debian / Ubuntu verwenden - create_template_postgis-debian.sh, hier

ich hoffe es hilft dir ...

Aragon
quelle
Wahrscheinlich verfügt der Benutzer postgresnicht über die Berechtigung, ein Terminal zu verwenden. In diesem Fall schlägt der sudo su postgresBefehl im Hintergrund fehl. Um dies zu sudo -u postgresüberwinden, können Sie all diesen Befehlen voranstellen , um den Befehl als postgres-Benutzer auszuführen, ohne zum postgres-Benutzer zu wechseln.
Ring
2

Soweit ich mich erinnere, steht für den Workshop ein Skript zum Erstellen dieser Vorlagendatenbanken zur Verfügung. Es ist auch hier verfügbar: https://github.com/pgRouting/pgrouting-contrib/blob/master/scripts/create_templates.sh

Schließlich müssen Sie hier und da ein paar Dinge ändern, weil es für Debian / Ubuntu geschrieben wurde. Aber Sie können einfach auswählen, was Sie brauchen.

dkastl
quelle
2
#!/bin/sh
instance_name=$1
psql << EOF
create database $instance_name;
\connect $instance_name
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
EOF

Ich benutze dieses Bash-Skript, um die Erstellung einer neuen Datenbank mit aktiviertem Postgis und auf stdin angegebenem Namen auszuführen.

Postgres 9.3

PostGIS 2.1.3

andilabs
quelle