Comment créer un modèle PostGIS?

19

Je suis un tutoriel pour installer le pgrouting. Cependant, je n'ai pas eu la partie quand il est dit

Démarrez pgAdmin et créez une nouvelle base de données basée sur votre modèle PostGIS

Où puis-je obtenir ce modèle de postgis? Je sais que j'ai installé PostGIS en utilisant homebrew. Mais je n'ai pas pu trouver le modèle. J'utilise des macos maintenant.

rajan sthapit
la source
1
Quelle version de PostGIS utilisez-vous?
RK

Réponses:

16

Nouvelle méthode avec PostgreSQL 9.1

Grâce aux conseils de RK ci-dessous, j'ai regardé ce tutoriel et j'ai découvert que pour PostgreSQL 9.1, tout ce que vous devez faire est d'ajouter les extensions postgiset postgis_topologyune base de données existante en utilisant les menus contextuels de pgAdmin. Pour créer un modèle de postgis, j'ai créé une nouvelle base de données appelée template-postgispuis ajouté ces extensions. J'ai ensuite créé mon autre base de données en utilisant ce modèle. Lors de l'utilisation, pg_dumpj'ai trouvé que la taille de l'exportation était beaucoup plus petite, car il semble simplement inclure ces lignes et ne pas vider les fonctions d'extension:

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

Ancienne méthode redondante:

J'ai fini par utiliser les fichiers .sql ici:

/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

De plus, j'ai eu cette erreur lorsque j'ai importé une base de données PostGIS existante dans une nouvelle base de données créée à partir de ce modèle:

ERROR:  type "spheroid" already exists

J'ai donc suivi les instructions ici et utilisé ON_ERROR_ROLLBACK=onpour configurer le modèle, après avoir créé une base de données vierge appelée "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

Et puis importé ma base de données de sauvegarde, par exemple:

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

Méthode encore plus ancienne:

J'ai fait ça:

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

Le chemin d'accès à postgis--2.0.1.sqlsera différent selon votre configuration.

Aram Kocharyan
la source
Pour compléter votre réponse (qui fonctionne sur mon Mac): sur un Mac, si vous avez installé postgis à partir des ports Kyngchaos, le fichier d'installation de postgis est: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris
Pour la méthode la plus récente, «SCHEMA» est-il nécessaire? C'est pour quoi? (Le vôtre est le seul exemple que j'ai vu jusqu'à présent qui le fasse.)
matt wilkie
14

Si vous exécutez PostgreSQL 9.1+, vous n'avez pas besoin de vous soucier de la base de données de modèles . Il suffit de créer une base de données, puis sur la vue SQL dans pgAdmin, tapez et exécutez

CREATE EXTENSION postgis;

Cela activera spatialement votre base de données.

RK
la source
La méthode du modèle peut-elle encore être utilisée? Ou, existe-t-il un moyen d'ajouter ces informations à la boîte de dialogue "nouvelle base de données" dans pgAdminIII?
monkut
vous voudrez probablement aussi ajouterCREATE EXTENSION postgis_topology;
matt wilkie
1
@monkut dans pgAdmin4 ceci est disponible via un clic droit sur 'Extensions' dans l'arborescence de navigation
matt wilkie
CREATE EXTENSIONnécessite des privilèges de superutilisateur, donc la création / utilisation d'un modèle peut être une très bonne idée.
Cromax
3

en fait, c'est le fondement de l'installation de postgis.

si vous avez un modèle postgis, vous pouvez créer une nouvelle base de données comme:

 createdb -T postgistemplate -O gis gisdb

si vous ne l'avez pas, vous pouvez le faire de cette façon:

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

vous pouvez utiliser les scripts bash Debian / Ubuntu - create_template_postgis-debian.sh, ici

J'espère que ça t'aide...

Aragon
la source
Il est probable que l'utilisateur postgresne soit pas autorisé à utiliser un terminal, auquel cas la sudo su postgrescommande échouera silencieusement. Pour dépasser cela, vous pouvez précéder toutes ces commandes avec sudo -u postgrespour exécuter la commande en tant qu'utilisateur postgres sans passer à l'utilisateur postgres.
Ring
2

Pour autant que je me souvienne, il existe un script disponible pour l'atelier pour créer ces modèles de bases de données. Il est également disponible ici: https://github.com/pgRouting/pgrouting-contrib/blob/master/scripts/create_templates.sh

Finalement, vous devez changer quelques éléments ici et là, car il a été écrit pour fonctionner pour Debian / Ubuntu. Mais vous pouvez simplement choisir ce dont vous avez besoin.

dkastl
la source
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

J'utilise ce script bash pour exécuter la création d'une nouvelle base de données avec postgis activé et nom donné sur stdin.

Postgres 9.3

PostGIS 2.1.3

andilabs
la source