Annexe H. Foire Aux Questions

Table des matières

H.1. Existe-il des installeurs pour PostgreSQL et PostGIS qui évitent d'avoir à les compiler soi-même?
H.2. Quel lociciel utilisé pour gérer/administrer un/des serveurs PostgreSQL sous Windows?
H.3. Quel logiciel utilisé pour visualiser ses données de PostGIS?
H.4. Comment migrer des données de PostGIS à travers un réseau intranet/extranet?
H.5. Comment passer du format MapInfo à PostGIS?
H.6. PostGIS: Comment passer de PostGIS à ESRI Shapefile?
H.7. PostGIS: Est-il possible de calculer l'extent sur des objets de nature géométrique différente?
H.8. PostgreSQL: Comment exporter des données au format CSV?
H.8.1. A partir de psql
H.8.2. Avec ogr2ogr
H.9. Comment connaître les objets d'une table qui intersectionnent une fenêtre?
H.10. Comment convertir une BOX3d en Polygon?
H.11. PostGIS: Comment mettre à jour et passer de PostGIS 0.X. à 1.0.X pour PostgreSQL 8.0.X?
H.12. Notes pour PostGIS 1.1.2: Tests de régression
H.13. Sous GNU/Linux : depuis un terminal comment se connecter à une machine distante sans avoir à taper à chaque fois le mot de passe?
H.14. Sous GNU/Linux: comment connaître l'ensemble des connexions client-serveur actives?
H.15. PostgreSQL: Connaître l'OID d'une table?
H.16. PostgreSQL: Connaître les champs d'un table, ainsi que leurs type?
H.17. Sous GNU/Linux: Comment migrer une base encodé en LATIN9 ou un shapefile encodé en LATIN9 vers une base encodée en UTF-8?
H.18. Sous GNU/Linux: Comment créer un espace logique avec PostgreSQL?
H.19. PostgreSQL: Peut-on copier un schéma dans un autre schéma et renommer l’ancien schéma?
H.20. Comment ajouter le support PL/Perl pour PostgreSQL sous Windows?
H.21. Comment charger l'extension de PostgreSQL sous PHP?

Cet annexe est un recueil de questions/problématiques auxquels nous avons été moi et Gérald souvent été confrontés aussi bien sous GNU/Linux que sous Win32. Nous tentons ici de répondre aux questions les plus pertinentes. Les questions abordées ici sont données en vrac et servent en fait de garde-fou/grenier!

H.1. Existe-il des installeurs pour PostgreSQL et PostGIS qui évitent d'avoir à les compiler soi-même?

La réponse est oui. La première possibilité est http://www.postgis.fr. La deuxième possibilité est de se rendre à

H.2. Quel lociciel utilisé pour gérer/administrer un/des serveurs PostgreSQL sous Windows?

Le mieux à mon sens est de recourir à pgadmin qui est totalement libre d'utilisation. Vous avez aussi le portage de ce projet sous php = phppgadmin , disponible à http://www.phppgadmin.org/. Vous pouvez télécharger pgadmin sur le site http://www.pgadmin.org

H.3. Quel logiciel utilisé pour visualiser ses données de PostGIS?

Il y a plusieurs projets pour cela. A part MapServer, citons ici comme projets déjà prometteurs

  • en Java UDIG: http://udig.refractions.net . Réalisé par le Gourou de PostGIS : Sir Paul RAMSEY!!!

  • en Qt QGIS: http://qgis.org dont la version 0.7 fonctionne pour PostGIS >=1.0.X pour Windows. La version 0.6 est utilisable pour Windows mais elle ne fonctionnait que pour PostGIS 0.9.X.

Nous ne faisons ici que citer ceux qui nous paraissent pertinents. D'autres existent aussi: JUMP, FME etc...

H.4. Comment migrer des données de PostGIS à travers un réseau intranet/extranet?

