]> granicus.if.org Git - postgresql/commitdiff
Add French FAQ.
authorBruce Momjian <bruce@momjian.us>
Thu, 15 Jul 2004 15:25:25 +0000 (15:25 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 15 Jul 2004 15:25:25 +0000 (15:25 +0000)
LELARGE Guillaume

doc/FAQ_french [new file with mode: 0644]
doc/src/FAQ/FAQ_french.html [new file with mode: 0644]

diff --git a/doc/FAQ_french b/doc/FAQ_french
new file mode 100644 (file)
index 0000000..9e00870
--- /dev/null
@@ -0,0 +1,1322 @@
+
+                   Foire Aux Questions (FAQ) pour PostgreSQL
+                                       
+   Dernière mise à jour : vendredi 11 juillet 2004 23:58:24
+   
+   Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
+   
+   La plus récente version de ce document est disponible sur
+   http://www.PostgreSQL.org/docs/faqs/FAQ.html.
+   
+   Les questions spécifiques à la plateforme sont répondues sur
+   http://www.PostgreSQL.org/docs/index.html.
+     _________________________________________________________________
+   
+                            Questions générales
+                                      
+   1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
+   1.2) Quelle est la licence de PostgreSQL ?
+   1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
+   1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?
+   1.5) Où puis-je me procurer PostgreSQL ?
+   1.6) Où puis-je obtenir du support ?
+   1.7) Quelle est la dernière version ?
+   1.8) Quelle documentation est disponible ?
+   1.9) Comment savoir quels sont les bogues connus ou les
+   fonctionnalités manquantes ?
+   1.10) Comment puis-je apprendre le SQL ?
+   1.11) PostgreSQL est-il compatible an 2000 ?
+   1.12) Comment puis-je rejoindre l'équipe de développement ?
+   1.13) Comment dois-je soumettre un rapport de bogue ?
+   1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ?
+   1.15) Comment puis-je aider financièrement PostgreSQL ?
+   
+                    Questions sur le client utilisateur
+                                      
+   2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ?
+   2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des
+   pages Web ?
+   2.3) PostgreSQL a-t-il une interface graphique ?
+   2.4) Quels langages sont disponibles pour communiquer avec
+   PostgreSQL ?
+   
+                         Questions administratives
+                                      
+   3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
+   3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un
+   message core dumped. Pourquoi ?
+   3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
+   Pourquoi ?
+   3.4) Quand je lance postmaster, j'obtiens des erreurs
+   IpcSemaphoreCreate. Pourquoi ?
+   3.5) Comment contrôler les connexions d'autres machines ?
+   3.6) Comment règler le moteur de la base de données pour de meilleures
+   performances ?
+   3.7) Quelles fonctionalités de déboguage sont disponibles ?
+   3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many
+   clients quand je me connecte ?
+   3.9) Que contient le répertoire pgsql_tmp ?
+   3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de
+   restaurer pour mettre a jour les versions de PostgreSQL ?
+   3.11) Quels matériels dois-je utiliser ?
+   
+                          Questions fonctionnelles
+                                      
+   4.1) Quelle est la différence entre curseur binaire et curseur
+   normal ?
+   4.2) Comment faire un SELECT seulement sur les premières lignes d'une
+   requête ? Sur une ligne aléatoire ?
+   4.3) Comment obtenir une liste des tables ou d'autres choses que je
+   vois dans psql ?
+   4.4) Comment supprime-t-on une colonne d'une table, ou comment
+   change-t-on son type de données ?
+   4.5) Quelle est la taille maximale pour une ligne, une table et une
+   base de données ?
+   4.6) Combien d'espace disque faut-il pour stocker les données d'un
+   fichier texte typique ?
+   4.7) Comment puis-je savoir quels index, tables, bases de données et
+   utilisateurs sont définis ?
+   4.8) Mes requêtes sont lentes ou ne font pas usage des index.
+   Pourquoi ?
+   4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
+   4.10) Qu'est-ce qu'un index R-tree ?
+   4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
+   4.12) Comment puis-je réaliser des recherches par des expressions
+   rationnelles ainsi que des recherches non sensibles à la casse ?
+   Comment puis-je utiliser un index lors de recherches non sensibles à
+   la casse ?
+   4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
+   4.14) Quelle sont les différences entre les nombreux types de
+   caractères ?
+   4.15.1) Comment puis-je créer un champ série, c'est-à-dire
+   s'incrémentant automatiquement ?
+   4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
+   insertion ?
+   4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
+   lorsque plusieurs utilisateurs les lancent en même temps ?
+   4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
+   d'une annulation de transaction ? Pourquoi existe-t'il des trous dans
+   la numérotation de ma colonne séquentielle (SERIAL) ?
+   4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ?
+   4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
+   4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in
+   AllocSetAlloc() ?
+   4.19) Comment puis-je connaître la version de PostgreSQL que
+   j'utilise ?
+   4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations
+   avec des gros objets ?
+   4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
+   actuelle comme valeur ?
+   4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
+   4.23) Comment puis-je réaliser une jointure externe ?
+   4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
+   données ??
+   4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir
+   d'une fonction ?
+   4.26) Why can't I reliably create/drop temporary tables in PL/PgSQL
+   functions?
+   4.27) Quelles options de replication sont disponibles ?
+   4.28) Quelles options de cryptage sont disponibles ?
+   
+                             Etendre PostgreSQL
+                                      
+   5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
+   psql, pourquoi cela finit-il avec un "dump core" ?
+   5.2) Comment puis-je contribuer avec de nouveaux types et fonctions
+   pour PostgreSQL ?
+   5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ?
+   5.4) J'ai modifié un fichier source. Pourquoi la modification
+   n'est-elle pas visible après la recompilation ?
+     _________________________________________________________________
+   
+                            Questions générales
+                                      
+    1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
+    
+   PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible
+   sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant
+   entendre la prononciation.
+   
+   PostgreSQL est une amélioration du système de gestion de bases de
+   données POSTGRES (et est toujours quelque fois appelé "Postgres"), un
+   prototype de recherche de SGBD de prochaine génération. PostgreSQL
+   garde le puissant modèle de données et les types de données riches de
+   POSTGRES, mais remplace le langage de requêtes PostQuel par un
+   sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources
+   complets sont disponibles.
+   
+   PostgreSQL est écrit par une équipe de développeurs qui sont tous
+   inscrits à la liste de diffusion de développement de PostgreSQL. Le
+   coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et
+   voir la section 1.6 pour contacter les développeurs). Cette équipe est
+   responsable de tout le développement de PostgreSQL. C'est un projet
+   soutenu par une communauté sans être contrôlé par une société. Pour y
+   contribuer, voir la FAQ des développeurs sur
+   http://www.postgresql.org/docs/faqs/FAQ_DEV.html.
+   
+   Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
+   Beaucoup d'autres personnes ont contribué au portage, aux tests, au
+   déboguage et à l'amélioration du code. Le code de Postgres original,
+   duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux
+   étudiants diplômés et non diplômés, et de programmeurs travaillant
+   sous la direction du Professeur Michael Stonebraker à l'université de
+   Californie, Berkeley.
+   
+   Le nom original du logiciel à Berkeley était Postgres. Quand le SQL
+   fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996,
+   le nom fut changé en PostgreSQL.
+   
+    1.2) Quelle est la licence de PostgreSQL ?
+    
+   PostgreSQL est distribué sous la licence suivante :
+   
+   PostgreSQL Data Base Management System
+   
+   Portions copyright (c) 1996-2004, PostgreSQL Global Development Group
+   Portions Copyright (c) 1994-6 Regents of the University of California
+   
+   Permission to use, copy, modify, and distribute this software and its
+   documentation for any purpose, without fee, and without a written
+   agreement is hereby granted, provided that the above copyright notice
+   and this paragraph and the following two paragraphs appear in all
+   copies.
+   
+   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
+   FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+   INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
+   ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
+   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+   PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+   CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+   UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+   
+   La licence ci-dessus est la licence BSD, une licence open-source
+   classique.
+   
+    1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
+    
+   En général, tout environnement compatible Unix moderne devrait pouvoir
+   faire fonctionner PostgreSQL. Les environnements qui ont été testés
+   explicitement sont listés dans les instructions d'installation.
+   
+    1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?
+    
+   Client
+   
+   Il est possible de compiler la bibliothèque C libpq, psql et d'autres
+   interfaces et applications clientes pour qu'elles tournent sous des
+   environnements MS Windows. Dans ce cas, le client tourne sous MS
+   Windows et communique par TCP/IP avec un serveur tournant sous un
+   environnement Unix supporté. Un fichier win32.mak est inclus dans la
+   distribution pour construire une bibliothèque libpq psql Win32.
+   PostgreSQL communique aussi avec des clients ODBC.
+   
+   Serveur
+   
+   Le serveur de base de données peut tourner sous Windows NT et Windows
+   2000 en utilisant Cygwin, la bibliothèque de portage Unix/NT de
+   Cygnus. Voir pgsql/doc/FAQ_MSWIN dans la distribution ou la FAQ MS
+   Windows sur http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
+   
+   Un port natif sur MS Windows NT/2000/XP est en court. Pour plus de
+   détails sur le statut actuel de PostgreSQL sur Windows, voir
+   http://techdocs.postgresql.org/guides/Windows et
+   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
+   
+   Il existe aussi un port sur Novell Netware sur
+   http://forge.novell.com.
+   
+    1.5) Où puis-je me procurer PostgreSQL ?
+    
+   Le site FTP anonyme principal de PostgreSQL est
+   ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site
+   web principal.
+   
+    1.6) Où puis-je obtenir du support ?
+    
+   La liste de diffusion principale est pgsql-general@PostgreSQL.org.
+   Elle est disponible pour discuter de sujets en rapport avec
+   PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les
+   lignes suivantes dans le corps du message (pas dans la ligne du
+   sujet) :
+    subscribe
+    end
+
+   à pgsql-general-request@PostgreSQL.org.
+   
+   Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un
+   courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le
+   corps :
+    subscribe
+    end
+
+   Les recueils sont envoyés aux membres de cette liste dès que la liste
+   principale a reçu 30 Ko de messages.
+   
+   Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
+   envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le
+   corps :
+    subscribe
+    end
+
+   Une liste de diffusion pour les développeurs est aussi disponible.
+   Pour s'y inscrire, envoyez un courriel à
+   pgsql-hackers-request@PostgreSQL.org avec dans le corps :
+    subscribe
+    end
+
+   Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur
+   le site web de PostgreSQL :
+   
+     http://www.PostgreSQL.org
+     
+   Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL.
+   Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER"
+   irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net.
+   
+   Une liste de sociétés pouvant fournir un support commercial est
+   disponible sur http://techdocs.postgresql.org/companies.php.
+   
+    1.7) Quelle est la dernière version ?
+    
+   La dernière version de PostgreSQL est la version 7.4.3.
+   
+   Nous projetons de sortir une version majeure tous les six à huit mois.
+   
+    1.8) Quelle documentation est disponible ?
+    
+   Plusieurs manuels, pages de manuel ainsi que des petits exemples de
+   test sont inclus dans la distribution. Voir le répertoire /doc. Vous
+   pouvez aussi accéder aux manuels en ligne sur
+   http://www.PostgreSQL.org/docs.
+   
+   Deux livres sur PostgreSQL sont disponibles en ligne sur
+   http://www.PostgreSQL.org/docs/awbook.html et
+   http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur
+   PostgreSQL pouvant être achetés sur
+   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi
+   une collection d'articles techniques sur PostgreSQL sur
+   http://techdocs.PostgreSQL.org/.
+   
+   psql possède des commandes \d pratiques montrant des informations sur
+   les types, opérateurs, fonctions, aggrégats, etc.
+   
+   Notre site web contient encore plus de documentations.
+   
+    1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités
+    manquantes ?
+    
+   PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre
+   liste TODO pour les bogues connus, les fonctionnalités manquantes et
+   les plans pour le futur.
+   
+    1.10) Comment puis-je apprendre le SQL ?
+    
+   Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html
+   enseigne le SQL. Il existe un autre livre PostgreSQL sur
+   http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur
+   http://www.intermedia.net/support/sql/sqltut.shtm,
+   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
+   et http://sqlcourse.com.
+   
+   Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days,
+   Second Edition" se trouve sur
+   http://members.tripod.com/er4ebus/sql/index.htm
+   
+   Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman,
+   Judith S., et al., Addison-Wesley. D'autres aiment The Complete
+   Reference SQL, Groff et al., McGraw-Hill.
+   
+    1.11) PostgreSQL est-il compatible an 2000 ?
+    
+   Oui, nous manipulons facilement les dates après et avant l'an 2000.
+   
+    1.12) Comment puis-je rejoindre l'équipe de développement ?
+    
+   Tout d'abord, téléchargez les derniers sources et lisez la
+   documentation pour les développeurs sur notre site web ou bien dans la
+   distribution. Ensuite, inscrivez-vous aux listes de diffusion
+   pgsql-hackers et pgsql-patches. Et pour finir, soumettez des
+   correctifs de grande qualité sur pgsql-patches.
+   
+   Environ une douzaine de personnes ont des droits de modification sur
+   l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de
+   correctifs de qualité qu'il était devenu impossible aux développeurs
+   de tenir la cadence et nous avions confiance dans le qualité des
+   correctifs qu'ils soumettaient.
+   
+    1.13) Comment dois-je soumettre un rapport de bogue ?
+    
+   Merci de visiter la page PostgreSQL BugTool sur
+   http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur
+   la façon de soumettre un rapport de bogue.
+   
+   De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour
+   voir s'il existe une version PostgreSQL plus récente ou des
+   correctifs.
+   
+    1.14) Comment PostgreSQL se compare-til à d'autres SGBD ?
+    
+   Il y a plusieurs manières de mesurer un logiciel : les
+   fonctionnalités, les performances, la fiabilité, le support, et le
+   prix.
+   
+   Fonctionnalités
+          PostgreSQL possède la plupart des fonctionnalités présentes
+          dans les SGBD commerciaux, comme les transactions, les requêtes
+          imbriquées, les déclencheurs, les vues, l'intégrité
+          référentielle par clés étrangères, et le verrouillage
+          sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas,
+          comme les types définis par l'utilisateur, l'héritage, les
+          règles, et le contrôle de concurrence par multi-versionnage
+          pour réduire les contentions de verrouillage.
+          
+   Performances
+          PostgreSQL a des performances similaires aux autres bases de
+          données commerciales et open source. Il est plus rapide pour
+          certaines opérations, plus lent pour d'autres. Par rapport à
+          MySQL ou d'autres SGBD plus léger, nous sommes plus rapides
+          pour de nombreux utilisateurs, des requêtes complexes et une
+          charge pour les requêtes de lecture/écriture. MySQL est plus
+          rapide pour des requêtes SELECT simples effectuées par quelques
+          utilisateurs. Bien sûr, MySQL ne possède aucune des
+          fonctionnalités de la section Fonctionnalités ci-dessus.
+          PostgreSQL est construit pour la fiabilité et les
+          fonctionnalités et nous continuons à améliorer les performances
+          à chaque version. Il y a une page web intéressante qui compare
+          PostgreSQL à MySQL sur
+          http://openacs.org/philosophy/why-not-mysql.html. De plus,
+          MySQL est une société qui distribue son produit via l'open
+          source et requiert une licence commerciale pour les logiciels
+          propriétaires, donc pas une communauté de développement open
+          source comme PostgreSQL.
+          
+   Fiabilité
+          Nous somme conscients qu'un SGBD doit être fiable ou bien il
+          est inutile. Nous faisons le maximum pour sortir des versions
+          bien testées, du code stable ne contenant qu'un minimum de
+          bogues. Chaque version a au moins un mois de tests, et notre
+          historique de versions montre que nous pouvons fournir des
+          versions stables et robustes, prêtes pour une utilisation en
+          environnement de production. Nous pensons que nous nous
+          comparons favorablement aux autres bases de données dans ce
+          domaine.
+          
+   Support
+          Nos listes de diffusion offrent un contact avec un large groupe
+          de développeurs et d'utilisateurs afin d'aider à la résolution
+          des problèmes rencontrés. Nous ne pouvons garantir un correctif
+          mais les SGBD commerciaux ne le garantissent pas toujours non
+          plus. L'accès direct aux développeurs, à la communauté
+          d'utilisateurs, aux manuels, et au code source, fait du support
+          pour PostgreSQL un support supérieur aux autres SGBD. Un
+          support commercial par incident est disponible pour ceux qui en
+          ont le besoin (voir la section 1.6 de la FAQ).
+          
+   Prix
+          Nous sommes gratuits pour tous les usages, commerciaux et non
+          commerciaux. Vous pouvez inclure notre code dans vos produits
+          sans limitation, exceptées celles citées dans notre licence de
+          type BSD donnée plus haut.
+          
+    1.15) Comment puis-je aider financièrement PostgreSQL ?
+    
+   PostgreSQL possède une infrastructure de première classe depuis le
+   début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette
+   infrastructure des années durant.
+   
+   Une infrastructure de qualité est importante pour un projet
+   open-source. Cela permet d'empêcher l'éparpillement qui ralentirait
+   beaucoup l'avancement du projet.
+   
+   Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un
+   certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre
+   société peut donner de l'argent pour soutenir cet effort, merci de
+   consulter la page web http://store.pgsql.com/shopping/ et de faire une
+   donation.
+   
+   Bien que la page web mentionne PostgreSQL, Inc, les contributions sont
+   exclusivement utilisées pour soutenir le projet PostgreSQL et ne
+   soutiennent aucune société que ce soit. Si vous le préférez, vous
+   pouvez aussi envoyer un chèque à l'adresse de contact.
+     _________________________________________________________________
+   
+   De plus, si vous avez une histoire de succès avec PostgreSQL, merci de
+   la soumettre à notre site d'évangélisation sur
+   http://advocacy.postgresql.org.
+   
+                    Questions sur le client utilisateur
+                                      
+    2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ?
+    
+   Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC.
+   
+   Vous pouvez télécharger PsqlOBDC depuis
+   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
+   
+   OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il
+   fonctionne avec leur logiciel client ODBC standard, vous aurez donc
+   PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent
+   (Win, Mac, Unix, VMS).
+   
+   Ils vendront probablement ce produit aux gens qui recherchent une
+   qualité de support professionnelle mais une version freeware sera
+   toujours disponible. Merci d'envoyer vos questions à
+   postgres95@openlink.co.uk.
+   
+    2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages
+    Web ?
+    
+   Une bonne introduction aux pages Web adossés à une base de données se
+   trouve à http://www.webreview.com
+   
+   Pour l'intégration Web, PHP est une excellente interface. Elle se
+   trouve à http://www.php.net.
+   
+   Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm
+   ou mod_perl.
+   
+    2.3) PostgreSQL a-t-il une interface graphique ?
+    
+   Oui, il y a plusieurs interfaces graphiques disponibles pour
+   PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III
+   (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
+   et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire).
+   Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une
+   interface Web pour PostgreSQL.
+   
+   Voir http://techdocs.postgresql.org/guides/GUITools pour une liste
+   plus détaillée.
+   
+    2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ?
+    
+   La plupart des langages de programmation couramment utilisés ont une
+   interface pour PostgreSQL. Vérifiez la liste des modules de votre
+   langage.
+   
+   Les interfaces ci-dessous sont incluses dans la distribution :
+     * C (libpq)
+     * Embedded C (ecpg)
+     * Java (jdbc)
+     * Python (PyGreSQL)
+     * TCL (libpgtcl)
+       
+   Interfaces supplémentaires disponibles sur http://gborg.postgresql.org
+   dans la section Drivers/Interfaces
+     _________________________________________________________________
+   
+                         Questions Administratives
+                                      
+    3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
+    
+   Il faut spécifier l'option --prefix lors du lancement de configure.
+   
+    3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message
+    core dumped . Pourquoi ?
+    
+   Cela peut être dû à une variété de problèmes mais vérifiez d'abord que
+   vous avez les extensions System V installées pour votre noyau.
+   PostgreSQL nécessite le support noyau pour la mémoire partagée et les
+   sémaphores.
+   
+    3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
+    Pourquoi ?
+    
+   Soit vous n'avez pas configuré correctement la mémoire partagée dans
+   votre noyau, soit vous devez augmenter la mémoire partagée disponible
+   dans le noyau. Le montant exact dont vous avez besoin dépend de votre
+   architecture et du nombre de tampons et de processus que vous avez
+   configuré pour postmaster. Pour la plupart des systèmes avec un nombre
+   par défaut de tampons et de processus, vous aurez besoin d'un minimum
+   d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL
+   pour des informations plus détaillées sur la mémoire partagée et les
+   sémaphores.
+   
+    3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate.
+    Pourquoi ?
+    
+   Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space
+   left on device) alors votre noyau n'est pas configuré avec
+   suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par
+   processus serveur potentiel. Une solution provisoire est de lancer
+   postmaster avec une plus petite limite sur le nombre de processus
+   serveur. Utilisez l'option -N avec un paramètre inférieur au choix par
+   défaut de 32. Une solution permanente est d'augmenter les paramètres
+   SEMMNS et SEMMNI de votre noyau.
+   
+   Des sémaphores inopérantes peuvent aussi provoquer des plantages
+   pendant de gros accès à la base de données.
+   
+   Si le message d'erreur est autre chose, vous n'avez peut-être pas du
+   tout le support des sémaphores dans votre noyau. Voir le chapitre
+   Administration du manuel PostgreSQL pour des informations plus
+   détaillées sur la mémoire partagée et les sémaphores.
+   
+    3.5) Comment contrôler les connexions d'autres machines ?
+    
+   Par défaut, PostgreSQL n'autorise que les connexions de la machine
+   locale utilisant les sockets de domaine Unix. D'autres machines ne
+   seront pas capables de se connecter sauf si vous configurez
+   tcpip_sockets dans postgresql.conf et activez l'authentification basée
+   sur l'hôte en modifiant le fichier $PGDATA/pg_hba.conf en conséquence.
+   Ceci autorisera les connexions TCP/IP.
+   
+    3.6) Comment régler le moteur de la base de données pour de meilleures
+    performances ?
+    
+   Des index accéléreront les requêtes. La commande EXPLAIN ANALYZE vous
+   permet de voir comment PostgreSQL traite votre requête et quels index
+   sont utilisés.
+   
+   Si vous faites beaucoup d'insertions (instruction INSERT), envisagez
+   de les faire en une fois en utilisant la commande COPY. Ceci est plus
+   rapide que des commandes INSERTS individuelles. Deuxièment, les
+   requêtes qui ne sont pas dans des blocs de transaction BEGIN
+   WORK/COMMIT sont considérés comme étant dans leur propre transaction.
+   Envisagez de faire plusieurs instructions dans un seul bloc de
+   transaction. Ceci réduira la surcharge apportée par les transactions.
+   Aussi, envisagez d'abandonner et de recréer des index lors de grosses
+   modifications de données.
+   
+   Il y a plusieurs options d'optimisations. Vous pouvez désactiver
+   fsync() en lançant postmaster avec l'option -o -F. Ceci empêchera les
+   fsync()s d'écrire sur disque après toute transaction.
+   
+   Vous pouvez utiliser l'option -B de postmaster pour augmenter le
+   nombre de tampons de mémoire partagée utilisés par les processus
+   serveurs. Si vous fixez ce paramètre trop haut, postmaster ne se
+   lancera pas car vous avez dépassé la limite de votre noyau sur la
+   quantité de mémoire partagée. Chaque tampon fait 8 Ko et le choix par
+   défaut est de 64 tampons.
+   
+   Vous pouvez utiliser l'option serveur -S pour augmenter la quantité
+   maximale de mémoire utilisée par les processus serveurs pour des tris
+   temporaires. La valeur de -S est mesuré en kilooctets et le choix par
+   défaut est de 512 (c'est-à-dire 512 Ko).
+   
+   Vous pouvez utiliser la commande CLUSTER pour regrouper vos données en
+   tables pour correspondre à un index. Voir la page de manual CLUSTER
+   pour plus de détails.
+   
+    3.7) Quelles fonctionalités de déboguage sont disponibles ?
+    
+   PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des
+   informations de statut qui peuvent être utile pour des intentions de
+   déboguage.
+   
+   D'abord, en lançant configure avec l'option --enable-cassert, beaucoup
+   d'assert()s surveillent le serveur et arrêtent le programme quand
+   quelque chose d'inattendu arrive.
+   
+   Postmaster et postgres ont tous deux plusieurs options de déboguage de
+   disponible. D'abord, quand vous lancez postmaster, vérifiez que vous
+   envoyez les sorties standard et d'erreur dans un fichier de traces
+   comme :
+    cd /usr/local/pgsql
+    ./bin/postmaster >server.log 2>&1 &
+
+   Ceci va créer un fichier server.log dans le répertoire racine de
+   PostgreSQL. Ce fichier contient des informations utiles sur les
+   problèmes ou erreurs rencontrés par le serveur. Postmaster dispose
+   d'une option -d qui permet de rapporter des informations encore plus
+   détaillées d'être rapportées. L'option -d prend un numéro qui spécifie
+   le niveau de déboguage. Faites attention au fait que des valeurs
+   élévées de niveau de déboguage génerent des fichiers de traces
+   volumineux.
+   
+   Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de
+   la ligne de commande et taper votre requête SQL directement. Ceci est
+   recommandé seulement pour des fonctions de déboguage. Notez qu'un
+   retour chariot termine la requête, pas un point-virgule. Si vous
+   compilez avec les symboles de déboguage, vous pouvez utiliser un
+   débogueur pour voir ce qui se passe. Parce que le serveur n'a pas été
+   lancé par postmaster, il ne tourne pas dans un environnement identique
+   et les problèmes d'interaction de verrouillage/serveur ne peuvent être
+   dupliqués.
+   
+   Si postmaster est en train de tourner, lancez psql dans une fenêtre
+   puis trouvez le PID du processus postgres utilisé par psql. Utilisez
+   un débogueur pour l'attacher au PID postgres. Vous pouvez mettre un
+   point d'arrêt dans le débogueur et envoyez des requêtes de psql. Si
+   vous déboguez le démarrage de postgres, vous pouvez mettre
+   PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le démarrage de n
+   secondes pour que vous puissiez attacher un débogueur au processus,
+   fixer des points d'arrêt et continuer la séquence de démarrage.
+   
+   Le programme postgres a les options -s, -A et -t qui peuvent être
+   utile pour des mesures de déboguage et de performance.
+   
+   Vous pouvez compiler avec les options de performance pour voir quelles
+   fonctions prennent du temps d'exécution. Les fichiers de gestion du
+   serveur seront déposés dans le répertoire pgsql/data/base/nom_db. Les
+   fichiers de gestion clients seront mis dans le répertoire actuel du
+   client. Linux requiert une compilation avec -DLINUX_PROFILE pour une
+   meilleure gestion.
+   
+    3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients
+    quand je me connecte ?
+    
+   Vous pouvez augmenter la limite de postmaster sur le nombre de
+   processus serveur concurrents qu'il peut lancer.
+   
+   La limite par défaut est de 32 processus. Vous pouvez l'augmenter en
+   relançant postmaster avec une valeur -N appropriée ou en modifiant
+   postgresql.conf.
+   
+   Tenez compte du fait que si vous fixez -N plus grand que 32, vous
+   devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; -B doit
+   valoir au moins deux fois -N et probablement plus pour une meilleure
+   performance. Pour de grand nombres de processus serveurs vous aurez
+   probablement aussi augmenter plusieurs parametres de configuration du
+   noyau Unix. Les choses a vérifier incluent la taille maximale des
+   blocs de mémoire partagée, SHMMAX ; le nombre maximal de sémaphores,
+   SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre
+   maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal
+   de fichiers ouverts, NFILE et NINODE. La raison pour laquelle
+   PostgreSQL a une limite sur le nombre de processus serveurs autorisés
+   est pour que votre système ne tombe pas à court de ressources.
+   
+    3.9) Que contient le répertoire pgsql_tmp ?
+    
+   Ce répertoire contient des fichiers temporaires générés par le moteur
+   de requête. Par exemple, si un tri doit être fait pour satisfaire un
+   ORDER BY et que ce tri requiert plus de place que le paramètre -S du
+   serveur n'autorise, alors des fichiers temporaires seront créés pour
+   contenir les données nécessaires.
+   
+   Les fichiers temporaires sont d'habitude effacés automatiquement mais
+   peuvent rester si un serveur s'arrête brutalement pendant un tri. Un
+   arrêt et un redémarrage de postmaster effacera les fichiers dans ces
+   répertoires.
+   
+    3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et
+    de restaurer pour mettre a jour les versions de PostgreSQL ?
+    
+   L'équipe PostgreSQL ne fait que des changements mineurs entre des
+   versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera
+   pas de sauvegarde et de restauration. Par contre, les sorties majeures
+   (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des
+   tables systèmes et des fichiers de données. Ces modifications sont
+   souvent complexes alors nous ne gardons pas de compatibilité
+   descendante pour les fichiers de données. Une sauvegarde exportera les
+   données dans un format générique qui peut ensuite être chargé dans le
+   nouveau format interne.
+   
+   Dans les sorties où le format sur disque ne change pas, le script
+   pg_upgrade peut être utilisé pour mettre à jour sans
+   sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade
+   est disponible pour la sortie.
+   
+    3.11) Quels matériels dois-je utiliser ?
+    
+   Comme le matériel PC est compatible en grosse partie, les gens ont
+   tendance à croire que tous les matériels PC sont de même qualité. Ce
+   n'est pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité
+   sont plus fiables et ont de meilleurs performances qu'un matériel
+   moins coûteux. PostgreSQL fonctionnera sur à peu près tout matériel
+   mais si la fiabilité et la performance sont importantes pour vous, il
+   est rusé de bien considérer les options matérielles. Nos listes de
+   diffusion peuvent être utilisées pour discuter des options matériels.
+     _________________________________________________________________
+   
+                          Questions fonctionnelles
+                                      
+    4.1) Quelle est la différence entre curseur binaire et curseur normal ?
+    
+   Voir la page DECLARE du manuel pour une description.
+   
+    4.2) Comment faire un SELECT seulement sur les premières lignes d'une
+    requête ? Sur une ligne aléatoire ?
+    
+   Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT....
+   
+   Il se peut que l'intégralité de la requête doive être évaluée, même si
+   vous voulez seulement les premières lignes. Envisagez d'utiliser une
+   requête avec une clause ORDER BY. S'il existe un index correspondant à
+   l'ORDER BY, PostgreSQL peut n'évaluer que les premières lignes, sinon
+   l'intégralité de la requête peut être évaluée, jusqu'à générer les
+   lignes désirées.
+   
+   Pour faire un SELECT sur une ligne aléatoire :
+    SELECT colonne
+    FROM table
+    ORDER BY random()
+    LIMIT 1;
+
+    4.3) Comment obtenir une liste des tables ou d'autres objets que je vois
+    dans psql ?
+    
+   Utilisez la commande \dt pour voir les tables dans psql. Pour une
+   liste complète de commandes à l'intérieur de psql, vous pouvez
+   utiliser \?. Autrement, vous pouvez lire le code source de psql dans
+   le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes
+   SQL qui génèrent le contenu des commandes anti-slash de psql. Vous
+   pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les
+   requêtes qu'il utilise pour exécuter les commandes que vous lui
+   passez. PostgreSQL fournit aussi une interface d'informations sur le
+   schéma compatible avec SQLi que vous pouvez interroger des
+   informations sur la base de données.
+   
+    4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on
+    son type de données ?
+    
+   La fonction DROP COLUMN a été ajoutée dans la version 7.3 avec ALTER
+   TABLE DROP COLUMN. Pour les versions précédentes, vous pouvez faire :
+    BEGIN;
+    LOCK TABLE ancienne_table;
+    SELECT ...  -- sélectionnez toutes les colonnes sauf celle à supprimer
+    INTO TABLE nouvelle_table
+    FROM ancienne_table;
+    DROP TABLE ancienne_table;
+    ALTER TABLE nouvelle_table RENAME TO ancienne_table;
+    COMMIT;
+
+   Pour changer le type de données d'une colonne, faites :
+    BEGIN;
+    ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees;
+    UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_d
+e_donnees);
+    ALTER TABLE table DROP COLUMN ancienne_colonne;
+    COMMIT;
+
+   Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace
+   disque utilisé par les lignes expirées.
+   
+    4.5) Quelle est la taille maximale pour une ligne, une table, une base de
+    données ?
+    
+   Les limites sont :
+    Taille maximum pour une base de données     illimitée (il existe des bases
+de 32 To)
+    Taille maximum pour une table               32 To
+    Taille maximum pour une ligne               1,6 To
+    Taille maximum pour un champ                1 Go
+    Nombre maximum de lignes dans une table     illimité
+    Nombre maximum de colonnes dans une table   250-1600, selon le type de colo
+nnes
+    Nombre maximum d'index sur une table        illimité
+
+   Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont
+   limitées par l'espace disque disponible, ainsi que par l'espace de
+   mémoire et de swap. Les performances peuvent se dégrader si ces
+   valeurs sont inhabituellement grandes.
+   
+   La taille maximum des tables (32 To) ne nécessite pas que le système
+   d'exploitation supporte les grands fichiers. Les grandes tables sont
+   stockées sous forme de fichiers multiples de 1 Go, donc les limites de
+   taille du système de fichier ne sont pas importantes.
+   
+   La taille maximum des tables et le nombre maximum de colonnes peuvent
+   être quadriplés, si la taille des blocs par défaut est augmentée à
+   32 Ko.
+   
+    4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier
+    texte typique ?
+    
+   Une base de données PostgreSQL peut utiliser jusqu'à cinq fois
+   l'espace nécessaire pour stocker les données d'un fichier texte.
+   
+   A titre d'exemple, considérez un fichier de 100 000 lignes, comportant
+   un entier et une chaîne de description sur chaque ligne. Supposons que
+   la chaîne soit longue en moyenne de 20 octets. Le fichier texte serait
+   de 2,8 Mo. La taille du fichier d'une base de données PostgreSQL peut
+   être estimée à 6,4 Mo :
+    36 octets: chaque ligne (approximation)
+    24 octets: un champ 'entier' et un champ 'texte'
+   + 4 octets: pointeur vers le tuple sur la page
+   ----------------------------------------
+    64 octets par ligne
+
+   La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), do
+nc :
+
+   8192 octets par page
+   ----------------------   = 128 lignes par page de base de données (arrondi à
+ l'entier inférieur)
+     64 octets par ligne
+
+   100000 lignes de données
+   -------------------------  =  782 pages de base de données (arrondi à l'enti
+er supérieur)
+      128 lignes par page
+
+782 pages de base de données * 8192 octets par page  =  6 406 144 octets (6,4 M
+o)
+
+   Les index utilisent moins d'espace, mais ils contiennent les données
+   indexées, ils peuvent donc également être grands.
+   
+   Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très
+   peu d'espace.
+   
+    4.7) Comment puis-je savoir quels index, tables, bases de données et
+    utilisateurs sont définis ?
+    
+   psql dispose de plusieurs commandes commençant par un anti-slash pour
+   retrouver ces informations. Utilisez \? pour les connaître. Il existe
+   aussi des tables systèmes, qui commencent par pg_ et qui les décrivent
+   également. Aussi, psql -l liste toutes les bases de données.
+   
+   Essayez également le fichier pgsql/src/tutorial/syscat.source. Il
+   illustre un grand nombre de commandes SELECT nécessaires pour
+   récupérer l'information des tables système de la base de données.
+   
+    4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ?
+    
+   Les index ne sont pas automatiquement utilisés par chaque requête. Ils
+   sont utilisés uniquement si la table est plus grande qu'une certaine
+   taille, et si la requête sélectionne seulement un faible pourcentage
+   des lignes de la table. Ceci est dû au fait qu'un accès disque
+   aléatoire causé par un parcours d'index peut être plus lent qu'une
+   simple lecture de la table, ou parcours séquentiel
+   
+   Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin
+   des statistiques de la table. Ces statistiques sont collectées en
+   lançant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques,
+   l'optimiseur sait combien de lignes se trouvent dans la table et peut
+   mieux déterminer s'il faut utiliser l'index. Les statistiques sont
+   également utiles pour déterminer l'ordre optimal des opérations de
+   jointure. La collecte des statistiques devrait être effectuée
+   régulièrement lorsque le contenu de la table change.
+   
+   Les index ne sont normalement pas utilisés pour les clauses ORDER BY
+   ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite
+   est habituellement plus rapide qu'un parcours d'index pour une table
+   importante. Toutefois, LIMIT combiné avec ORDER BY utilisera souvent
+   un index parce que seulement une petite partie de la table est
+   renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index,
+   il est possible de retrouver ces valeurs en utilisant un index avec
+   ORDER BY et LIMIT :
+    SELECT colonne
+    FROM table
+    ORDER BY colonne [ DESC ]
+    LIMIT 1;
+
+   Si vous pensez que l'optimiseur choisit par erreur un parcours
+   sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests
+   pour voir si le parcours d'index est effectivement plus rapide.
+   
+   Lorsque vous utilisez des caractères joker tels que LIKE ou ~, les
+   index peuvent seulement être utilisés dans certaines circonstances :
+     * Le début de la chaîne de recherche doit être ancré au départ de la
+       chaîne, c'est-à-dire
+          + Les modèles pour LIKE ne doivent pas commencer par %.
+          + Les modèles d'expression régulière pour ~ doivent commencer
+            par ^.
+     * La chaîne de recherche ne peut pas commencer par une classe de
+       caractères, c'est-à-dire [a-e].
+     * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les
+       index. Utilisez plutôt les index fonctionnels, décrit dans la
+       section 4.12.
+     * La locale C par défaut doit être utilisée lors de initdb.
+       
+    4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
+    
+   Voir la page EXPLAIN du manuel.
+   
+    4.10) Qu'est-ce qu'un index R-tree ?
+    
+   Un index R-tree est utilisé pour l'indexation des données spatiales.
+   Un index de hachage ne permet pas les recherches par plage. Un index
+   B-tree peut seulement faire des recherches sur une dimension. Les
+   index R-tree peuvent traiter des données multi-dimensionnelles. Par
+   exemple, si un index R-tree peut être construit sur un attribut de
+   type point, le système peut plus efficacement gérer les requêtes du
+   type "Sélection de tous les points d'un rectangle".
+   
+   L'article de référence qui décrit le système R-tree original est :
+   
+   Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
+   Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
+   Data, 45-57.
+   
+   Vous pouvez également trouver ce papier dans le livre de Stonebraker
+   "Readings in Database Systems".
+   
+   Les index R-tree intégrés peuvent prendre en charge les polygônes et
+   les boîtes. En théorie, les R-trees peuvent être étendus à un plus
+   grand nombre de dimensions. En pratique, l'extension des R-trees
+   requiert pas mal de travail et nous n'avons pour le moment aucune
+   documentation sur la façon de procéder.
+   
+    4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
+    
+   Le module GEQO (acronyme de GEnetic Query Optimizer) accélère
+   l'optimisation des requêtes lors de jointures de nombreuses tables par
+   un algorithme génétique (GA). Il permet la gestion des grosses
+   requêtes de jointures en utilisant une recherche non exhaustive.
+   
+    4.12) Comment puis-je réaliser des recherches sur des expressions
+    rationnelles ainsi que des recherches non sensibles à la casse ? Comment
+    puis-je utiliser un index lors de recherches non sensibles à la casse ?
+    
+   L'opérateur ~ réalise des recherches d'expressions rationnelles et ~*
+   le fait sans tenir compte de la casse. La variante de LIKE non
+   sensible à la casse est ILIKE.
+   
+   Des comparaisons d'égalité non sensibles à la casse sont
+   habituellement exprimées de cette façon :
+    SELECT *
+    FROM table
+    WHERE lower(colonne) = 'abc';
+
+   Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un
+   index fonctionnel, celui-ci sera utilisé :
+    CREATE INDEX tableindex ON table (lower(colonne));
+
+    4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
+    
+   Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL.
+   
+    4.14) Quelle sont les différences entre les nombreux types de caractères ?
+    
+Type            Nom interne     Notes
+--------------------------------------------------
+VARCHAR(n)      varchar         n spécifie la taille maximum, sans remplissage
+CHAR(n)         bpchar          des espaces sont ajoutés pour obtenir la
+                                longueur fixe spécifiée
+TEXT            text            pas de limite supérieure pour la taille
+BYTEA           bytea           tableau d'octets (accepte les octets nuls)
+"char"          char            un caractère
+
+   Vous verrez le nom interne en examinant les catalogues système et dans
+   quelques messages d'erreur.
+   
+   Les quatres premiers types du dessus sont des types "varlena"
+   (c'est-à-dire que les quatre premiers octets correspondent à la
+   taille, suivi des données). Donc, l'espace réellement utilisé est
+   légèrement plus grand que la taille déclarée. Néanmoins, ces types de
+   données sont aussi sujet à la compression ou à un enregistrement en
+   dehors de la table avec TOAST, donc l'espace occupé sur disque
+   pourrait aussi être moindre que ce qu'on pourrait attendre.
+   
+   VARCHAR(n) est bien mieux pour enregistrer des chaînes de longueurs
+   variables tout en limitant la taille de cette chaîne. TEXT est utile
+   pour les chaînes de longueur illimitée, avec malgré tout un maximum de
+   1 Go.
+   
+   CHAR(n) est intéressant pour stocker des chaînes de taille identique.
+   CHAR(n) complète avec des espaces pour arriver à la taille spécifiée
+   alors que VARCHAR(n) n'enregistre que les caractères donnés. BYTEA
+   sert à stocker des données binaires, particulièrement les données
+   incluant des octets NULL. Tous les types décrits ici ont des
+   performances similaires.
+   
+    4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant
+    automatiquement ?
+    
+   PostgreSQL supporte un type de données SERIAL. Il crée automatiquement
+   une séquence. Par exemple, ceci :
+    CREATE TABLE personne (
+        id  SERIAL,
+        nom TEXT
+    );
+
+   est automatiquement traduit en ceci :
+    CREATE SEQUENCE personne_id_seq;
+    CREATE TABLE personne (
+        id  INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
+        nom TEXT
+    );
+
+   Voir la page man de create_sequence pour plus d'informations sur les
+   séquences. Vous pouvez aussi utiliser le champ OID de chaque ligne
+   comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder
+   puis recharger la base de données, vous devrez utiliser l'option -o ou
+   l'option COPY WITH OIDS de pg_dump pour conserver les OIDs.
+   
+    4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
+    insertion ?
+    
+   Une approche pour récupérer la prochaine valeur SERIAL à partir de
+   l'objet séquence est d'utiliser la fonction nextval() avant
+   l'insertion et de l'insérer ensuite explicitement. En utilisant la
+   table d'exemple de la section 4.15.1, un exemple dans un
+   pseudo-langage ressemblerait à ceci :
+    nouvelle_id = execute("SELECT nextval('personne_id_seq')");
+    execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal
+')");
+
+   Vous pourriez ensuite utiliser la nouvelle valeur stockée dans
+   nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé
+   étrangère de la table personne). Notez que le nom de la SEQUENCE
+   automatiquement créée sera <table>_<colonneserial>_seq, où table et
+   colonneserial sont les noms respectifs de votre table et de votre
+   colonne SERIAL.
+   
+   Autrement, vous pouvez récupérer la valeur SERIAL affectée avec la
+   fonction currval() après qu'elle ait été insérée par défaut,
+   c'est-à-dire,
+    execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
+    nouvelle_id = execute("SELECT currval('personne_id_seq')");
+
+   Enfin, vous pouvez utiliser l'OID renvoyé par l'instruction INSERT
+   pour récupérer la valeur par défaut bien que cela soit l'appoche la
+   moins portable et la valeur de l'OID se réinitialisera aux environs de
+   quatre milliards. En Perl, avec DBI et le module DBD:Pg d'Edmund
+   Mergl, l'ancienne valeur est disponible via $sth->{pg_oid_status}
+   après un $sth->execute().
+   
+    4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
+    lorsque plusieurs utilisateurs les lancent en même temps ?
+    
+   Non. currval() renvoie la valeur actuelle affectée par votre
+   processus, et non pas par tous les utilisateurs.
+   
+    4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
+    d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la
+    numérotation de ma colonne séquentielle (SERIAL) ?
+    
+   Pour améliorer les accès concurrents, les valeurs de séquences sont
+   données aux transactions qui en ont besoin et ne sont pas bloquées
+   jusqu'à la fin de la transaction. Ceci crée des trous dans le
+   numérotage pour les transactions annulées.
+   
+    4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ?
+    
+   Les OID sont la réponse de PostgreSQL aux identifiants de lignes
+   uniques. Chaque ligne créée dans PostgreSQL obtient un OID unique.
+   Tous les OID générés pendant initdb sont inférieurs à 16384 (voir
+   include/access/transam.h). Tous les OID créés par un utilisateur sont
+   supérieurs ou égaux à ceci. Par défaut, tous ces OID sont uniques non
+   seulement dans une table ou une base mais unique à l'intérieur d'une
+   installation PostgreSQL entière.
+   
+   PostgreSQL utilise les OID dans ses tables système interne pour lier
+   les lignes entre tables. Ces OID peuvent être utilisés pour identifier
+   des lignes utilisateurs spécifiques et utilisés dans des jointures. Il
+   est recommandé que vous utilisiez le type de colonne OID pour stocker
+   des valeurs OID. Vous pouvez créer un index sur le champ OID pour un
+   accès plus rapide.
+   
+   Les OID sont attribués pour toute ligne d'un endroit central qui est
+   utilisé par toutes les bases de données. Si vous voulez changer l'OID
+   en quelque chose d'autre ou si vous voulez faire une copie de la table
+   avec les OID originaux, il n'y a pas de raisons pour ne pas le faire :
+    CREATE TABLE nouvelle_table (macolonne int);
+    SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_t
+able;
+    COPY table_temporaire FROM '/tmp/tablepg';
+    COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
+    DROP TABLE table_temporaire;
+
+   Les OID sont stockés en tant qu'entiers de quatre octets et
+   déborderont à quatre milliards. Personne n'a jamais rapporté un tel
+   cas et nous avons prévu de retirer la limite avant que cela ne se
+   produise.
+   
+   Les TIDs sont utilisés pour identifier des lignes physiques
+   spécifiques avec des valeurs de bloc et décalage. Les TID changent
+   après que les lignes aient été modifiés ou rechargés. Ils sont
+   utilisés par des entrées d'index pour pointer vers des lignes
+   physiques.
+   
+    4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
+    
+   Une partie du code source et de l'ancienne documentation utilisent des
+   termes dont l'usage est plus commun. Voici quelques exemples :
+     * table, relation, classe
+     * ligne (row), enregistrement (record), tuple
+     * colonne (column), champ (field), attribut
+     * récupère, sélectionne (select)
+     * remplace (replace), met à jour (update)
+     * ajoute (append), insère (insert)
+     * OID, valeur séquentielle (serial value)
+     * portal, curseur
+     * range variable, table name, table alias
+       
+   Une liste des termes généraux pour le domaine des bases de données est
+   disponible sur :
+   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
+   /glossary.html
+   
+    4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ?
+    
+   Vous manquez probablement de mémoire virtuelle sur votre système ou
+   votre noyau a une limite assez basse pour certaines ressources.
+   Essayez ceci avant de lancer postmaster :
+    ulimit -d 262144
+    limit datasize 256m
+
+   Suivant votre shell, seul un d'eux pourrait réussir mais cela
+   configurera d'une façon plus importante la taille du segment de
+   données de votre processus. Cette commande s'applique au processus
+   actuel et à tous les processus lancé par celui-ci. Si vous avez des
+   problèmes avec le client SQL parce que le processus serveur renvoie
+   trop de données, essayez ça avant de lancer le client.
+   
+    4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ?
+    
+   A partir de psql, tapez SELECT version();
+   
+    4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des
+    gros objects ?
+    
+   Vous avez besoin de placer BEGIN WORK et COMMIT autour de chaque
+   utilisateur de gros objets, c'est-à-dire pour entourer lo_open ...
+   lo_close.
+   
+   Actuellement, PostgreSQL force cette règle en fermant les gros objets
+   lors de la transaction. Donc, le premier essai d'opérations sur ces
+   objets, fonctionnant habituellement (au moins la plupart du temps)
+   aura un invalid large obj descriptor. Donc le code, auparavant
+   fonctionnel (au moins la plupart du temps), génèrera maintenant un
+   message d'erreur si vous n'utilisez pas de transaction.
+   
+   Si vous utilisez une interface client interface comme ODBC, vous aurez
+   peut-être besoin de lancer auto-commit off.
+   
+    4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
+    actuelle comme valeur ?
+    
+   Utilisez CURRENT_TIMESTAMP:
+CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
+
+    4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
+    
+   Dans les versions précédant la 7.4, les sous-requêtes ont été jointes
+   avec des jointures externes en parcourant séquentiellement le résultat
+   de la sous-requête pour chaque ligne de la requête externe. Si la
+   sous-requête renvoit quelques lignes et que la requête externe en
+   renvoit plein, IN sera plus rapide. Pour accélérer les autres
+   requêtes, remplacez IN avec EXISTS :
+    SELECT *
+    FROM table
+    WHERE colonne IN (SELECT souscolonne FROM soustable);
+
+   to:
+    SELECT *
+    FROM table
+    WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne
+);
+
+   Pour que ceci soit rapide, souscolonne doit être une colonne indexée.
+   
+   A partir de la version 7.4, IN utilise actuellement les mêmes
+   techniques sophistiquées de jointures comme des requêtes normales et
+   est préféré à l'utilisation de EXISTS.
+   
+    4.23) Comment puis-je réaliser une jointure externe ?
+    
+   PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
+   standard. Voici deux exemples :
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+
+   or
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 USING (col);
+
+   Ces requêtes identiques joignent t1.col à t2.col et renvoient toute
+   colonne non jointe de t1 (celles sans correspondance dans t2). Une
+   jointure droite (RIGHT join) ajoutera les lignes non jointes de t2.
+   Une jointure complète (FULL join) renverra les lignes correspondantes
+   ainsi que les lignes non jointes de t1 et t2. Le mot clé OUTER est
+   optionnelle et assumé dans le cas de jointure LEFT, RIGHT et FULL. Les
+   jointures ordinaires sont appelées des jointures INNER.
+   
+   Lors des précédentes versions, les jointures externes peuvent être
+   simulées en utilisant UNION et NOT IN. Par exemple, lors d'une
+   jointure de tab1 et tab2, la requête suivante réalise une jointure
+   externe, outer, des deux tables :
+    SELECT tab1.col1, tab2.col2
+    FROM tab1, tab2
+    WHERE tab1.col1 = tab2.col1
+    UNION ALL
+    SELECT tab1.col1, NULL
+    FROM tab1
+    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
+    ORDER BY col1
+
+    4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
+    données ?
+    
+   Il n'existe pas de moyens de lancer des requêtes sur une autre base
+   que la courante. Comme PostgreSQL charge des catalogues systèmes
+   spécifiques à la base de données, sa réaction aux requêtes inter-base
+   de données est incertaine.
+   
+   contrib/dblink permet les requêtes entre bases de données en utilisant
+   des fonctions. Bien sûr un client peut réaliser des connexions
+   simultanées à plusieurs bases de données et joindre les résultats du
+   côté client.
+   
+    4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir d'une
+    fonction?
+    
+   A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes
+   ou colonnes à partir d'une fonction,
+   http://techdocs.postgresql.org/guides/SetReturningFunctions.
+   
+    4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires dans
+    les fonctions PL/PgSQL de façon stable ?
+    
+   PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux
+   est que si une fonction PL/PgSQL accède à une table temporaire, que
+   cette table est ensuite supprimée et recréée, et que la fonction est
+   appelée de nouveau, la fonction échouera car le contenu de la fonction
+   cachée pointera toujours vers l'ancienne table temporaire. La solution
+   revient à utiliser EXECUTE pour l'accès aux tables temporaires avec
+   PL/PgSQL. Ceci obligera l'analyse de la requête à chaque fois.
+   
+    4.27) Quelles options de réplication sont disponibles ?
+    
+   Il existe plusieurs solutions de réplication maître/esclave. Elles
+   permettent uniquement au maître de réaliser des changements sur la
+   base de données alors que l'esclave peut seulement faire des lectures
+   de base de données. Le bas de la page
+   http://gborg.PostgreSQL.org/genpage?replication_research les liste.
+   Une solution de réplication multi-maître est en cours de développement
+   sur http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
+   
+    4.28) Quelles options de cryptage sont disponibles ?
+    
+     * contrib/pgcrypto contient de nombreuses fonctions de cryptage, à
+       utiliser dans des requêtes SQL.
+     * Pour crypter une transmission entre le client et le serveur, le
+       serveur doit avoir positionné l'option ssl à true dans
+       postgresql.conf, et un enregistrement applicable host ou hostssl
+       doit exister dans pg_hba.conf, et le sslmode du client ne doit pas
+       être désactivée. Notez qu'il est aussi possible d'utiliser un
+       transport crypté d'une troisième partie, tel que stunnel ou ssh,
+       plutôt que les connexions SSL natives de PostgreSQL.
+     * Les mots de passe des utilisateurs sont automatiquement cryptés
+       depuis la version 7.3. Pour les versions précédentes, vous devez
+       activer l'option PASSWORD_ENCRYPTION dans postgresql.conf.
+     * Le serveur peut fonctionner avec un système de fichiers cryptés.
+     _________________________________________________________________
+   
+                             Etendre PostgreSQL
+                                      
+    5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec psql,
+    pourquoi cela finit-il avec un dump core ?
+    
+   Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction
+   utilisateur dans un programme de test.
+   
+    5.2) Comment puis-je ajouter de bons nouveaux types ou fonctions à
+    PostgreSQL ?
+    
+   Envoyez vos extensions à la liste de diffusion pgsql-hackers, elles
+   atterriront éventuellement dans le sous-répertoire contrib/.
+   
+    5.3) Comment faire pour écrire une fonction C qui renvoie un tuple ?
+    
+   Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui
+   renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL.
+   Voir le Guide du Programmeur pour plus d'information. Un exemple de
+   fonction renvoyant une table définie en C se trouve à
+   contrib/tablefunc.
+   
+    5.4) J'ai modifié un fichier source. Pourquoi ma recompilation ne voit-elle
+    pas les modifications ?
+    
+   Les Makefiles n'ont pas les dépendances adéquates pour les fichiers
+   d'en-tête. Il vous faut faire make clean puis un autre make. Si vous
+   utilisez GCC, vous pouvez utiliser l'option --enable-depend de
+   configure pour que le compilateur calcule les dépendances
+   automatiquement.
diff --git a/doc/src/FAQ/FAQ_french.html b/doc/src/FAQ/FAQ_french.html
new file mode 100644 (file)
index 0000000..f3b9722
--- /dev/null
@@ -0,0 +1,1498 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+  <HEAD>
+    <META name="generator" content="HTML Tidy, see www.w3.org">
+    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <TITLE>PostgreSQL FAQ</TITLE>
+  </HEAD>
+
+  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
+  alink="#0000ff">
+    <H1>Foire Aux Questions (FAQ) pour PostgreSQL</H1>
+
+    <P>Dernière mise à jour&nbsp;: vendredi 11 juillet 2004 23:58:24</P>
+
+    <P>Mainteneur actuel&nbsp;: Bruce Momjian (<A href=
+    "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
+    </P>
+
+    <P>La plus récente version de ce document est disponible sur <A
+    href=
+    "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>
+
+    <P>Les questions spécifiques à la plateforme sont répondues sur <A href=
+    "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
+    <HR>
+
+    <H2 align="center">Questions générales</H2>
+    <A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL&nbsp;? Comment le prononcer&nbsp;?<BR>
+     <A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL&nbsp;?<BR>
+     <A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il&nbsp;?<BR>
+     <A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il&nbsp;?<BR>
+     <A href="#1.5">1.5</A>) Où puis-je me procurer PostgreSQL&nbsp;?<BR>
+     <A href="#1.6">1.6</A>) Où puis-je obtenir du support&nbsp;?<BR>
+     <A href="#1.7">1.7</A>) Quelle est la dernière version&nbsp;?<BR>
+     <A href="#1.8">1.8</A>) Quelle documentation est disponible&nbsp;?<BR>
+     <A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes&nbsp;?<BR>
+     <A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL>&nbsp;?<BR>
+     <A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000&nbsp;?<BR>
+     <A href="#1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement&nbsp;?<BR>
+     <A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de
+    bogue&nbsp;?<BR>
+     <A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il à d'autres
+    <SMALL>SGBD</SMALL>&nbsp;?<BR>
+     <A href="#1.15">1.15</A>) Comment puis-je aider financièrement PostgreSQL&nbsp;?<BR>
+     
+
+    <H2 align="center">Questions sur le client utilisateur</H2>
+    <A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour
+    PostgreSQL&nbsp;?<BR>
+    <A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser
+    PostgreSQL avec des pages Web&nbsp;?<BR>
+    <A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique&nbsp;?<BR>
+    <A href="#2.4">2.4</A>) Quels langages sont disponibles pour
+    communiquer avec PostgreSQL&nbsp;?<BR>
+
+
+    <H2 align="center">Questions administratives</H2>
+    <A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I>&nbsp;?<BR>
+    <A href="#3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <I>core dumped</I>. Pourquoi&nbsp;?<BR>
+    <A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi&nbsp;?<BR>
+    <A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi&nbsp;?<BR>
+    <A href="#3.5">3.5</A>) Comment contrôler les connexions d'autres machines&nbsp;?<BR>
+    <A href="#3.6">3.6</A>) Comment règler le moteur de la base de données pour de meilleures performances&nbsp;?<BR>
+    <A href="#3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles&nbsp;?<BR>
+    <A href="#3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte&nbsp;?<BR>
+    <A href="#3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I>&nbsp;?<BR>
+    <A href="#3.10">3.10</A>) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL&nbsp;?<BR>
+    <A href="#3.11">3.11</A>) Quels matériels dois-je utiliser&nbsp;?<BR>
+
+
+    <H2 align="center">Questions fonctionnelles</H2>
+    <A href="#4.1">4.1</A>) Quelle est la différence entre curseur binaire
+    et curseur normal&nbsp;?<BR>
+    <A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
+     sur les premières lignes d'une requête&nbsp;?  Sur une ligne aléatoire&nbsp;?<BR>
+    <A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou
+     d'autres choses que je vois dans <I>psql</I>&nbsp;?<BR>
+     <A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
+     ou comment change-t-on son type de données&nbsp;?<BR>
+     <A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
+     une table et une base de données&nbsp;?<BR>
+     <A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
+     les données d'un fichier texte typique&nbsp;?<BR>
+     <A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables,
+     bases de données et utilisateurs sont définis&nbsp;?<BR>
+     <A href="#4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage
+     des index. Pourquoi&nbsp;?<BR>
+     <A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue
+     mes requêtes&nbsp;?<BR>
+     <A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree&nbsp;?<BR>
+     <A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de
+    requêtes&nbsp;?<BR>
+     <A href="#4.12">4.12</A>) Comment puis-je réaliser des recherches par des
+    expressions rationnelles ainsi que des recherches non sensibles à la
+    casse&nbsp;? Comment puis-je utiliser un index lors de recherches non
+    sensibles à la casse&nbsp;?<BR>
+     <A href="#4.13">4.13</A>) Comment puis-je détecter si un champ est
+    <SMALL>NULL</SMALL> dans une requête&nbsp;?<BR>
+     <A href="#4.14">4.14</A>) Quelle sont les différences entre les nombreux
+    types de caractères&nbsp;?<BR>
+     <A href="#4.15.1">4.15.1</A>) Comment puis-je créer un champ série,
+    c'est-à-dire s'incrémentant automatiquement&nbsp;?<BR>
+     <A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
+    <SMALL>SERIAL</SMALL> suite à une insertion&nbsp;?<BR>
+     <A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
+     <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs
+     les lancent en même temps&nbsp;?<BR>
+     <A href="#4.15.4">4.15.4</A>) Pourquoi mes numéros de séquences ne sont pas
+     ré-utilisés lors d'une annulation de transaction&nbsp;? Pourquoi
+     existe-t'il des trous dans la numérotation de ma colonne séquentielle
+     (SERIAL)&nbsp;?<BR>
+     <A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL>&nbsp;?<BR>
+     <A href="#4.17">4.17</A>) A quoi correspond certains termes utilisés avec
+    PostgreSQL&nbsp;?<BR>
+     <A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
+    Memory exhausted in AllocSetAlloc()</I>&nbsp;?<BR>
+     <A href="#4.19">4.19</A>) Comment puis-je connaître la version de
+    PostgreSQL que j'utilise&nbsp;?<BR>
+     <A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
+    descriptor</I> lors d'opérations avec des gros objets&nbsp;?<BR>
+     <A href="#4.21">4.21</A>) Comment puis-je créer une colonne qui aura par
+    défaut l'heure actuelle comme valeur&nbsp;?<BR>
+     <A href="#4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant
+    <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes&nbsp;?<BR>
+     <A href="#4.23">4.23</A>) Comment puis-je réaliser une jointure
+    externe&nbsp;?<BR>
+     <A href="#4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant
+    plusieurs bases de données&nbsp;??<BR>
+     <A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
+    colonnes à partir d'une fonction&nbsp;?<BR>
+     <A href="#4.26">4.26</A>) Why can't I reliably create/drop
+    temporary tables in PL/PgSQL functions?<BR>
+     <A href="#4.27">4.27</A>) Quelles options de replication sont
+    disponibles&nbsp;?<BR>
+     <A href="#4.28">4.28</A>) Quelles options de cryptage sont
+    disponibles&nbsp;?<BR>
+     
+    <H2 align="center">Etendre PostgreSQL</H2>
+    <A href="#5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
+    <I>psql</I>, pourquoi cela finit-il avec un "dump core"&nbsp;?<BR>
+     <A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions
+    pour PostgreSQL&nbsp;?<BR>
+     <A href="#5.3">5.3</A>) Comment puis-je écrire une fonction C pour récupérer une
+    ligne&nbsp;?<BR>
+     <A href="#5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi la modification
+      n'est-elle pas visible après la recompilation&nbsp;?<BR>
+     
+    <HR>
+
+    <H2 align="center">Questions générales</H2>
+
+    <H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL&nbsp;? Comment
+    le prononcer&nbsp;?</H4>
+
+    <P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est
+    disponible sur <A
+    HREF="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A>
+    pour ceux souhaitant entendre la prononciation.</P>
+
+    <P>PostgreSQL est une amélioration du système de gestion de bases
+    de données POSTGRES (et est toujours quelque fois appelé "Postgres"),
+    un prototype de recherche de
+    <SMALL>SGBD</SMALL> de prochaine génération. PostgreSQL garde le
+    puissant modèle de données et les types de données riches de
+    POSTGRES, mais remplace le langage de requêtes PostQuel par un
+    sous-ensemble étendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit
+    et les sources complets sont disponibles.</P>
+
+    <P> PostgreSQL est écrit par une équipe de développeurs qui sont
+    tous inscrits à la liste de diffusion de développement de
+    PostgreSQL. Le coordinateur actuel est Marc G. Fournier (<A href=
+    "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> et voir
+    la section <a href="#1.6">1.6</a> pour contacter les
+    développeurs). Cette équipe est responsable de tout le
+    développement de PostgreSQL. C'est un projet soutenu par une
+    communauté sans être contrôlé par une société. Pour y contribuer,
+    voir la FAQ des développeurs sur <A
+    HREF="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P>
+
+    <P>Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
+    Beaucoup d'autres personnes ont contribué au portage, aux tests,
+    au déboguage et à l'amélioration du code. Le code de Postgres
+    original, duquel PostgreSQL est dérivé, était le fruit de
+    l'effort de nombreux étudiants diplômés et non diplômés, et de
+    programmeurs travaillant sous la direction du Professeur Michael
+    Stonebraker à l'université de Californie, Berkeley.</P>
+
+    <P>Le nom original du logiciel à Berkeley était Postgres. Quand le
+    <SMALL>SQL</SMALL> fut ajouté en 1995, le nom a dû être changé en
+    Postgres95. Fin 1996, le nom fut changé en PostgreSQL.</P>
+
+    <H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL&nbsp;?</H4>
+
+    <P>PostgreSQL est distribué sous la licence suivante&nbsp;:</P>
+
+    <P>PostgreSQL Data Base Management System</P>
+
+    <P>Portions copyright (c) 1996-2004, PostgreSQL Global Development
+    Group Portions Copyright (c) 1994-6 Regents of the University of
+    California</P>
+
+    <P>Permission to use, copy, modify, and distribute this software
+    and its documentation for any purpose, without fee, and without a
+    written agreement is hereby granted, provided that the above
+    copyright notice and this paragraph and the following two
+    paragraphs appear in all copies.</P>
+
+    <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
+    PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+    DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
+    SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+    CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
+
+    <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+    SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
+    UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
+    SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
+
+    <P>La licence ci-dessus est la licence BSD, une licence open-source
+    classique.</P>
+
+    <H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il&nbsp;?</H4>
+
+    <P>En général, tout environnement compatible Unix moderne devrait
+    pouvoir faire fonctionner PostgreSQL. Les environnements qui ont été
+    testés explicitement sont listés dans les instructions
+    d'installation.</P>
+
+    <H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il&nbsp;?</H4>
+
+    <P><STRONG>Client</STRONG></P>
+
+    <P>Il est possible de compiler la bibliothèque C <I>libpq</I>,
+    psql et d'autres interfaces et applications clientes pour
+    qu'elles tournent sous des environnements MS Windows. Dans ce cas,
+    le client tourne sous MS Windows et communique par TCP/IP avec un
+    serveur tournant sous un environnement Unix supporté. Un fichier
+    <I>win32.mak</I> est inclus dans la distribution pour construire
+    une bibliothèque <I>libpq</I> <I>psql</I> Win32. PostgreSQL
+    communique aussi avec des clients <SMALL>ODBC</SMALL>.</P>
+
+    <P><STRONG>Serveur</STRONG></P>
+
+    <P>Le serveur de base de données peut tourner sous Windows NT et
+    Windows 2000 en utilisant Cygwin, la bibliothèque de portage
+    Unix/NT de Cygnus. Voir
+    <I>pgsql/doc/FAQ_MSWIN</I> dans la distribution ou la FAQ MS
+    Windows sur <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">
+    http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
+
+    <p>Un port natif sur MS Windows NT/2000/XP est en court. Pour plus de
+    détails sur le statut actuel de PostgreSQL sur Windows, voir
+    <a href="http://techdocs.postgresql.org/guides/Windows">
+    http://techdocs.postgresql.org/guides/Windows</a> et
+    <a href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
+    http://momjian.postgresql.org/main/writings/pgsql/win32.html</a>.</p>
+
+    <p>Il existe aussi un port sur Novell Netware sur
+    <a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
+
+    <H4><A name="1.5">1.5</A>) Où puis-je me procurer PostgreSQL&nbsp;?</H4>
+
+    <P>Le site FTP anonyme principal de PostgreSQL est <A href=
+    "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
+    Pour les sites miroirs, voir notre site web principal.</P>
+
+    <H4><A name="1.6">1.6</A>) Où puis-je obtenir du support&nbsp;?</H4>
+
+    <P>La liste de diffusion principale est <A href=
+    "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
+    Elle est disponible pour discuter de sujets en rapport avec
+    PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec
+    les lignes suivantes dans le corps du message (pas dans la ligne
+    du sujet)&nbsp;:</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    <P>à <A href=
+    "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
+
+    <P>Il existe aussi un recueil de la liste. Pour s'y inscrire,
+    envoyez un courriel à <A href=
+    "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
+    avec dans le corps&nbsp;:</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    Les recueils sont envoyés aux membres de cette liste dès que la
+    liste principale a reçu 30&nbsp;Ko de messages. 
+
+    <P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
+    envoyer un courriel à <A href=
+    "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
+      avec dans le corps&nbsp;:</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    Une liste de diffusion pour les développeurs est aussi disponible. Pour s'y
+    inscrire, envoyez un courriel à <A href=
+    "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
+    avec dans le corps&nbsp;: 
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    <P>Vous pouvez trouver d'autres listes et informations sur
+    PostgreSQL sur le site web de PostgreSQL&nbsp;:</P>
+
+    <BLOCKQUOTE>
+      <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
+    </BLOCKQUOTE>
+
+    <P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal
+    <I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix
+    <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou
+    <CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P>
+
+    <P>Une liste de sociétés pouvant fournir un support commercial
+    est disponible sur <A href=
+    "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
+
+    <H4><A name="1.7">1.7</A>) Quelle est la dernière version&nbsp;?</H4>
+
+    <P>La dernière version de PostgreSQL est la version 7.4.3.</P>
+
+    <P>Nous projetons de sortir une version majeure tous les six à huit
+    mois.</P>
+
+    <H4><A name="1.8">1.8</A>) Quelle documentation est disponible&nbsp;?</H4>
+
+    <P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de
+    test sont inclus dans la distribution. Voir le répertoire
+    <I>/doc</I>. Vous pouvez aussi accéder aux manuels en ligne sur <A href=
+    "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
+
+    <P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href=
+    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
+    et <A href=
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
+    Il y a une liste de livres sur PostgreSQL pouvant être achetés sur <A
+    href=
+    "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
+    Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A
+    href=
+    "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
+
+    <P><I>psql</I> possède des commandes \d pratiques montrant des
+    informations sur les types, opérateurs, fonctions, aggrégats, etc.</P>
+
+    <P>Notre site web contient encore plus de documentations.</P>
+
+    <H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes&nbsp;?</H4>
+
+    <P>PostgreSQL supporte un sous-ensemble étendu de <SMALL>SQL</SMALL>-92.
+    Voir notre liste <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
+    pour les bogues connus, les fonctionnalités manquantes et les
+    plans pour le futur.</P>
+
+    <H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL>&nbsp;?</H4>
+
+    <P>Le livre PostgreSQL sur <A href=
+    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
+    enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A
+    href=
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
+    Il existe de bons tutoriels sur <A href=
+    "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
+    <A href=
+    "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
+    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A>
+    et <A href=
+    "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
+
+    <P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition"
+    se trouve sur <A href=
+    "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
+
+    <P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>,
+    Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The
+    Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
+
+    <H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000&nbsp;?</H4>
+
+    <P>Oui, nous manipulons facilement les dates après et avant l'an 2000.</P>
+
+    <H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement&nbsp;?</H4>
+
+    <P>Tout d'abord, téléchargez les derniers sources et lisez la
+    documentation pour les développeurs sur notre site web ou bien
+    dans la distribution. Ensuite, inscrivez-vous aux listes de
+    diffusion <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir,
+    soumettez des correctifs de grande qualité sur <i>pgsql-patches</i>.</P>
+
+    <P>Environ une douzaine de personnes ont des droits de modification
+    sur l'archive <SMALL>CVS</SMALL> de PostgreSQL. Ils ont chacun
+    soumis tellement de correctifs de qualité qu'il était devenu
+    impossible aux développeurs de tenir la cadence et nous avions
+    confiance dans le qualité des correctifs qu'ils soumettaient.</P>
+
+    <H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de
+    bogue&nbsp;?</H4>
+
+    <P>Merci de visiter la page PostgreSQL BugTool sur <A href=
+    "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
+    qui donne des indications sur la façon de soumettre un rapport de bogue.</P>
+
+    <P>De même, vérifiez notre site ftp <A href=
+    "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour
+    voir s'il existe une version PostgreSQL plus récente ou des
+    correctifs.</P>
+
+    <H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til à
+      d'autres <SMALL>SGBD</SMALL>&nbsp;?</H4>
+
+    <P>Il y a plusieurs manières de mesurer un logiciel&nbsp;: les fonctionnalités,
+    les performances, la fiabilité, le support, et le prix.</P>
+
+    <DL>
+      <DT><B>Fonctionnalités</B></DT>
+
+      <DD>PostgreSQL possède la plupart des fonctionnalités présentes
+      dans les <SMALL>SGBD</SMALL> commerciaux, comme les
+      transactions, les requêtes imbriquées, les déclencheurs,
+      les vues, l'intégrité référentielle par clés étrangères, et le
+      verrouillage sophistiqué. Nous avons des fonctionnalités qu'ils
+      n'ont pas, comme les types définis par l'utilisateur,
+      l'héritage, les règles, et le contrôle de concurrence par
+      multi-versionnage pour réduire les contentions de verrouillage.<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Performances</B></DT>
+
+      <DD>PostgreSQL a des performances similaires aux autres bases de
+      données commerciales et open source. Il est plus rapide pour
+      certaines opérations, plus lent pour d'autres. Par rapport à
+      MySQL ou d'autres <SMALL>SGBD</small> plus léger, nous sommes
+      plus rapides pour de nombreux utilisateurs, des requêtes complexes et
+      une charge pour les requêtes de lecture/écriture. MySQL est plus rapide
+      pour des requêtes SELECT simples effectuées par quelques utilisateurs.
+      Bien sûr, MySQL ne possède aucune des fonctionnalités de la section
+      <I>Fonctionnalités</I> ci-dessus. PostgreSQL est construit pour la
+      fiabilité et les fonctionnalités et nous continuons à améliorer les
+      performances à chaque version. Il y a une page web intéressante
+      qui compare PostgreSQL à MySQL sur <A
+      href="http://openacs.org/philosophy/why-not-mysql.html">
+      http://openacs.org/philosophy/why-not-mysql.html</A>. De plus, MySQL
+      est une société qui distribue son produit via l'open source et requiert
+      une licence commerciale pour les logiciels propriétaires, donc pas une
+      communauté de développement open source comme PostgreSQL.<BR>
+
+      <BR>
+      </DD>
+
+      <DT><B>Fiabilité</B></DT>
+
+      <DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit être
+      fiable ou bien il est inutile. Nous faisons le maximum pour
+      sortir des versions bien testées, du code stable ne contenant qu'un
+      minimum de bogues. Chaque version a au moins un mois de tests,
+      et notre historique de versions montre que nous pouvons
+      fournir des versions stables et robustes, prêtes pour une
+      utilisation en environnement de production. Nous pensons que
+      nous nous comparons favorablement aux autres bases de données
+      dans ce domaine.<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Support</B></DT>
+
+      <DD>Nos listes de diffusion offrent un contact avec un large
+       groupe de développeurs et d'utilisateurs afin d'aider à la
+       résolution des problèmes rencontrés. Nous ne pouvons garantir
+       un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le
+       garantissent pas toujours non plus. L'accès direct aux
+       développeurs, à la communauté d'utilisateurs, aux manuels, et
+       au code source, fait du support pour PostgreSQL un support
+       supérieur aux autres <SMALL>SGBD</SMALL>. Un support commercial par
+       incident est disponible pour ceux qui en ont le besoin (voir
+       la <A
+       href="#1.6">section 1.6 de la FAQ</A>).<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Prix</B></DT>
+
+      <DD>Nous sommes gratuits pour tous les usages, commerciaux et
+       non commerciaux. Vous pouvez inclure notre code dans vos
+       produits sans limitation, exceptées celles citées dans notre
+       licence de type BSD donnée plus haut.<BR>
+      <BR>
+      </DD>
+    </DL>
+
+    <H4><A name="1.15">1.15</A>) Comment puis-je aider financièrement
+      PostgreSQL&nbsp;?</H4>
+
+    <P>PostgreSQL possède une infrastructure de première classe depuis
+    le début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré
+    cette infrastructure des années durant.</P>
+
+    <P>Une infrastructure de qualité est importante pour un projet
+    open-source. Cela permet d'empêcher l'éparpillement qui ralentirait
+    beaucoup l'avancement du projet.</P>
+
+    <P>Bien sûr, cette infrastructure n'est pas donnée. Elle requiert
+    un certain nombre de dépenses mensuelles ou ponctuelles. Si vous
+    ou votre société peut donner de l'argent pour soutenir cet effort,
+    merci de consulter la page web <A
+    href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>
+    et de faire une donation.</P>
+
+    <P>Bien que la page web mentionne PostgreSQL, Inc, les
+    contributions sont exclusivement utilisées pour soutenir le
+    projet PostgreSQL et ne soutiennent aucune société que ce soit. Si
+    vous le préférez, vous pouvez  aussi envoyer un chèque à l'adresse
+    de contact.</P>
+    <HR>
+
+    <P>De plus, si vous avez une histoire de succès avec PostgreSQL,
+    merci de la soumettre à notre site d'évangélisation sur <a
+    href="http://advocacy.postgresql.org">
+    http://advocacy.postgresql.org</a>.</P>
+
+
+
+    <H2 align="center">Questions sur le client utilisateur</H2>
+
+    <H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour
+    PostgreSQL&nbsp;?</H4>
+
+    <P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC
+    et OpenLink <SMALL>ODBC</SMALL>.</P>
+
+    <P>Vous pouvez télécharger PsqlOBDC depuis <A href=
+    "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
+    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
+
+    <P>OpenLink <SMALL>ODBC</SMALL> peut être obtenu depuis <A href=
+    "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne
+    avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez
+    donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes 
+    client qu'ils supportent (Win, Mac, Unix, VMS).</P>
+
+    <P>Ils vendront probablement ce produit aux gens qui recherchent 
+    une qualité de support professionnelle mais une version freeware sera
+    toujours disponible. Merci d'envoyer vos questions à <A href=
+    "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
+
+    <H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser 
+    PostgreSQL avec des pages Web&nbsp;?</H4>
+
+    <P>Une bonne introduction aux pages Web adossés à une base de données se
+    trouve à <A href="http://www.webreview.com">http://www.webreview.com</A></P>
+
+    <P>Pour l'intégration Web, PHP est une excellente interface. Elle se trouve à <A
+    href="http://www.php.net">http://www.php.net</A>.</P>
+
+    <P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P>
+
+    <H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique&nbsp;?</H4>
+
+    <P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL,
+    dont PgAccess <a href="http://www.pgaccess.org">
+    http://www.pgaccess.org</a>), PgAdmin III (<a
+    href="http://www.pgadmin.org">http://www.pgadmin.org</a>),
+    RHDB Admin (<a
+    href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
+    </a> et Rekall (<a href="http://www.thekompany.com/products/rekall/">
+    http://www.thekompany.com/products/rekall/</a>, propriétaire). Il y a
+    aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
+    http://phppgadmin.sourceforge.net/ </a>), une interface Web pour
+    PostgreSQL.</P>
+
+    <P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus détaillée.</P>
+
+    <H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour
+    communiquer avec PostgreSQL&nbsp;?</H4>
+
+    <P>La plupart des langages de programmation couramment utilisés ont
+    une interface pour PostgreSQL. Vérifiez la liste des modules de votre
+    langage.</P>
+
+    <P>Les interfaces ci-dessous sont incluses dans la distribution&nbsp;:</P>
+
+    <UL>
+      <LI>C (libpq)</LI>
+
+      <LI>Embedded C (ecpg)</LI>
+
+      <LI>Java (jdbc)</LI>
+
+      <LI>Python (PyGreSQL)</LI>
+
+      <LI>TCL (libpgtcl)</LI>
+
+    </UL>
+    <P>Interfaces supplémentaires disponibles sur
+    <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
+    dans la section <I>Drivers/Interfaces</I> 
+    </P>
+    <HR>
+
+    <H2 align="center">Questions Administratives</H2>
+
+    <H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I>&nbsp;?</H4>
+
+    <P>Il faut spécifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P>
+
+    <H4><A name="3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <i>core dumped</i> . Pourquoi&nbsp;?</H4>
+
+    <P>Cela peut être dû à une variété de problèmes mais vérifiez d'abord que
+    vous avez les extensions System V installées pour votre noyau. PostgreSQL
+    nécessite le support noyau pour la mémoire partagée et les sémaphores.</P>
+
+    <H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi&nbsp;?</H4>
+
+    <P>Soit vous n'avez pas configuré correctement la mémoire partagée dans
+    votre noyau, soit vous devez augmenter la mémoire partagée disponible dans
+    le noyau. Le montant exact dont vous avez besoin dépend de votre
+    architecture et du nombre de tampons et de processus que vous avez
+    configuré pour <I>postmaster</I>. Pour la plupart des systèmes avec un
+    nombre par défaut de tampons et de processus, vous aurez besoin d'un minimum
+    d'environ 1&nbsp;Mo. Voir le chapitre <A href=
+    "http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">Administration
+    du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P>
+
+    <H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi&nbsp;?</H4>
+
+    <P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No
+    space left on device)</I> alors votre noyau n'est pas configuré avec
+    suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par processus
+    serveur potentiel. Une solution provisoire est de lancer <I>postmaster</I>
+    avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option
+    <I>-N</I> avec un paramètre inférieur au choix par défaut de 32. Une
+    solution permanente est d'augmenter les paramètres 
+    <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P>
+
+    <P>Des sémaphores inopérantes peuvent aussi provoquer des plantages pendant de gros accès à la base de données.</P>
+
+    <P>Si le message d'erreur est autre chose, vous n'avez peut-être pas du tout le support des
+    sémaphores dans votre noyau. Voir le 
+    chapitre <A href=
+    "http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">Administration
+    du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P>
+
+    <H4><A name="3.5">3.5</A>) Comment contrôler les connexions d'autres machines&nbsp;?</H4>
+
+    <P>Par défaut, PostgreSQL n'autorise que les connexions de la machine locale
+    utilisant les sockets de domaine Unix. D'autres machines ne seront pas
+    capables de se connecter sauf si vous configurez tcpip_sockets dans <I>postgresql.conf</I>
+    <B>et</B> activez l'authentification basée sur l'hôte en modifiant le fichier 
+    <I>$PGDATA/pg_hba.conf</I> en conséquence. Ceci autorisera les connexions TCP/IP.</P>
+
+    <H4><A name="3.6">3.6</A>) Comment régler le moteur de la base de données pour de meilleures performances&nbsp;?</H4>
+
+    <P>Des index accéléreront les requêtes. La commande 
+    <SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite
+    votre requête et quels index sont utilisés.</P>
+
+    <P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>),
+    envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci
+    est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxièment,
+    les requêtes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL>
+    sont considérés comme étant dans leur propre transaction. Envisagez de faire
+    plusieurs instructions dans un seul bloc de transaction. Ceci réduira la
+    surcharge apportée par les transactions. Aussi, envisagez d'abandonner et
+    de recréer des index lors de grosses modifications de données.</P>
+
+    <P>Il y a plusieurs options d'optimisations. Vous pouvez désactiver
+    <I>fsync()</I> en lançant <I>postmaster</I> avec l'option <I>-o -F</I>.
+    Ceci empêchera les <I>fsync()</I>s d'écrire sur disque après toute
+    transaction.</P>
+
+    <P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour
+    augmenter le nombre de tampons de mémoire partagée utilisés par les
+    processus serveurs. Si vous fixez ce paramètre trop haut,
+    <I>postmaster</I> ne se lancera pas car vous avez dépassé la limite de
+    votre noyau sur la quantité de mémoire partagée. Chaque tampon fait 8&nbsp;Ko et
+    le choix par défaut est de 64 tampons.</P>
+
+    <P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la
+    quantité maximale de mémoire utilisée par les processus serveurs pour des
+    tris temporaires. La valeur de <I>-S</I> est mesuré en kilooctets et le
+    choix par défaut est de 512 (c'est-à-dire 512&nbsp;Ko).</P>
+
+    <P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper
+    vos données en tables pour correspondre à un index. Voir la page de manual
+    <SMALL>CLUSTER</SMALL> pour plus de détails.</P>
+
+    <H4><A name="3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles&nbsp;?</H4>
+
+    <P>PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des
+    informations de statut qui peuvent être utile pour des intentions de
+    déboguage.</P>
+
+    <P>D'abord, en lançant <I>configure</I> avec l'option --enable-cassert,
+    beaucoup d'<I>assert()</I>s surveillent le serveur et arrêtent le programme 
+    quand quelque chose d'inattendu arrive.</P>
+
+    <P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de
+    déboguage de disponible. D'abord, quand vous lancez <I>postmaster</I>,
+    vérifiez que vous envoyez les sorties standard et d'erreur dans un fichier
+    de traces comme&nbsp;:</P>
+<PRE>
+    cd /usr/local/pgsql
+    ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
+</PRE>
+
+    <P>Ceci va créer un fichier server.log dans le répertoire racine de
+    PostgreSQL. Ce fichier contient des informations utiles sur les problèmes
+    ou erreurs rencontrés par le serveur. <I>Postmaster</I> dispose d'une
+    option <I>-d</I> qui permet de rapporter des informations encore plus
+    détaillées d'être rapportées. L'option <I>-d</I> prend un numéro qui
+    spécifie le niveau de déboguage. Faites attention au fait que des valeurs
+    élévées de niveau de déboguage génerent des fichiers de traces volumineux.</P>
+
+    <P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur
+    <I>postgres</I> de la ligne de commande et taper votre requête
+    <SMALL>SQL</SMALL> directement. Ceci est recommandé <B>seulement</B> pour
+    des fonctions de déboguage. Notez qu'un retour chariot termine la requête,
+    pas un point-virgule. Si vous compilez avec les symboles de déboguage, vous
+    pouvez utiliser un débogueur pour voir ce qui se passe. Parce que le serveur
+    n'a pas été lancé par <I>postmaster</I>, il ne tourne pas dans un environnement
+    identique et les problèmes d'interaction de verrouillage/serveur ne peuvent
+    être dupliqués.</P>
+
+    <P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans
+    une fenêtre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I>
+    utilisé par <I>psql</I>. Utilisez un débogueur pour l'attacher au
+    <SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arrêt
+    dans le débogueur et envoyez des requêtes de <I>psql</I>. Si vous déboguez
+    le démarrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis
+    lancez <I>psql</I>. Ceci va retarder le démarrage de <I>n</I> secondes
+    pour que vous puissiez attacher un débogueur au processus, fixer des points
+    d'arrêt et continuer la séquence de démarrage.</P>
+
+    <P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I>
+    qui peuvent être utile pour des mesures de déboguage et de performance.</P>
+
+    <P>Vous pouvez compiler avec les options de performance pour voir quelles
+    fonctions prennent du temps d'exécution. Les fichiers de gestion du serveur
+    seront déposés dans le répertoire <I>pgsql/data/base/nom_db</I>. Les
+    fichiers de gestion clients seront mis dans le répertoire actuel du client.
+    Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une
+    meilleure gestion.</P>
+
+    <H4><A name="3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte&nbsp;?</H4>
+
+    <P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de
+    processus serveur concurrents qu'il peut lancer.</P>
+
+    <P>La limite par défaut est de 32 processus. Vous pouvez l'augmenter en
+    relançant <I>postmaster</I> avec une valeur <I>-N</I> appropriée ou
+    en modifiant <I>postgresql.conf</I>.</P>
+
+    <P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous
+    devez aussi augmenter <I>-B</I> au-dela de sa valeur par défaut 64&nbsp;;
+    <I>-B</I> doit valoir au moins deux fois <I>-N</I> et probablement plus pour
+    une meilleure performance. Pour de grand nombres de processus serveurs vous
+    aurez probablement aussi augmenter plusieurs parametres de configuration du
+    noyau Unix. Les choses a vérifier incluent la taille maximale des blocs de
+    mémoire partagée, <SMALL>SHMMAX</SMALL>&nbsp;; le nombre maximal de
+    sémaphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL>&nbsp;; le
+    nombre maximal de processus, <SMALL>NPROC</SMALL>&nbsp;; le nombre maximal 
+    de processus par utilisateur, <SMALL>MAXUPRC</SMALL>&nbsp;; et le nombre
+    maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>.
+    La raison pour laquelle PostgreSQL a une limite sur le nombre de processus
+    serveurs autorisés est pour que votre système ne tombe pas à court de
+    ressources.</P>
+
+    <H4><A name="3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I>&nbsp;?</H4>
+
+    <P>Ce répertoire contient des fichiers temporaires générés par le moteur de
+    requête. Par exemple, si un tri doit être fait pour satisfaire un
+    <SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le paramètre
+    <I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront créés
+    pour contenir les données nécessaires.</P>
+
+    <P>Les fichiers temporaires sont d'habitude effacés automatiquement mais
+    peuvent rester si un serveur s'arrête brutalement pendant un tri. Un arrêt
+    et un redémarrage de <I>postmaster</I> effacera les fichiers dans ces
+    répertoires.</P>
+
+    <H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une
+    sauvegarde des bases et de restaurer pour mettre a jour les versions de
+    PostgreSQL&nbsp;?</H4>
+
+    <P>L'équipe PostgreSQL ne fait que des changements mineurs entre des
+    versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera pas
+    de sauvegarde et de restauration. Par contre, les sorties majeures
+    (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des tables
+    systèmes et des fichiers de données. Ces modifications sont souvent
+    complexes alors nous ne gardons pas de compatibilité descendante pour les
+    fichiers de données. Une sauvegarde exportera les données dans un format
+    générique qui peut ensuite être chargé dans le nouveau format interne.</P>
+
+    <P>Dans les sorties où le format sur disque ne change pas, le script
+    <I>pg_upgrade</I> peut être utilisé pour mettre à jour sans
+    sauvegarde/restauration. Les notes de sorties précisent si <I>pg_upgrade</I>
+    est disponible pour la sortie.</P>
+
+    <H4><A name="3.11">3.11</A>) Quels matériels dois-je utiliser&nbsp;?</H4>
+        
+    <P>Comme le matériel PC est compatible en grosse partie, les gens ont
+    tendance à croire que tous les matériels PC sont de même qualité. Ce n'est
+    pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité sont plus
+    fiables et ont de meilleurs performances qu'un matériel moins coûteux.
+    PostgreSQL fonctionnera sur à peu près tout matériel mais si la fiabilité et
+    la performance sont importantes pour vous, il est rusé de bien considérer
+    les options matérielles. Nos listes de diffusion peuvent être utilisées pour
+    discuter des options matériels.</P>
+
+    <HR>
+
+    <H2 align="center">Questions fonctionnelles</H2>
+
+    <H4><A name="4.1">4.1</A>) Quelle est la différence entre curseur binaire
+    et curseur normal&nbsp;?</H4>
+
+    <P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P>
+
+    <H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement
+     sur les premières lignes d'une requête&nbsp;?  Sur une ligne aléatoire&nbsp;?</H4>
+
+    <P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser
+    <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
+
+    <P>Il se peut que l'intégralité de la requête doive être évaluée,
+    même si vous voulez seulement les premières lignes. Envisagez
+    d'utiliser une requête avec une clause <SMALL>ORDER
+    BY</SMALL>. S'il existe un index correspondant à l'<SMALL>ORDER
+    BY</SMALL>, PostgreSQL peut n'évaluer que les premières lignes, sinon
+    l'intégralité de la requête peut être évaluée, jusqu'à générer les lignes
+    désirées.</P>
+
+    <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne aléatoire&nbsp;:
+<PRE>
+    SELECT colonne
+    FROM table
+    ORDER BY random()
+    LIMIT 1;
+</PRE>
+
+    <H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou
+    d'autres objets que je vois dans <I>psql</I>&nbsp;?</H4>
+
+    <P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour
+    une liste complète de commandes à l'intérieur de psql, vous pouvez utiliser
+    \?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier
+    <I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes
+    <SMALL>SQL</SMALL> qui génèrent le contenu des commandes anti-slash de
+    psql. Vous pouvez aussi lancer <I>psql</I> avec l'option
+    <I>-E</I>, afin qu'il imprime les requêtes qu'il utilise pour exécuter
+    les commandes que vous lui passez. PostgreSQL fournit aussi une interface
+    d'informations sur le schéma compatible avec <I>SQLi</I> que vous pouvez
+    interroger des informations sur la base de données.</P>
+
+    <H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table,
+     ou comment change-t-on son type de données&nbsp;?</H4>
+
+    <P>La fonction <SMALL>DROP COLUMN</SMALL> a été ajoutée dans la version 7.3
+    avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>.  Pour les versions précédentes, 
+    vous pouvez faire&nbsp;:</P>
+<PRE>
+    BEGIN;
+    LOCK TABLE ancienne_table;
+    SELECT ...  -- sélectionnez toutes les colonnes sauf celle à supprimer
+    INTO TABLE nouvelle_table
+    FROM ancienne_table;
+    DROP TABLE ancienne_table;
+    ALTER TABLE nouvelle_table RENAME TO ancienne_table;
+    COMMIT;
+</PRE>
+
+    <P>Pour changer le type de données d'une colonne, faites&nbsp;:</P>
+
+<PRE>
+    BEGIN;
+    ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>;
+    UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>);
+    ALTER TABLE table DROP COLUMN ancienne_colonne;
+    COMMIT;
+</PRE>
+
+    <P>Après, vous pouvez faire <I>VACUUM FULL tab</I> pour récupérer l'espace
+    disque utilisé par les lignes expirées.</P>
+    
+    <H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne,
+    une table, une base de données&nbsp;?</H4>
+
+    <P>Les limites sont&nbsp;:</P>
+<PRE>
+    Taille maximum pour une base de données     illimitée (il existe des bases de 32&nbsp;To)
+    Taille maximum pour une table               32&nbsp;To
+    Taille maximum pour une ligne               1,6&nbsp;To
+    Taille maximum pour un champ                1&nbsp;Go
+    Nombre maximum de lignes dans une table     illimité
+    Nombre maximum de colonnes dans une table   250-1600, selon le type de colonnes
+    Nombre maximum d'index sur une table        illimité
+</PRE>
+
+    <P>Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont limitées
+    par l'espace disque disponible, ainsi que par l'espace de mémoire et de swap.
+    Les performances peuvent se dégrader si ces valeurs sont inhabituellement
+    grandes.</P>
+
+    <P>La taille maximum des tables (32&nbsp;To) ne nécessite pas que le système
+    d'exploitation supporte les grands fichiers. Les grandes tables sont stockées
+    sous forme de fichiers multiples de 1&nbsp;Go, donc les limites de taille du
+    système de fichier ne sont pas importantes.</P>
+
+    <P>La taille maximum des tables et le nombre maximum de colonnes peuvent
+    être quadriplés, si la taille des blocs par défaut est augmentée à 32&nbsp;Ko.</P>
+
+    <H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker
+    les données d'un fichier texte typique&nbsp;?</H4>
+
+    <P>Une base de données PostgreSQL peut utiliser jusqu'à cinq fois
+    l'espace nécessaire pour stocker les données d'un fichier texte.</P>
+
+    <P>A titre d'exemple, considérez un fichier de 100 000 lignes, comportant
+    un entier et une chaîne de description sur chaque ligne. Supposons que la
+    chaîne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8&nbsp;Mo.
+    La taille du fichier d'une base de données PostgreSQL peut être
+    estimée à 6,4&nbsp;Mo&nbsp;:</P>
+<PRE>
+    36 octets: chaque ligne (approximation)
+    24 octets: un champ 'entier' et un champ 'texte'
+   + 4 octets: pointeur vers le tuple sur la page
+   ----------------------------------------
+    64 octets par ligne
+
+   La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
+
+   8192 octets par page
+   ----------------------   = 128 lignes par page de base de données (arrondi à l'entier inférieur)
+     64 octets par ligne
+
+   100000 lignes de données
+   -------------------------  =  782 pages de base de données (arrondi à l'entier supérieur)
+      128 lignes par page
+
+782 pages de base de données * 8192 octets par page  =  6&nbsp;406&nbsp;144&nbsp;octets (6,4&nbsp;Mo)
+</PRE>
+
+    <P>Les index utilisent moins d'espace, mais ils contiennent les données indexées,
+    ils peuvent donc également être grands.</P>
+
+    <P>Les <SMALL>NULL</SMALL> sont stockés sous forme de bitmap, aussi
+    utilisent-ils très peu d'espace.</P>
+    
+    <H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables,
+    bases de données et utilisateurs sont définis&nbsp;?</H4>
+
+    <P><I>psql</I> dispose de plusieurs commandes commençant par un anti-slash
+    pour retrouver ces informations. Utilisez \? pour les connaître. Il existe
+    aussi des tables systèmes, qui commencent par <I>pg_</I> et qui les
+    décrivent également. Aussi, <I>psql -l</I> liste toutes les bases de
+    données.</P>
+
+    <P>Essayez également le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il
+    illustre un grand nombre de commandes <SMALL>SELECT</SMALL> nécessaires pour
+    récupérer l'information des tables système de la base de données.</P>
+
+    <H4><A name="4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage
+    des index. Pourquoi&nbsp;?</H4>
+
+    <P>Les index ne sont pas automatiquement utilisés par chaque requête. Ils
+    sont utilisés uniquement si la table est plus grande qu'une certaine taille,
+    et si la requête sélectionne seulement un faible pourcentage des lignes de la
+    table. Ceci est dû au fait qu'un accès disque aléatoire causé par un parcours
+    d'index peut être plus lent qu'une simple lecture de la table, ou parcours
+    séquentiel</P>
+
+    <P>Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin
+    des statistiques de la table. Ces statistiques sont collectées en lançant
+    <SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>.
+    Avec les statistiques, l'optimiseur sait combien de lignes se trouvent
+    dans la table et peut mieux déterminer s'il faut utiliser l'index.
+    Les statistiques sont également utiles pour déterminer l'ordre optimal
+    des opérations de jointure. La collecte des statistiques devrait être
+    effectuée régulièrement lorsque le contenu de la table change.</P>
+
+    <P>Les index ne sont normalement pas utilisés pour les clauses <SMALL>ORDER BY</SMALL>
+    ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite est
+    habituellement plus rapide qu'un parcours d'index pour une table importante.
+    Toutefois, <SMALL>LIMIT</SMALL> combiné avec <SMALL>ORDER BY</SMALL>
+    utilisera souvent un index parce que seulement une petite partie de la table est
+    renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index,
+    il est possible de retrouver ces valeurs en utilisant un index avec
+    ORDER BY et LIMIT&nbsp;:</P>
+
+<PRE>
+    SELECT colonne
+    FROM table
+    ORDER BY colonne [ DESC ]
+    LIMIT 1;
+</PRE>
+
+    <P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel,
+    utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et
+    lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P>
+
+    <P>Lorsque vous utilisez des caractères joker tels que <SMALL>LIKE</SMALL> ou
+    <I>~</I>, les index peuvent seulement être utilisés dans certaines circonstances&nbsp;:</P>
+    <UL>
+    <LI>Le début de la chaîne de recherche doit être ancré au départ de la chaîne, c'est-à-dire
+    <UL>
+    <LI>Les modèles pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI>
+    <LI>Les modèles d'expression régulière pour <I>~</I> doivent commencer par
+    <I>^</I>.</LI>
+    </UL></LI>
+    <LI>La chaîne de recherche ne peut pas commencer par une classe de caractères, c'est-à-dire
+    [a-e].</LI>
+    <LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et
+    <I>~*</I> n'utilisent pas les index. Utilisez plutôt les index fonctionnels,
+    décrit dans la section <a href="#4.12">4.12</a>.</LI>
+    <LI>La locale <I>C</I> par défaut doit être utilisée lors de
+    <i>initdb</i>.</LI>
+    </UL>
+    <P>
+
+    <H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue
+     mes requêtes&nbsp;?</H4>
+
+    <P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P>
+
+    <H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree&nbsp;?</H4>
+
+    <P>Un index R-tree est utilisé pour l'indexation des données spatiales. Un
+    index de hachage ne permet pas les recherches par plage. Un index B-tree peut
+    seulement faire des recherches sur une dimension. Les index R-tree
+    peuvent traiter des données multi-dimensionnelles. Par exemple, si un index
+    R-tree peut être construit sur un attribut de type <I>point</I>,
+    le système peut plus efficacement gérer les requêtes du type
+    "Sélection de tous les points d'un rectangle".</P>
+
+    <P>L'article de référence qui décrit le système R-tree original est&nbsp;:</P>
+
+    <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
+    Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
+    of Data, 45-57.</P>
+
+    <P>Vous pouvez également trouver ce papier dans le livre de Stonebraker
+    "Readings in Database Systems".</P>
+
+    <P>Les index R-tree intégrés peuvent prendre en charge les polygônes et les boîtes.
+    En théorie, les R-trees peuvent être étendus à un plus grand nombre de dimensions.
+    En pratique, l'extension des R-trees requiert pas mal de travail et nous
+    n'avons pour le moment aucune documentation sur la façon de procéder.</P>
+
+    <H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de
+    requêtes&nbsp;?</H4>
+
+    <P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query
+    Optimizer</i>) accélère l'optimisation des requêtes lors de jointures de
+    nombreuses tables par un algorithme génétique (GA). Il permet la
+    gestion des grosses requêtes de jointures en utilisant une recherche non
+    exhaustive.</P>
+
+    <H4><A name="4.12">4.12</A>) Comment puis-je réaliser des recherches sur des
+    expressions rationnelles ainsi que des recherches non sensibles à la
+    casse&nbsp;? Comment puis-je utiliser un index lors de recherches non
+    sensibles à la casse&nbsp;?</H4>
+
+    <P>L'opérateur <I>~</I> réalise des recherches d'expressions rationnelles
+    et <I>~*</I> le fait sans tenir compte de la casse. La variante de
+    <SMALL>LIKE</SMALL> non sensible à la casse est
+    <SMALL>ILIKE</SMALL>.</P>
+
+    <P>Des comparaisons d'égalité non sensibles à la casse sont habituellement
+    exprimées de cette façon&nbsp;:</P>
+<PRE>
+    SELECT *
+    FROM table
+    WHERE lower(colonne) = 'abc';
+</PRE>
+
+    <P>Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un index
+    fonctionnel, celui-ci sera utilisé&nbsp;:</P>
+<PRE>
+    CREATE INDEX tableindex ON table (lower(colonne));
+</PRE>
+
+    <H4><A name="4.13">4.13</A>) Comment puis-je détecter si un champ est
+    <SMALL>NULL</SMALL> dans une requête&nbsp;?</H4>
+
+    <P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS
+    NOT NULL</SMALL>.</P>
+
+    <H4><A name="4.14">4.14</A>) Quelle sont les différences entre les nombreux
+    types de caractères&nbsp;?</H4>
+<PRE>
+Type            Nom interne     Notes
+--------------------------------------------------
+VARCHAR(n)      varchar         n spécifie la taille maximum, sans remplissage
+CHAR(n)         bpchar          des espaces sont ajoutés pour obtenir la
+                                longueur fixe spécifiée
+TEXT            text            pas de limite supérieure pour la taille
+BYTEA           bytea           tableau d'octets (accepte les octets nuls)
+"char"          char            un caractère
+</PRE>
+
+    <P>Vous verrez le nom interne en examinant les catalogues système et dans
+    quelques messages d'erreur.</P>
+
+    <P>Les quatres premiers types du dessus sont des types "varlena"
+    (c'est-à-dire que les quatre premiers octets correspondent à la taille,
+    suivi des données). Donc, l'espace réellement utilisé est légèrement plus
+    grand que la taille déclarée. Néanmoins, ces types de données sont aussi
+    sujet à la compression ou à un enregistrement en dehors de la table avec
+    <SMALL>TOAST</SMALL>, donc l'espace occupé sur disque pourrait aussi être
+    moindre que ce qu'on pourrait attendre.</P>
+
+    <P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des chaînes de
+    longueurs variables tout en limitant la taille de cette chaîne.
+    <SMALL>TEXT</SMALL> est utile pour les chaînes de longueur illimitée, avec
+    malgré tout un maximum de 1&nbsp;Go.</P>
+
+    <P><SMALL>CHAR(n)</SMALL> est intéressant pour stocker des chaînes de taille
+    identique. <SMALL>CHAR(n)</SMALL> complète avec des espaces pour arriver à
+    la taille spécifiée alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les
+    caractères donnés. <SMALL>BYTEA</SMALL> sert à stocker des données binaires,
+    particulièrement les données incluant des octets <SMALL>NULL</SMALL>. Tous
+    les types décrits ici ont des performances similaires.</P>
+
+    <H4><A name="4.15.1">4.15.1</A>) Comment puis-je créer un champ série,
+    c'est-à-dire s'incrémentant automatiquement&nbsp;?</H4>
+
+    <P>PostgreSQL supporte un type de données <SMALL>SERIAL</SMALL>. Il crée
+    automatiquement une séquence. Par exemple,
+    ceci&nbsp;:</P>
+<PRE>
+    CREATE TABLE personne ( 
+        id  SERIAL, 
+        nom TEXT 
+    );
+</PRE>
+
+    est automatiquement traduit en ceci&nbsp;:
+<PRE>
+    CREATE SEQUENCE personne_id_seq;
+    CREATE TABLE personne ( 
+        id  INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
+        nom TEXT 
+    );
+</PRE>
+
+    Voir la page man de <I>create_sequence</I> pour plus d'informations
+    sur les séquences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque
+    ligne comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder
+    puis recharger la base de données, vous devrez utiliser l'option
+    <I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de
+    <I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s. 
+
+    <H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un
+    <SMALL>SERIAL</SMALL> suite à une insertion&nbsp;?</H4>
+
+    <P>Une approche pour récupérer la prochaine valeur <SMALL>SERIAL</SMALL> à
+    partir de l'objet séquence est d'utiliser la fonction <I>nextval()</I>
+    <I>avant</I> l'insertion et de l'insérer ensuite explicitement. En utilisant
+    la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple
+    dans un pseudo-langage ressemblerait à ceci&nbsp;:</P>
+<PRE>
+    nouvelle_id = execute("SELECT nextval('personne_id_seq')");
+    execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
+</PRE>
+
+    Vous pourriez ensuite utiliser la nouvelle valeur stockée dans
+    <CODE>nouvelle_id</CODE> avec d'autres requêtes (c'est-à-dire en tant que
+    clé étrangère de la table <CODE>personne</CODE>). Notez que le nom de la
+    <SMALL>SEQUENCE</SMALL> automatiquement créée sera
+    &lt;<I>table</I>&gt;_&lt;<I>colonneserial</I>&gt;_<I>seq</I>, où
+    <I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table
+    et de votre colonne <SMALL>SERIAL</SMALL>.
+
+    <P>Autrement, vous pouvez récupérer la valeur <SMALL>SERIAL</SMALL> affectée
+    avec la fonction <I>currval()</I> <I>après</I> qu'elle ait été insérée par
+    défaut, c'est-à-dire,</P>
+<PRE>
+    execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
+    nouvelle_id = execute("SELECT currval('personne_id_seq')");
+</PRE>
+
+    Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoyé
+    par l'instruction <SMALL>INSERT</SMALL> pour récupérer la valeur par défaut
+    bien que cela soit l'appoche la moins portable et la valeur de l'OID se
+    réinitialisera aux environs de quatre milliards. En Perl, avec DBI et le
+    module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via
+    <I>$sth-&gt;{pg_oid_status}</I> après un <I>$sth-&gt;execute()</I>.
+
+    <H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et
+     <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs
+     les lancent en même temps&nbsp;?</H4>
+
+    <P>Non. <I>currval()</I> renvoie la valeur actuelle affectée par votre
+    processus, et non pas par tous les utilisateurs.</P>
+
+    <H4><A name="4.15.4">4.15.4</A>) Pourquoi mes numéros de séquences ne sont pas
+     ré-utilisés lors d'une annulation de transaction&nbsp;? Pourquoi
+     existe-t'il des trous dans la numérotation de ma colonne séquentielle
+     (SERIAL)&nbsp;?</H4>
+
+     <P>Pour améliorer les accès concurrents, les valeurs de séquences sont
+     données aux transactions qui en ont besoin et ne sont pas bloquées jusqu'à
+     la fin de la transaction. Ceci crée des trous dans le numérotage pour les
+     transactions annulées.</P>
+
+    <H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>&nbsp;?
+    Qu'est-ce qu'un <SMALL>TID</SMALL>&nbsp;?</H4>
+
+    <P>Les <SMALL>OID</SMALL> sont la réponse de PostgreSQL aux identifiants de
+    lignes uniques. Chaque ligne créée dans PostgreSQL obtient un
+    <SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> générés pendant
+    <I>initdb</I> sont inférieurs à 16384 (voir <I>include/access/transam.h</I>).
+    Tous les <SMALL>OID</SMALL> créés par un utilisateur sont supérieurs ou
+    égaux à ceci. Par défaut, tous ces <SMALL>OID</SMALL> sont uniques non
+    seulement dans une table ou une base mais unique à l'intérieur d'une
+    installation PostgreSQL entière.</P>
+
+    <P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables système interne
+    pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent être
+    utilisés pour identifier des lignes utilisateurs spécifiques et utilisés dans
+    des jointures. Il est recommandé que vous utilisiez le type de colonne
+    <SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>.
+    Vous pouvez créer un index sur le champ <SMALL>OID</SMALL> pour un accès
+    plus rapide.</P>
+
+    <P>Les <SMALL>OID</SMALL> sont attribués pour toute ligne d'un endroit
+    central qui est utilisé par toutes les bases de données. Si vous voulez
+    changer l'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez
+    faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il
+    n'y a pas de raisons pour ne pas le faire&nbsp;:</P>
+<PRE>
+    CREATE TABLE nouvelle_table (macolonne int);
+    SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
+    COPY table_temporaire FROM '/tmp/tablepg';
+    COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
+    DROP TABLE table_temporaire;
+</PRE>
+
+    <P>Les <SMALL>OID</SMALL> sont stockés en tant qu'entiers de quatre octets
+    et déborderont à quatre milliards. Personne n'a jamais rapporté un tel cas
+    et nous avons prévu de retirer la limite avant que cela ne se produise.</P>
+
+    <P>Les <SMALL>TID</SMALL>s sont utilisés pour identifier des lignes
+    physiques spécifiques avec des valeurs de bloc et décalage. Les
+    <SMALL>TID</SMALL> changent après que les lignes aient été modifiés ou
+    rechargés. Ils sont utilisés par des entrées d'index pour pointer vers des
+    lignes physiques.</P>
+
+    <H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilisés avec
+    PostgreSQL&nbsp;?</H4>
+
+    <P>Une partie du code source et de l'ancienne documentation utilisent des
+    termes dont l'usage est plus commun. Voici quelques exemples&nbsp;:</P>
+
+    <UL>
+      <LI>table, relation, classe</LI>
+      <LI>ligne (row), enregistrement (record), tuple</LI>
+      <LI>colonne (column), champ (field), attribut</LI>
+      <LI>récupère, sélectionne (select)</LI>
+      <LI>remplace (replace), met à jour (update)</LI>
+      <LI>ajoute (append), insère (insert)</LI>
+      <LI><SMALL>OID</SMALL>, valeur séquentielle (serial value)</LI>
+      <LI>portal, curseur</LI>
+      <LI>range variable, table name, table alias</LI>
+    </UL>
+
+    <P>Une liste des termes généraux pour le domaine des bases de données est
+    disponible sur&nbsp;: <A href=
+    "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
+
+    <H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR:
+    Memory exhausted in AllocSetAlloc()</I>&nbsp;?</H4>
+
+    <P>Vous manquez probablement de mémoire virtuelle sur votre système ou votre
+    noyau a une limite assez basse pour certaines ressources. Essayez ceci avant
+    de lancer <I>postmaster</I>&nbsp;:</P>
+<PRE>
+    ulimit -d 262144
+    limit datasize 256m
+</PRE>
+
+    Suivant votre shell, seul un d'eux pourrait réussir mais cela configurera
+    d'une façon plus importante la taille du segment de données de votre
+    processus. Cette commande s'applique au processus actuel et à tous les
+    processus lancé par celui-ci. Si vous avez des problèmes avec le client
+    <SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de données,
+    essayez ça avant de lancer le client.
+
+    <H4><A name="4.19">4.19</A>) Comment puis-je connaître la version de
+    PostgreSQL que j'utilise&nbsp;?</H4>
+
+    <P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P>
+
+    <H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj
+    descriptor</I> lors d'opérations sur des gros objects&nbsp;?</H4>
+
+    <P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE>
+    autour de chaque utilisateur de gros objets, c'est-à-dire pour entourer
+    <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
+
+    <P>Actuellement, PostgreSQL force cette règle en fermant les gros objets
+    lors de la transaction. Donc, le premier essai d'opérations sur ces objets,
+    fonctionnant habituellement (au moins la plupart du temps) aura un
+    <I>invalid large obj descriptor</I>. Donc le code, auparavant fonctionnel
+    (au moins la plupart du temps), génèrera maintenant un message d'erreur si
+    vous n'utilisez pas de transaction.</P>
+
+    <P>Si vous utilisez une interface client interface comme
+    <SMALL>ODBC</SMALL>, vous aurez peut-être besoin de lancer
+    <CODE>auto-commit off.</CODE></P>
+
+    <H4><A name="4.21">4.21</A>) Comment puis-je créer une colonne qui aura par
+    défaut l'heure actuelle comme valeur&nbsp;?</H4>
+
+    <P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P>
+<PRE>
+<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
+</CODE>
+</PRE>
+
+    <H4><A name="4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant
+    <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes&nbsp;?</H4>
+
+    <P>Dans les versions précédant la 7.4, les sous-requêtes ont été jointes avec
+    des jointures externes en parcourant séquentiellement le résultat de la
+    sous-requête pour chaque ligne de la requête externe. Si la sous-requête
+    renvoit quelques lignes et que la requête externe en renvoit plein,
+    <CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour accélérer les autres
+    requêtes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE>&nbsp;:</P>
+<PRE>    SELECT *
+    FROM table
+    WHERE colonne IN (SELECT souscolonne FROM soustable);
+</PRE>
+    to:
+<PRE>    SELECT *
+    FROM table
+    WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
+</PRE>
+
+    Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit être une colonne
+    indexée.
+
+    <P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les mêmes
+    techniques sophistiquées de jointures comme des requêtes normales et est
+    préféré à l'utilisation de <CODE>EXISTS</CODE>.</P>
+
+    <H4><A name="4.23">4.23</A>) Comment puis-je réaliser une jointure
+    externe&nbsp;?</H4>
+
+    <P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL
+    standard. Voici deux exemples&nbsp;:</P>
+<PRE>
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+</PRE>
+    or 
+<PRE>
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 USING (col);
+</PRE>
+
+    <P>Ces requêtes identiques joignent t1.col à t2.col et renvoient toute
+    colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure
+    droite (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2.
+    Une jointure complète (<SMALL>FULL join</SMALL>) renverra les lignes
+    correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot clé
+    <SMALL>OUTER</SMALL> est optionnelle et assumé dans le cas de jointure
+    <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les
+    jointures ordinaires sont appelées des jointures <SMALL>INNER</SMALL>.</P>
+
+    <P>Lors des précédentes versions, les jointures externes peuvent être
+    simulées en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par
+    exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requête
+    suivante réalise une jointure externe, <I>outer</I>, des deux tables&nbsp;:<BR>
+    <BR>
+    </P>
+<PRE>
+    SELECT tab1.col1, tab2.col2
+    FROM tab1, tab2
+    WHERE tab1.col1 = tab2.col1
+    UNION ALL
+    SELECT tab1.col1, NULL
+    FROM tab1
+    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
+    ORDER BY col1
+</PRE>
+
+    <H4><A name="4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant
+    plusieurs bases de données&nbsp;?</H4>
+
+    <P>Il n'existe pas de moyens de lancer des requêtes sur une autre base que
+    la courante. Comme PostgreSQL charge des catalogues systèmes spécifiques à
+    la base de données, sa réaction aux requêtes inter-base de données est
+    incertaine.</P>
+
+    <P><I>contrib/dblink</I> permet les requêtes entre bases de données en
+    utilisant des fonctions. Bien sûr un client peut réaliser des connexions
+    simultanées à plusieurs bases de données et joindre les résultats du côté
+    client.</P>
+
+    <H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou
+    colonnes à partir d'une fonction?</H4>
+
+    <P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou
+    colonnes à partir d'une fonction,
+    <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
+    http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.
+
+    <H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des
+    tables temporaires dans les fonctions PL/PgSQL de façon stable&nbsp;?</H4>
+    <P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est
+    que si une fonction PL/PgSQL accède à une table temporaire, que cette table
+    est ensuite supprimée et recréée, et que la fonction est appelée de nouveau,
+    la fonction échouera car le contenu de la fonction cachée pointera toujours
+    vers l'ancienne table temporaire. La solution revient à utiliser
+    <SMALL>EXECUTE</SMALL> pour l'accès aux tables temporaires avec PL/PgSQL.
+    Ceci obligera l'analyse de la requête à chaque fois.</P>
+
+    <H4><A name="4.27">4.27</A>) Quelles options de réplication sont
+    disponibles&nbsp;?</H4>
+    <P>Il existe plusieurs solutions de réplication maître/esclave. Elles
+    permettent uniquement au maître de réaliser des changements sur la base de
+    données alors que l'esclave peut seulement faire des lectures de base de données.
+    Le bas de la page <a
+    href="http://gborg.PostgreSQL.org/genpage?replication_research">
+    http://gborg.PostgreSQL.org/genpage?replication_research</a> les liste.
+    Une solution de réplication multi-maître est en cours de développement sur
+    <a
+    href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>.</P>
+
+    <H4><A name="4.28">4.28</A>) Quelles options de cryptage sont
+    disponibles&nbsp;?
+    </H4>
+    <UL>
+    <LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, à
+    utiliser dans des requêtes <SMALL>SQL</SMALL>.</LI>
+    <LI>Pour crypter une transmission entre le client et le serveur, le serveur
+    doit avoir positionné l'option <I>ssl</I> à <I>true</I> dans <I>postgresql.conf,
+    </I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit
+    exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas
+    être <I>désactivée</I>. Notez qu'il est aussi possible d'utiliser un
+    transport crypté d'une troisième partie, tel que stunnel ou ssh, plutôt que
+    les connexions SSL natives de PostgreSQL.
+    <LI>Les mots de passe des utilisateurs sont automatiquement cryptés depuis
+    la version 7.3. Pour les versions précédentes, vous devez activer l'option
+    <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI>
+    <LI>Le serveur peut fonctionner avec un système de fichiers cryptés.</LI>
+    </UL>
+
+    <HR>
+
+    <H2 align="center">Etendre PostgreSQL</H2>
+
+    <H4><A name="5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
+        <I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I>&nbsp;?</H4>
+
+    <P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur
+    dans un programme de test.</P>
+
+    <H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux
+    types ou fonctions à PostgreSQL&nbsp;?</H4>
+
+    <P>Envoyez vos extensions à la liste de diffusion <I>pgsql-hackers</I>,
+    elles atterriront éventuellement dans le sous-répertoire <I>contrib/</I>.</P>
+
+    <H4><A name="5.3">5.3</A>) Comment faire pour écrire une fonction C
+    qui renvoie un tuple&nbsp;?</H4>
+
+    <P>Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui
+    renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL. Voir
+    le Guide du Programmeur pour plus d'information. Un exemple de fonction
+    renvoyant une table définie en C se trouve à
+    <I>contrib/tablefunc</I>.</P>
+
+    <H4><A name="5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi
+    ma recompilation ne voit-elle pas les modifications&nbsp;?</H4>
+
+    <P>Les <I>Makefiles</I> n'ont pas les dépendances adéquates pour les 
+    fichiers d'en-tête. Il vous faut faire <I>make clean</I> puis un autre
+    <I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser
+    l'option <I>--enable-depend</I> de <I>configure</I> pour que le
+    compilateur calcule les dépendances automatiquement.</P>
+  </BODY>
+</HTML>
+