Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

FAQ_french

Blame
  • FAQ_french 59.10 KiB
    
                       Foire Aux Questions (FAQ) pour PostgreSQL
                                           
       Dernière mise à jour : vendredi 14 novembre 2004 16:32:47
       
       Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
       
       La plus récente version de ce document est disponible sur
       http://www.PostgreSQL.org/docs/faqs/FAQ.html.
       
       Les questions spécifiques à la plateforme sont répondues sur
       http://www.PostgreSQL.org/docs/index.html.
         _________________________________________________________________
       
                                Questions générales
                                          
       1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
       1.2) Quelle est la licence de PostgreSQL ?
       1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
       1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?
       1.5) Où puis-je me procurer PostgreSQL ?
       1.6) Où puis-je obtenir du support ?
       1.7) Quelle est la dernière version ?
       1.8) Quelle documentation est disponible ?
       1.9) Comment savoir quels sont les bogues connus ou les
       fonctionnalités manquantes ?
       1.10) Comment puis-je apprendre le SQL ?
       1.11) PostgreSQL est-il compatible an 2000 ?
       1.12) Comment puis-je rejoindre l'équipe de développement ?
       1.13) Comment dois-je soumettre un rapport de bogue ?
       1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ?
       1.15) Comment puis-je aider financièrement PostgreSQL ?
       
                        Questions sur le client utilisateur
                                          
       2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ?
       2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des
       pages Web ?
       2.3) PostgreSQL a-t-il une interface graphique ?
       2.4) Quels langages sont disponibles pour communiquer avec
       PostgreSQL ?
       
                             Questions administratives
                                          
       3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
       3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un
       message core dumped. Pourquoi ?
       3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
       Pourquoi ?
       3.4) Quand je lance postmaster, j'obtiens des erreurs
       IpcSemaphoreCreate. Pourquoi ?
       3.5) Comment contrôler les connexions d'autres machines ?
       3.6) Comment règler le moteur de la base de données pour de meilleures
       performances ?
       3.7) Quelles fonctionalités de déboguage sont disponibles ?
       3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many
       clients quand je me connecte ?
       3.9) Que contient le répertoire pgsql_tmp ?
       3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de
       restaurer pour mettre a jour les versions de PostgreSQL ?
       3.11) Quels matériels dois-je utiliser ?
       
                              Questions fonctionnelles
                                          
       4.1) Quelle est la différence entre curseur binaire et curseur
       normal ?
       4.2) Comment faire un SELECT seulement sur les premières lignes d'une
       requête ? Sur une ligne aléatoire ?
       4.3) Comment obtenir une liste des tables ou d'autres choses que je
       vois dans psql ?
       4.4) Comment supprime-t-on une colonne d'une table, ou comment
       change-t-on son type de données ?
       4.5) Quelle est la taille maximale pour une ligne, une table et une
       base de données ?
       4.6) Combien d'espace disque faut-il pour stocker les données d'un
       fichier texte typique ?
       4.7) Comment puis-je savoir quels index, tables, bases de données et
       utilisateurs sont définis ?
       4.8) Mes requêtes sont lentes ou ne font pas usage des index.
       Pourquoi ?
       4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
       4.10) Qu'est-ce qu'un index R-tree ?
       4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
       4.12) Comment puis-je réaliser des recherches par des expressions
       rationnelles ainsi que des recherches non sensibles à la casse ?
       Comment puis-je utiliser un index lors de recherches non sensibles à
       la casse ?
       4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
       4.14) Quelle sont les différences entre les nombreux types de
       caractères ?
       4.15.1) Comment puis-je créer un champ série, c'est-à-dire
       s'incrémentant automatiquement ?
       4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
       insertion ?
       4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
       lorsque plusieurs utilisateurs les lancent en même temps ?
       4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
       d'une annulation de transaction ? Pourquoi existe-t'il des trous dans
       la numérotation de ma colonne séquentielle (SERIAL) ?
       4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ?
       4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
       4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in
       AllocSetAlloc() ?
       4.19) Comment puis-je connaître la version de PostgreSQL que
       j'utilise ?
       4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations
       avec des gros objets ?
       4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
       actuelle comme valeur ?
       4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
       4.23) Comment puis-je réaliser une jointure externe ?
       4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
       données ??
       4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir
       d'une fonction ?
       4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires
       dans les fonctions PL/PgSQL de façon stable ?
       4.27) Quelles options de cryptage sont disponibles ?
       
                                 Etendre PostgreSQL
                                          
       5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
       psql, pourquoi cela finit-il avec un "dump core" ?
       5.2) Comment puis-je contribuer avec de nouveaux types et fonctions
       pour PostgreSQL ?
       5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ?
       5.4) J'ai modifié un fichier source. Pourquoi la modification
       n'est-elle pas visible après la recompilation ?
         _________________________________________________________________
       
                                Questions générales
                                          
        1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
        
       PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible
       sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant
       entendre la prononciation.
       
       PostgreSQL est une amélioration du système de gestion de bases de
       données POSTGRES (et est toujours quelque fois appelé "Postgres"), un
       prototype de recherche de SGBD de prochaine génération. PostgreSQL
       garde le puissant modèle de données et les types de données riches de
       POSTGRES, mais remplace le langage de requêtes PostQuel par un
       sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources
       complets sont disponibles.
       
       PostgreSQL est écrit par une équipe de développeurs qui sont tous
       inscrits à la liste de diffusion de développement de PostgreSQL. Le
       coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et
       voir la section 1.6 pour contacter les développeurs). Cette équipe est
       responsable de tout le développement de PostgreSQL. C'est un projet
       soutenu par une communauté sans être contrôlé par une société. Pour y
       contribuer, voir la FAQ des développeurs sur
       http://www.postgresql.org/docs/faqs/FAQ_DEV.html.
       
       Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
       Beaucoup d'autres personnes ont contribué au portage, aux tests, au
       déboguage et à l'amélioration du code. Le code de Postgres original,
       duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux
       étudiants diplômés et non diplômés, et de programmeurs travaillant
       sous la direction du Professeur Michael Stonebraker à l'université de
       Californie, Berkeley.
       
       Le nom original du logiciel à Berkeley était Postgres. Quand le SQL
       fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996,
       le nom fut changé en PostgreSQL.
       
        1.2) Quelle est la licence de PostgreSQL ?
        
       PostgreSQL est distribué sous la licence suivante :
       
       PostgreSQL Data Base Management System
       
       Portions Copyright (c) 1996-2007, 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 ?
        
       À partir de la version 8.0, PostgreSQL fonctionne nativement sur les
       systèmes d'exploitation Microsoft Windows à base NT comme Win2000,
       WinXP et Win2003. Un installeur est disponible sur
       http://pgfoundry.org/projects/pginstaller.
       
       Il existe aussi un port sur Novell Netware sur
       http://forge.novell.com.
       
        1.5) Où puis-je me procurer PostgreSQL ?
        
       Le site FTP anonyme principal de PostgreSQL est
       ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site
       web principal.
       
        1.6) Où puis-je obtenir du support ?
        
       La liste de diffusion principale est pgsql-general@PostgreSQL.org.
       Elle est disponible pour discuter de sujets en rapport avec
       PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les
       lignes suivantes dans le corps du message (pas dans la ligne du
       sujet) :
        subscribe
        end
    
       à pgsql-general-request@PostgreSQL.org.
       
       Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un
       courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le
       corps :
        subscribe
        end
    
       Les recueils sont envoyés aux membres de cette liste dès que la liste
       principale a reçu 30 Ko de messages.
       
       Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
       envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le
       corps :
        subscribe
        end
    
       Une liste de diffusion pour les développeurs est aussi disponible.
       Pour s'y inscrire, envoyez un courriel à
       pgsql-hackers-request@PostgreSQL.org avec dans le corps :
        subscribe
        end
    
       Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur
       le site web de PostgreSQL :
       
         http://www.PostgreSQL.org
         
       Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL.
       Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER"
       irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net.
       
       Une liste de sociétés pouvant fournir un support commercial est
       disponible sur http://techdocs.postgresql.org/companies.php.
       
        1.7) Quelle est la dernière version ?
        
       La dernière version de PostgreSQL est la version 7.4.5.
       
       Nous projetons de sortir une version majeure tous les six à huit mois.
       
        1.8) Quelle documentation est disponible ?
        
       Plusieurs manuels, pages de manuel ainsi que des petits exemples de
       test sont inclus dans la distribution. Voir le répertoire /doc. Vous
       pouvez aussi accéder aux manuels en ligne sur
       http://www.PostgreSQL.org/docs.
       
       Deux livres sur PostgreSQL sont disponibles en ligne sur
       http://www.PostgreSQL.org/docs/awbook.html et
       http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur
       PostgreSQL pouvant être achetés sur
       http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi
       une collection d'articles techniques sur PostgreSQL sur
       http://techdocs.PostgreSQL.org/.
       
       psql possède des commandes \d pratiques montrant des informations sur
       les types, opérateurs, fonctions, aggrégats, etc.
       
       Notre site web contient encore plus de documentations.
       
        1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités
        manquantes ?
        
       PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre
       liste TODO pour les bogues connus, les fonctionnalités manquantes et
       les plans pour le futur.
       
        1.10) Comment puis-je apprendre le SQL ?
        
       Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html
       enseigne le SQL. Il existe un autre livre PostgreSQL sur
       http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur
       http://www.intermedia.net/support/sql/sqltut.shtm,
       http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
       et http://sqlcourse.com.
       
       Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days,
       Second Edition" se trouve sur
       http://members.tripod.com/er4ebus/sql/index.htm
       
       Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman,
       Judith S., et al., Addison-Wesley. D'autres aiment The Complete
       Reference SQL, Groff et al., McGraw-Hill.
       
        1.11) PostgreSQL est-il compatible an 2000 ?
        
       Oui, nous manipulons facilement les dates après et avant l'an 2000.
       
        1.12) Comment puis-je rejoindre l'équipe de développement ?
        
       Tout d'abord, téléchargez les derniers sources et lisez la
       documentation pour les développeurs sur notre site web ou bien dans la
       distribution. Ensuite, inscrivez-vous aux listes de diffusion
       pgsql-hackers et pgsql-patches. Et pour finir, soumettez des
       correctifs de grande qualité sur pgsql-patches.
       
       Environ une douzaine de personnes ont des droits de modification sur
       l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de
       correctifs de qualité qu'il était devenu impossible aux développeurs
       de tenir la cadence et nous avions confiance dans le qualité des
       correctifs qu'ils soumettaient.
       
        1.13) Comment dois-je soumettre un rapport de bogue ?
        
       Merci de visiter la page PostgreSQL BugTool sur
       http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur
       la façon de soumettre un rapport de bogue.
       
       De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour
       voir s'il existe une version PostgreSQL plus récente ou des
       correctifs.
       
        1.14) Comment PostgreSQL se compare-til à d'autres SGBD ?
        
       Il y a plusieurs manières de mesurer un logiciel : les
       fonctionnalités, les performances, la fiabilité, le support, et le
       prix.
       
       Fonctionnalités
              PostgreSQL possède la plupart des fonctionnalités présentes
              dans les SGBD commerciaux, comme les transactions, les requêtes
              imbriquées, les déclencheurs, les vues, l'intégrité
              référentielle par clés étrangères, et le verrouillage
              sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas,
              comme les types définis par l'utilisateur, l'héritage, les
              règles, et le contrôle de concurrence par multi-versionnage
              pour réduire les contentions de verrouillage.
              
       Performances
              PostgreSQL a des performances similaires aux autres bases de
              données commerciales et open source. Il est plus rapide pour
              certaines opérations, plus lent pour d'autres. Par rapport à
              MySQL ou d'autres SGBD plus léger, nous sommes plus rapides
              pour de nombreux utilisateurs, des requêtes complexes et une
              charge pour les requêtes de lecture/écriture. MySQL est plus
              rapide pour des requêtes SELECT simples effectuées par quelques
              utilisateurs. Bien sûr, MySQL ne possède aucune des
              fonctionnalités de la section Fonctionnalités ci-dessus.
              PostgreSQL est construit pour la fiabilité et les
              fonctionnalités et nous continuons à améliorer les performances
              à chaque version. Il y a une page web intéressante qui compare
              PostgreSQL à MySQL sur
              http://openacs.org/philosophy/why-not-mysql.html. De plus,
              MySQL est une société qui distribue son produit via l'open
              source et requiert une licence commerciale pour les logiciels
              propriétaires, donc pas une communauté de développement open
              source comme PostgreSQL.
              
       Fiabilité
              Nous somme conscients qu'un SGBD doit être fiable ou bien il
              est inutile. Nous faisons le maximum pour sortir des versions
              bien testées, du code stable ne contenant qu'un minimum de
              bogues. Chaque version a au moins un mois de tests, et notre
              historique de versions montre que nous pouvons fournir des
              versions stables et robustes, prêtes pour une utilisation en
              environnement de production. Nous pensons que nous nous
              comparons favorablement aux autres bases de données dans ce
              domaine.
              
       Support
              Nos listes de diffusion offrent un contact avec un large groupe
              de développeurs et d'utilisateurs afin d'aider à la résolution
              des problèmes rencontrés. Nous ne pouvons garantir un correctif
              mais les SGBD commerciaux ne le garantissent pas toujours non
              plus. L'accès direct aux développeurs, à la communauté
              d'utilisateurs, aux manuels, et au code source, fait du support
              pour PostgreSQL un support supérieur aux autres SGBD. Un
              support commercial par incident est disponible pour ceux qui en
              ont le besoin (voir la section 1.6 de la FAQ).
              
       Prix
              Nous sommes gratuits pour tous les usages, commerciaux et non
              commerciaux. Vous pouvez inclure notre code dans vos produits
              sans limitation, exceptées celles citées dans notre licence de
              type BSD donnée plus haut.
              
        1.15) Comment puis-je aider financièrement PostgreSQL ?
        
       PostgreSQL possède une infrastructure de première classe depuis le
       début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette
       infrastructure des années durant.
       
       Une infrastructure de qualité est importante pour un projet
       open-source. Cela permet d'empêcher l'éparpillement qui ralentirait
       beaucoup l'avancement du projet.
       
       Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un
       certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre
       société peut donner de l'argent pour soutenir cet effort, merci de
       consulter la page web http://store.pgsql.com/shopping/ et de faire une
       donation.
       
       Bien que la page web mentionne PostgreSQL, Inc, les contributions sont
       exclusivement utilisées pour soutenir le projet PostgreSQL et ne
       soutiennent aucune société que ce soit. Si vous le préférez, vous
       pouvez aussi envoyer un chèque à l'adresse de contact.
         _________________________________________________________________
       
       De plus, si vous avez une histoire de succès avec PostgreSQL, merci de
       la soumettre à notre site d'évangélisation sur
       http://advocacy.postgresql.org.
       
                        Questions sur le client utilisateur
                                          
        2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ?
        
       Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC.
       
       Vous pouvez télécharger PsqlOBDC depuis
       http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
       
       OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il
       fonctionne avec leur logiciel client ODBC standard, vous aurez donc
       PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent
       (Win, Mac, Unix, VMS).
       
       Ils vendront probablement ce produit aux gens qui recherchent une
       qualité de support professionnelle mais une version freeware sera
       toujours disponible. Merci d'envoyer vos questions à
       postgres95@openlink.co.uk.
       
        2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages
        Web ?
        
       Une bonne introduction aux pages Web adossés à une base de données se
       trouve à http://www.webreview.com
       
       Pour l'intégration Web, PHP est une excellente interface. Elle se
       trouve à http://www.php.net.
       
       Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm
       ou mod_perl.
       
        2.3) PostgreSQL a-t-il une interface graphique ?
        
       Oui, il y a plusieurs interfaces graphiques disponibles pour
       PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III
       (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
       et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire).
       Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une
       interface Web pour PostgreSQL.
       
       Voir http://techdocs.postgresql.org/guides/GUITools pour une liste
       plus détaillée.
       
        2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ?
        
       La plupart des langages de programmation couramment utilisés ont une
       interface pour PostgreSQL. Vérifiez la liste des modules de votre
       langage.
       
       Les interfaces ci-dessous sont incluses dans la distribution :
         * C (libpq)
         * Embedded C (ecpg)
         * Java (jdbc)
         * Python (PyGreSQL)
         * TCL (libpgtcl)
           
       Interfaces supplémentaires disponibles sur http://gborg.postgresql.org
       dans la section Drivers/Interfaces
         _________________________________________________________________
       
                             Questions Administratives
                                          
        3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
        
       Il faut spécifier l'option --prefix lors du lancement de configure.
       
        3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message
        core dumped . Pourquoi ?
        
       Cela peut être dû à une variété de problèmes mais vérifiez d'abord que
       vous avez les extensions System V installées pour votre noyau.
       PostgreSQL nécessite le support noyau pour la mémoire partagée et les
       sémaphores.
       
        3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
        Pourquoi ?
        
       Soit vous n'avez pas configuré correctement la mémoire partagée dans
       votre noyau, soit vous devez augmenter la mémoire partagée disponible
       dans le noyau. Le montant exact dont vous avez besoin dépend de votre
       architecture et du nombre de tampons et de processus que vous avez
       configuré pour postmaster. Pour la plupart des systèmes avec un nombre
       par défaut de tampons et de processus, vous aurez besoin d'un minimum
       d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL
       pour des informations plus détaillées sur la mémoire partagée et les
       sémaphores.
       
        3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate.
        Pourquoi ?
        
       Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space
       left on device) alors votre noyau n'est pas configuré avec
       suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par
       processus serveur potentiel. Une solution provisoire est de lancer
       postmaster avec une plus petite limite sur le nombre de processus
       serveur. Utilisez l'option -N avec un paramètre inférieur au choix par
       défaut de 32. Une solution permanente est d'augmenter les paramètres
       SEMMNS et SEMMNI de votre noyau.
       
       Des sémaphores inopérantes peuvent aussi provoquer des plantages
       pendant de gros accès à la base de données.
       
       Si le message d'erreur est autre chose, vous n'avez peut-être pas du
       tout le support des sémaphores dans votre noyau. Voir le chapitre
       Administration du manuel PostgreSQL pour des informations plus
       détaillées sur la mémoire partagée et les sémaphores.
       
        3.5) Comment contrôler les connexions d'autres machines ?
        
       Par défaut, PostgreSQL autorise seulement les connexions de la machine
       locale en utilisant les sockets de domaine Unix ou les connexions
       TCP/IP. D'autres machines ne seront pas capables de se connecter sauf
       si vous modifiez listen_addresses dans postgresql.conf et activez une
       authentification basée sur l'hôte en modifiant le fichier
       $PGDATA/pg_hba.conf en accord.
       
        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 basesde 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 :
        32 octets: chaque ligne (approximation)
        24 octets: un champ 'entier' et un champ 'texte'
       + 4 octets: pointeur vers le tuple sur la page
       ----------------------------------------
        60 octets par ligne
    
       La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
    
       8192 octets par page
       ----------------------   = 136 lignes par page de base de données (arrondi à l'entier inférieur)
         60 octets par ligne
    
       100000 lignes de données
       -------------------------  =  735 pages de base de données (arrondi à l'entier supérieur)
          128 lignes par page
    
    735 pages de base de données * 8192 octets par page  =  6 021 120 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.
           
       Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent
       pas être utilisés sauf si les types de données correspondent
       exactement au type de la colonne de l'index. Ceci est particulièrement
       vrai pour les index de colonnes de type int2, int8 et numeric.
       
        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
       
        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 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.