¿Cómo crear una plantilla PostGIS?

19

Estoy siguiendo un tutorial para instalar pgrouting. Sin embargo, no obtuve el papel cuando dice

Inicie pgAdmin y cree una nueva base de datos basada en su plantilla PostGIS

¿Dónde puedo obtener esta plantilla postgis? Sé que he instalado PostGIS usando homebrew. Pero no pude encontrar la plantilla. Estoy corriendo macos ahora.

rajan sthapit
fuente
1
¿Qué versión de PostGIS estás usando?
RK

Respuestas:

16

Nuevo método con PostgreSQL 9.1

Gracias al consejo de RK a continuación, eché un vistazo a este tutorial y descubrí que para PostgreSQL 9.1 todo lo que necesita hacer es agregar las extensiones postgisy postgis_topologya una base de datos existente utilizando los menús contextuales de pgAdmin. Para crear una plantilla postgis, creé una nueva base de datos llamada template-postgisy luego agregué estas extensiones. Luego creé mi otra base de datos usando esta plantilla. Al usar pg_dump, descubrí que el tamaño de la exportación era mucho más pequeño, ya que parece incluir estas líneas y no volcar las funciones de extensión:

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

Viejo método redundante:

Terminé usando los archivos .sql aquí:

/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

Además, recibí este error cuando importé una base de datos PostGIS existente a una nueva base de datos hecha a partir de esta plantilla:

ERROR:  type "spheroid" already exists

Así que seguí las instrucciones aquí y solía ON_ERROR_ROLLBACK=onconfigurar la plantilla, después de crear una base de datos en blanco llamada "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

Y luego importé mi db de respaldo, por ejemplo:

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

Método aún más antiguo:

Hice esto:

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

La ruta a postgis--2.0.1.sqlserá diferente dependiendo de su configuración.

Aram Kocharyan
fuente
Para completar su respuesta (que funciona en mi Mac): en una Mac, si instaló postgis desde los puertos de Kyngchaos, el archivo de instalación de postgis es: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris
Para el método más nuevo, ¿se necesita 'SCHEMA'? ¿Para qué sirve? (El suyo es el único ejemplo que he visto hasta ahora que hace eso).
Matt Wilkie
14

Si está ejecutando PostgreSQL 9.1+, no necesita molestarse con la base de datos de la plantilla . Simplemente cree una base de datos y luego en la vista SQL en pgAdmin, escriba y ejecute

CREATE EXTENSION postgis;

Eso habilitará espacialmente su base de datos.

RK
fuente
¿Se puede seguir utilizando el método de la plantilla? O, ¿hay alguna manera de agregar esta información al cuadro de diálogo "nueva base de datos" en pgAdminIII?
Monkut
probablemente también quieras agregarCREATE EXTENSION postgis_topology;
matt wilkie
1
@monkut en pgAdmin4 está disponible haciendo clic derecho en 'Extensiones' en el árbol de navegación
matt wilkie
CREATE EXTENSIONnecesita privilegios de superusuario, por lo que crear / usar una plantilla puede ser una muy buena idea.
Cromax
3

De hecho, esta es la base de la instalación postgis.

Si tiene una plantilla postgis, puede crear una nueva base de datos a partir de ella como:

 createdb -T postgistemplate -O gis gisdb

Si no lo tiene, puede hacerlo de esta manera:

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

puede usar los scripts de bash Debian / Ubuntu - create_template_postgis-debian.sh, aquí

Espero que te ayude...

Aragón
fuente
Es probable que el usuario postgresno tenga permisos para usar un terminal, en cuyo caso el sudo su postgrescomando fallará silenciosamente. Para superar esto, puede preceder a todos estos comandos sudo -u postgrespara ejecutar el comando como usuario postgres sin cambiar al usuario postgres.
Anillo
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

Utilizo este script bash para ejecutar la creación de una nueva base de datos con postgis habilitado y el nombre dado en stdin.

Postgres 9.3

PostGIS 2.1.3

andilabs
fuente