Come creare un modello PostGIS?


19

Sto seguendo un tutorial per installare pgrouting. Tuttavia, non ho ricevuto la parte quando dice

Avviare pgAdmin e creare un nuovo database basato sul modello PostGIS

Dove posso trovare questo modello postgis? So di aver installato PostGIS usando homebrew. Ma non sono riuscito a trovare il modello. Sto eseguendo macos ora.


1
Quale versione di PostGIS stai usando?
RK,

Risposte:


16

Nuovo metodo con PostgreSQL 9.1

Grazie ai consigli di RK di seguito, ho dato un'occhiata a questo tutorial e ho scoperto che per PostgreSQL 9.1 tutto ciò che devi fare è aggiungere le estensioni postgise postgis_topologyun database esistente usando i menu contestuali di pgAdmin. Per creare un modello Postgis, ho creato un nuovo database chiamato template-postgise quindi ho aggiunto queste estensioni. Ho quindi creato il mio altro database utilizzando questo modello. Durante l'utilizzo pg_dumpho scoperto che la dimensione dell'esportazione era molto più piccola, in quanto sembra includere solo queste righe e non scaricare le funzioni di estensione:

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

Vecchio metodo ridondante:

Ho finito per usare i file .sql qui:

/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

Inoltre, ho riscontrato questo errore quando ho importato un database PostGIS esistente in un nuovo database creato da questo modello:

ERROR:  type "spheroid" already exists

Quindi ho seguito le istruzioni qui e usato ON_ERROR_ROLLBACK=onper impostare il modello, dopo aver creato un database vuoto chiamato "template_postgis":

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

E poi ho importato il mio db di backup, ad esempio:

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

Metodo ancora più vecchio:

L'ho fatto:

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

Il percorso per postgis--2.0.1.sqlsarà diverso a seconda della configurazione.


Per completare la tua risposta (che funziona sul mio Mac): su un Mac, se hai installato Postgis dalle porte di Kyngchaos, il file di installazione di Postgis è: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris,

Per il metodo più recente, è necessario "SCHEMA"? Per cosa è? (Il tuo è l'unico esempio che ho visto finora che lo faccia.)
Matt Wilson

14

Se stai eseguendo PostgreSQL 9.1+, non devi preoccuparti del database dei modelli . Basta creare un database e quindi nella vista SQL in pgAdmin, digitare ed eseguire

CREATE EXTENSION postgis;

Ciò abiliterà spazialmente il tuo database.


È ancora possibile utilizzare il metodo modello? Oppure, c'è un modo per aggiungere queste informazioni alla finestra di dialogo "nuovo database" in pgAdminIII?
monkut,

probabilmente vorrai anche aggiungereCREATE EXTENSION postgis_topology;
Matt Wilson

1
@monkut in pgAdmin4 questo è disponibile facendo clic con il tasto destro su "Estensioni" nella struttura di navigazione
matt wilkie,

CREATE EXTENSIONnecessita di privilegi di superutente, quindi in realtà creare / utilizzare un modello potrebbe essere un'ottima idea.
Cromax,

3

infatti questa è la base dell'installazione postgis.

se si dispone di un modello Postgis è possibile creare un nuovo database da esso come:

 createdb -T postgistemplate -O gis gisdb

se non lo hai, puoi farlo in questo modo:

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

puoi usare gli script bash Debian / Ubuntu - create_template_postgis-debian.sh, qui

spero che ti aiuti ...


È probabile che l'utente postgresnon disponga delle autorizzazioni per utilizzare un terminale, nel qual caso il sudo su postgrescomando fallirà silenziosamente. Per superare questo, puoi precedere tutti questi comandi sudo -u postgresper eseguire il comando come utente postgres senza passare all'utente postgres.
Anello del


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

Uso questo script bash per eseguire la creazione di un nuovo database con Postgis abilitato e il nome dato su stdin.

Postgres 9.3

PostGIS 2.1.3

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.