PostGRESQL Un S.G.B.D.R. Libre Un univers normalisé Installation Configuration PostgreSQL s'efforce de repondre aux normes ISO et Comparatif aux normes de l'ogc pour sa Outils cartouche spatiale Mise en place Création des tables
Installation - l'installation se fait par un assistant - la configuration sur 2 fichiers textes - et l'administration avec pgadmin3 et plsql Installation assistée Configuration par fichier Passons a l'installation
Création d'un compte dédié La première partie est la création d'un compte dédié pour postgresql, un compte de type utilisateur. On peut donc lui donner des droits au niveau meme de windows, donc tres interessant pour la gestion de domaine et la sécurité.
On trouve ensuite une fenetre avec les differents modules que l'on peut installer. Comme PostgreSQL est libre, beaucoup de module se developpent, cette liste se complète avec les versions. Choix des compléments
Et voici le module le plus abouti, PostGIS, destiné au géomaticien, cette «cartouche spatiale» comme on l'appelle permet de stocker dans attributs particuliés. On y reviendra plus loin pour le plaisir des Sigistes. Activation de la capsule spatiale
Fichiers de Configuration C:\Program Files\PostgreSQL\8.1\data\postgresql.conf Ce premier fichier contient principalement les configurations du serveur postgresql. Ci-dessous les lignes les plus importantes, les adresses d'ecoutes, le port et le maximum de connexion.
Fichiers de Configuration C:\Program Files\PostgreSQL\8.1\data\postgresql.conf C:\Program Files\PostgreSQL\8.1\data\pg_hba.conf Le second fichier est particulièrement destiné aux acces a la base de données, sur ces lignes on peut déterminer qui a droit a quel base et a partir d'ou. Interessant pour la gestion des utilisateurs sur un reseau? non?
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout Sur cette ligne, on compare le respect de la norme SQL.PostgreSQL respecte 150 sur 164 clauses de la norme ISO 2003. C'est un exellent résultat, d'autant que postgresql va encore evoluer. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout Sur cette ligne, on compare la sécurité des SGBD. Comme on le voit postgresql est bien sécurisé, on peut gerer des roles, des utilisateurs et les droits, des droits sur les tables mais pas sur les colonnes. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout Sur cette ligne, on compare l'integrite de la base. On peut gerer les contraintes d'integrites sous postgresql. On ne peut pas encore faire de snapshot entre des bases ou alors je ne l'ai pas trouvé. Toutefois je pose le doute sur cette affirmation, il faut explorer le module DBLink. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout Ici, postgresql permet les triggers, les vues, les procedures. Bref le necessaire, pour des bases d'un bon niveau. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout On en vient a la portabilité, PostgreSQL existe sous linux et windows, un bon point. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL Access SQL Sécurité Intégrité Fonction Portable Station Cout Ici, c'est le matérial necessaire que l'on compare. PostgreSQL est tres leger malgre toutes ses fonctionnalités, un pc 800Mhz, 256Mo de memoire. En comparaison Oracle ne tournera pas correctement sur un pc a moins de 2Ghz et 1Go de memoire, et c'est bien le minimum. PostgreSQL Oracle
Comparatif Ce tableau est a prendre a la legere, il n'est pas basé sur des valeurs exactes. Tableau a titre de comparaison entre les SGBDR. Norme SQL:2003 ISO/IEC 9075 : 164 clauses PostgreSQL 150/164 MySQL SQL Sécurité Intégrité Fonction Portable Station Cout PostgreSQL est gratuit! Access PostgreSQL Oracle
Outil PGADMIN 3 PGAdmin3 est une interface d'administration, il permet aussi d'acceder aux fichiers de configuration et de gerer les bases, les roles,...etc... Interface d'administration
Outil - PLSQL Ligne de commande : PLSQL = SQLplus de Oracle Batch - Script de maintenance Cet outil s'apparente au SQLPlus de Oracle, interface en ligne de commande. Destiné principalement aux scripts de maintenances.
Mise en place Pour créer une base de données il faut d'abord definir son propriétaire. Un Propriétaire
Mise en place Il faut ensuite definir l'espace disque ou sera stocké la base de données. Un Emplacement Un Propriétaire
Mise en place Et on termine en créant notre base. J'utilise ici le template_postgis afin d'avoir toutes les fonctions de la cartouche spatiale. Cet option a changé avec la version 8.2. Des Bases Un Emplacement Un Propriétaire
CREATION DE TABLE On dispose de plusieurs manieres pour créer nos tables. En sql ou avec l'assistant. CREATE TABLE etudiant (etu_id int NOT NULL, etu_nom varchar(50), etu_prenom varchar(50)); CREATE TABLE division (div_id int NOT NULL, div_nom varchar(50)); CREATE TABLE batiment (bat_id int NOT NULL, bat_nom varchar(50));
Petit exemple de creation en SQL CREATION DE TABLE CREATE TABLE etudiant (etu_id int NOT NULL, etu_nom varchar(50), etu_prenom varchar(50)); CREATE TABLE division (div_id int NOT NULL, div_nom varchar(50)); CREATE TABLE batiment (bat_id int NOT NULL, bat_nom varchar(50)); ALTER TABLE etudiant ADD CONSTRAINT PK_etudiant PRIMARY KEY (etu_id); ALTER TABLE division ADD CONSTRAINT PK_division PRIMARY KEY (div_id); ALTER TABLE batiment ADD CONSTRAINT PK_batiment PRIMARY KEY (bat_id); CREATE SEQUENCE etu_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1;...
Voyons maintenant la cartouche spatiale la plus complete,la plus performante a mon gout. Au point d'etre la base de données de l'ign! CARTOUCHE POSTGIS Qu'est ce au juste? PostGIS est a la limite de devenir un logiciel SIG a lui seul. Il possede le stockage de tous les formats vectoriels, les projections, les fonctions, les calculs...etc... il ne manque plus que l'interface. des formats spécifiques des opérations sur les géométries des calculs et des informations des projections des outils En pratique
FORMATs SIG On retrouve les formats vectoriels de SIG en 2D ou 3D sous la forme d'un champ dans une table. POINT LINESTRING POLYGON MULTIPOINT MULTISTRING MULTIPOLYGON GEOMETRYCOLLECTION
OPERATIONS Distance(geometry, geometry) Equals(geometry, geometry) Disjoint(geometry, geometry) Intersects(geometry, geometry) Touches(geometry, geometry) Crosses(geometry, geometry) Within(geometry A, geometry B) Overlaps(geometry, geometry) Contains(geometry A, geometry B) Relate(geometry, geometry, intersectionpatternmatrix) Relate(geometry, geometry) On retrouve les principales opérations sur les formes geometriques, utilisable en SQL.
CALCULS et informations On trouve aussi une quantite de calculs, d'informations sur les geometries. Toujours en SQL. Centroid(geometry) Area(geometry) Length(geometry) PointOnSurface(geometry) Boundary(geometry) Buffer(geometry, double, [integer]) ConvexHull(geometry) Intersection(geometry, geometry) SymDifference(geometry A, geometry B) Difference(geometry A, geometry B) GeomUnion(geometry, geometry) GeomUnion(geometry set) MemGeomUnion(geometry set)... AsText(geometry) SRID(geometry) Dimension(geometry) Envelope(geometry) IsEmpty(geometry) IsClosed(geometry) IsRing(geometry) GeometryN(geometry,int) NumPoints(geometry) PointN(geometry,integer) ExteriorRing(geometry) InteriorRingN(geometry,integer) EndPoint(geometry)...
PROJECTIONS TABLE : spatial_ref_sys SELECT srtext FROM spatial_ref_sys WHERE srtext LIKE '%France%' ED50 / France EuroLambert NTF (Paris) / Lambert Nord France NTF (Paris) / Lambert Centre France NTF (Paris) / Lambert Sud France NTF (Paris) / France I NTF (Paris) / France II NTF (Paris) / France III NTF (Paris) / France IV NTF (Paris) / Nord France NTF (Paris) / Centre France NTF (Paris) / Sud France PostGIS ne gere pas seulement les formes geometriques, il permet aussi de gerer les projections ET les reprojections. Une table contient toutes les projections «spatial_ref_sys», voici les projections sur la france.
PROJECTIONS TABLE : spatial_ref_sys SELECT srtext FROM spatial_ref_sys WHERE srtext LIKE '%France%' ED50 / France EuroLambert NTF (Paris) / Lambert Nord France NTF (Paris) / Lambert Centre France NTF (Paris) / Lambert Sud France NTF (Paris) / France I NTF (Paris) / France II NTF (Paris) / France III NTF (Paris) / France IV NTF (Paris) / Nord France NTF (Paris) / Centre France NTF (Paris) / Sud France Il y a 3162 projections dans cette table, on peut aussi y ajouter nos propres projections. 3162
Outils PostgreSQL Shape PostGIS vient avec 2 outils. Le premier va nous permettre de transformer nos fichiers vectoriels shape en table dans notre base de données. Et a l'inverse d'exporter nos tables en fichier shape.
Outils Le second outil est plutot une optimization, executer un vacuum permet d'optimizer nos tables spatiales. Les requetes sur les geometries seront plus rapides. PostgreSQL VACUUM Shape
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; Voici une requete pour inserer un champ geometrique dans une table. Ici, un champ 'spatial' dans la table etudiant, de type point en 2 dimension avec une projection d'id 27582 «France Zone2».
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; INSERT INTO etudiant( etu_id, etu_nom, etu_prenom, spatial ) VALUES ( nextval('etu_id_seq'), 'sorel', 'johann', GeomFromText( 'POINT(2 5)',27582 ) ); Ici, l'insertion d'un enregistrement dans la table etudiant.
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; INSERT INTO etudiant( etu_id, etu_nom, etu_prenom, spatial ) VALUES ( nextval('etu_id_seq'), 'sorel', 'johann', GeomFromText( 'POINT(2 5)',27582 ) ); SELECT nom, prenom, AsText(spatial) AS geom FROM etudiant ; On recupere nos formes geometriques au format texte «AsText(spatial)». On peut aussi les recuperer au format binaire, norme de l'ogc. Notons que plusieurs librairies sont presentes (notamment java) pour traiter ces champs particuliers.
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; INSERT INTO etudiant( etu_id, etu_nom, etu_prenom, spatial ) VALUES ( nextval('etu_id_seq'), 'sorel', 'johann', GeomFromText( 'POINT(2 5)',27582 ) ); SELECT nom, prenom, AsText(spatial) AS geom FROM etudiant ; SELECT * FROM etudiant WHERE intersects ( spatial, Expand(GeomFromText('POINT(1000 1000)',-1),100) ) ; Une requete classique selectionnant les points en intersection avec un buffer de 100 autour du point de coordonnées 1000,1000.
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; INSERT INTO etudiant( etu_id, etu_nom, etu_prenom, spatial ) VALUES ( nextval('etu_id_seq'), 'sorel', 'johann', GeomFromText( 'POINT(2 5)',27582 ) ); SELECT nom, prenom, AsText(spatial) AS geom Une opération de reprojection vers la projection FROM etudiant ; 4269. Un bonheur de simplicité. SELECT * FROM etudiant WHERE intersects ( spatial, Expand(GeomFromText('POINT(1000 1000)',-1),100) ) ; SELECT Transform( spatial, 4269 ) FROM etudiant;
En pratique SELECT AddGeometryColumn ( 'etudiant', 'spatial', 27582, 'POINT', 2 ) ; INSERT INTO etudiant( etu_id, etu_nom, etu_prenom, spatial ) VALUES ( nextval('etu_id_seq'), 'sorel', 'johann', GeomFromText( 'POINT(2 5)',27582 ) ); SELECT nom, prenom, AsText(spatial) AS geom FROM etudiant ; Et pour finir, voici comment transformer un fichier shape en table geometrique. SELECT * FROM etudiant WHERE intersects ( spatial, Expand(GeomFromText('POINT(1000 1000)',-1),100) ) ; SELECT Transform( spatial, 4269 ) FROM etudiant; shp2pgsql HYDRO_TRONCON_HYDROGRAPHIQUE hydro > hydro.sql -c -s 27582 psql -d GEO_ETUDIANT -f hydro.sql
Il existe quelques logiciels utilisants PostGIS. On trouve Udig, GvSIG, GRASS...etc... (ou AlterSIG, mon projet actuel) mais pour des raisons de monopole les plus grandes societes (je ne cite pas) tardent a introduire postgis dans leurs logiciels car ils possedent leurs solutions propriétaires basées sur Access ou Oracle. Toutefois ca ne saurait trop tarder, de plus en plus d'utilisateurs se tournent vers postgis (exemple : IGN). Merci pour votre attention. A vous d'aller plus loin dans postgresql. Johann Sorel, Janvier 2007