Como criar um modelo PostGIS?

19

Estou seguindo um tutorial para instalar o pgrouting. No entanto, não recebi o papel quando diz

Inicie o pgAdmin e crie um novo banco de dados com base no seu modelo PostGIS

Onde posso obter esse modelo postgis? Sei que instalei o PostGIS usando o homebrew. Mas não consegui encontrar o modelo. Estou executando o macos agora.

rajan sthapit
fonte
1
Qual versão do PostGIS você está usando?
RK

Respostas:

16

Novo método com o PostgreSQL 9.1

Graças ao conselho de RK abaixo, dei uma olhada neste tutorial e descobri que para o PostgreSQL 9.1 tudo o que você precisa fazer é adicionar as extensões postgise postgis_topologyum banco de dados existente usando os menus de contexto pgAdmin. Para criar um modelo postgis, criei um novo banco de dados chamado template-postgise adicionei essas extensões. Criei meu outro banco de dados usando este modelo. Ao usar pg_dump, descobri que o tamanho da exportação era muito menor, pois parece incluir apenas essas linhas e não despejar as funções de extensão:

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

Antigo método redundante:

Acabei usando os arquivos .sql aqui:

/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

Além disso, recebi esse erro ao importar um banco de dados PostGIS existente para um novo banco de dados criado a partir deste modelo:

ERROR:  type "spheroid" already exists

Então, segui as instruções aqui e usei ON_ERROR_ROLLBACK=onpara configurar o modelo, depois de criar um banco de dados em branco chamado "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 então importou meu banco de dados de backup, por exemplo:

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

Método ainda mais antigo:

Eu fiz isso:

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

O caminho para postgis--2.0.1.sqlserá diferente dependendo da sua configuração.

Aram Kocharyan
fonte
Para concluir sua resposta (que funciona no meu Mac): em um Mac, se você instalou o postgis a partir das portas Kyngchaos, o arquivo de instalação do postgis é: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris
Para o método mais recente, 'SCHEMA' é necessário? Para que serve isto? (O seu é o único exemplo que eu tenho visto até agora que fazer isso.)
Matt Wilkie
14

Se você estiver executando o PostgreSQL 9.1+, não precisa se preocupar com o banco de dados de modelos . Basta criar um banco de dados e, em seguida, na visualização SQL em pgAdmin, digite e execute

CREATE EXTENSION postgis;

Isso permitirá espacialmente seu banco de dados.

RK
fonte
O método de modelo ainda pode ser usado? Ou existe uma maneira de adicionar essas informações à caixa de diálogo "novo banco de dados" no pgAdminIII?
Monkut 28/05
você provavelmente também quer adicionarCREATE EXTENSION postgis_topology;
Matt Wilkie
1
@monkut em pgAdmin4 isso está disponível através do clique com o botão direito em 'Extensões' na árvore de navegação
Matt Wilkie
CREATE EXTENSIONprecisa de privilégios de superusuário, portanto, criar / usar um modelo pode ser uma boa ideia.
Cromax
3

de fato, este é o fundamento da instalação do postgis.

Se você tiver um modelo postgis, poderá criar um novo banco de dados como:

 createdb -T postgistemplate -O gis gisdb

se você não o tiver, poderá fazer isso desta maneira:

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

você pode usar scripts bash Debian / Ubuntu - create_template_postgis-debian.sh, aqui

espero que ajude você ...

Aragão
fonte
Provavelmente, o usuário postgresnão possui permissões para usar um terminal; nesse caso, o sudo su postgrescomando falhará silenciosamente. Para superar isso, você pode preceder todos esses comandos sudo -u postgrespara executar o comando como usuário do postgres sem mudar para o usuário do postgres.
Ring
2

Tanto quanto me lembro, existe algum script disponível para o workshop para criar esses bancos de dados de modelos. Também está disponível aqui: https://github.com/pgRouting/pgrouting-contrib/blob/master/scripts/create_templates.sh

Eventualmente, você precisa mudar algumas coisas aqui e ali, porque foi escrito para funcionar no Debian / Ubuntu. Mas você pode simplesmente escolher o que precisa.

dkastl
fonte
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

Eu uso esse script bash para executar a criação de um novo banco de dados com o postgis ativado e o nome fornecido no stdin.

Postgres 9.3

PostGIS 2.1.3

andilabs
fonte