Skip to content
Snippets Groups Projects
Select Git revision
  • c45fa5598b3bed81d564da592ce9ea67af18b313
  • master default
  • benchmark-tools
  • postgres-lambda
  • 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
24 results

FAQ_french.html

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