Add French FAQ.
authorBruce Momjian
Thu, 15 Jul 2004 15:25:25 +0000 (15:25 +0000)
committerBruce Momjian
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 ([email protected])
+   
+   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 ([email protected] 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 [email protected].
+   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
+
+   à [email protected].
+   
+   Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un
+   courriel à [email protected] 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 à [email protected] avec dans le
+   corps :
+    subscribe
+    end
+
+   Une liste de diffusion pour les développeurs est aussi disponible.
+   Pour s'y inscrire, envoyez un courriel à
+   [email protected] 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 à
+   
+    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 __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 @@
+
+
+  
+    
+    
+    PostgreSQL FAQ
+  
+
+  
+  alink="#0000ff">
+    

Foire Aux Questions (FAQ) pour PostgreSQL

+
+    

Dernière mise à jour : vendredi 11 juillet 2004 23:58:24

+
+    

Mainteneur actuel : Bruce Momjian (

+    

+
+    

La plus récente version de ce document est disponible sur 

+    href=
+    "http://www.PostgreSQL.org/docs/faqs/FAQ.html">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">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 
+    HREF="http://www.postgresql.org/postgresql.mp3">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 (
+    "mailto:[email protected]">[email protected] 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 
+    HREF="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">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">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 

+    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
+
+
+    

à 

+
+    

Il existe aussi un recueil de la liste. Pour s'y inscrire,

+    envoyez un courriel à 
+    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 à 
+      avec dans le corps :

+
+    subscribe
+    end
+
+
+    Une liste de diffusion pour les développeurs est aussi disponible. Pour s'y
+    inscrire, envoyez un courriel à 
+    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">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">http://www.PostgreSQL.org/docs.

+
+    

Deux livres sur PostgreSQL sont disponibles en ligne sur 

+    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html
+    et 
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/.
+    Il y a une liste de livres sur PostgreSQL pouvant être achetés sur 
+    href=
+    "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php.
+    Il y a aussi une collection d'articles techniques sur PostgreSQL sur 
+    href=
+    "http://techdocs.PostgreSQL.org/">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">http://www.PostgreSQL.org/docs/awbook.html
+    enseigne le SQL. Il existe un autre livre PostgreSQL sur 
+    href=
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.
+    Il existe de bons tutoriels sur 
+    "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,
+    
+    "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
+    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
+    et 
+    "http://sqlcourse.com/">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">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">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">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 
+      href="http://openacs.org/philosophy/why-not-mysql.html">
+      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 
+   href="#1.6">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 
+    href="http://store.pgsql.com/shopping/">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 
+    href="http://advocacy.postgresql.org">
+    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">
+    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

+
+    

OpenLink ODBC peut être obtenu depuis 

+    "http://www.openlinksw.com/">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 à 
+
+    

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 à 

+    href="http://www.php.net">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 (
+    href="http://www.pgadmin.org">http://www.pgadmin.org),
+    RHDB Admin (
+    href="http://sources.redhat.com/rhdb/">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 
    +    "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">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 
    +    "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">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_de_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 colonnes
    +    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), 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 406 144 octets (6,4 Mo)
    +
    +
    +    

    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_table;
        +    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">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
          +    LEFTRIGHT 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 
          +    href="http://gborg.PostgreSQL.org/genpage?replication_research">
          +    http://gborg.PostgreSQL.org/genpage?replication_research les liste.
          +    Une solution de réplication multi-maître est en cours de développement sur
          +    
          +    href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">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.

            +  
            +
            +