Même si PostgreSQL a été installé conjointement avec PostGis, la base de données n’est pas, par défaut, spatialisée.
Un rapide coup d’oeil aux tables nous montre l’absence des deux principales tables nécessaires à PostGIS, geometry_columns et spatial_ref_sys.
Voilà comment les ajouter, ainsi que l’ensemble des fonctions nécessaires à la spatialisation de la base colloque:
sudo su - postgres
createlang plpgsql colloque
psql -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql -d colloque
psql -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql -d colloque
Pour ajouter les droits d’usage sur ces tables à l’utilisateur, saisir :
sudo –s –u postgres
psql colloque
ALTER TABLE geometry_columns OWNER TO colloque;
ALTER TABLE spatial_ref_sys OWNER TO colloque;
No stress 😉
Création d’exemples:
CREATE SEQUENCE points_id_seq;
CREATE TABLE points ( id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘points_id_seq’) );
SELECT AddGeometryColumn(‘points’, ‘location’, 4326, ‘POINT’, 2);
CREATE INDEX points_location_idx ON points USING GIST ( location );
// CREATE a point
INSERT INTO points(location) VALUES (ST_GeomFromText(‘POINT(-76.615657 39.327052)’));
// RETURNS the point
SELECT * FROM points WHERE ST_Distance(location, ST_GeomFromText(‘POINT(-76 39)’)) < 1; // Does NOT RETURN the point SELECT * FROM points WHERE ST_Distance(location, ST_GeomFromText('POINT(-76 39)')) < .1;
Pour info avec la version postgresql-8.4-postgis les 2 scripts a passer (lwpostgis.sql et ref_spatialxxxx.sql) ont été remplacé par le script postgis.sql situé dans /usr/share/postgresql/8.4/contrib/postgis-xx/
Voici ce qu’il faut faire:
createdb ma_bdd
createlang plpgsql ma_bdd
psql -d ma_bdd -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d ma_bdd -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d ma_bdd -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql