• en
  • Language: fr

Installation de PostGIS

PostGIS ajoute la prise en charge des objets géographiques à PostgreSQL, pour en faire une base de données spatiale. GEOS, PROJ.4 et GDAL devraient être installés avant de compiler PostGIS. Vous aurez peut-être besoin d’autres bibliothèques, voir exigences PostGIS.

Note

Le module psycopg2 est obligatoire comme adaptateur de base de données lors de l’utilisation de GeoDjango avec PostGIS.

Sur Debian/Ubuntu, il est conseillé d’installer les paquets suivants : postgresql-x.x, postgresql-x.x-postgis, postgresql-server-dev-x.x, python-psycopg2 (où x.x correspond à la version de PostgreSQL que vous souhaitez installer). Veuillez consultez également les instructions spécifiques à votre plate-forme si vous travaillez avec Mac OS X ou Windows.

Compilation à partir des sources

Commencez par télécharger l’archive des sources et décompressez-la :

$ wget http://download.osgeo.org/postgis/source/postgis-2.1.5.tar.gz
$ tar xzf postgis-2.1.5.tar.gz
$ cd postgis-2.1.5

Puis, lancez les opérations « configure », « make » et « install » de PostGIS :

$ ./configure

Pour terminer, lancez « make » et « install » :

$ make
$ sudo make install
$ cd ..

Note

GeoDjango ne crée pas automatiquement de base de données spatiale. Consultez la section sur Création d’une base de données spatiale avec PostGIS 2.0 et PostgreSQL 9.1+ ou Création d’un modèle de base de données spatiale pour les versions précédentes pour plus d’informations.

Après l’installation

Création d’une base de données spatiale avec PostGIS 2.0 et PostgreSQL 9.1+

PostGIS 2 contient une extension pour Postgres 9.1+ pouvant être utilisée pour activer les fonctions spatiales :

$ createdb  <db name>
$ psql <db name>
> CREATE EXTENSION postgis;

GeoDjango n’exploite actuellement aucune fonctionnalité PostGIS de topologie. Si vous pensez utilisez ces fonctionnalités à un moment donné, vous pouvez également installer l’extension postgis_topology en exécutant CREATE EXTENSION postgis_topology;.

Changed in Django 1.8:

La commande CREATE EXTENSION postgis est dorénavant exécutée automatiquement durant le processus migrate. Vous pouvez toujours la créer manuellement si vous le souhaitez.

Création d’un modèle de base de données spatiale pour les versions précédentes

Si vous disposez d’une version plus ancienne de PostGIS ou de PostgreSQL, la commande CREATE EXTENSION n’est pas disponible et vous devez créer la base de données spatiale au moyen des instructions suivantes.

La création d’une base de données spatiale avec PostGIS est différente du processus habituel car du code SQL supplémentaire doit être chargé pour activer les fonctions spatiales. En raison des étapes induites par ce processus, il est conseillé de créer un modèle de base de données qui peut ensuite être réutilisé.

Vous devez d’abord être autorisé à exécuter les commandes comme utilisateur privilégié de base de données. Par exemple, vous pouvez faire ce qui suit pour vous connecter en tant qu’utilisateur postgres:

$ sudo su - postgres

Note

L’emplacement et le nom des fichiers SQL PostGIS (par ex. dans POSTGIS_SQL_PATH ci-dessous) dépend de la version de PostGIS. La version 1.5 utilise <rép_partagé>/contrib/postgis-1.5/postgis.sql.

Pour compliquer les choses, les distributions Debian/Ubuntu ont leur propre système de nommage de répertoires qui peut changer avec le temps. Dans ce cas, utilisez le script create_template_postgis-debian.sh.

L’exemple ci-dessous se base sur la version 1.5, il est donc possible que vous deviez modifier POSTGIS_SQL_PATH et le nom du fichier SQL pour la version spécifique de PostGIS que vous utilisez.

Une fois que vous êtes devenu super-utilisateur de la base de données, vous pouvez exécuter les commandes suivantes pour créer un modèle de base de données spatiale PostGIS :

$ POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-2.0
# Creating the template spatial database.
$ createdb -E UTF8 template_postgis
$ createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
# Allows non-superusers the ability to create from this template
$ psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
# Loading the PostGIS SQL routines
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
# Enabling users to alter spatial tables.
$ psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"

Ces commandes peuvent être placées dans un script shell pour être réutilisées ; par commodité, les scripts suivants sont disponibles :

Version de PostGIS

Script shell bash

1.5 create_template_postgis-1.5.sh
Debian/Ubuntu create_template_postgis-debian.sh

Après cela, vous pouvez créer une base de données spatiale en indiquant simplement template_postgis comme modèle à utiliser (via l’option -T) :

$ createdb -T template_postgis <db name>

Note

Même si la commande createdb n’exige pas que vous soyez super-utilisateur, elle doit être lancée par un utilisateur de base de données ayant les droits de créer des bases de données. Vous pouvez créer un tel utilisateur avec la commande suivante :

$ createuser --createdb <user>

Échec de la commande createdb de PostgreSQL

Lorsque le cluster de PostgreSQL utilise un codage autre que UTF8, le script create_template_postgis-*.sh échoue au moment de l’exécution de createdb:

createdb: database creation failed: ERROR:  new encoding (UTF8) is incompatible
  with the encoding of the template database (SQL_ASCII)

La solution actuelle à ce problème est de recréer le cluster avec UTF8 (en sauvegardant les bases de données existantes avant de supprimer le cluster).

Gestion de la base de données

Pour administrer la base de données, vous pouvez soit utiliser le programme pgAdmin III (Démarrer ‣ PostgreSQL 9.x ‣ pgAdmin III), soit le shell SQL (Démarrer ‣ PostgreSQL 9.x ‣ SQL Shell). Par exemple, pour créer un utilisateur et une base de données geodjango, voici ce qui pourrait être saisi dans un shell SQL lancé avec l’utilisateur postgres:

postgres# CREATE USER geodjango PASSWORD 'my_passwd';
postgres# CREATE DATABASE geodjango OWNER geodjango TEMPLATE template_postgis ENCODING 'utf8';
Back to Top