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.
Commencez par télécharger l’archive des sources et décompressez-la :
$ wget http://download.osgeo.org/postgis/source/postgis-2.0.3.tar.gz
$ tar xzf postgis-2.0.3.tar.gz
$ cd postgis-2.0.3
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.
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;
> CREATE EXTENSION postgis_topology;
Aucune fonctionnalité topologique PostGIS n’est pour l’instant disponible dans GeoDjango, l’installation de l’extension postgis_topology est donc totalement facultative.
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. Les versions 1.3 et précédentes de PostGIS utilisent <rép_partagé_pg>/contrib/lwpostgis.sql; alors que la version 1.4 utilise <rép_partagé>/contrib/postgis.sql et 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.3 | create_template_postgis-1.3.sh |
1.4 | create_template_postgis-1.4.sh |
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>
When the PostgreSQL cluster uses a non-UTF8 encoding, the create_template_postgis-*.sh script will fail when executing createdb:
createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible
with the encoding of the template database (SQL_ASCII)
The current workaround is to re-create the cluster using UTF8 (back up any databases before dropping the cluster).
To administer the database, you can either use the pgAdmin III program (Start ‣ PostgreSQL 9.x ‣ pgAdmin III) or the SQL Shell (Start ‣ PostgreSQL 9.x ‣ SQL Shell). For example, to create a geodjango spatial database and user, the following may be executed from the SQL Shell as the postgres user:
postgres# CREATE USER geodjango PASSWORD 'my_passwd';
postgres# CREATE DATABASE geodjango OWNER geodjango TEMPLATE template_postgis ENCODING 'utf8';
Jan 13, 2016