Comment créer une nouvelle base de données 'gis' dans PostGIS?

24

J'aimerais créer une nouvelle base de données dans PostGIS, afin de pouvoir y charger des éléments pendant que la base de données actuelle est utilisée. Selon les documents

Certaines distributions packagées de PostGIS (en particulier les programmes d'installation Win32 pour PostGIS> = 1.1.5) chargent les fonctions PostGIS dans une base de données de modèles appelée template_postgis. Si la base de données template_postgis existe dans votre installation PostgreSQL, il est possible pour les utilisateurs et / ou les applications de créer des bases de données spatiales à l'aide d'une seule commande.

Dans mon cas, cela ne semble pas être le cas:

$ createdb -T template_postgis my_spatial_db
createdb: database creation failed: ERROR:  template database "template_postgis" does not exist

Dans le passé, je me suis amusé à copier la gisbase de données principale , puis à supprimer le contenu de toutes les tables. Il doit y avoir un meilleur moyen. Que faites-vous si vous le laissez tomber accidentellement?

Steve Bennett
la source

Réponses:

42

Je ne sais pas quelle version de PostGISvous utilisez mais sur> 2.0Je me connecte en premier en utilisant psql:

psql -U postgres

Ensuite, je crée une base de données:

CREATE DATABASE example_gis;

Je passe ensuite dans cette base de données:

\connect example_gis;

Et puis je lance la recommandation:

CREATE EXTENSION postgis;

Cela crée toutes les fonctions spatiales et les types d'objets dans cette base de données.  

djq
la source
sur mon système, je dois écrire tous les majuscules CREATE EXTENSION POSTGISplutôt que CREATE EXTENSION postgis.
SIslam
5

Après le lien de @ novicegis, cela a fonctionné pour moi avec postgis 1.5:

db=gis
sudo -su postgres <<EOF
createdb --encoding=UTF8 --owner=ubuntu $db
psql -d $db -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
psql -d $db -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d $db -f /usr/share/postgresql/9.1/contrib/postgis_comments.sql
psql -d $db -c "GRANT SELECT ON spatial_ref_sys TO PUBLIC;"
psql -d $db -c "GRANT ALL ON geometry_columns TO ubuntu;"
psql -d $db -c 'create extension hstore;'
EOF

(Les instructions liées n'incluaient pas l'extension «hstore».)

Steve Bennett
la source
2

Vous devez créer "template_postgis" dans la console. Toutes les erreurs sont affichées dans la console.

Vous pouvez utiliser ces instructions: http://linfiniti.com/2012/05/installing-postgis-2-0-on-ubuntu/ si vous souhaitez créer "template_postgis".

Par exemple, je fais:

//install postgis
su oleg
sudo apt-add-repository ppa:sharpie/for-science  
sudo apt-add-repository ppa:sharpie/postgis-nightly
sudo apt-get update
sudo apt-get install postgresql-9.1-postgis

// create template
sudo su
su postgres
createdb -E UTF8 template_postgis2
createlang -d template_postgis2 plpgsql
psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis2'"

psql -d template_postgis2 -f /usr/share/postgresql/9.1/contrib/postgis-2.1/postgis.sql
psql -d template_postgis2 -f /usr/share/postgresql/9.1/contrib/postgis-2.1/rtpostgis.sql
psql -d template_postgis2 -c "GRANT ALL ON geometry_columns TO PUBLIC;"
psql -d template_postgis2 -c "GRANT ALL ON geography_columns TO PUBLIC;"
psql -d template_postgis2 -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
createdb osm -T template_postgis2

J'ai reçu ce message lorsque j'ai installé postgis avec des erreurs

novicegis
la source
Tout cela fonctionnait avec postgis 1.5 sauf qu'il n'y a pas de fichier "rtpostgis.sql". Est-ce important?
Steve Bennett
Je pense que Postgis 1.5 est le meilleur moyen. lien - documentation officielle
novicegis