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.


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.


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.


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...


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
#!/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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.