C'est une question qui revient souvent surtout lorsqu'on doit alimenter par exemple un serveur cartographique. Dans ce cas d'étude, nous sommes donc en présence de deux machines. L'une fait office de client dans le sens où elle doit accueillir des données, l'autre fait office de serveur dans le sens où elle doit "offrir" les données. Ici nous allons supposer que l'utilisateur se trouve sur la machine-serveur.

Sur les deux machines, on s'assurera que celle-ci autorise les connexions TCP/IP pour PostgreSQL - voir pour cela le chapitre "Paramétrer PostgreSQL" -"section Autoriser les machines du réseau intranet/extranet à se connecter au serveur". Donc les connexions doivent être ouvertes sur la machine de l'utilisateur et sur l'autre.

Dans le meilleur des mondes, le deuxième impératif serait que les deux machines est la même version de PostgreSQL. Cette information peut-être obtenu en faisant

  1. pour le coté client:

    psql -h [ip_hote_client] -U [user_client] -d [base_client] -c "SELECT Version()"
  2. pour le côté serveur

    psql -d [base_serveur] -c "SELECT Version()"

Si les deux versions ne correspondent pas, dans le meilleur des cas, il est préférable d'avoir Version_Serveur < Version_Client. On est au moins sûr dans ce cas par exemple si on doit migrer des données provenant d'une 7.4.X version un 8.0.X d'assurer la migration surtout s'il s'agit de toutes les tables d'une base.

La commande générale à utiliser est alors pour migrer une table, si l'utilisateur est côté serveur:

pg_dump -ciO -t [table_serveur] [base_serveur] | psql -h [ip_hote_client] -U [user_client] -d [base_client]

N'hésitez pas pour obtenir une meilleure information sur l'emploi de pg_dump d'utiliser

pg_dump --help

H.5. Comment passer du format MapInfo à PostGIS?

Avertissement

Je présente ici deux façons d'utiliser ogr2ogr. Ce dernier est livré avec Gdal http://www.remotesensing.org/gdal/. Les options que j'ai utilisé ici ne marchent que pour la version >= 1.3.2 de Gdal.

Il existe dans la distribution de l'outil Gdal, un utilitaire ogr2ogr - disponible aussi sous win32 - qui permet de passer de MapInfo à PostGIS. Par exemple pour importer le fichier DIrective_Habitats_30.MIF (format mif/mid de MapInfo), dans la base diren, je peux faire

ogr2ogr -f PostgreSQL PG:'host=localhost dbname=ingeresin user=postgres' -lco GEOMETRY_NAME=the_geom Directive_Habitats_30.MIF
  • -lco GEOMETRY_NAME=the_geom est important sinon votre colonne spatiale s'appellera wkb_geometry par défaut

  • PG:'host=XXX dbname=XXX user=XXX' permet la connexion à la base

Personnellement, je préfère couper la poire en deux: utiliser ogr2ogr pour une première conversion avec ogr2ogr MapInfo ---> Shapefile puis une deuxième conversion avec shp2pgsql Shapefile ---> PostGIS. En effet, si vous compilez les sources de Gdal sous GNU/Linux, la conversion directe n'impportera pas les données avec les structures/schémas usuels de PostGIS.

Note

Ogr2ogr faisant parti de la distribution de gdal est téléchargeable sur le site http://www.maptools.org.

Sous Win32, pour effectuer les deux conversions pour par exemple un fichier communes.tab, on effectuera les commandes suivantes:

  1. de MapInfo vers Shapefile

    ogr2ogr -f "ESRI Shapefile" communes.shp  communes.tab
  2. de Shapefile vers PostGIS

    shp2pgsql -s [srid] -I -D communes.shp | psql [base]

H.6. PostGIS: Comment passer de PostGIS à ESRI Shapefile?

Il faut pour cela utiliser l'utilitaire pgsql2shp qui est disponible avec PostGIS. La commande la plus courante est

pgsql2shp [base] [table]

qui produit directement le fichier shp ayant le même nom que la table. Il est également possible de créer un fichier shp résultant d'une requête:

pgsql2shp -f [nom_shapefile].shp [base] "[REQUETE]"

H.7. PostGIS: Est-il possible de calculer l'extent sur des objets de nature géométrique différente?

La réponse est oui! Prenons ici l'exemple des données de la table test du chapitre 4, "Exemples de requêtes spatiales I" où les données correspondent au cas envisagé ici.

# select geometrytype(geom) from test;
  geometrytype
-----------------
 POINT
 POINT
 POLYGON
 POLYGON
 POLYGON
 POINT
 POINT
 LINESTRING
 LINESTRING
 MULTILINESTRING
(10 lignes)

Et on obtiendra

# select extent(geom) from test;
     extent
-----------------
 BOX(1 4,50 135)
(1 ligne)

H.8. PostgreSQL: Comment exporter des données au format CSV?

Il y a bien plusieurs façons de faire. Je donnerais en premier lieu la manière de le faire avec psql , ensuite avec ogr2ogr. Je vais ici prendre l'exemple des données du chapitre 4,"Exemples de requêtes spatiales II" où sur les champs de la table buildings, je veux les données attributaires en renommant:

  • le champs "id" en "ID";

  • le champs "data" en "Nom du bâtiment".

Je veux pouvoir donc générer un fichier CSV, que je pourrais par la suite ouvrir avec OPenOffice Calc ou Excel dont le contenu ressemblera à

ID,Noms du bâtiments
1,Collège Arthur Rimbaud
2,Résidence des Mousquetaires
3,Hotel des Impots
4,E.D.F
5,Bibliothèque Victor Hugo
6,Mairie
7,Office du Tourisme

H.8.1. A partir de psql

Un des moyens intéressants est par exemple de faire

 psql -d testgis -AF "," -c "select id as \"ID\",data as \"Noms du bâtiments\" from buildings" | grep ","

H.8.2. Avec ogr2ogr

Je manipule ogr2ogr en faisant

ogr2ogr -f "CSV" test.csv  -sql "select id as \"ID\",data as \"Nom du bâtiment\" from buildings" "PG:dbname=testgis user=postgres host=localhost password=..."

ce qui me génère un répertoire out qui contiendra le fichier nommé sql_statement.csv attendu.

Attention

Avec psql, il est possible de pouvoir exporter aussi les données géométriques. Malheureusement, celà ne semble pas être le cas avec ogr2ogr. Je parle ici sous la garantie de n'avoir testé que la version fournie avec gdal 1.3.1.

H.9. Comment connaître les objets d'une table qui intersectionnent une fenêtre?

Considérons par exemple la situation suivante exposé sur l'image ci-dessus

Figure H.1. Une fenêtre intersectionnant des objets (ici les communes en région bourgogne)

Une fenêtre intersectionnant des objets (ici les communes en région bourgogne)

Pour celà, nous ferons tout simplement

# SELECT count(*) FROM communes_bourgogne WHERE the_geom && SetSRID('BOX3D(746387 2189036,773809 2213846)'::box3d,27582);
 count
-------
    53
(1 ligne)

Nous comprenons ici que la colonne the_geom est ici indexée spatialement.

H.10. Comment convertir une BOX3d en Polygon?

Prenons comme exemple la BOX3d de la sous-section précédente. BOX3dD(746387 2189036,773809 2213846) Pour la convertir, il suffit tout simplement d'utiliser la fonction BuildArea() qui ici fonctionnera car une BOX3d est un objet fermé

bourgogne=# SELECT  astext(buildarea(SetSRID('BOX3D(746387 2189036,773809 2213846)'::box3d,27582)));
                                        astext
---------------------------------------------------------------------------------------
 POLYGON((746387 2189036,746387 2213846,773809 2213846,773809 2189036,746387 2189036))
(1 ligne)

H.11. PostGIS: Comment mettre à jour et passer de PostGIS 0.X. à 1.0.X pour PostgreSQL 8.0.X?

Je détaille ici les notes pour une mise à jour d'une version de PostGIS 0.9.X vers PostGIS 1.0.X. Pour une meilleur information, consultez le chapitre 2 de la documentation de PostGIS. Je vais commencer par la partie HARD UPGRADE.

Pour la version 1.0.X, on s'assure pour l'instant qu'on a fait un make MAIS PAS ENCORE DE make install. Le premier des impératifs est de s'assurer d'avoir un DUMP de ses données. Depuis MinGW:

cd ~/sources/PostGIS/postgis-1.0.X
# On configure PostGIS avec les options habituelles
configure [....]
# On compile mais pas de make install pour le moment
make
# On dump la ou les bases voulues
pg_dump -Fc base_de_donnees > base_de_donnees.dump
# Maintenant on fait le make install depuis MinGW
make install

On va sous DOS dans le répertoire de postgis-1.0.X et on exécute le script postgis_restore.pl prévu à cet effet. ATTENTION:Pour la version 1.0.3, le script en question ne fonctionne que sous DOS.

cd C:\msys\1.0\home\david\sources\PostGIS\postgis-1.0.X

utils\postgis_restore.pl lwpostgis.sql nouvelle_base_de_donnees base_de_donnees.dump > restore.log

Pour m'assurer que les fonctionnalités éventuelles autre que celles de PostGIS que j'aurais ajouté à la base base_de_donnees ont été conserver, je fais depuis MINGW:

grep ^KEEPING restore.log

Si cette commande ne renvoit rien c'est que je n'ai pas ajouté de fonctionnalités supplémentaires à mon ancienne base.

Ceci me créer une nouvelle base de données nouvelle_base_de_donnees qui contient les mises à jours attendues. Il ne me est plus qu'à mettre à jour ma table spatial_ref_sys en faisant depuis MinGW ou DOS - puisque je suis dans la répertoire postgis 1.0.X qui contient le nouveau fichier spatial_ref_sys.sql:

psql -d nouvelle_base_de_donnees -c "delete from spatial_ref_sys"

psql -d nouvelle_base_de_donnees -f spatial_ref_sys.sql

Il ne me reste plus qu'à faire la partie de SOFT UPGRADE en faisant depuis DOS:

utils\postgis_proc_upgrade.pl lwpostgis.sql | psql nouvelle_base_de_donnees

Je peux maintenant effacer mon ancienne base:

dropdb base_de_donnees

H.12. Notes pour PostGIS 1.1.2: Tests de régression

Avec l'option de compilation pour PostgreSQL --enable-nls (voir chapitre 2) qui permet d'avoir notamment les messages d'erreur et de notification en français, le mieux à mon sens pour réussier l'intélgralité des 12 tests attendus est de compiler PostgreSQL sans cette option.

Note

Attention, les tests de régression que j'ai testé ne marche pas si j'use de cette option. Ceci est une remarque que j'émets uniquement sur Win32. En effet, pour GNU/Linux si PostgreSQL est compilé avec cette option celà marche. Celà vient à mon sens du fait que sous Windows on ne dispose pas tout l'outillage nécessaire pour la locale en C. Ce qui est le cas sous GNU/Linux et pour lequel les tests de régression de PostGIS fonctionnent

Si quelqu'un a une autre piste plus précise que la mienne merci de m'en faire part.

Voici la marche à suivre. Désintallez et recompilez PostgreSQL sans l'option --enable-nls et réinstallez

cd ~/sources/PostgreSQL/postgresql-8.1.3
make uninstall clean distclean
configure --prefix=/c/PostgreSQL/8.1.3
make && make install

Allez ensuite dans le répertoire des sources de PostGIS. Créez ensuite la variable d'environnement PGUSER=postgres. Copiez le fichier lwpostgis.sql dans le répertoire regress

cd ~/sources/PostGIS/postgis-1.1.2
export PGUSER=postgres
cp lwpostgis.sql regress/
make test

Vous devriez obtenir les résultats suivants

david@BREMKO ~/sources/PostGIS/postgis-1.1.2
$ make test
make -C regress test
make[1]: Entering directory `/home/david/sources/PostGIS/postgis-1.1.2/regress'
make -C ../lwgeom all-shared-lib
make[2]: Entering directory `/home/david/sources/PostGIS/postgis-1.1.2/lwgeom'
make[2]: Nothing to be done for `all-shared-lib'.
make[2]: Leaving directory `/home/david/sources/PostGIS/postgis-1.1.2/lwgeom'
Creating spatial db postgis_reg 

 PostgreSQL 8.1.3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)

 Postgis 1.1.2
 - 2006-04-22 14:08:24

   GEOS: 2.2.1-CAPI-1.0.1

   JTS: 

   PROJ: Rel. 4.4.9, 29 Oct 2004


Running tests

           regress: Ok.
     regress_index: Ok.
    lwgeom_regress: Ok.
       regress_lrs: Ok.
       removepoint: Ok.
          setpoint: Ok.
          simplify: Ok.
        snaptogrid: Ok.
            affine: Ok.
       regress_ogc: Ok.
    regress_bdpoly: Ok.
      regress_proj: Ok.

Run tests: 12
Successful: 12
Failed: 0
make[1]: Leaving directory `/home/david/sources/PostGIS/postgis-1.1.2/regress'

Et oh merveille, les tests de régression de PostGIS passent sans souci!

Note

D'autres erreurs pour cette version de PostGIS ont été signalées par Alexandra sur la mailing-list de PostGIS. Merci de consulter ce lien auquel a répondu Marc CAVE AYLAND http://postgis.refractions.net/pipermail/postgis-users/2006-April/011884.html

H.13. Sous GNU/Linux : depuis un terminal comment se connecter à une machine distante sans avoir à taper à chaque fois le mot de passe?

Supposons qu’une machine distante du réseau ait l'IP 192.168.0.14, que nous soyons autorisés à nous connecter à cette machine sur une base ma_base_de_donnees, et que pour nous connecter au serveur PostgreSQL actuellement en service sur la machine, nous soyons obligés de fournir notre login postgres et notre mot de passe "minotore" depuis un shell GNU/Linux. Pour éviter de le faire, il suffit de faire

su postgres

puis

cd
touch .pgpass

Il suffit ensuite de mette la chaine suivante dans lefichier

192.168.0.14:5432:ma_base_de_donnees:postgres:minotore

On restreint ensuite les droits sur ce fichier en faisant

chmod 0600 . pgpass

Ainsi la prochaine fois que nous ferons une connexion au serveur

psql -h 192.168.0.14 -U postgres -d ma_base_de_donnes

nous ne serons plus obligés de fournir le mot de passe.

Note

Pour de plus amples informations, merci de consulter le lien http://docs.postgresqlfr.org/8.1/libpq-pgpass.html

H.14. Sous GNU/Linux: comment connaître l'ensemble des connexions client-serveur actives?

Depuis le client, il sufit de saisir

ps axv | grep postgres | egrep -v "(logger|writer|stats|su|grep)"

qui renverra par exemple

16788 ? ... ... 0.2 postgres: david ddass26 128.179.68.7(55324) idle
16816 ? ... ... 0.3 postgres: jean ddass30 [local] idle

La première ligne indiquera par exemple qu'il y a une connexion cliente depuis la machine dont l'IP est 128.179.68.7. Sur cette machine, l'utilisateur david est connecté à la base ddass26. Quant à la seconde, l'utilisateur jean est connecté en local à la base ddass30. Le terme idle désigne une connexion en attente d'activité.

Note

Il est aussi possible de suivre les connexion clientes depuis pgadmin.

Note

Cette section est inspirée du travail de traduction de Guillaume LELARGE que vous pouvez trouver à cette adresse http://docs.postgresqlfr.org/8.1/monitoring.html

On peut aussi surveiller les connexions en essayant la vue pg_stat_activity suivante:

SELECT * FROM pg_stat_activity ;

Avertissement

Pour la vue pg_stat_activity, il est nécessaire de modifier certaines valeurs de votre fichier de configuration de PostgreSQL. Merci de consulter ce lien pour de plus amples informations http://docs.postgresqlfr.org/8.1/monitoring-stats.html

Par exemple pour avoir de meilleures informations sur les statistiques du serveur chez moi, je fais dans mon fichier de configuration

#---------------------------------------------------------------------------
# RUNTIME STATISTICS
#---------------------------------------------------------------------------

# - Statistics Monitoring -

log_parser_stats = true
log_planner_stats = true
log_executor_stats = true
log_statement_stats = off

# - Query/Index Statistics Collector -

stats_start_collector = true
stats_command_string = true
stats_block_level = true
stats_row_level = true
stats_reset_on_server_start = true

par exemple pour connaître la requête envoyé par un client sur le serveur (colonne current_query du tableau renvoyé par pg_stats_activity.

H.15. PostgreSQL: Connaître l'OID d'une table?

On pourra par exemple essayer la requête suivante

SELECT c.oid
        FROM pg_catalog.pg_class c
             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relname ~ '^??????????$'
              AND pg_catalog.pg_table_is_visible(c.oid)
        ORDER BY 1

en remplaçant ici ???????? par le nom de la table

H.16. PostgreSQL: Connaître les champs d'un table, ainsi que leurs type?

On utilisera par exemple

SELECT a.attname as champs,
          pg_catalog.format_type(a.atttypid, a.atttypmod) as type,
          (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
           FROM pg_catalog.pg_attrdef d
           WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef),
          a.attnotnull, a.attnum
        FROM pg_catalog.pg_attribute a
        WHERE a.attrelid in (SELECT c.oid
        FROM pg_catalog.pg_class c
             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relname ~ '^troncon_route$'
              AND pg_catalog.pg_table_is_visible(c.oid)
        ORDER BY 1) AND a.attnum > 0 AND NOT a.attisdropped AND a.attname<>'the_geom'
        ORDER BY a.attnum

en remplaçant ici ???????? par le nom de la table

H.17. Sous GNU/Linux: Comment migrer une base encodé en LATIN9 ou un shapefile encodé en LATIN9 vers une base encodée en UTF-8?

Pour celà, j'utilise l'utilitaire iconv de la manière suivante

........ |iconv -f LATIN1 -t UTF-8 |psql -d testgis -h [hôte] -U [utilisateur]

ici .......... désigne une commande du style shp2pgsql .... ou pg_dump ....

Note

A la place de de iconv, on peut aussi utliser recode en faisant

........ |recode l9..u8 |psql -d testgis -h [hôte] -U [utilisateur]

H.18. Sous GNU/Linux: Comment créer un espace logique avec PostgreSQL?

Je fournirais ici là réponse pour GNU/Linux. Commençons d’abord par un petit rappel en consultant le lien suivant http://docs.postgresqlf/8.1/manage-ag-tablespaces.html. Par exemple pour créer la base de données ma_base_de_donnees dans le répertoire /mnt/disk1/data, je commencerais par créer l’espace logique en tant que root

mkdir /mnt/disk1/data

Je rend ensuite postgres propriétaire de ce répertoire

chown -R postgres /mnt/disk1/data

Je me connecte ensuite au modèle de base de données template1 (par exemple)

su postgres
psql template1

Je fournis la requête SQL suivante pour créer mon espace logique data

CREATE TABLESPACE data LOCATION '/mnt/disk1/data';

que je remplis de la base de données ma_base_de_donnees:

CREATE DATABASE ma_base_donnees WITH TABLESPACE data;

Pour connaître l’ensemble des espaces logiques disponibles, on peut essayer

psql -d template1 -c "\db"

qui renverra par exemple

         Liste des espaces logiques
    Nom     | Propriétaire |   Emplacement
------------+--------------+-----------------
 data       | postgres     | /mnt/disk1/data
 pg_default | postgres     |
 pg_global  | postgres     |
(3 lignes)

On peut aussi essayer la requête SQL suivante

SELECT spcname AS "Nom",
      pg_catalog.pg_get_userbyid(spcowner) AS "Propriétaire",
     spclocation AS "Emplacement" 
         FROM pg_catalog.pg_tablespace 
           ORDER BY 1;

Pour finir, si l'on souhaite connaître dans quel espace logique se trouve chacune de nos bases de données, on aura recours à la requête suivante:

SELECT datname AS "Base de données",
        spcname AS "Espace logique" 
           FROM pg_database d JOIN pg_tablespace t ON ( dattablespace = t. oid ) ORDER BY 2;

qui renverra par exemple

 Base de données | Espace logique 
-----------------+---------------
       bourgogne | pg_default 
         ddass26 | tablespace 
         ddass30 | tablespace 
             gps | tablespace 
       ignportal | tablespace 
        postgres | pg_default 
       template0 | pg_default 
       template1 | pg_default

H.19. PostgreSQL: Peut-on copier un schéma dans un autre schéma et renommer l’ancien schéma?

La réponse est oui! Pour se faire nous utiliserons par exemple l'utilitaire pg_dump de PostgreSQL. Pour des rappels de base sur les schémas avec PostgreSQL, on pourra par exemple consulter le lien suivant http://docs.postgresqlfr.org/8.1/sql-createschema.html Supposons ici que nous disposons d'un schéma appelé cadastre, que nous souhaiterions copier dans un nouveau schéma aidentique appelé cadastre_2006. Pour se faire, commençons par faire une sauvegarde temporaire de notre schéma de notre base test dans un fichier sql (cadastre.sql)

pg_dump -n cadastre -vFp -f cadastre.sql test

A l'aide de psql, il est ensuite possible de renommer le schéma actuel en faisant

ALTER SCHEMA cadastre RENAME TO cadastre_2006

On réimportera alors la sauvegarde en faisant

psql -d test -f cadastre.sql

Et si on souhaite renommer le schéma, on pourra toujours effectuer la même requête que celle ci-dessus.

H.20. Comment ajouter le support PL/Perl pour PostgreSQL sous Windows?

Perl sera nécessaire pour la compilation avec PostgreSQL pour avec le support PL/Perl . Il suffit d'installer au moins la version Active Perl 5.6.X ou la 5.8.X. Téléchargez le fichier

Perl http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl

Prendre l'installeur en MSI. C'est une installation standard, indiquez comme chemin d'instalaltion c:\Perl.

Retournez dans votre répertoire des sources de PostgreSQL. Il faut modifier temporairement la variable PATH de votre ordinateur pour que MinGW adapte votre variable d'environnement à Perl. Celà servira surtout pour la commande configure de PostgreSQL:

export PATH=/c/Perl/bin:/c/Perl/lib:$PATH

Il faudra ensuite recompiler PostgreSQL en ajoutant l'option --with-perl et ensuite faire les comandes habituelles de compilation et d'installation make et make install

configure ... --with-perl
make
make install

Pendant la compilation des messages de notification ou d'erreur peuvent apparaître. N'y prenez pas garde!

H.21. Comment charger l'extension de PostgreSQL sous PHP?

Nous partons ici du principe que votre version de PHP n'a pas été compilée avec PostgreSQL. (./configure ... --with-pgsql...). Vérifiez que dans votre répertoire des extensions de php vous ayez le fichier php_pgsql.dll. Pour le charger, il suffit de remplacer depuis votre fichier php.ini la ligne ;extension = php_pgsql.dll par extension = php_pgsql.dll - enlever le ; -. Sinon si vous ne voulez pas ouvrir votre fichier et à condition bien sûr que le fichier php_pgsql.dll existe depuis votre script php:

<?php
...
if ( extension_loaded('pgsql') != 1)
{
    switch (PHP_OS)
    {
     case "WINNT": $php_suffix = ".dll";
                    break;

     default:  $php_suffix = ".so";
               break;
    }
  dl("php_pgsql".$php_suffix);
}
...
?>