[Trad] [svn:pgfr] r1296 - traduc/trunk/postgresql

admin at listes.postgresql.fr admin at listes.postgresql.fr
Jeu 16 Avr 17:29:45 CEST 2009


Author: gleu
Date: 2009-04-16 17:29:44 +0200 (Thu, 16 Apr 2009)
New Revision: 1296

Modified:
   traduc/trunk/postgresql/catalogs.xml
   traduc/trunk/postgresql/config.xml
   traduc/trunk/postgresql/func.xml
   traduc/trunk/postgresql/installation.xml
   traduc/trunk/postgresql/keywords.xml
   traduc/trunk/postgresql/libpq.xml
   traduc/trunk/postgresql/monitoring.xml
   traduc/trunk/postgresql/plpgsql.xml
   traduc/trunk/postgresql/runtime.xml
   traduc/trunk/postgresql/spi.xml
   traduc/trunk/postgresql/syntax.xml
   traduc/trunk/postgresql/trigger.xml
   traduc/trunk/postgresql/typeconv.xml
   traduc/trunk/postgresql/wal.xml
   traduc/trunk/postgresql/xfunc.xml
   traduc/trunk/postgresql/xindex.xml
Log:
Merge 8.4 : ?\195?\169tape 4.


Modified: traduc/trunk/postgresql/catalogs.xml
===================================================================
--- traduc/trunk/postgresql/catalogs.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/catalogs.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -100,11 +100,6 @@
      </row>
 
      <row>
-      <entry><link linkend="catalog-pg-autovacuum"><structname>pg_autovacuum</structname></link></entry>
-      <entry>paramètres de configuration de l'autovacuum par relation</entry>
-     </row>
-
-     <row>
       <entry><link linkend="catalog-pg-cast"><structname>pg_cast</structname></link></entry>
       <entry>conversions de types de données (<foreignphrase>cast</foreignphrase>)</entry>
      </row>
@@ -145,6 +140,16 @@
      </row>
 
      <row>
+      <entry><link linkend="catalog-pg-foreign-data-wrapper"><structname>pg_foreign_data_wrapper</structname></link></entry>
+      <entry>foreign-data wrapper definitions</entry>
+     </row>
+
+     <row>
+      <entry><link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link></entry>
+      <entry>foreign server definitions</entry>
+     </row>
+
+     <row>
       <entry><link linkend="catalog-pg-index"><structname>pg_index</structname></link></entry>
       <entry>informations supplémentaires des index</entry>
      </row>
@@ -259,6 +264,11 @@
       <entry><link linkend="catalog-pg-type"><structname>pg_type</structname></link></entry>
       <entry>types de données</entry>
      </row>
+
+     <row>
+      <entry><link linkend="catalog-pg-user-mapping"><structname>pg_user_mapping</structname></link></entry>
+      <entry>mappings of users to foreign servers</entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
@@ -423,6 +433,13 @@
      </row>
 
      <row>
+      <entry><structfield>amcanbackward</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>Does the access method support backward scanning?</entry>
+     </row>
+
+     <row>
       <entry><structfield>amcanunique</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -478,6 +495,13 @@
      </row>
 
      <row>
+      <entry><structfield>amkeytype</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
+      <entry>Type of data stored in index, or zero if not a fixed type</entry>
+     </row>
+
+     <row>
       <entry><structfield>aminsert</structfield></entry>
       <entry><type>regproc</type></entry>
       <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
@@ -495,14 +519,14 @@
       <entry><structfield>amgettuple</structfield></entry>
       <entry><type>regproc</type></entry>
       <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
-      <entry>Fonction <quote>prochaine ligne valide</quote></entry>
+      <entry>Fonction <quote>prochaine ligne valide</quote>, or zero if none</entry>
      </row>
 
      <row>
-      <entry><structfield>amgetmulti</structfield></entry>
+      <entry><structfield>amgetbitmap</structfield></entry>
       <entry><type>regproc</type></entry>
       <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
-      <entry>Fonction <quote>récupérer plusieurs lignes</quote></entry>
+      <entry>Fonction <quote>récupérer toutes les lignes valides</quote></entry>
      </row>
 
      <row>
@@ -637,13 +661,6 @@
      </row>
 
      <row>
-      <entry><structfield>amopreqcheck</structfield></entry>
-      <entry><type>bool</type></entry>
-      <entry></entry>
-      <entry>L'entrée de l'index doit être revérifiée</entry>
-     </row>
-
-     <row>
       <entry><structfield>amopopr</structfield></entry>
       <entry><type>oid</type></entry>
       <entry><literal><link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.oid</literal></entry>
@@ -1060,6 +1077,15 @@
       </entry>
      </row>
 
+     <row>
+      <entry><structfield>attacl</structfield></entry>
+      <entry><type>aclitem[]</type></entry>
+      <entry></entry>
+      <entry>
+       Column-level access privileges, if any have been granted specifically
+       on this column
+      </entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
@@ -1295,180 +1321,6 @@
  </sect1>
 
 
- <sect1 id="catalog-pg-autovacuum">
-  <title><structname>pg_autovacuum</structname></title>
-
-  <indexterm zone="catalog-pg-autovacuum">
-   <primary>pg_autovacuum</primary>
-  </indexterm>
-
-  <indexterm zone="catalog-pg-autovacuum">
-   <primary>autovacuum</primary>
-   <secondary>configuration de table</secondary>
-  </indexterm>
-
-  <para>
-   Le catalogue <structname>pg_autovacuum</structname> stocke les paramètres de
-   configuration optionnelle par relation pour le démon autovacuum. S'il existe
-   une entrée pour une relation particulière, les paramètres donnés sont
-   utilisés par autovacuum pour cette table. Si aucune entrée n'est présente, 
-   les paramètres par défaut du système sont utilisés. Pour plus d'informations
-   sur le démon autovacuum, voir <xref linkend="autovacuum"/>.
-  </para>
-
-  <note>
-   <para>
-    Il est probable que <structname>pg_autovacuum</structname> disparaisse
-    dans le futur, ces informations iront probablement dans
-    <structname>pg_class</structname>.<structfield>reloptions</structfield>.
-   </para>
-  </note>
-
-  <table>
-   <title>Colonnes de <structname>pg_autovacuum</structname></title>
-
-   <tgroup cols="4">
-    <colspec colnum="1" colwidth="1.0*"/>
-    <colspec colnum="2" colwidth="0.7*"/>
-    <colspec colnum="3" colwidth="0.7*"/>
-    <colspec colnum="4" colwidth="1.6*"/>
-    <thead>
-     <row>
-      <entry>Nom</entry>
-      <entry>Type</entry>
-      <entry>Références</entry>
-      <entry>Description</entry>
-     </row>
-    </thead>
-
-    <tbody>
-     <row>
-      <entry><structfield>vacrelid</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.oid</literal></entry>
-      <entry>La table concernée par l'entrée</entry>
-     </row>
-
-     <row>
-      <entry><structfield>enabled</structfield></entry>
-      <entry><type>bool</type></entry>
-      <entry></entry>
-      <entry>Si <literal>false</literal>, la table n'est jamais prise en compte
-        par autovacuum, sauf pour empêcher le problème des identifiants
-        de transaction</entry>
-     </row>
-
-     <row>
-      <entry><structfield>vac_base_thresh</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Nombre minimum de lignes modifiées avant de lancer un
-        vacuum</entry>
-     </row>
-
-     <row>
-      <entry><structfield>vac_scale_factor</structfield></entry>
-      <entry><type>float4</type></entry>
-      <entry></entry>
-      <entry>Multiplicateur pour <structfield>reltuples</structfield> à ajouter à
-       <structfield>vac_base_thresh</structfield></entry>
-     </row>
-
-     <row>
-      <entry><structfield>anl_base_thresh</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Nombre minimum de lignes modifiées avant de lancer une
-        analyse</entry>
-     </row>
-
-     <row>
-      <entry><structfield>anl_scale_factor</structfield></entry>
-      <entry><type>float4</type></entry>
-      <entry></entry>
-      <entry>Multiplicateur pour <structfield>reltuples</structfield> à ajouter à
-        <structfield>anl_base_thresh</structfield></entry>
-     </row>
-
-     <row>
-      <entry><structfield>vac_cost_delay</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Paramètre <varname>vacuum_cost_delay</varname> personnalisé</entry>
-     </row>
-
-     <row>
-      <entry><structfield>vac_cost_limit</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Paramètre <varname>vacuum_cost_limit</varname> personnalisé</entry>
-     </row>
-
-     <row>
-      <entry><structfield>freeze_min_age</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Paramètre <varname>vacuum_freeze_min_age</varname> personnalisé</entry>
-     </row>
-
-     <row>
-      <entry><structfield>freeze_max_age</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Paramètre <varname>autovacuum_freeze_max_age</varname> personnalisé</entry>
-     </row>
-    </tbody>
-   </tgroup>
-  </table>
-
-  <para>
-   Le démon autovacuum lance une opération de <command>VACUUM</command> sur une
-   table particulière quand le nombre de lignes mises à jour ou supprimées
-   dépasse <structfield>vac_base_thresh</structfield> plus
-   <structfield>vac_scale_factor</structfield> multiplié par le nombre de lignes
-   actives alors estimées pour la relation. De façon similaire, il
-   initie une opération <command>ANALYZE</command> quand le nombre de lignes
-   insérées, mises à jour ou supprimées dépasse
-   <structfield>anl_base_thresh</structfield> plus
-   <structfield>anl_scale_factor</structfield> multiplié par le nombre de
-   lignes actives alors estimées pour la relation.
-  </para>
-
-  <para>
-   De plus, le démon autovacuum réalise une opération de <command>VACUUM</command>
-   pour prévenir la réinitialisation de l'ID de transaction si le champ
-   <structname>pg_class</structname>.<structfield>relfrozenxid</structfield>
-   de la table atteint un âge de plus de <structfield>freeze_max_age</structfield>
-   transactions, que la table ait été modifiée ou non, même si
-   <structname>pg_autovacuum</structname>.<structfield>enabled</structfield> est
-   configuré à <literal>false</literal> pour cette table. Le système lance
-   autovacuum pour exécuter de tels <command>VACUUM</command> même si autovacuum
-   est désactivé. Voir <xref linkend="vacuum-for-wraparound"/> pour plus
-   d'informations sur la réinitialisation de l'ID de transaction.
-  </para>
-
-  <para>
-   Tout champ numérique peut contenir <literal>-1</literal> (ou une autre valeur
-   négative) pour indiquer que la valeur par défaut du système doit être
-   utilisée pour cette valeur particulière. La variable
-   <structfield>vac_cost_delay</structfield> hérite sa valeur par défaut du paramètre
-   de configuration <xref linkend="guc-autovacuum-vacuum-cost-delay"/> ou de
-   <xref linkend="guc-vacuum-cost-delay"/> si le premier est négatif. La même logique
-   s'applique à <structfield>vac_cost_limit</structfield>.
-   De plus, autovacuum ignore les tentatives d'initialisation par table d'un
-   <structfield>freeze_max_age</structfield> plus grand que celui du
-   sysstème (il peut seulement être plus petit).
-   <structfield>freeze_min_age</structfield> est limité à la moitié
-   du paramètre <xref linkend="guc-autovacuum-freeze-max-age"/> du système.
-   Il est possible de configurer
-   <structfield>freeze_max_age</structfield> à une très petite valeur, voire
-   à zéro, mais c'est habituellement déconseillé car cela impose des
-   VACUUM fréquents.
-  </para>
-
- </sect1>
-
-
  <sect1 id="catalog-pg-cast">
   <title><structname>pg_cast</structname></title>
 
@@ -1489,7 +1341,7 @@
    à partir de règles génériques. Par exemple, la conversion entre un domaine
    et son type de base n'est pas représentée explicitement dans
    <structname>pg_cast</structname>.  Autre exception importante&nbsp;:
-   <quote>les conversions d'entrée/sortie</quote>, celles réalisées en
+   <quote>les conversions automatiques d'entrée/sortie</quote>, celles réalisées en
    utilisant les propres fonctions d'entrée/sortie du type de données pour
    convertir vers ou à partir du <type>text</type> ou des autres types de
    chaînes de caractères, ne sont pas représentées explicitement dans
@@ -1534,8 +1386,7 @@
       <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
       <entry>
        OID de la fonction à utiliser pour réaliser la conversion. 0 si
-       les types de données sont binairement compatibles (c'est-à-dire si aucune
-       opération n'est nécessaire pour effectuer la transformation).
+       cast method doesn't require a function.
       </entry>
      </row>
 
@@ -1553,6 +1404,18 @@
        autorisées en plus des autres cas.
       </entry>
      </row>
+     
+     <row>
+      <entry><structfield>castmethod</structfield></entry>
+      <entry><type>char</type></entry>
+      <entry></entry>
+      <entry>
+       Indicates how the cast is performed.
+       <literal>f</> means that the function specified in the <structfield>castfunc</> field is used.
+       <literal>i</> means that the input/output functions are used.
+       <literal>b</> means that the types are binary-coercible, thus no conversion is required
+      </entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
@@ -1766,6 +1629,16 @@
      </row>
 
      <row>
+      <entry><structfield>relistemp</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>
+       True if this table is a temporary relation.  If so, only the creating
+       session can safely access its contents
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>relkind</structfield></entry>
       <entry><type>char</type></entry>
       <entry></entry>
@@ -1793,45 +1666,12 @@
       <entry><type>int2</type></entry>
       <entry></entry>
       <entry>
-       Nombre de contraintes de vérification sur la table&nbsp;; voir le
+       Nombre de contraintes de vérification (<literal>CHECK</>) sur la table&nbsp;; voir le
        catalogue <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.
       </entry>
      </row>
 
      <row>
-      <entry><structfield>reltriggers</structfield></entry>
-      <entry><type>int2</type></entry>
-      <entry></entry>
-      <entry>
-       Nombre de déclencheurs sur la table&nbsp;; voir le catalogue
-       <link linkend="catalog-pg-trigger"><structname>pg_trigger</structname></link>.
-      </entry>
-     </row>
-
-     <row>
-      <entry><structfield>relukeys</structfield></entry>
-      <entry><type>int2</type></entry>
-      <entry></entry>
-      <entry>Inutilisé. (Ce n'est <emphasis>pas</emphasis> le nombre de clés
-       uniques de la table.)</entry>
-     </row>
-
-     <row>
-      <entry><structfield>relfkeys</structfield></entry>
-      <entry><type>int2</type></entry>
-      <entry></entry>
-      <entry>Inutilisé. (Ce n'est <emphasis>pas</emphasis> le nombre de clés 
-      étrangères de la table.)</entry>
-     </row>
-
-     <row>
-      <entry><structfield>relrefs</structfield></entry>
-      <entry><type>int2</type></entry>
-      <entry></entry>
-      <entry>Inutilisé</entry>
-     </row>
-
-     <row>
       <entry><structfield>relhasoids</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -1853,12 +1693,22 @@
       <entry><structfield>relhasrules</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
-      <entry>Vrai si la table contient des règles&nbsp;; voir le catalogue
+      <entry>Vrai si la table contient (ou a contenu) des règles&nbsp;; voir le catalogue
        <link linkend="catalog-pg-rewrite"><structname>pg_rewrite</structname></link>.
       </entry>
      </row>
 
      <row>
+      <entry><structfield>relhastriggers</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>
+       True if table has (or once had) triggers; see
+       <link linkend="catalog-pg-trigger"><structname>pg_trigger</structname></link> catalog
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>relhassubclass</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -2019,28 +1869,64 @@
       <entry><structfield>confupdtype</structfield></entry>
       <entry><type>char</type></entry>
       <entry></entry>
-      <entry>Code de l'action de mise à jour de la clé étrangère</entry>
+      <entry>Code de l'action de mise à jour de la clé étrangère:
+            <literal>a</> = no action,
+            <literal>r</> = restrict,
+            <literal>c</> = cascade,
+            <literal>n</> = set null,
+            <literal>d</> = set default
+          </entry>
      </row>
 
      <row>
       <entry><structfield>confdeltype</structfield></entry>
       <entry><type>char</type></entry>
       <entry></entry>
-      <entry>Code de l'action de suppression de clé étrangère</entry>
+      <entry>Code de l'action de suppression de clé étrangère:
+            <literal>a</> = no action,
+            <literal>r</> = restrict,
+            <literal>c</> = cascade,
+            <literal>n</> = set null,
+            <literal>d</> = set default
+          </entry>
      </row>
 
      <row>
       <entry><structfield>confmatchtype</structfield></entry>
       <entry><type>char</type></entry>
       <entry></entry>
-      <entry>Type de concordance de la clé étrangère</entry>
+      <entry>Type de concordance de la clé étrangère:
+            <literal>f</> = full,
+            <literal>p</> = partial,
+            <literal>u</> = simple (unspecified)
+          </entry>
      </row>
 
      <row>
+      <entry><structfield>conislocal</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>
+       This constraint is defined locally in the relation.  Note that a
+       constraint can be locally defined and inherited simultaneously
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>coninhcount</structfield></entry>
+      <entry><type>int4</type></entry>
+      <entry></entry>
+      <entry>
+       The number of direct ancestors this constraint has.  A constraint with
+       a nonzero number of ancestors cannot be dropped nor renamed
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>conkey</structfield></entry>
       <entry><type>int2[]</type></entry>
       <entry><literal><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.attnum</literal></entry>
-      <entry>S'il s'agit d'une contrainte de table, liste des colonnes
+      <entry>S'il s'agit d'une contrainte de table (including a foreign key), liste des colonnes
        contraintes</entry>
      </row>
 
@@ -2325,6 +2211,20 @@
      </row>
 
      <row>
+      <entry><structfield>datcollate</structfield></entry>
+      <entry><type>name</type></entry>
+      <entry></entry>
+      <entry>LC_COLLATE for this database</entry>
+     </row>
+
+     <row>
+      <entry><structfield>datctype</structfield></entry>
+      <entry><type>name</type></entry>
+      <entry></entry>
+      <entry>LC_CTYPE for this database</entry>
+     </row>
+
+     <row>
       <entry><structfield>datistemplate</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -2682,6 +2582,176 @@
  </sect1>
 
 
+ <sect1 id="catalog-pg-foreign-data-wrapper">
+  <title><structname>pg_foreign_data_wrapper</structname></title>
+
+  <indexterm zone="catalog-pg-foreign-data-wrapper">
+   <primary>pg_foreign_data_wrapper</primary>
+  </indexterm>
+
+  <para>
+   The catalog <structname>pg_foreign_data_wrapper</structname> stores
+   foreign-data wrapper definitions.  A foreign-data wrapper is the
+   mechanism by which external data, residing on foreign servers, is
+   accessed.
+  </para>
+
+  <table>
+   <title><structname>pg_foreign_data_wrapper</> Columns</title>
+
+   <tgroup cols="4">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Type</entry>
+      <entry>References</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><structfield>fdwname</structfield></entry>
+      <entry><type>name</type></entry>
+      <entry></entry>
+      <entry>Name of the foreign-data wrapper</entry>
+     </row>
+
+     <row>
+      <entry><structfield>fdwowner</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.oid</literal></entry>
+      <entry>Owner of the foreign-data wrapper</entry>
+     </row>
+
+     <row>
+      <entry><structfield>fdwvalidator</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
+      <entry>
+       References a validator function that is responsible for
+       checking the validity of the generic options given to the
+       foreign-data wrapper, as well as to foreign servers and user
+       mappings using the foreign-data wrapper.  Zero if no validator
+       is provided.
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>fdwacl</structfield></entry>
+      <entry><type>aclitem[]</type></entry>
+      <entry></entry>
+      <entry>
+       Access privileges; see
+       <xref linkend="sql-grant" endterm="sql-grant-title"> and
+       <xref linkend="sql-revoke" endterm="sql-revoke-title">
+       for details
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>fdwoptions</structfield></entry>
+      <entry><type>text[]</type></entry>
+      <entry></entry>
+      <entry>
+       Foreign-data wrapper specific options, as <quote>keyword=value</> strings
+      </entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+
+ <sect1 id="catalog-pg-foreign-server">
+  <title><structname>pg_foreign_server</structname></title>
+
+  <indexterm zone="catalog-pg-foreign-server">
+   <primary>pg_foreign_server</primary>
+  </indexterm>
+
+  <para>
+   The catalog <structname>pg_foreign_server</structname> stores
+   foreign server definitions.  A foreign server describes the
+   connection to a remote server, managing external data.  Foreign
+   servers are accessed via foreign-data wrappers.
+  </para>
+
+  <table>
+   <title><structname>pg_foreign_server</> Columns</title>
+
+   <tgroup cols="4">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Type</entry>
+      <entry>References</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><structfield>srvname</structfield></entry>
+      <entry><type>name</type></entry>
+      <entry></entry>
+      <entry>Name of the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvowner</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.oid</literal></entry>
+      <entry>Owner of the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvfdw</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-foreign-data-wrapper"><structname>pg_foreign_data_wrapper</structname></link>.oid</literal></entry>
+      <entry>The OID of the foreign-data wrapper of this foreign server</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvtype</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry></entry>
+      <entry>Type of the server (optional)</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvversion</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry></entry>
+      <entry>Version of the server (optional)</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvacl</structfield></entry>
+      <entry><type>aclitem[]</type></entry>
+      <entry></entry>
+      <entry>
+       Access privileges; see
+       <xref linkend="sql-grant" endterm="sql-grant-title"> and
+       <xref linkend="sql-revoke" endterm="sql-revoke-title">
+       for details
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvoptions</structfield></entry>
+      <entry><type>text[]</type></entry>
+      <entry></entry>
+      <entry>
+       Foreign server specific options, as <quote>keyword=value</> strings.
+      </entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+
  <sect1 id="catalog-pg-index">
   <title><structname>pg_index</structname></title>
 
@@ -3795,6 +3865,14 @@
      </row>
 
      <row>
+      <entry><structfield>provariadic</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
+      <entry>Data type of the variadic array parameter's elements,
+       or zero if the function does not have a variadic parameter</entry>
+     </row>
+
+     <row>
       <entry><structfield>proisagg</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -3802,6 +3880,13 @@
      </row>
 
      <row>
+      <entry><structfield>proiswindow</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>Function is a window function</entry>
+     </row>
+
+     <row>
       <entry><structfield>prosecdef</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -3854,10 +3939,17 @@
       <entry><structfield>pronargs</structfield></entry>
       <entry><type>int2</type></entry>
       <entry></entry>
-      <entry>Nombre d'arguments</entry>
+      <entry>Nombre d'arguments en entrée</entry>
      </row>
 
      <row>
+      <entry><structfield>pronargdefaults</structfield></entry>
+      <entry><type>int2</type></entry>
+      <entry></entry>
+      <entry>Number of arguments that have defaults</entry>
+     </row>
+
+     <row>
       <entry><structfield>prorettype</structfield></entry>
       <entry><type>oid</type></entry>
       <entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
@@ -3870,9 +3962,9 @@
       <entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
       <entry>
        Un tableau contenant les types de données des arguments de la fonction.
-       Ceci n'inclut que les arguments en entrée (dont les
-       arguments <literal>INOUT</literal>) et représente, du coup, la signature d'appel de la
-       fonction.
+       Ceci n'inclut que les arguments en entrée (dont les arguments
+       <literal>INOUT</literal> et <literal>VARIADIC</literal>) et représente,
+       du coup, la signature d'appel de la fonction.
       </entry>
      </row>
 
@@ -3898,7 +3990,9 @@
         Un tableau contenant les modes des arguments de la fonction, codés avec
         <literal>i</literal> pour les arguments <literal>IN</literal>,
         <literal>o</literal> pour les arguments <literal>OUT</literal>,
-        <literal>b</literal> pour les arguments <literal>INOUT</literal>.
+        <literal>b</literal> pour les arguments <literal>INOUT</literal>,
+        <literal>v</literal> for <literal>VARIADIC</> arguments,
+        <literal>t</literal> for <literal>TABLE</>.
         Si tous les arguments sont des arguments <literal>IN</literal>, ce
 	champ est NULL.
         Les indices correspondent aux positions de
@@ -3922,6 +4016,20 @@
      </row>
 
      <row>
+      <entry><structfield>proargdefaults</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry></entry>
+      <entry>
+       Expression trees (in <function>nodeToString()</function> representation)
+       for default values.  This is a list with
+       <structfield>pronargdefaults</> elements, corresponding to the last
+       <replaceable>N</> <emphasis>input</> arguments (i.e., the last
+       <replaceable>N</> <structfield>proargtypes</> positions).
+       If none of the arguments have defaults, this field will be null
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>prosrc</structfield></entry>
       <entry><type>text</type></entry>
       <entry></entry>
@@ -4172,6 +4280,17 @@
      </row>
 
      <row>
+      <entry><structfield>objsubid</structfield></entry>
+      <entry><type>int4</type></entry>
+      <entry></entry>
+      <entry>
+       For a table column, this is the column number (the
+       <structfield>objid</> and <structfield>classid</> refer to the
+       table itself).  For all other object types, this column is zero
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>refclassid</structfield></entry>
       <entry><type>oid</type></entry>
       <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.oid</literal></entry>
@@ -4739,8 +4858,7 @@
 
   <note>
    <para>
-    <literal>pg_class.reltriggers</literal> doit être en accord avec le nombre
-    de déclencheurs trouvés dans cette table pour chaque relation.
+    <literal>pg_class.relhastriggers</literal> must be true if a table has any triggers in this catalog.
    </para>
   </note>
 
@@ -5164,7 +5282,7 @@
   <para>
    Le catalogue <structname>pg_type</structname> stocke les informations
    concernant les
-   types de données. Les types basiques (types scalaires) sont créés avec la 
+   types de données. Les types basiques et d'énumération (types scalaires) sont créés avec la 
    commande <xref linkend="sql-createtype" endterm="sql-createtype-title"/> et
    les domaines avec
    <xref linkend="sql-createdomain" endterm="sql-createdomain-title"/>.
@@ -5239,8 +5357,7 @@
        machines dont le mot-machine est de 8 octets). Les types de longueur
        variable sont toujours passés par référence. 
        <structfield>typbyval</structfield> peut être faux même si la longueur
-       permet un passage par valeur&nbsp;; c'est le cas pour le type 
-       <type>float4</type>, par exemple.
+       permet un passage par valeur.
       </entry>
      </row>
 
@@ -5261,6 +5378,28 @@
      </row>
 
      <row>
+      <entry><structfield>typcategory</structfield></entry>
+      <entry><type>char</type></entry>
+      <entry></entry>
+      <entry>
+       <structfield>typcategory</structfield> is an arbitrary classification
+       of data types that is used by the parser to determine which implicit
+       casts should be <quote>preferred</>.
+       See <xref linkend="catalog-typcategory-table">
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>typispreferred</structfield></entry>
+      <entry><type>bool</type></entry>
+      <entry></entry>
+      <entry>
+       True if the type is a preferred cast target within its
+       <structfield>typcategory</structfield>
+      </entry>
+     </row>
+
+     <row>
       <entry><structfield>typisdefined</structfield></entry>
       <entry><type>bool</type></entry>
       <entry></entry>
@@ -5544,8 +5683,148 @@
     </tbody>
    </tgroup>
   </table>
+
+  <para>
+   <xref linkend="catalog-typcategory-table"> lists the system-defined values
+   of <structfield>typcategory</>.  Any future additions to this list will
+   also be upper-case ASCII letters.  All other ASCII characters are reserved
+   for user-defined categories.
+  </para>
+
+  <table id="catalog-typcategory-table">
+   <title><structfield>typcategory</> Codes</title>
+
+   <tgroup cols="2">
+    <thead>
+     <row>
+      <entry>Code</entry>
+      <entry>Category</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>A</literal></entry>
+      <entry>Array types</entry>
+     </row>
+     <row>
+      <entry><literal>B</literal></entry>
+      <entry>Boolean types</entry>
+     </row>
+     <row>
+      <entry><literal>C</literal></entry>
+      <entry>Composite types</entry>
+     </row>
+     <row>
+      <entry><literal>D</literal></entry>
+      <entry>Date/time types</entry>
+     </row>
+     <row>
+      <entry><literal>E</literal></entry>
+      <entry>Enum types</entry>
+     </row>
+     <row>
+      <entry><literal>G</literal></entry>
+      <entry>Geometric types</entry>
+     </row>
+     <row>
+      <entry><literal>I</literal></entry>
+      <entry>Network address types</entry>
+     </row>
+     <row>
+      <entry><literal>N</literal></entry>
+      <entry>Numeric types</entry>
+     </row>
+     <row>
+      <entry><literal>P</literal></entry>
+      <entry>Pseudo-types</entry>
+     </row>
+     <row>
+      <entry><literal>S</literal></entry>
+      <entry>String types</entry>
+     </row>
+     <row>
+      <entry><literal>T</literal></entry>
+      <entry>Timespan types</entry>
+     </row>
+     <row>
+      <entry><literal>U</literal></entry>
+      <entry>User-defined types</entry>
+     </row>
+     <row>
+      <entry><literal>V</literal></entry>
+      <entry>Bit-string types</entry>
+     </row>
+     <row>
+      <entry><literal>X</literal></entry>
+      <entry><type>unknown</> type</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+
  </sect1>
 
+
+ <sect1 id="catalog-pg-user-mapping">
+  <title><structname>pg_user_mapping</structname></title>
+
+  <indexterm zone="catalog-pg-user-mapping">
+   <primary>pg_user_mapping</primary>
+  </indexterm>
+
+  <para>
+   The catalog <structname>pg_user_mapping</structname> stores
+   the mappings from local user to remote.  Access to this catalog is
+   restricted from normal users, use the view
+   <link linkend="view-pg-user-mappings"><structname>pg_user_mappings</structname></link>
+   instead.
+  </para>
+
+  <table>
+   <title><structname>pg_user_mapping</> Columns</title>
+
+   <tgroup cols="4">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Type</entry>
+      <entry>References</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><structfield>umuser</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.oid</literal></entry>
+      <entry>OID of the local role being mapped, 0 if the user mapping is public</entry>
+     </row>
+
+     <row>
+      <entry><structfield>umserver</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link>.oid</literal></entry>
+      <entry>
+       The OID of the foreign server that contains this mapping
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>umoptions</structfield></entry>
+      <entry><type>text[]</type></entry>
+      <entry></entry>
+      <entry>
+       User mapping specific options, as <quote>keyword=value</> strings.
+      </entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+
  <sect1 id="views-overview">
   <title>Vues système</title>
 
@@ -6063,6 +6342,9 @@
       <entry>
        L'OID de l'objet dans son catalogue système ou NULL si l'objet n'est
        pas un objet général de la base de données
+       For advisory locks it is used to distinguish the two key
+       spaces (<literal>1</> for an int8 key, <literal>2</> for two
+       int4 keys).
       </entry>
      </row>
      <row>
@@ -6599,7 +6881,8 @@
   <para>
    La vue <structname>pg_settings</structname> fournit un accès aux paramètres
    d'exécution du serveur. C'est essentiellement une interface alternative aux
-   commandes <command>SHOW</command> et <command>SET</command>. Elle fournit
+   commandes <xref linkend="sql-show" endterm="sql-show-title">
+   et <xref linkend="sql-set" endterm="sql-set-title">. Elle fournit
    aussi un accès à certaines informations des paramètres qui ne sont pas directement
    accessibles avec <command>SHOW</command>, telles que les valeurs minimales et maximales.
   </para>
@@ -6657,7 +6940,8 @@
      <row>
       <entry><structfield>vartype</structfield></entry>
       <entry><type>text</type></entry>
-      <entry>Type du paramètre (<literal>bool</literal>, <literal>integer</literal>,
+      <entry>Type du paramètre (<literal>bool</literal>, <literal>enum</>,
+       <literal>integer</literal>,
        <literal>real</literal> ou <literal>string</literal>)
       </entry>
      </row>
@@ -6678,6 +6962,40 @@
       <entry>Valeur maximale autorisée du paramètre (NULL pour les valeurs non
        numériques)</entry>
      </row>
+     <row>
+      <entry><structfield>enumvals</structfield></entry>
+      <entry><type>text[]</type></entry>
+      <entry>Allowed values of an enum parameter (NULL for non-enum
+      values)</entry>
+     </row>
+     <row>
+      <entry><structfield>boot_val</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry>Parameter value assumed at server startup if the parameter is
+      not otherwise set</entry>
+     </row>
+     <row>
+      <entry><structfield>reset_val</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry>Value that <command>RESET</command> would reset the parameter to
+      in the current session</entry>
+     </row>
+     <row>
+      <entry><structfield>sourcefile</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry>Configuration file the current value was set in (NULL for
+      values set from sources other than configuration files, or when
+      examined by a non-superuser).
+      Helpful when using configuration include directives</entry>
+     </row>
+     <row>
+      <entry><structfield>sourceline</structfield></entry>
+      <entry><type>integer</type></entry>
+      <entry>Line number within the configuration file the current value was
+      set at (NULL for values set from sources other than configuration files,
+      or when examined by a non-superuser)
+      </entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
@@ -6903,17 +7221,23 @@
       <entry><type>anyarray</type></entry>
       <entry></entry>
       <entry>Liste de valeurs habituelles de la colonne. (NULL si
-       aucune valeur ne semble identique aux autres.)</entry>
+       aucune valeur ne semble identique aux autres.)
+       For some datatypes such as <type>tsvector</>, this is a list of
+       the most common element values rather than values of the type itself.
+       </entry>
      </row>
 
      <row>
       <entry><structfield>most_common_freqs</structfield></entry>
       <entry><type>real[]</type></entry>
       <entry></entry>
-      <entry>Liste de fréquences des valeurs les plus courantes,
+      <entry>Liste de fréquences des valeurs ou éléments les plus courantes,
        c'est-à-dire le nombre d'occurrences de chacune divisé par le nombre
        total de lignes. (NULL lorsque
        <structfield>most_common_vals</structfield> l'est.)
+       For some datatypes such as <type>tsvector</>, it can also store some
+       additional information, making it longer than the
+       <structfield>most_common_vals</> array.
      </entry>
      </row>
 
@@ -7021,13 +7345,13 @@
       <entry><structfield>hasrules</structfield></entry>
       <entry><type>boolean</type></entry>
       <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.relhasrules</literal></entry>
-      <entry>Vrai si la table dispose de règles</entry>
+      <entry>Vrai si la table dispose (ou disposait) de règles</entry>
      </row>
      <row>
       <entry><structfield>hastriggers</structfield></entry>
       <entry><type>boolean</type></entry>
       <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.reltriggers</literal></entry>
-      <entry>Vrai si la table dispose de déclencheurs</entry>
+      <entry>Vrai si la table dispose (ou disposait) de déclencheurs</entry>
      </row>
     </tbody>
    </tgroup>
@@ -7232,6 +7556,91 @@
 
  </sect1>
 
+ <sect1 id="view-pg-user-mappings">
+  <title><structname>pg_user_mappings</structname></title>
+
+  <indexterm zone="view-pg-user-mappings">
+   <primary>pg_user_mappings</primary>
+  </indexterm>
+
+  <para>
+   The view <structname>pg_user_mappings</structname> provides access
+   to information about user mappings.  This is essentially a publicly
+   readable view of
+   <link linkend="catalog-pg-user-mapping"><structname>pg_user_mapping</structname></link>
+   that leaves out the options field if the user has no rights to use
+   it.
+  </para>
+
+  <table>
+   <title><structname>pg_user_mappings</> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Type</entry>
+      <entry>References</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><structfield>umid</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-user-mapping"><structname>pg_user_mapping</structname></link>.oid</literal></entry>
+      <entry>OID of the user mapping</entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvid</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link>.oid</literal></entry>
+      <entry>
+       The OID of the foreign server that contains this mapping
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>srvname</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry></entry>
+      <entry>
+       Name of the foreign server
+      </entry>
+     </row>
+
+     <row>
+      <entry><structfield>umuser</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.oid</literal></entry>
+      <entry>OID of the local role being mapped, 0 if the user mapping is public</entry>
+     </row>
+
+     <row>
+      <entry><structfield>usename</structfield></entry>
+      <entry><type>name</type></entry>
+      <entry></entry>
+      <entry>Name of the local user to be mapped</entry>
+     </row>
+
+     <row>
+      <entry><structfield>umoptions</structfield></entry>
+      <entry><type>text[]</type></entry>
+      <entry></entry>
+      <entry>
+       User mapping specific options, as <quote>keyword=value</>
+       strings, if the current user is the owner of the foreign
+       server, else null.
+      </entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+
  <sect1 id="view-pg-views">
   <title><structname>pg_views</structname></title>
 
@@ -7240,12 +7649,12 @@
   </indexterm>
 
   <para>
-   La vue <structname>pg_views</structname> fournit un accès aux
-   informations utiles concernant les vues de la base de données.
+   The view <structname>pg_views</structname> provides access to
+   useful information about each view in the database.
   </para>
 
   <table>
-   <title>Colonnes de <structname>pg_views</structname></title>
+   <title><structname>pg_views</> Columns</title>
 
    <tgroup cols="4">
     <colspec colnum="1" colwidth="0.7*"/>

Modified: traduc/trunk/postgresql/config.xml
===================================================================
--- traduc/trunk/postgresql/config.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/config.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -25,8 +25,8 @@
 
    <para>
     Tous les noms de paramètres sont insensibles à la casse. Chaque
-    paramètre prend une valeur d'un de ces quatre types&nbsp;: booléen, entier,
-    nombre à virgule flottante ou chaîne de caractères. Les unités par défaut
+    paramètre prend une valeur d'un de ces cinq types&nbsp;: booléen, entier,
+    nombre à virgule flottante, chaîne de caractères ou énumération. Les unités par défaut
     peuvent être récupérées en référençant <literal>pg_settings.unit</literal>.
     Les valeurs booléennes peuvent être <literal>ON</literal>, <literal>OFF</literal>,
     <literal>TRUE</literal>, <literal>FALSE</literal>, <literal>YES</literal>,
@@ -38,8 +38,9 @@
    <para>
     Certains paramètres indiquent une valeur de taille mémoire ou de durée.
     Ils ont chacun une unité implicite, soit Ko, soit blocs (typiquement
-    8&nbsp;Ko), soit millisecondes, soit secondes, soit minutes. Pour
-    simplifier la saisie, une unité différente peut être indiquée
+    8&nbsp;Ko), soit millisecondes, soit secondes, soit minutes. Default units
+    can be found by referencing <structname>pg_settings</>.<structfield>unit</>.
+    Pour simplifier la saisie, une unité différente peut être indiquée
     de façon explicite. Les unités mémoire valides sont <literal>kB</literal>
     (kilo-octets), <literal>MB</literal> (Méga-octets) et
     <literal>GB</literal> (Giga-octets)&nbsp;; les
@@ -51,6 +52,14 @@
    </para>
 
    <para>
+    Parameters of type <quote>enum</> are specified in the same way as string
+    parameters, but are restricted to a limited set of values.  The allowed
+    values can be found
+    from <structname>pg_settings</>.<structfield>enumvals</>.
+    Enum parameter values are case-insensitive.
+   </para>
+
+   <para>
     Une façon d'initialiser ces paramètres est d'éditer le fichier
     <filename>postgresql.conf</filename>
     <indexterm><primary>postgresql.conf</primary></indexterm>
@@ -172,7 +181,8 @@
     paramètres de session à l'exécution. Elle est équivalente à <command>SHOW</command>
     et <command>SET</command> mais peut être plus facile à utiliser parce qu'elle
     peut être jointe avec d'autres tables et que ses lignes peuvent être
-    sélectionnées en utilisant des conditions personnalisées.
+    sélectionnées en utilisant des conditions personnalisées. It also contains more information about
+    what values are allowed for the parameters.
    </para>
    </sect1>
     
@@ -590,6 +600,7 @@
           Active les connexions <acronym>SSL</acronym>. Lire la
 	  <xref linkend="ssl-tcp"/> avant de l'utiliser. Désactivé par défaut.
           Ce paramètre ne peut être configuré qu'au lancement du serveur.
+	  <acronym>SSL</> communication is only possible with TCP/IP connections.
          </para>
        </listitem>
      </varlistentry>
@@ -628,21 +639,6 @@
        </listitem>
      </varlistentry>
 
-     <varlistentry id="guc-krb-realm" xreflabel="krb_realm">
-      <term><varname>krb_realm</varname> (<type>string</type>)</term>
-      <listitem>
-      <indexterm>
-       <primary>paramètre de configuration <varname>krb_realm</varname></primary>
-      </indexterm>
-       <para>
-        Configure le domaine pour l'authentification Kerberos, GSSAPI et SSPI.
-        Voir <xref linkend="kerberos-auth"/>, <xref linkend="gssapi-auth"/> et
-	<xref linkend="sspi-auth"/> pour les détails. Ce paramètre ne peut
-	être configuré qu'au lancement du serveur.
-       </para>
-      </listitem>
-     </varlistentry>
-
      <varlistentry id="guc-krb-server-keyfile" xreflabel="krb_server_keyfile">
        <term><varname>krb_server_keyfile</varname> (<type>string</type>)</term>
        <listitem>
@@ -654,7 +650,8 @@
            Configure l'emplacement du fichier contenant la clé secrète du
            serveur Kerberos. Voir la <xref linkend="kerberos-auth"/> et la
            la <xref linkend="gssapi-auth"/> pour les
-           détails. Ce paramètre ne peut être configuré qu'au lancement
+           détails. Ce paramètre ne peut être configuré in the
+           <filename>postgresql.conf</> file et au lancement
 	   du serveur.
          </para>
        </listitem>
@@ -668,31 +665,13 @@
       </indexterm>
        <para>
         Configure le nom du service Kerberos. Voir la <xref linkend="kerberos-auth"/>
-        pour les détails. Ce paramètre ne peut être configuré qu'au lancement
+        pour les détails. Ce paramètre ne peut être configuré in the
+        <filename>postgresql.conf</> file ou au lancement
 	du serveur.
        </para>
       </listitem>
      </varlistentry>
 
-     <varlistentry id="guc-krb-server-hostname" xreflabel="krb_server_hostname">
-      <term><varname>krb_server_hostname</varname> (<type>string</type>)</term>
-      <listitem>
-      <indexterm>
-       <primary>paramètre de configuration <varname>krb_server_hostname</varname></primary>
-      </indexterm>
-       <para>
-        Configure la partie du nom de l'hôte du service principal.
-        Ceci, combiné avec <varname>krb_srvname</varname>, est utilisé pour
-	engendrer le service principal complet, c'est-à-dire
-        <varname>krb_srvname</varname><literal>/</literal><varname>krb_server_hostname</varname><literal>@</literal>REALM.
-        Sans configuration, le comportement par défaut autorise tout service
-        principal correspondant à une entrée dans la table des clés. Voir la
-	<xref linkend="kerberos-auth"/> pour les détails. Ce paramètre ne peut
-        être configuré qu'au lancement du serveur.
-       </para>
-      </listitem>
-     </varlistentry>
-
      <varlistentry id="guc-krb-caseins-users" xreflabel="krb_caseins_users">
       <term><varname>krb_caseins_users</varname> (<type>boolean</type>)</term>
       <listitem>
@@ -702,7 +681,8 @@
        <para>
         Indique si les noms des utilisateurs Kerberos et GSSAPI doivent être traités en
 	respectant la casse. Désactivé par défaut (insensible à la casse, valeur
-	<literal>off</literal>), ce paramètre ne peut être configuré qu'au
+	<literal>off</literal>), ce paramètre ne peut être configuré 
+	in the <filename>postgresql.conf</> file et qu'au
 	lancement du serveur.
        </para>
       </listitem>
@@ -733,6 +713,17 @@
        </para>
 
        <para>
+        <varname>db_user_namespace</> causes the client's and
+        server's user name representation to differ.
+        Authentication checks are always done with the server's user name
+        so authentication methods must be configured for the
+        server's user name, not the client's.  Because
+        <literal>md5</> uses the user name as salt on both the
+        client and server, <literal>md5</> cannot be used with
+        <varname>db_user_namespace</>.
+       </para>
+
+       <para>
         Ce paramètre activé, il reste possible de créer des utilisateurs
         globaux ordinaires. Il suffit pour cela d'ajouter
 	<literal>@</literal> au nom du client. Le <literal>@</literal> est
@@ -770,8 +761,7 @@
 	utilise comme mémoire partagée. La valeur par défaut, en général 32&nbsp;Mo,
         peut être automatiquement abaissée si la configuration du noyau ne la supporte
         pas (déterminé lors de l'exécution de l'<application>initdb</application>).
-        Ce paramètre doit être au minimum de 128&nbsp;Ko + 16&nbsp;Ko par
-	<xref linkend="guc-max-connections"/>. (Des valeurs personnalisées de
+        Ce paramètre doit être au minimum de 128&nbsp;Ko. (Des valeurs personnalisées de
         <symbol>BLCKSZ</symbol> agissent sur ce minimum.) Des
         valeurs significativement plus importantes que ce minimum sont
         généralement nécessaires pour de bonnes performances. Plusieurs dizaines de
@@ -959,99 +949,7 @@
 
      </variablelist>
      </sect2>
-     <sect2 id="runtime-config-resource-fsm">
-     <title>Carte de l'espace libre (<foreignphrase>Free Space Map</foreignphrase>)</title>
 
-     <indexterm>
-      <primary>carte de l'espace libre</primary>
-     </indexterm>
-
-     <indexterm>
-      <primary>Free Space Map</primary>
-     </indexterm>
-
-     <indexterm>
-      <primary>FSM</primary>
-     </indexterm>
-
-     <para>
-      Ces paramètres contrôlent la taille de la
-      <firstterm>carte de l'espace libre</firstterm> partagée
-      (<acronym>FSM</acronym>, acronyme de <foreignphrase>Free Space
-      Map</foreignphrase>). Cette carte 
-      conserve la trace des emplacements inutilisés dans
-      la base de données. Une carte trop petite peut conduire la base de données
-      à consommer de plus en plus d'espace disque car l'espace libre qui n'est pas dans
-      la carte ne peut pas être réutilisé&nbsp;; de ce fait, 
-      <productname>PostgreSQL</productname> réclame de l'espace disque
-      supplémentaire au système d'exploitation lorsqu'il stocke de nouvelles données.
-     </para>
-     <para>
-      Les dernières lignes affichées par la commande
-      <command>VACUUM VERBOSE</command> sur la base entière peuvent
-      aider à déterminer si les paramètres courants sont adéquats.
-      Un message <literal>NOTICE</literal> est
-      également affiché lors d'une telle opération si le paramétrage est
-      trop faible.
-     </para>
-
-     <para>
-      Augmenter ce paramètre peut toutefois conduire
-      <productname>PostgreSQL</productname> à réclamer plus de mémoire
-      partagée <systemitem class="osname">System V</systemitem>
-      ou de sémaphores que ne le permet la configuration par défaut du système
-      d'exploitation. Voir la <xref linkend="sysvipc"/> pour plus
-      d'informations sur la façon d'ajuster ces paramètres, si nécessaire.
-     </para>
-
-     <variablelist>
-     <varlistentry id="guc-max-fsm-pages" xreflabel="max_fsm_pages">
-      <term><varname>max_fsm_pages</varname> (<type>integer</type>)</term>
-      <listitem>
-      <indexterm>
-        <primary>paramètre de configuration <varname>max_fsm_pages</varname></primary>
-      </indexterm>
-       <para>
-        Initialise le nombre maximum de pages disque pour lesquelles
-        l'espace libre est tracé dans la carte partagée de l'espace libre.
-        Six octets de mémoire partagée sont consommés par emplacement
-        de page. Ce paramétrage doit valoir au moins
-        16&nbsp;*&nbsp;<varname>max_fsm_relations</varname>.
-        <application>initdb</application> teste plusieurs valeurs entre 20 000
-        et 200 000. La valeur par défaut sélectionnée dépend principalement de
-        la mémoire disponible.
-        Ce paramètre ne peut être configuré qu'au lancement du serveur.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry id="guc-max-fsm-relations" xreflabel="max_fsm_relations">
-      <term><varname>max_fsm_relations</varname> (<type>integer</type>)</term>
-      <listitem>
-      <indexterm>
-        <primary>paramètre de configuration <varname>max_fsm_relations</varname></primary>
-      </indexterm>
-       <para>
-        Initialise le nombre maximum de relations (tables et index) pour
-	lesquelles l'espace libre est tracé dans la carte partagée. Environ
-	70 octets de mémoire partagée sont consommés par emplacement. La valeur
-	par défaut est de 1000 relations. Ce paramètre ne peut être configuré qu'au
-	lancement du serveur.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     </variablelist>
-
-     <note>
-      <para>
-       Voir la commande <xref linkend="sql-vacuum" endterm="sql-vacuum-title"/>
-       pour des informations sur la configuration de ce paramètre.
-      </para>
-     </note>
-
-     </sect2>
-
      <sect2 id="runtime-config-resource-kernel">
      <title>Usage des ressources du noyau</title>
      <variablelist>
@@ -1183,7 +1081,8 @@
       </para>
 
       <para>
-        Cette fonctionnalité est désactivée par défaut. Pour l'activer,
+        Cette fonctionnalité est désactivée par défaut for manually issued
+      <command>VACUUM</command> commands. Pour l'activer,
 	la variable <varname>vacuum_cost_delay</varname>  doit être
 	initialisée à une valeur différente de zéro.
       </para>
@@ -1205,6 +1104,13 @@
 	      à une valeur qui n'est pas un multiple de 10 conduit alors au
 	      même résultat que de le configurer au multiple de 10 supérieur.
             </para>
+	    
+        <para>
+         When using cost-based vacuuming, appropriate values for
+         <varname>vacuum_cost_delay</> are usually quite small, perhaps
+         10 or 20 milliseconds.  Adjusting vacuum's resource consumption
+         is best done by changing the other vacuum cost parameters.
+        </para>
           </listitem>
         </varlistentry>
       
@@ -1398,6 +1304,54 @@
        ce qui retarde les requêtes interactives.
       </para>
     </sect2>
+
+    <sect2 id="runtime-config-resource-async-behavior">
+     <title>Asynchronous Behavior</title>
+
+     <variablelist>
+      <varlistentry id="guc-effective-io-concurrency" xreflabel="effective_io_concurrency">
+       <term><varname>effective_io_concurrency</varname> (<type>integer</type>)</term>
+       <indexterm>
+        <primary><varname>effective_io_concurrency</> configuration parameter</primary>
+       </indexterm>
+       <listitem>
+        <para>
+         Sets the number of concurrent disk I/O operations that
+         <productname>PostgreSQL</> expects can be executed
+         simultaneously.  Raising this value will increase the number of I/O
+         operations that any individual <productname>PostgreSQL</> session
+         attempts to initiate in parallel.  The allowed range is 1 to 1000,
+         or zero to disable issuance of asynchronous I/O requests.
+        </para>
+
+        <para>
+         A good starting point for this setting is the number of separate
+         drives comprising a RAID 0 stripe or RAID 1 mirror being used for the
+         database.  (For RAID 5 the parity drive should not be counted.)
+         However, if the database is often busy with multiple queries issued in
+         concurrent sessions, lower values may be sufficient to keep the disk
+         array busy.  A value higher than needed to keep the disks busy will
+         only result in extra CPU overhead.
+        </para>
+
+        <para>
+         For more exotic systems, such as memory-based storage or a RAID array
+         that is limited by bus bandwidth, the correct value might be the
+         number of I/O paths available.  Some experimentation may be needed
+         to find the best value.
+        </para>
+
+        <para>
+         Asynchronous I/O depends on an effective <function>posix_fadvise</>
+         function, which some operating systems lack.  If the function is not
+         present then setting this parameter to anything but zero will result
+         in an error.  On some operating systems the function is present but
+         does not actually do anything (e.g. Solaris).
+        </para>
+       </listitem>
+      </varlistentry>
+     </variablelist>
+    </sect2>
    </sect1>
 
    <sect1 id="runtime-config-wal">
@@ -1514,7 +1468,7 @@
      </varlistentry>
     
      <varlistentry id="guc-wal-sync-method" xreflabel="wal_sync_method">
-      <term><varname>wal_sync_method</varname> (<type>string</type>)</term>
+      <term><varname>wal_sync_method</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>wal_sync_method</varname></primary>
@@ -2353,7 +2307,7 @@
         accroissent le temps nécessaire à l'exécution 
 	d'<command>ANALYZE</command> mais peuvent permettre d'améliorer la
 	qualité des estimations du planificateur. La valeur par
-	défaut est 10. Pour plus d'informations sur l'utilisation des
+	défaut est 100. Pour plus d'informations sur l'utilisation des
 	statistiques par le planificateur de requêtes, se référer à la
 	<xref linkend="planner-stats"/>.
        </para>
@@ -2361,7 +2315,7 @@
      </varlistentry>
 
      <varlistentry id="guc-constraint-exclusion" xreflabel="constraint_exclusion">
-      <term><varname>constraint_exclusion</varname> (<type>boolean</type>)</term>
+      <term><varname>constraint_exclusion</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>constraint exclusion</primary>
@@ -2370,20 +2324,21 @@
        <primary>paramètre de configuration <varname>constraint_exclusion</varname></primary>
       </indexterm>
        <para>
-        Active ou désactive l'utilisation par le planificateur des contraintes
-	de table pour optimiser les requêtes. Désactivé par défaut.
-	(<literal>off</literal>).
+        Controls the query planner's use of table constraints to
+        optimize queries.
+        The allowed values of <varname>constraint_exclusion</> are
+        <literal>on</> (examine constraints for all tables),
+        <literal>off</> (never examine constraints), and
+        <literal>partition</> (examine constraints only for inheritance child
+        tables and <literal>UNION ALL</> subqueries).
+        <literal>partition</> is the default setting.
        </para>
 
        <para>
-        Si ce paramètre est activé (<literal>on</literal>), le planificateur compare
-	les conditions de la requête avec les contraintes <literal>CHECK</literal> de
-	la table et se dispense de parcourir les tables dont les conditions sont en
-	contradiction avec les contraintes.
-       </para>
-       
-       <para>
-        Par exemple&nbsp;:
+        When this parameter allows it for a particular table, the planner
+        compares query conditions with the table's <literal>CHECK</>
+        constraints, and omits scanning tables for which the conditions
+        contradict the constraints.  For example:
 
 <programlisting>CREATE TABLE parent(clef integer, ...);
 CREATE TABLE fils1000(check (clef between 1000 and 1999)) INHERITS(parent);
@@ -2398,21 +2353,42 @@
        </para>
 
        <para>
-        Actuellement, <varname>constraint_exclusion</varname> est désactivé par défaut
-        (<literal>off</literal>) à cause du coût relativement élevé des
-	vérifications de contraintes, qui, dans de nombreux cas, ne font pas
-	gagner de temps. Il est recommandé de ne l'activer que lors de
-	l'utilisation de tables partitionées conçues pour tirer parti de cette
-	fonctionnalité.
+       <para>
+        Currently, constraint exclusion is enabled by default
+        only for cases that are often used to implement table partitioning.
+        Turning it on for all tables imposes extra planning overhead that is
+        quite noticeable on simple queries, and most often will yield no
+        benefit for simple queries.  If you have no partitioned tables
+        you might prefer to turn it off entirely.
        </para>
 
        <para>
-        Se référer à la <xref linkend="ddl-partitioning"/> pour plus d'informations
-        sur l'utilisation des exclusions par contraintes et du partitionement.
+        Refer to <xref linkend="ddl-partitioning-constraint-exclusion"> for
+        more information on using constraint exclusion and partitioning.
        </para>
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-cursor-tuple-fraction" xreflabel="cursor_tuple_fraction">
+      <term><varname>cursor_tuple_fraction</varname> (<type>floating point</type>)</term>
+      <indexterm>
+       <primary><varname>cursor_tuple_fraction</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Sets the planner's estimate of the fraction of a cursor's rows that
+        will be retrieved.  The default is 0.1.  Smaller values of this
+        setting bias the planner towards using <quote>fast start</> plans
+        for cursors, which will retrieve the first few rows quickly while
+        perhaps taking a long time to fetch all rows.  Larger values
+        put more emphasis on the total estimated time.  At the maximum
+        setting of 1.0, cursors are planned exactly like regular queries,
+        considering only the total estimated time and not how soon the
+        first rows might be delivered.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-from-collapse-limit" xreflabel="from_collapse_limit">
       <term><varname>from_collapse_limit</varname> (<type>integer</type>)</term>
       <listitem>
@@ -2584,17 +2560,18 @@
 	   indiquer des noms de fichiers horodatés.  (S'il y a des
 	   échappements <literal>%</literal> dépendant des fuseaux horaires, le
 	   calcul se fait dans le fuseau précisé par
-	   <xref linkend="guc-log-timezone"/>.) Si aucun échappement
-	   <literal>%</literal> n'est présent,
-	   <productname>PostgreSQL</productname> ajoute comme suffixe
-	   l'<foreignphrase>epoch</foreignphrase>
-	   de la création du nouveau journal. Par exemple, si
-	   <varname>log_filename</varname> vaut <literal>server_log</literal>,
-	   alors le nom de fichier est
-	   <literal>server_log.1093827753</literal> pour un journal commençant
-	   le dimanche 29 août à 19:02:33 2004 MST.
-	   Ce paramètre ne peut être configuré que dans le fichier
-	   <filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
+	   <xref linkend="guc-log-timezone"/>.)
+        Note that the system's <systemitem>strftime</systemitem> is not used
+        directly, so platform-specific (nonstandard) extensions do not work.
+       </para>
+       <para>
+        If you specify a file name without escapes, you should plan to
+        use a log rotation utility to avoid eventually filling the
+        entire disk.  In releases prior to 8.4, if
+        no <literal>%</literal> escapes were
+        present, <productname>PostgreSQL</productname> would append
+        the epoch of the new log file's creation time, but this is no
+        longer the case.
          </para>
        <para>
         Si la sortie au format CSV est activée dans
@@ -2604,6 +2581,10 @@
 	le suffixe est simplement remplacé.) Dans le cas de l'exemple ci-dessus,
 	le nom du fichier CSV est <literal>server_log.1093827753.csv</literal>.
        </para>
+       <para>
+        This parameter can only be set in the <filename>postgresql.conf</>
+        file or on the server command line.
+       </para>
        </listitem>
      </varlistentry>
 
@@ -2698,7 +2679,7 @@
      </varlistentry>
 
      <varlistentry id="guc-syslog-facility" xreflabel="syslog_facility">
-       <term><varname>syslog_facility</varname> (<type>string</type>)</term>
+       <term><varname>syslog_facility</varname> (<type>enum</type>)</term>
        <listitem>
          <indexterm>
            <primary>paramètre de configuration <varname>syslog_facility</varname></primary>
@@ -2746,7 +2727,7 @@
      <variablelist>
 
      <varlistentry id="guc-client-min-messages" xreflabel="client_min_messages">
-      <term><varname>client_min_messages</varname> (<type>string</type>)</term>
+      <term><varname>client_min_messages</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>client_min_messages</varname></primary>
@@ -2767,7 +2748,7 @@
      </varlistentry>
 
      <varlistentry id="guc-log-min-messages" xreflabel="log_min_messages">
-      <term><varname>log_min_messages</varname> (<type>string</type>)</term>
+      <term><varname>log_min_messages</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>log_min_messages</varname></primary>
@@ -2780,7 +2761,7 @@
         <literal>ERROR</literal>, <literal>LOG</literal>, <literal>FATAL</literal> et
         <literal>PANIC</literal>. Chaque niveau inclut tous les niveaux qui le
         suivent. Plus on progresse dans la liste, plus le nombre de messages
-	envoyés est faible. <literal>NOTICE</literal> est la valeur par
+	envoyés est faible. <literal>WARNING</literal> est la valeur par
 	défaut. <literal>LOG</literal> a ici une portée différente de celle
 	de <varname>client_min_messages</varname>. Seuls les superutilisateurs peuvent
         modifier la valeur de ce paramètre.
@@ -2789,7 +2770,7 @@
      </varlistentry>
 
      <varlistentry id="guc-log-error-verbosity" xreflabel="log_error_verbosity">
-      <term><varname>log_error_verbosity</varname> (<type>string</type>)</term>
+      <term><varname>log_error_verbosity</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>log_error_verbosity</varname></primary>
@@ -2805,7 +2786,7 @@
      </varlistentry>
 
      <varlistentry id="guc-log-min-error-statement" xreflabel="log_min_error_statement">
-      <term><varname>log_min_error_statement</varname> (<type>string</type>)</term>
+      <term><varname>log_min_error_statement</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>log_min_error_statement</varname></primary>
@@ -2999,7 +2980,6 @@
       <term><varname>debug_print_parse</varname> (<type>boolean</type>)</term>
       <term><varname>debug_print_rewritten</varname> (<type>boolean</type>)</term>
       <term><varname>debug_print_plan</varname> (<type>boolean</type>)</term>
-      <term><varname>debug_pretty_print</varname> (<type>boolean</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>debug_print_parse</varname></primary>
@@ -3010,20 +2990,33 @@
       <indexterm>
        <primary>paramètre de configuration <varname>debug_print_plan</varname></primary>
       </indexterm>
+       <para>
+        Ces paramètres activent plusieurs sorties de débogage.
+        When set, they print the resulting parse tree, the query rewriter
+        output, or the execution plan for each executed query.
+        These messages are emitted at <literal>LOG</> message level, so by
+        default they will appear in the server log but will not be sent to the
+        client.  You can change that by adjusting
+        <xref linkend="guc-client-min-messages"> and/or
+        <xref linkend="guc-log-min-messages">.
+	Ces paramètres sont désactivés par défaut.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><varname>debug_pretty_print</varname> (<type>boolean</type>)</term>
       <indexterm>
-       <primary>paramètre de configuration <varname>debug_pretty_print</varname></primary>
+       <primary><varname>debug_pretty_print</> configuration parameter</primary>
       </indexterm>
+      <listitem>
        <para>
-        Ces paramètres activent plusieurs sorties de débogage. Pour chaque requête
-        exécutée, elles affichent l'arbre d'analyse résultant, la sortie de la
-	réécriture de la requête ou le plan d'exécution.
-        <varname>debug_pretty_print</varname> indente ces affichages pour
-        produire un format de sortie plus lisible mais plus long. 
-        <varname>client_min_messages</varname> ou
-        <varname>log_min_messages</varname> doivent valoir au maximum
-        <literal>DEBUG1</literal> pour que cette sortie soit effectivement
-	envoyée vers le client ou les traces du serveur, respectivement. Ces
-	paramètres sont désactivés par défaut.
+        When set, <varname>debug_pretty_print</varname> indents the messages
+        produced by <varname>debug_print_parse</varname>,
+        <varname>debug_print_rewritten</varname>, or
+        <varname>debug_print_plan</varname>.  This results in more readable
+        but much longer output than the <quote>compact</> format used when
+        it is off.  It is on by default.
        </para>
       </listitem>
      </varlistentry>
@@ -3298,7 +3291,7 @@
      </varlistentry>
 
      <varlistentry id="guc-log-statement" xreflabel="log_statement">
-       <term><varname>log_statement</varname> (<type>string</type>)</term>
+       <term><varname>log_statement</varname> (<type>enum</type>)</term>
        <listitem>
        <indexterm>
          <primary>paramètre de configuration <varname>log_statement</varname></primary>
@@ -3349,13 +3342,15 @@
         <primary>paramètre de configuration <varname>log_temp_files</varname></primary> 
        </indexterm>
        <para>
-        Contrôle si la suppression des fichiers temporaires est tracée. Les
+        Contrôle l'écriture de traces sur l'utilisation des fichiers temporaires. Les
 	fichiers temporaires peuvent être créés pour des tris, des hachages
-	et des résultats temporaires de requête. Zéro implique une trace
+	et des résultats temporaires de requête. A log entry is made for each temporary file when it is deleted.
+        Zéro implique une trace
 	de tous les fichiers temporaires alors qu'une valeur positive ne
 	trace que les fichiers dont la taille est supérieure ou égale au
 	nombre indiqué (en kilo-octets). La valeur par défaut est
         <literal>-1</literal>, ce qui a pour effet de désactiver les traces.
+	Only superusers can change this setting.
        </para>
       </listitem>
      </varlistentry>
@@ -3536,6 +3531,22 @@
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-track-activity-query-size" xreflabel="track_activity_query_size">
+      <term><varname>track_activity_query_size</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>track_activity_query_size</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+       Specifies the number of bytes reserved to track the currently
+       executing command for each active session, for the
+       <structname>pg_stat_activity</>.<structfield>current_query</> field.
+       The default value is 1024. This parameter can only be set at server
+       start.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-track-counts" xreflabel="track_counts">
       <term><varname>track_counts</varname> (<type>boolean</type>)</term>
       <listitem>
@@ -3551,6 +3562,30 @@
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-track-functions" xreflabel="track_functions">
+      <term><varname>track_functions</varname> (<type>enum</type>)</term>
+      <indexterm>
+       <primary><varname>track_functions</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Enables tracking of function call counts and time used. Specify
+        <literal>pl</literal> to track only procedural-language functions,
+        <literal>all</literal> to also track SQL and C language functions.
+        The default is <literal>none</literal>, which disables function
+        statistics tracking.  Only superusers can change this setting.
+       </para>
+
+       <note>
+        <para>
+         SQL-language functions that are simple enough to be <quote>inlined</>
+         into the calling query will not be tracked, regardless of this
+         setting.
+        </para>
+       </note>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-update-process-title" xreflabel="update_process_title">
       <term><varname>update_process_title</varname> (<type>boolean</type>)</term>
       <listitem>
@@ -3567,6 +3602,23 @@
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-stats-temp-directory" xreflabel="stats_temp_directory">
+      <term><varname>stats_temp_directory</varname> (<type>string</type>)</term>
+      <indexterm>
+       <primary><varname>stats_temp_directory</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Sets the directory to store temporary statistics data in. This can be
+        a path relative to the data directory or an absolute path. The default
+        is <filename>pg_stat_tmp</filename>. Pointing this at a RAM based
+        filesystem will decrease physical I/O requirements and can lead to
+        improved performance.
+        This parameter can only be set in the <filename>postgresql.conf</>
+        file or on the server command line.
+       </para>
+      </listitem>
+     </varlistentry>
 
      </variablelist>
     </sect2>
@@ -3718,7 +3770,7 @@
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
 	Il est possible de surcharger ce paramètre pour toute table par
-	l'insertion de données dans <structname>pg_autovacuum</structname>.
+	changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -3736,7 +3788,7 @@
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
 	Il est possible de surcharger ce paramètre pour toute table par
-        l'insertion de données dans <structname>pg_autovacuum</structname>.
+        changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -3755,7 +3807,7 @@
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
 	Il est possible de surcharger ce paramètre pour toute table par
-	l'insertion de données dans <structname>pg_autovacuum</structname>.
+	changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -3774,7 +3826,7 @@
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
 	Il est possible de surcharger ce paramètre pour toute table par
-	l'insertion de données dans <structname>pg_autovacuum</structname>.
+	changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -3794,8 +3846,7 @@
 	processus autovacuum pour éviter ce bouclage même si l'autovacuum est désactivé. La
 	valeur par défaut est de 200 millions de transactions. Ce paramètre
 	n'est lu qu'au démarrage du serveur mais il peut être diminué pour
-	toute table en ajoutant des entrées dans
-	<structname>pg_autovacuum</structname>. Pour plus d'information, voir
+	toute table by changing storage parameters. Pour plus d'information, voir
 	<xref linkend="vacuum-for-wraparound"/>.
        </para>
       </listitem>
@@ -3815,7 +3866,7 @@
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
 	Il est possible de le surcharger pour toute table par
-	l'insertion de données dans <structname>pg_autovacuum</structname>.
+	changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -3837,8 +3888,7 @@
 	cette variable.
 	Ce paramètre ne peut être configuré que dans le fichier
 	<filename>postgresql.conf</filename> ou indiqué sur la ligne de commande.
-	Il est possible de le surcharger pour toute table par l'insertion de
-	données dans <structname>pg_autovacuum</structname>.
+	Il est possible de le surcharger pour toute table par changing storage parameters.
        </para>
       </listitem>
      </varlistentry>
@@ -4043,7 +4093,7 @@
     </varlistentry>
 
     <varlistentry id="guc-default-transaction-isolation" xreflabel="default_transaction_isolation">
-      <term><varname>default_transaction_isolation</varname> (<type>string</type>)</term>
+      <term><varname>default_transaction_isolation</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
         <primary>niveau d'isolation de la transaction</primary>
@@ -4093,7 +4143,7 @@
      </varlistentry>
 
      <varlistentry id="guc-session-replication-role" xreflabel="session_replication_role">
-      <term><varname>session_replication_role</varname> (<type>string</type>)</term>
+      <term><varname>session_replication_role</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm>
        <primary>paramètre de configuration <varname>session_replication_role</varname></primary>
@@ -4135,6 +4185,27 @@
       </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-vacuum-freeze-table-age" xreflabel="vacuum_freeze_table_age">
+      <term><varname>vacuum_freeze_table_age</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>vacuum_freeze_table_age</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        <command>VACUUM</> performs a whole-table scan if the table's
+        <structname>pg_class</>.<structfield>relfrozenxid</> field has reached
+        the age specified by this setting.  The default is 150 million
+        transactions.  Although users can set this value anywhere from zero to
+        one billion, <command>VACUUM</> will silently limit the effective value
+        to 95% of <xref linkend="guc-autovacuum-freeze-max-age">, so that a
+        periodical manual <command>VACUUM</> has a chance to run before an
+        anti-wraparound autovacuum is launched for the table. For more
+        information see
+        <xref linkend="vacuum-for-wraparound">.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-vacuum-freeze-min-age" xreflabel="vacuum_freeze_min_age">
       <term><varname>vacuum_freeze_min_age</varname> (<type>integer</type>)</term>
       <listitem>
@@ -4145,7 +4216,7 @@
 	Indique l'âge limite (en transactions) que <command>VACUUM</command>
         doit utiliser pour décider de remplacer les ID de transaction par
         <literal>FrozenXID</literal> lors du parcours d'une table.
-        La valeur par défaut est 100 millions. Bien que les
+        La valeur par défaut est 50 millions. Bien que les
 	utilisateurs puissent configurer une valeur quelconque comprise entre zéro et
         1 milliard, <command>VACUUM</command> limite silencieusement la
 	valeur réelle à la moitié de la valeur de
@@ -4157,7 +4228,7 @@
      </varlistentry>
 
      <varlistentry id="guc-xmlbinary" xreflabel="xmlbinary">
-      <term><varname>xmlbinary</varname> (<type>string</type>)</term>
+      <term><varname>xmlbinary</varname> (<type>enum</type>)</term>
       <listitem>
        <indexterm> 
         <primary>paramètre de configuration <varname>xmlbinary</varname></primary> 
@@ -4184,7 +4255,7 @@
      </varlistentry>
 
      <varlistentry id="guc-xmloption" xreflabel="xmloption">
-      <term><varname>xmloption</varname> (<type>string</type>)</term>
+      <term><varname>xmloption</varname> (<type>enum</type>)</term>
       <listitem>
        <indexterm> 
         <primary>paramètre de configuration <varname>xmloption</varname></primary> 
@@ -4251,6 +4322,36 @@
        </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-intervalstyle" xreflabel="IntervalStyle">
+      <term><varname>IntervalStyle</varname> (<type>enum</type>)</term>
+      <indexterm>
+       <primary><varname>IntervalStyle</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Sets the display format for interval values.
+        The value <literal>sql_standard</> will produce
+        output matching <acronym>SQL</acronym> standard interval literals.
+        The value <literal>postgres</> (which is the default) will produce
+        output matching <productname>PostgreSQL</> releases prior to 8.4
+        when the <xref linkend="guc-datestyle">
+        parameter was set to <literal>ISO</>.
+        The value <literal>postgres_verbose</> will produce output
+        matching <productname>PostgreSQL</> releases prior to 8.4
+        when the <varname>DateStyle</>
+        parameter was set to non-<literal>ISO</> output.
+        The value <literal>iso_8601</> will produce output matching the time
+        interval <quote>format with designators</> defined in section
+        4.4.3.2 of ISO 8601.
+       </para>
+       <para>
+        The <varname>IntervalStyle</> parameter also affects the
+        interpretation of ambiguous interval input.  See
+        <xref linkend="datatype-interval-input"> for more information.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-timezone" xreflabel="timezone">
        <term><varname>timezone</varname> (<type>string</type>)</term>
        <listitem>
@@ -4402,8 +4503,9 @@
       </indexterm>
        <para>
         Initialise la locale à utiliser pour le formatage des valeurs de date et
-        d'heure (actuellement, ce paramétrage est sans effet, mais il pourrait
-        en avoir un dans le futur). Les valeurs acceptables dépendent du système&nbsp;; voir
+        d'heure, for example
+        with the <function>to_char</function> family of
+        functions. Les valeurs acceptables dépendent du système&nbsp;; voir
         la <xref linkend="locale"/> pour plus d'informations. Si cette variable est
         initialisée à une chaîne vide (valeur par défaut), alors la valeur est héritée de
         l'environnement d'exécution du serveur.
@@ -4439,20 +4541,6 @@
 
      <variablelist>
 
-     <varlistentry id="guc-explain-pretty-print" xreflabel="explain_pretty_print">
-      <term><varname>explain_pretty_print</varname> (<type>boolean</type>)</term>
-      <listitem>
-       <indexterm> 
-        <primary>paramètre de configuration <varname>explain_pretty_print</varname></primary> 
-       </indexterm> 
-       <para>
-        Détermine si <command>EXPLAIN VERBOSE</command> utilise le format indenté ou
-        non pour l'affichage des arbres détaillés des requêtes. Positionné à
-	<literal>on</literal> par défaut.
-       </para>
-      </listitem>
-     </varlistentry>
-
      <varlistentry id="guc-dynamic-library-path" xreflabel="dynamic_library_path">
        <term><varname>dynamic_library_path</varname> (<type>string</type>)</term>
        <listitem>
@@ -4729,7 +4817,7 @@
      </varlistentry>
 
      <varlistentry id="guc-backslash-quote" xreflabel="backslash_quote">
-      <term><varname>backslash_quote</varname> (<type>string</type>)</term>
+      <term><varname>backslash_quote</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm><primary>strings</primary><secondary>backslash quotes</secondary></indexterm>
       <indexterm>
@@ -4823,7 +4911,7 @@
      </varlistentry>
 
      <varlistentry id="guc-regex-flavor" xreflabel="regex_flavor">
-      <term><varname>regex_flavor</varname> (<type>string</type>)</term>
+      <term><varname>regex_flavor</varname> (<type>enum</type>)</term>
       <listitem>
       <indexterm><primary>regular expressions</primary></indexterm>
       <indexterm>
@@ -5011,9 +5099,9 @@
          <para>
            Informe sur la construction de <productname>PostgreSQL</productname>
 	   avec le support des dates et heures sur des entiers de 64 bits.
-	   Ce paramètre est configuré par <literal>--enable-integer-datetimes</literal>
+	   Ceci peut être désactivé avec l'option <literal>--disable-integer-datetimes</literal>
 	   au moment de la construction de <productname>PostgreSQL</productname>.
-	   La valeur par défaut est <literal>off</literal>.
+	   La valeur par défaut est <literal>on</literal>.
          </para>
        </listitem>
      </varlistentry>
@@ -5027,7 +5115,7 @@
          <para>
            Affiche la locale utilisée pour le tri des données de type texte.
 	   Voir la <xref linkend="locale"/> pour plus d'informations. La valeur est
-	   déterminée lors de l'initialisation du cluster de bases de données.
+	   déterminée lors de la création d'une base de données.
          </para>
        </listitem>
      </varlistentry>
@@ -5041,8 +5129,8 @@
          <para>
            Affiche la locale qui détermine les classifications de caractères.
 	   Voir la <xref linkend="locale"/> pour plus d'informations. La valeur
-	   est déterminée lors de l'initialisation du cluster de bases de
-	   données. Elle est habituellement identique à
+	   est déterminée lors de la création d'une base de données. Elle est
+	   habituellement identique à
 	   <varname>lc_collate</varname>. Elle peut, toutefois, pour des
 	   applications particulières, être configurée différemment.
          </para>
@@ -5093,6 +5181,22 @@
        </listitem>
      </varlistentry>
 
+     <varlistentry id="guc-segment-size" xreflabel="segment_size">
+      <term><varname>segment_size</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>segment_size</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Reports the number of blocks (pages) that can be stored within a file
+        segment.  It is determined by the value of <literal>RELSEG_SIZE</>
+        when building the server.  The maximum size of a segment file in bytes
+        is equal to <varname>segment_size</> multiplied by
+        <varname>block_size</>; by default this is 1GB.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry id="guc-server-encoding" xreflabel="server_encoding">
        <term><varname>server_encoding</varname> (<type>string</type>)</term>
        <listitem>
@@ -5136,7 +5240,37 @@
        </para>
       </listitem>
      </varlistentry>
+     
+     <varlistentry id="guc-wal-block-size" xreflabel="wal_block_size">
+      <term><varname>wal_block_size</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>wal_block_size</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Reports the size of a WAL disk block.  It is determined by the value
+        of <literal>XLOG_BLCKSZ</> when building the server. The default value
+        is 8192 bytes.
+       </para>
+      </listitem>
+     </varlistentry>
 
+     <varlistentry id="guc-wal-segment-size" xreflabel="wal_segment_size">
+      <term><varname>wal_segment_size</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>wal_segment_size</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Reports the number of blocks (pages) in a WAL segment file.
+        The total size of a WAL segment file in bytes is equal to
+        <varname>wal_segment_size</> multiplied by <varname>wal_block_size</>;
+        by default this is 16MB.  See <xref linkend="wal-configuration"> for
+        more information.
+       </para>
+      </listitem>
+     </varlistentry>
+
      </variablelist>
    </sect1>
 
@@ -5338,16 +5472,162 @@
 
      <varlistentry>
       <term><varname>trace_locks</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>trace_locks</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If on, emit information about lock usage.  Information dumped
+        includes the type of lock operation, the type of lock and the unique
+        identifier of the object being locked or unlocked.  Also included
+        are bitmasks for the lock types already granted on this object as
+        well as for the lock types awaited on this object.  For each lock
+        type a count of the number of granted locks and waiting locks is
+        also dumped as well as the totals.  An example of the log file output
+        is shown here:
+       </para>
+       <para>
+        LOG:  LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
+              grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
+              wait(0) type(AccessShareLock)
+       </para>
+       <para>
+        LOG:  GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
+              grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
+              wait(0) type(AccessShareLock)
+
+       </para>
+       <para>
+        LOG:  UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
+              grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
+              wait(0) type(AccessShareLock)
+       </para>
+       <para>
+        LOG:  CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
+              grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
+              wait(0) type(INVALID)
+       </para>
+       <para>
+        Details of the structure being dumped may be found in
+        src/include/storage/lock.h
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><varname>trace_lwlocks</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>trace_lwlocks</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If on, emit information about lightweight lock usage.  Lightweight
+        locks are intended primarily to provide mutual exclusion of access
+        to shared-memory data structures.
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><varname>trace_userlocks</varname> (<type>boolean</type>)</term>
-      <term><varname>trace_lock_oidmin</varname> (<type>boolean</type>)</term>
-      <term><varname>trace_lock_table</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>trace_userlocks</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If on, emit information about user lock usage.  Output is the same
+        as for <symbol>trace_locks</symbol>, only for user locks.
+       </para>
+       <para>
+        User locks were removed as of PostgreSQL version 8.2.  This option
+        currently has no effect.
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><varname>trace_lock_oidmin</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>trace_lock_oidmin</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If set, do not trace locks for tables below this OID. (use to avoid
+        output on system tables)
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
+      <term><varname>trace_lock_table</varname> (<type>integer</type>)</term>
+      <indexterm>
+       <primary><varname>trace_lock_table</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Unconditionally trace locks on this table (OID).
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><varname>debug_deadlocks</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>debug_deadlocks</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        If set, dumps information about all current locks when a
+        DeadLockTimeout occurs.
+       </para>
+       <para>
+        This parameter is only available if the <symbol>LOCK_DEBUG</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term><varname>log_btree_build_stats</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>log_btree_build_stats</> configuration parameter</primary>
+      </indexterm>
       <listitem>
        <para>
-        D'autres paramètres de trace et de débogage.
+        If set, logs system resource usage statistics (memory and CPU) on
+        various btree operations.
        </para>
+       <para>
+        This parameter is only available if the <symbol>BTREE_BUILD_STATS</symbol>
+        macro was defined when <productname>PostgreSQL</productname> was
+        compiled.
+       </para>
       </listitem>
      </varlistentry>
 

Modified: traduc/trunk/postgresql/func.xml
===================================================================
--- traduc/trunk/postgresql/func.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/func.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -344,7 +344,11 @@
     <literal>IS NULL</literal> est vrai quand l'expression même de la ligne est
     NULL ou quand tous les champs de la ligne sont NULL alors que
     <literal>IS NOT NULL</literal> est vrai quand l'expression même de la ligne est
-    non NULL et que tous les champs de la ligne sont non NULL.
+    non NULL et que tous les champs de la ligne sont non NULL.Because of this behavior,
+    <literal>IS NULL</> and <literal>IS NOT NULL</> do not always return
+    inverse results for row-valued expressions, i.e. a row-valued
+    expression that contains both NULL and non-null values will return false
+    for both tests.
     Cette définition, conforme au standard SQL, est une modification du
     comportement incohérent des versions de <productname>PostgreSQL</productname>
     antérieures à la 8.2.
@@ -622,6 +626,9 @@
     <primary>degrees</primary>
    </indexterm>
    <indexterm>
+    <primary>div</primary>
+   </indexterm>
+   <indexterm>
     <primary>exp</primary>
    </indexterm>
    <indexterm>
@@ -732,6 +739,15 @@
       </row>
 
       <row>
+       <entry><literal><function>div</function>(<parameter>y</parameter> <type>numeric</>,
+        <parameter>x</parameter> <type>numeric</>)</literal></entry>
+       <entry><type>numeric</></entry>
+       <entry>integer quotient of <parameter>y</parameter>/<parameter>x</parameter></entry>
+       <entry><literal>div(9,4)</literal></entry>
+       <entry><literal>2</literal></entry>
+      </row>
+
+      <row>
        <entry><literal><function>exp</function>(<type>dp</type> ou
 <type>numeric</type>)</literal></entry>
        <entry>(identique à l'argument)</entry>
@@ -859,7 +875,7 @@
        <entry><type>void</type></entry>
        <entry>initialise les appels à
        <literal>random()</literal> à suivre
-        (valeur entre 0 et 1.0)</entry>
+        (valeur entre -1.0 et 1.0)</entry>
        <entry><literal>setseed(0.54823)</literal></entry>
        <entry><literal></literal></entry>
       </row>
@@ -1356,6 +1372,9 @@
     <primary>quote_literal</primary>
    </indexterm>
    <indexterm>
+    <primary>quote_nullable</primary>
+   </indexterm>
+   <indexterm>
     <primary>repeat</primary>
    </indexterm>
    <indexterm>
@@ -1631,6 +1650,7 @@
 	nécessaires (c'est-à-dire si la chaîne contient des caractères autres
 	que ceux de l'identifiant ou qu'il peut y avoir un problème de casse).
 	Les guillemets compris dans la chaîne sont correctement doublés.
+        See also <xref linkend="plpgsql-quote-literal-example">.
        </entry>
        <entry><literal>quote_ident('Foo bar')</literal></entry>
        <entry><literal>"Foo bar"</literal></entry>
@@ -1643,6 +1663,10 @@
         utilisée comme libellé dans un chaîne d'instruction
         <acronym>SQL</acronym>. Les guillemets simples compris dans la chaîne
         et les antislash sont correctement doublés.
+        Note that <function>quote_literal</function> returns null on null
+        input; if the argument might be null,
+        <function>quote_nullable</function> is often more suitable.
+        See also <xref linkend="plpgsql-quote-literal-example">.
        </entry>
        <entry><literal>quote_literal( 'O\'Reilly')</literal></entry>
        <entry><literal>'O''Reilly'</literal></entry>
@@ -1674,6 +1698,32 @@
       </row>
 
       <row>
+       <entry><literal><function>quote_nullable</function>(<parameter>string</parameter> <type>text</type>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>
+        Return the given string suitably quoted to be used as a string literal
+        in an <acronym>SQL</acronym> statement string; or, if the argument
+        is null, return <literal>NULL</>.
+        Embedded single-quotes and backslashes are properly doubled.
+        See also <xref linkend="plpgsql-quote-literal-example">.
+       </entry>
+       <entry><literal>quote_nullable(NULL)</literal></entry>
+       <entry><literal>NULL</literal></entry>
+      </row>
+
+      <row>
+       <entry><literal><function>quote_nullable</function>(<parameter>value</parameter> <type>anyelement</type>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>
+        Coerce the given value to text and then quote it as a literal;
+        or, if the argument is null, return <literal>NULL</>.
+        Embedded single-quotes and backslashes are properly doubled.
+       </entry>
+       <entry><literal>quote_nullable(42.5)</literal></entry>
+       <entry><literal>'42.5'</literal></entry>
+      </row>
+
+      <row>
        <entry><literal><function>regexp_replace</function>(<parameter>chaîne</parameter> <type>text</type>, <parameter>modele</parameter> <type>text</type>, <parameter>remplacement</parameter> <type>text</type> [,<parameter>options</parameter> <type>text</type>])</literal></entry>
        <entry><type>text</type></entry>
        <entry>
@@ -5055,11 +5105,16 @@
 	<entry>secondes écoulées depuis minuit (0-86399)</entry>
        </row>
        <row>
-	<entry><literal>AM</literal> ou <literal>A.M.</literal> ou
-	<literal>PM</literal> ou <literal>P.M.</literal></entry>
-	<entry>indicateur du méridien (en majuscules)</entry>
+	<entry><literal>AM</literal> ou <literal>am</literal> ou
+	<literal>PM</literal> ou <literal>pm</literal></entry>
+	<entry>indicateur du méridien (sans point)</entry>
        </row>
        <row>
+	<entry><literal>A.M.</literal> ou <literal>a.m.</literal> ou
+	<literal>P.M.</literal> ou <literal>p.m.</literal></entry>
+	<entry>indicateur du méridien (avec des points)</entry>
+       </row>
+       <row>
 	<entry><literal>am</literal> ou <literal>a.m.</literal> ou
 	<literal>pm</literal> ou <literal>p.m.</literal></entry>
 	<entry>indicateur du méridien (en minuscules)</entry>
@@ -5101,14 +5156,14 @@
 	<entry>dernier chiffre de l'année ISO</entry>
        </row>
        <row>
-	<entry><literal>BC</literal> ou <literal>B.C.</literal> ou
-	<literal>AD</literal> ou <literal>A.D.</literal></entry>
-	<entry>indicateur de l'ère (en majuscules)</entry>
+        <entry><literal>BC</literal>, <literal>bc</literal>,
+        <literal>AD</literal> or <literal>ad</literal></entry>
+        <entry>indicateur de l'ère (sans point)</entry>
        </row>
        <row>
-	<entry><literal>bc</literal> ou <literal>b.c.</literal> ou
-	<literal>ad</literal> ou <literal>a.d.</literal></entry>
-	<entry>indicateur de l'ère (en minuscules)</entry>
+        <entry><literal>B.C.</literal>, <literal>b.c.</literal>,
+        <literal>A.D.</literal> or <literal>a.d.</literal></entry>
+        <entry>indicateur de l'ère (avec des points)</entry>
        </row>
        <row>
 	<entry><literal>MONTH</literal></entry>
@@ -5299,7 +5354,7 @@
        <row>
         <entry>préfixe <literal>TM</literal></entry>
         <entry>mode de traduction (affiche les noms des jours et mois localisés
-	 en fonction de <varname>lc_messages</varname>)</entry>
+	 en fonction de <xref linkend="guc-lc-time">)</entry>
         <entry><literal>TMMonth</literal></entry>
        </row>
        <row>
@@ -5420,13 +5475,12 @@
        </itemizedlist>
       </para>
       <para>
-       Tenter de construire une date en utilisant un mélange de semaine ISO et
-       de champs de date grégoriens n'a pas de sens et peut amener des 
-       résultats incohérents. Dans le contexte d'une année
-       ISO, les concepts de mois (month) et jour du mois (day of month) n'ont
-       pas de signification. Dans le contexte d'une année grégorienne, la semaine
-       ISO n'a pas de signification. Il est impératif de distinguer
-       les spécifications de dates grégorienne et ISO.
+       Attempting to construct a date using a mixture of ISO week and
+       Gregorian date fields is nonsensical, and will cause an error.  In the
+       context of an ISO year, the concept of a <quote>month</> or <quote>day
+       of month</> has no meaning.  In the context of a Gregorian year, the
+       ISO week has no meaning.  Users should take care to keep Gregorian and
+       ISO date specifications separate.
       </para>
      </listitem>
 
@@ -5617,6 +5671,45 @@
     </itemizedlist>
    </para>   
 
+   <para>
+    Certain modifiers can be applied to any template pattern to alter its
+    behavior.  For example, <literal>FM9999</literal>
+    is the <literal>9999</literal> pattern with the
+    <literal>FM</literal> modifier.
+    <xref linkend="functions-formatting-numericmod-table"> shows the
+    modifier patterns for numeric formatting.
+   </para>
+
+    <table id="functions-formatting-numericmod-table">
+     <title>Template Pattern Modifiers for Numeric Formatting</title>
+     <tgroup cols="3">
+      <thead>
+       <row>
+        <entry>Modifier</entry>
+        <entry>Description</entry>
+        <entry>Example</entry>
+       </row>
+      </thead>
+      <tbody>
+       <row>
+        <entry><literal>FM</literal> prefix</entry>
+        <entry>fill mode (suppress padding blanks and zeroes)</entry>
+        <entry><literal>FM9999</literal></entry>
+       </row>
+       <row>
+        <entry><literal>TH</literal> suffix</entry>
+        <entry>uppercase ordinal number suffix</entry>
+        <entry><literal>999TH</literal></entry>
+       </row>   
+       <row>
+        <entry><literal>th</literal> suffix</entry>
+        <entry>lowercase ordinal number suffix</entry>
+        <entry><literal>999th</literal></entry>
+       </row>
+      </tbody>
+     </tgroup>
+    </table>
+
   <para>
    Le <xref linkend="functions-formatting-examples-table"/> affiche quelques
    exemples de l'utilisation de la fonction <function>to_char</function>.
@@ -6144,10 +6237,18 @@
        </row>
 
        <row>
+        <entry><literal><function>isfinite</function>(<type>date</type>)</literal></entry>
+        <entry><type>boolean</type></entry>
+        <entry>Test for finite date (not +/-infinity)</entry>
+        <entry><literal>isfinite(date '2001-02-16')</literal></entry>
+        <entry><literal>true</literal></entry>
+       </row>
+
+       <row>
 	<entry><literal><function>isfinite</function>(<type>timestamp</type>)</literal>
 </entry>
 	<entry><type>boolean</type></entry>
-	<entry>Teste si l'estampille temporelle est finie (non infinie)</entry>
+	<entry>Teste si l'estampille temporelle est finie (donc différent de +/-infinity)</entry>
 	<entry><literal>isfinite(timestamp '2001-02-16 21:28:30')</literal></entry>
 	<entry><literal>true</literal></entry>
        </row>
@@ -8006,7 +8107,7 @@
        </row>
        <row>
         <entry> <literal>@@@</literal> </entry>
-        <entry>identique à <literal>@@</literal>, mais voir <xref linkend="textsearch-indexes"/></entry>
+        <entry>deprecated synonym for <literal>@@</literal></entry>
         <entry><literal>to_tsvector('fat cats ate rats') @@@ to_tsquery('cat &amp; rat')</literal></entry>
         <entry><literal>t</literal></entry>
        </row>
@@ -8609,7 +8710,7 @@
     </para>
    </sect3>
 
-   <sect3>
+   <sect3 id="functions-xml-xmlagg">
     <title><literal>xmlagg</literal></title>
 
     <indexterm>
@@ -8643,10 +8744,8 @@
     </para>
 
     <para>
-     Dans l'implantation actuelle, l'ordre de la concaténation
-     n'est, par principe, pas défini. Néanmoins, cela peut fonctionner en
-     triant préalablement les valeurs en entrée. En reprenant l'exemple
-     ci-dessus, on peut influencer l'ordre de cette façon&nbsp;:
+     To determine the order of the concatenation, something like the
+     following approach can be used:
 <screen><![CDATA[
 SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab;
         xmlagg
@@ -8654,11 +8753,8 @@
  <bar/><foo>abc</foo>
 ]]></screen>
 
-     Il n'est toutefois pas garanti que cette approche fonctionne dans toutes
-     les situations et pour toutes les versions de PostgreSQL. Il est probable
-     qu'une future version de PostgreSQL fournisse une fonctionnalité supplémentaire
-     pour contrôler l'ordre de façon propre
-     (<literal>xmlagg(expr ORDER BY expr, expr, ...</literal>).
+     Again, see <xref linkend="functions-aggregate"> for additional
+     information.
     </para>
    </sect3>
 
@@ -8706,6 +8802,11 @@
     correspondant à l'ensemble de n½uds produit par une expression XPath.
    </para>
 
+  <para>
+    The second argument must be a well formed XML document. In particular,
+    it must have a single root node element.
+  </para>
+
    <para>
     Le troisième argument de la fonction est un tableau de correspondances
     de <foreignphrase>namespace</foreignphrase>. Ce tableau doit avoir deux dimensions dont la seconde
@@ -9452,11 +9553,11 @@
 
   <para>
    Le <xref linkend="array-operators-table"/> présente les opérateurs disponibles
-   pour les types <type>array</type>.
+   pour les types tableaux.
   </para>
 
     <table id="array-operators-table">
-     <title>Opérateurs <type>array</type></title>
+     <title>Opérateurs pour les tableaux</title>
      <tgroup cols="4">
       <colspec colnum="1" colwidth="0.5*"/>
       <colspec colnum="2" colwidth="0.5*"/>
@@ -9596,8 +9697,45 @@
    fonctions.
   </para>
 
+  <indexterm>
+    <primary>array_append</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_cat</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_ndims</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_dims</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_fill</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_length</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_lower</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_prepend</primary>
+  </indexterm>
+  <indexterm>
+    <primary>array_to_string</primary>
+  </indexterm>
+ <indexterm>
+    <primary>array_upper</primary>
+  </indexterm>
+  <indexterm>
+    <primary>string_to_array</primary>
+  </indexterm>
+  <indexterm>
+    <primary>unnest</primary>
+  </indexterm>
+
     <table id="array-functions-table">
-     <title>Fonctions sur <type>array</type></title>
+     <title>Fonctions pour les tableaux</title>
      <tgroup cols="5">
       <thead>
        <row>
@@ -9634,6 +9772,17 @@
 	<entry><literal>{1,2,3,4,5}</literal></entry>
        </row>
        <row>
+        <entry>
+         <literal>
+          <function>array_ndims</function>(<type>anyarray</type>)
+         </literal>
+        </entry>
+        <entry><type>int</type></entry>
+        <entry>returns the number of dimensions of the array</entry>
+        <entry><literal>array_ndims(ARRAY[[1,2,3], [4,5,6]])</literal></entry>
+        <entry><literal>2</literal></entry>
+       </row>
+       <row>
 	<entry>
      <literal>
       <function>array_dims</function> (<type>anyarray</type>)
@@ -9646,6 +9795,30 @@
 	<entry><literal>[1:2][1:3]</literal></entry>
        </row>
        <row>
+        <entry>
+         <literal>
+          <function>array_fill</function>(<type>anyelement</type>, <type>int[]</type>,
+          <optional>, <type>int[]</type></optional>)
+         </literal>
+        </entry>
+        <entry><type>anyarray</type></entry>
+        <entry>returns an array initialized with supplied value and
+         dimensions, optionally with lower bounds other than 1</entry>
+        <entry><literal>array_fill(7, ARRAY[3], ARRAY[2])</literal></entry>
+        <entry><literal>[2:4]={7,7,7}</literal></entry>
+       </row>
+       <row>
+        <entry>
+         <literal>
+          <function>array_length</function>(<type>anyarray</type>, <type>int</type>)
+         </literal>
+        </entry>
+        <entry><type>int</type></entry>
+        <entry>returns the length of the requested array dimension</entry>
+        <entry><literal>array_length(array[1,2,3], 1)</literal></entry>
+        <entry><literal>3</literal></entry>
+       </row>
+       <row>
 	<entry>
      <literal>
       <function>array_lower</function> (<type>anyarray</type>, <type>int</type>)
@@ -9705,9 +9878,25 @@
 '~^~')</literal></entry>
 	<entry><literal>{xx,yy,zz}</literal></entry>
        </row>
+       <row>
+        <entry>
+         <literal>
+          <function>unnest</function>(<type>anyarray</type>)
+         </literal>
+        </entry>
+        <entry><type>setof anyelement</type></entry>
+        <entry>expand an array to a set of rows</entry>
+        <entry><literal>unnest(ARRAY[1,2])</literal></entry>
+        <entry><literal>1</literal><para><literal>2</literal></para> (2 rows)</entry>
+       </row>
       </tbody>
      </tgroup>
     </table>
+
+   <para>
+    See also <xref linkend="functions-aggregate"> about the aggregate
+    function <function>array_agg</function> for use with arrays.
+   </para>
   </sect1>
 
  <sect1 id="functions-aggregate">
@@ -9748,6 +9937,22 @@
      <row>
       <entry>
        <indexterm>
+        <primary>array_agg</primary>
+       </indexterm>
+       <function>array_agg(<replaceable class="parameter">expression</replaceable>)</function>
+      </entry>
+      <entry>
+       any
+      </entry>
+      <entry>
+       array of the argument type
+      </entry>
+      <entry>input values concatenated into an array</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
         <primary>average</primary>
        </indexterm>
        <function>avg(<replaceable class="parameter">expression</replaceable>)</function>
@@ -9900,6 +10105,22 @@
        pour toutes les valeurs en entrée</entry>
      </row>
 
+     <row>
+      <entry>
+       <indexterm>
+        <primary>xmlagg</primary>
+       </indexterm>
+       <function>xmlagg(<replaceable class="parameter">expression</replaceable>)</function>
+      </entry>
+      <entry>
+       <type>xml</type>
+      </entry>
+      <entry>
+       <type>xml</type>
+      </entry>
+      <entry>concatenation of XML values (see also <xref linkend="functions-xml-xmlagg">)</entry>
+     </row>
+
     </tbody>
    </tgroup>
   </table>
@@ -9908,8 +10129,10 @@
    En dehors de <function>count</function>, ces
    fonctions renvoient une valeur NULL si aucune ligne n'est sélectionnée. En
    particulier, une somme (<function>sum</function>) sur aucune ligne renvoie
-   NULL et non zéro. La fonction <function>coalesce</function> peut
-   être utilisée pour substituer des zéros aux valeurs NULL quand cela est
+   NULL et non zéro, and <function>array_agg</function>
+   returns null rather than an empty array when there are no input
+   rows. La fonction <function>coalesce</function> peut
+   être utilisée pour substituer des zéros or an empty array aux valeurs NULL quand cela est
    nécessaire.
   </para>
 
@@ -9946,7 +10169,27 @@
     parcours séquentiel de la table entière.
    </para>
   </note>
+  
+  <para>
+   The aggregate functions <function>array_agg</function>
+   and <function>xmlagg</function>, as well as similar user-defined
+   aggregate functions, produce meaningfully different result values
+   depending on the order of the input values.  In the current
+   implementation, the order of the input is in principle unspecified.
+   Supplying the input values from a sorted subquery
+   will usually work, however.  For example:
 
+<screen><![CDATA[
+SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
+]]></screen>
+
+   But this syntax is not allowed in the SQL standard, and is
+   not portable to other database systems.  A future version of
+   <productname>PostgreSQL</> might provide an additional feature to control
+   the order in a better-defined way (<literal>xmlagg(expr ORDER BY expr, expr,
+   ...)</literal>).
+  </para>
+
   <para>
    <xref linkend="functions-aggregate-statistics-table"/> présente les fonctions
    d'agrégat typiquement utilisées dans l'analyse statistique.
@@ -10305,6 +10548,285 @@
  </sect1>
 
 
+ <sect1 id="functions-window">
+  <title>Window Functions</title>
+
+  <indexterm zone="functions-window">
+   <primary>window function</primary>
+   <secondary>built-in</secondary>
+  </indexterm>
+
+  <para>
+   <firstterm>Window functions</firstterm> provide the ability to perform
+   calculations across sets of rows that are related to the current query
+   row.  See <xref linkend="tutorial-window"> for an introduction to this
+   feature.
+  </para>
+
+  <para>
+   The built-in window functions are listed in
+   <xref linkend="functions-window-table">.  Note that these functions
+   <emphasis>must</> be invoked using window function syntax; that is an
+   <literal>OVER</> clause is required.
+  </para>
+
+  <para>
+   In addition to these functions, any built-in or user-defined aggregate
+   function can be used as a window function (see
+   <xref linkend="functions-aggregate"> for a list of the built-in aggregates).
+   Aggregate functions act as window functions only when an <literal>OVER</>
+   clause follows the call; otherwise they act as regular aggregates.
+  </para>
+
+  <table id="functions-window-table">
+   <title>General-Purpose Window Functions</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Function</entry>
+      <entry>Return Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry>
+       <indexterm>
+        <primary>row_number</primary>
+       </indexterm>
+       <function>row_number()</function>
+      </entry>
+      <entry>
+       <type>bigint</type>
+      </entry>
+      <entry>number of the current row within its partition, counting from 1</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>rank</primary>
+       </indexterm>
+       <function>rank()</function>
+      </entry>
+      <entry>
+       <type>bigint</type>
+      </entry>
+      <entry>rank of the current row with gaps; same as <function>row_number</> of its first peer</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>dense_rank</primary>
+       </indexterm>
+       <function>dense_rank()</function>
+      </entry>
+      <entry>
+       <type>bigint</type>
+      </entry>
+      <entry>rank of the current row without gaps; this function counts peer groups</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>percent_rank</primary>
+       </indexterm>
+       <function>percent_rank()</function>
+      </entry>
+      <entry>
+       <type>double precision</type>
+      </entry>
+      <entry>relative rank of the current row: (<function>rank</> - 1) / (total rows - 1)</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>cume_dist</primary>
+       </indexterm>
+       <function>cume_dist()</function>
+      </entry>
+      <entry>
+       <type>double precision</type>
+      </entry>
+      <entry>relative rank of the current row: (number of rows preceding or peer with current row) / (total rows)</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>ntile</primary>
+       </indexterm>
+       <function>ntile(<replaceable class="parameter">num_buckets</replaceable> <type>integer</>)</function>
+      </entry>
+      <entry>
+       <type>integer</type>
+      </entry>
+      <entry>integer ranging from 1 to the argument value, dividing the
+       partition as equally as possible</entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>lag</primary>
+       </indexterm>
+       <function>
+         lag(<replaceable class="parameter">value</replaceable> <type>any</>
+             [, <replaceable class="parameter">offset</replaceable> <type>integer</>
+             [, <replaceable class="parameter">default</replaceable> <type>any</> ]])
+       </function>
+      </entry>
+      <entry>
+       <type>same type as <replaceable class="parameter">value</replaceable></type>
+      </entry>
+      <entry>
+       returns <replaceable class="parameter">value</replaceable> evaluated at
+       the row that is <replaceable class="parameter">offset</replaceable>
+       rows before the current row within the partition; if there is no such
+       row, instead return <replaceable class="parameter">default</replaceable>.
+       Both <replaceable class="parameter">offset</replaceable> and
+       <replaceable class="parameter">default</replaceable> are evaluated
+       with respect to the current row.  If omitted,
+       <replaceable class="parameter">offset</replaceable> defaults to 1 and
+       <replaceable class="parameter">default</replaceable> to null
+      </entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>lead</primary>
+       </indexterm>
+       <function>
+         lead(<replaceable class="parameter">value</replaceable> <type>any</>
+              [, <replaceable class="parameter">offset</replaceable> <type>integer</>
+              [, <replaceable class="parameter">default</replaceable> <type>any</> ]])
+       </function>
+      </entry>
+      <entry>
+       <type>same type as <replaceable class="parameter">value</replaceable></type>
+      </entry>
+      <entry>
+       returns <replaceable class="parameter">value</replaceable> evaluated at
+       the row that is <replaceable class="parameter">offset</replaceable>
+       rows after the current row within the partition; if there is no such
+       row, instead return <replaceable class="parameter">default</replaceable>.
+       Both <replaceable class="parameter">offset</replaceable> and
+       <replaceable class="parameter">default</replaceable> are evaluated
+       with respect to the current row.  If omitted,
+       <replaceable class="parameter">offset</replaceable> defaults to 1 and
+       <replaceable class="parameter">default</replaceable> to null
+      </entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>first_value</primary>
+       </indexterm>
+       <function>first_value(<replaceable class="parameter">value</replaceable> <type>any</>)</function>
+      </entry>
+      <entry>
+       <type>same type as <replaceable class="parameter">value</replaceable></type>
+      </entry>
+      <entry>
+       returns <replaceable class="parameter">value</replaceable> evaluated
+       at the row that is the first row of the window frame
+      </entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>last_value</primary>
+       </indexterm>
+       <function>last_value(<replaceable class="parameter">value</replaceable> <type>any</>)</function>
+      </entry>
+      <entry>
+       <type>same type as <replaceable class="parameter">value</replaceable></type>
+      </entry>
+      <entry>
+       returns <replaceable class="parameter">value</replaceable> evaluated
+       at the row that is the last row of the window frame
+      </entry>
+     </row>
+
+     <row>
+      <entry>
+       <indexterm>
+        <primary>nth_value</primary>
+       </indexterm>
+       <function>
+         nth_value(<replaceable class="parameter">value</replaceable> <type>any</>, <replaceable class="parameter">nth</replaceable> <type>integer</>)
+       </function>
+      </entry>
+      <entry>
+       <type>same type as <replaceable class="parameter">value</replaceable></type>
+      </entry>
+      <entry>
+       returns <replaceable class="parameter">value</replaceable> evaluated
+       at the row that is the <replaceable class="parameter">nth</replaceable>
+       row of the window frame (counting from 1); null if no such row
+      </entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+
+  <para>
+   All of the functions listed in
+   <xref linkend="functions-window-table"> depend on the sort ordering
+   specified by the <literal>ORDER BY</> clause of the associated window
+   definition.  Rows that are not distinct in the <literal>ORDER BY</>
+   ordering are said to be <firstterm>peers</>; the four ranking functions
+   are defined so that they give the same answer for any two peer rows.
+  </para>
+
+  <para>
+   Note that <function>first_value</>, <function>last_value</>, and
+   <function>nth_value</> consider only the rows within the <quote>window
+   frame</>, which by default contains the rows from the start of the
+   partition through the last peer of the current row.  This is
+   likely to give unhelpful results for <function>nth_value</> and
+   particularly <function>last_value</>.  You can redefine the frame as
+   being the whole partition by adding <literal>ROWS BETWEEN UNBOUNDED
+   PRECEDING AND UNBOUNDED FOLLOWING</> to the <literal>OVER</> clause.
+   See <xref linkend="syntax-window-functions"> for more information.
+  </para>
+
+  <para>
+   When an aggregate function is used as a window function, it aggregates
+   over the rows within the current row's window frame.  To obtain
+   aggregation over the whole partition, omit <literal>ORDER BY</> or use
+   <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</>.
+   An aggregate used with <literal>ORDER BY</> and the default window frame
+   definition produces a <quote>running sum</> type of behavior, which may or
+   may not be what's wanted.
+  </para>
+
+  <note>
+   <para>
+    The SQL standard defines a <literal>RESPECT NULLS</> or
+    <literal>IGNORE NULLS</> option for <function>lead</>, <function>lag</>,
+    <function>first_value</>, <function>last_value</>, and
+    <function>nth_value</>.  This is not implemented in
+    <productname>PostgreSQL</productname>: the behavior is always the
+    same as the standard's default, namely <literal>RESPECT NULLS</>.
+    Likewise, the standard's <literal>FROM FIRST</> or <literal>FROM LAST</>
+    option for <function>nth_value</> is not implemented: only the
+    default <literal>FROM FIRST</> behavior is supported.  (You can achieve
+    the result of <literal>FROM LAST</> by reversing the <literal>ORDER BY</>
+    ordering.)
+   </para>
+  </note>
+
+ </sect1>
+
  <sect1 id="functions-subquery">
   <title>Expressions de sous-requêtes</title>
 
@@ -10896,6 +11418,20 @@
    est toujours soit true soit false, jamais NULL.
   </para>
 
+  <note>
+   <para>
+    The SQL specification requires row-wise comparison to return NULL if the
+    result depends on comparing two NULL values or a NULL and a non-NULL.
+    <productname>PostgreSQL</productname> does this only when comparing the
+    results of two row constructors or comparing a row constructor to the
+    output of a subquery (as in <xref linkend="functions-subquery">).
+    In other contexts where two composite-type values are compared, two
+    NULL field values are considered equal, and a NULL is considered larger
+    than a non-NULL.  This is necessary in order to have consistent sorting
+    and indexing behavior for composite types.
+   </para>
+  </note>
+
   </sect2>
 </sect1>
 
@@ -10915,7 +11451,8 @@
     Cette section décrit des fonctions qui peuvent renvoyer plus d'une
     ligne. Actuellement, les seules fonctions dans cette classe sont les
     fonctions de génération de séries, détaillées dans le <xref
-    linkend="functions-srf-series"/>.
+    linkend="functions-srf-series"/> and
+   <xref linkend="functions-srf-subscripts">.
   </para>
     
     <table id="functions-srf-series">
@@ -10952,6 +11489,16 @@
               <parameter>fin</parameter> avec un incrément de <parameter>pas</parameter>.
             </entry>
           </row>
+
+     <row>
+      <entry><literal><function>generate_series</function>(<parameter>start</parameter>, <parameter>stop</parameter>, <parameter>step</parameter> <type>interval</>)</literal></entry>
+      <entry><type>timestamp</type> or <type>timestamp with time zone</type></entry>
+      <entry><type>setof timestamp</type> or <type>setof timestamp with time zone</type> (same as argument type)</entry>
+      <entry>
+       Generate a series of values, from <parameter>start</parameter> to <parameter>stop</parameter>
+       with a step size of <parameter>step</parameter>
+      </entry>
+     </row>
           
         </tbody>
       </tgroup>
@@ -10991,14 +11538,125 @@
 -----------------
 (0 rows)
 
+-- this example relies on the date-plus-integer operator
 select current_date + s.a as dates from generate_series(0,14,7) as s(a);
     dates
 ------------
  2004-02-05
  2004-02-12
  2004-02-19
-(3 rows)</programlisting>
+(3 rows)
+
+select * from generate_series('2008-03-01 00:00'::timestamp,
+                              '2008-03-04 12:00', '10 hours');
+   generate_series   
+---------------------
+ 2008-03-01 00:00:00
+ 2008-03-01 10:00:00
+ 2008-03-01 20:00:00
+ 2008-03-02 06:00:00
+ 2008-03-02 16:00:00
+ 2008-03-03 02:00:00
+ 2008-03-03 12:00:00
+ 2008-03-03 22:00:00
+ 2008-03-04 08:00:00
+(9 rows)</programlisting>
     </para>
+
+  <table id="functions-srf-subscripts">
+   <title>Subscript Generating Functions</title>
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Function</entry>
+      <entry>Return Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal><function>generate_subscripts</function>(<parameter>array anyarray</parameter>, <parameter>dim int</parameter>)</literal></entry>
+      <entry><type>setof int</type></entry>
+      <entry>
+       Generate a series comprising the given array's subscripts.
+      </entry>
+     </row>
+
+     <row>
+      <entry><literal><function>generate_subscripts</function>(<parameter>array anyarray</parameter>, <parameter>dim int</parameter>, <parameter>reverse boolean</parameter>)</literal></entry>
+      <entry><type>setof int</type></entry>
+      <entry>
+       Generate a series comprising the given array's subscripts. When
+       <parameter>reverse</parameter> is true, the series is returned in
+       reverse order.
+      </entry>
+     </row>
+
+    </tbody>
+   </tgroup>
+  </table>
+
+  <indexterm>
+   <primary>generate_subscripts</primary>
+  </indexterm>
+
+  <para>
+   <function>generate_subscripts</> is a convenience function that generates
+   the set of valid subscripts for the specified dimension of the given
+   array.
+   Zero rows are returned for arrays that do not have the requested dimension,
+   or for NULL arrays (but valid subscripts are returned for NULL array
+   elements).  Some examples follow:
+<programlisting>
+-- basic usage
+select generate_subscripts('{NULL,1,NULL,2}'::int[], 1) as s;
+ s 
+---
+ 1
+ 2
+ 3
+ 4
+(4 rows)
+
+-- presenting an array, the subscript and the subscripted
+-- value requires a subquery
+select * from arrays;
+         a          
+--------------------
+ {-1,-2}
+ {100,200}
+(2 rows)
+
+select a as array, s as subscript, a[s] as value
+from (select generate_subscripts(a, 1) as s, a from arrays) foo;
+   array   | subscript | value 
+-----------+-----------+-------
+ {-1,-2}   |         1 |    -1
+ {-1,-2}   |         2 |    -2
+ {100,200} |         1 |   100
+ {100,200} |         2 |   200
+(4 rows)
+
+-- unnest a 2D array
+create or replace function unnest2(anyarray)
+returns setof anyelement as $$
+select $1[i][j] 
+   from generate_subscripts($1,1) g1(i),
+        generate_subscripts($1,2) g2(j);
+$$ language sql immutable;
+CREATE FUNCTION
+postgres=# select * from unnest2(array[[1,2],[3,4]]);
+ unnest2 
+---------
+       1
+       2
+       3
+       4
+(4 rows)
+</programlisting>
+  </para>
+
   </sect1>
 
   <sect1 id="functions-info">
@@ -11031,6 +11689,12 @@
           </thead>
 
           <tbody>
+      <row>
+       <entry><literal><function>current_catalog</function></literal></entry>
+       <entry><type>name</type></entry>
+       <entry>name of current database (called <quote>catalog</quote> in the SQL standard)</entry>
+      </row>
+
             <row>
               <entry><literal><function>current_database</function>()</literal></entry>
               <entry><type>nom</type></entry>
@@ -11038,7 +11702,7 @@
             </row>
 
             <row>
-              <entry><literal><function>current_schema</function>()</literal></entry>
+              <entry><literal><function>current_schema</function>[()]</literal></entry>
               <entry><type>nom</type></entry>
               <entry>nom du schéma courant</entry>
             </row>
@@ -11056,6 +11720,22 @@
               <entry>nom d'utilisateur du contexte d'exécution courant</entry>
             </row>
 
+      <row>
+       <entry><literal><function>current_query</function></literal></entry>
+       <entry><type>text</type></entry>
+       <entry>text of the currently executing query, as submitted
+       by the client (might contain more than one statement)</entry>
+      </row>  
+
+      <row>
+       <!-- See also the entry for this in monitoring.sgml -->
+       <entry><literal><function>pg_backend_pid</function>()</literal></entry>
+       <entry><type>int</type></entry>
+       <entry>
+        Process ID of the server process attached to the current session
+       </entry>
+      </row>
+
             <row>
               <entry><literal><function>inet_client_addr</function>()</literal></entry>
               <entry><type>inet</type></entry>
@@ -11098,6 +11778,12 @@
               <entry>heure de démarrage du serveur</entry>
             </row>
 
+      <row>
+       <entry><literal><function>pg_conf_load_time</function>()</literal></entry>
+       <entry><type>timestamp with time zone</type></entry>
+       <entry>configuration load time</entry>
+      </row>
+
             <row>
               <entry><literal><function>session_user</function></literal></entry>
               <entry><type>name</type></entry>
@@ -11135,6 +11821,10 @@
       </indexterm>
       
    <indexterm>
+    <primary>current_catalog</primary>
+   </indexterm>
+
+   <indexterm>
     <primary>current_database</primary>
    </indexterm>
 
@@ -11165,11 +11855,13 @@
 <!-- trailing : à droite -->
       <note>
         <para>
-          <function>current_user</function>, 
-          <function>session_user</function> et <function>user</function>
+          <function>current_catalog</function>, <function>current_schema</function>,
+     <function>current_user</function>, <function>session_user</function>,
+     and <function>user</function>
           ont un statut syntaxique spécial en
           <acronym>SQL</acronym>&nbsp;: ils doivent être appelés sans
-          parenthèses à droite.
+          parenthèses à droite (optional in PostgreSQL in the case
+     of <function>current_schema</function>).
         </para>
       </note>
         
@@ -11246,6 +11938,20 @@
      (type <type>timestamp with time zone</type>) de démarrage du serveur.
    </para>
 
+   <indexterm>
+    <primary>pg_conf_load_time</primary>
+   </indexterm>
+
+   <para>
+    <function>pg_conf_load_time</function> returns the
+    <type>timestamp with time zone</type> when the
+    server configuration files were last loaded.
+    (If the current session was alive at the time, this will be the time
+    when the session itself re-read the configuration files, so the
+    reading will vary a little in different sessions.  Otherwise it is
+    the time when the postmaster process re-read the configuration files.)
+   </para>
+
   <indexterm>
     <primary>version</primary>
   </indexterm>
@@ -11282,6 +11988,38 @@
           
     <tbody>
       <row>
+       <entry><literal><function>has_any_column_privilege</function>(<parameter>user</parameter>,
+                                  <parameter>table</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does user have privilege for any column of table</entry>
+      </row>
+      <row>
+       <entry><literal><function>has_any_column_privilege</function>(<parameter>table</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does current user have privilege for any column of table</entry>
+      </row>
+      <row>
+       <entry><literal><function>has_column_privilege</function>(<parameter>user</parameter>,
+                                  <parameter>table</parameter>,
+                                  <parameter>column</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does user have privilege for column</entry>
+      </row>
+      <row>
+       <entry><literal><function>has_column_privilege</function>(<parameter>table</parameter>,
+                                  <parameter>column</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does current user have privilege for column</entry>
+      </row>
+      <row>
         <entry><literal><function>has_database_privilege</function>
           (<parameter>utilisateur</parameter>,
           <parameter>base</parameter>,
@@ -11302,6 +12040,21 @@
 		<parameter>base</parameter></entry>
       </row>
       <row>
+       <entry><literal><function>has_foreign_data_wrapper_privilege</function>(<parameter>user</parameter>,
+                                  <parameter>fdw</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does user have privilege for foreign-data wrapper</entry>
+      </row>
+      <row>
+       <entry><literal><function>has_foreign_data_wrapper_privilege</function>(<parameter>fdw</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does current user have privilege for foreign-data wrapper</entry>
+      </row>
+      <row>
         <entry><literal><function>has_function_privilege</function>
           (<parameter>utilisateur</parameter>,
           <parameter>fonction</parameter>,
@@ -11360,6 +12113,21 @@
 	      <parameter>schéma</parameter></entry>
       </row>
       <row>
+       <entry><literal><function>has_server_privilege</function>(<parameter>user</parameter>,
+                                  <parameter>server</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does user have privilege for foreign server</entry>
+      </row>
+      <row>
+       <entry><literal><function>has_server_privilege</function>(<parameter>server</parameter>,
+                                  <parameter>privilege</parameter>)</literal>
+       </entry>
+       <entry><type>boolean</type></entry>
+       <entry>does current user have privilege for foreign server</entry>
+      </row>
+      <row>
        <entry><literal><function>has_table_privilege</function>(<parameter>utilisateur</parameter>,
                                   <parameter>table</parameter>,
                                   <parameter>privilège</parameter>)</literal>
@@ -11420,18 +12188,30 @@
       </table>
 
    <indexterm>
+    <primary>has_any_column_privilege</primary>
+   </indexterm>
+   <indexterm>
+    <primary>has_column_privilege</primary>
+   </indexterm>
+   <indexterm>
     <primary>has_database_privilege</primary>
    </indexterm>
    <indexterm>
     <primary>has_function_privilege</primary>
    </indexterm>
    <indexterm>
+    <primary>has_foreign_data_wrapper_privilege</primary>
+   </indexterm>
+   <indexterm>
     <primary>has_language_privilege</primary>
    </indexterm>
    <indexterm>
     <primary>has_schema_privilege</primary>
    </indexterm>
    <indexterm>
+    <primary>has_server_privilege</primary>
+   </indexterm>
+   <indexterm>
     <primary>has_table_privilege</primary>
    </indexterm>
    <indexterm>
@@ -11440,42 +12220,7 @@
    <indexterm>
     <primary>pg_has_role</primary>
    </indexterm>
-
-      <para>
-        <function>has_database_privilege</function> vérifie si l'utilisateur
-        possède un privilège particulier d'accès à une base de données. Ses
-        arguments sont analogues à
-        <function>has_table_privilege</function>. Les privilèges possibles sont
-        <literal>CREATE</literal>, <literal>CONNECT</literal>, <literal>TEMPORARY</literal> ou
-        <literal>TEMP</literal> (équivalent à <literal>TEMPORARY</literal>).
-       </para>
-      
-      <para>
-        <function>has_function_privilege</function> vérifie si l'utilisateur
-        possède un privilège particulier d'accès à une fonction. Ses
-        arguments sont analogues à <function>has_table_privilege</function>.
-        Si la fonction est précisée par une chaîne texte plutôt que par son OID,
-        l'entrée autorisée est la même que pour le type de données <type>regprocedure</type>
-        (voir la <xref linkend="datatype-oid"/>). Le seul privilège possible
-        est <literal>EXECUTE</literal>. Par exemple&nbsp;:
-         <programlisting>SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');</programlisting>
-       </para>
-      
-      <para>
-        <function>has_language_privilege</function> vérifie si l'utilisateur
-        possède un privilège particulier d'accès à un langage procédural. Ses
-        arguments sont analogues à <function>has_table_privilege</function>. Le seul
-        privilège possible est <literal>USAGE</literal>.
-       </para>
-
-      <para>
-        <function>has_schema_privilege</function> vérifie si l'utilisateur
-        possède un privilège particulier d'accès à un schéma. Ses
-        arguments sont analogues à <function>has_table_privilege</function>.
-        Les privilèges possibles sont <literal>CREATE</literal>
-        et <literal>USAGE</literal>.
-       </para>
-      
+   
    <para>
     <function>has_table_privilege</function> vérifie si l'utilisateur possède
     un privilège particulier d'accès à une table. L'utilisateur peut être
@@ -11486,16 +12231,114 @@
     par le nombre et le type de leurs arguments.) Lors de l'indication par
     nom, il est possible de préciser le schéma. Les privilèges possibles,
     indiqués sous la forme d'une chaîne de caractères, sont&nbsp;:
-    <literal>SELECT</literal>, <literal>INSERT</literal>,
-    <literal>UPDATE</literal>, <literal>DELETE</literal>,
-    <literal>REFERENCES</literal> et <literal>TRIGGER</literal>.
-    (La casse n'a pas d'importance.)
-    Par exemple&nbsp;:
- <programlisting>SELECT has_table_privilege('monschema.matable', 'select');
- </programlisting>
+    literal>SELECT</literal>, <literal>INSERT</literal>,
+    <literal>UPDATE</literal>, <literal>DELETE</literal>, <literal>TRUNCATE</>,
+    <literal>REFERENCES</literal>, or <literal>TRIGGER</literal>.  Optionally,
+    <literal>WITH GRANT OPTION</> can be added to a privilege type to test
+    whether the privilege is held with grant option.  Also, multiple privilege
+    types can be listed separated by commas, in which case the result will
+    be <literal>true</> if any of the listed privileges is held.
+    (Case of the privilege string is not significant, and extra whitespace
+    is allowed between but not within privilege names.)
+    Some examples:
+<programlisting>
+SELECT has_table_privilege('myschema.mytable', 'select');
+SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
+</programlisting>
    </para>
 
    <para>
+    <function>has_any_column_privilege</function> checks whether a user can
+    access any column of a table in a particular way.  The possibilities for
+    its arguments are the same as for <function>has_table_privilege</>,
+    except that the desired access privilege type must evaluate to some
+    combination of
+    <literal>SELECT</literal>,
+    <literal>INSERT</literal>,
+    <literal>UPDATE</literal>, or
+    <literal>REFERENCES</literal>.  Note that having any of these privileges
+    at the table level implicitly grants it for each column of the table,
+    so <function>has_any_column_privilege</function> will always return
+    <literal>true</> if <function>has_table_privilege</> does for the same
+    arguments.  But <function>has_any_column_privilege</> also succeeds if
+    there is a column-level grant of the privilege for at least one column.
+   </para>
+
+   <para>
+    <function>has_column_privilege</function> checks whether a user
+    can access a column in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>,
+    with the addition that the column can be specified either by name
+    or attribute number.
+    The desired access privilege type must evaluate to some combination of
+    <literal>SELECT</literal>,
+    <literal>INSERT</literal>,
+    <literal>UPDATE</literal>, or
+    <literal>REFERENCES</literal>.  Note that having any of these privileges
+    at the table level implicitly grants it for each column of the table.
+   </para>
+
+   <para>
+    <function>has_database_privilege</function> checks whether a user
+    can access a database in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>.
+    The desired access privilege type must evaluate to some combination of
+    <literal>CREATE</literal>,
+    <literal>CONNECT</literal>,
+    <literal>TEMPORARY</literal>, or
+    <literal>TEMP</literal> (which is equivalent to
+    <literal>TEMPORARY</literal>).
+   </para>
+
+   <para>
+    <function>has_function_privilege</function> checks whether a user
+    can access a function in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>.
+    When specifying a function by a text string rather than by OID,
+    the allowed input is the same as for the <type>regprocedure</> data type
+    (see <xref linkend="datatype-oid">).
+    The desired access privilege type must evaluate to
+    <literal>EXECUTE</literal>.
+    An example is:
+<programlisting>
+SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
+</programlisting>
+   </para>
+
+   <para>
+    <function>has_foreign_data_wrapper_privilege</function> checks whether a user
+    can access a foreign-data wrapper in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>.
+    The desired access privilege type must evaluate to
+    <literal>USAGE</literal>.
+   </para>
+
+   <para>
+    <function>has_language_privilege</function> checks whether a user
+    can access a procedural language in a particular way.  The possibilities
+    for its arguments are analogous to <function>has_table_privilege</function>.
+    The desired access privilege type must evaluate to
+    <literal>USAGE</literal>.
+   </para>
+
+   <para>
+    <function>has_schema_privilege</function> checks whether a user
+    can access a schema in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>.
+    The desired access privilege type must evaluate to some combination of
+    <literal>CREATE</literal> or
+    <literal>USAGE</literal>.
+   </para>
+
+   <para>
+    <function>has_server_privilege</function> checks whether a user
+    can access a foreign server in a particular way.  The possibilities for its
+    arguments are analogous to <function>has_table_privilege</function>.
+    The desired access privilege type must evaluate to
+    <literal>USAGE</literal>.
+   </para>
+
+   <para>
     <function>has_tablespace_privilege</function> vérifie si l'utilisateur
     possède un privilège particulier d'accès à un
     <foreignphrase>tablespace</foreignphrase>. Ses
@@ -11506,8 +12349,8 @@
    <para>
     <function>pg_has_role</function> vérifie si l'utilisateur possède
     un privilège particulier d'accès à un rôle. Ses arguments sont
-    analogues à <function>has_table_privilege</function>. Les privilèges
-    possible sont <literal>MEMBER</literal> et <literal>USAGE</literal>.
+    analogues à <function>has_table_privilege</function>. Le privilège
+    doit être un combinaison de <literal>MEMBER</literal> et <literal>USAGE</literal>.
     <literal>MEMBER</literal> indique une appartenance directe ou indirecte au
     rôle (c'est-à-dire le droit d'exécuter <literal>SET ROLE</literal>) alors que
     <literal>USAGE</literal> indique que les droits du rôle sont
@@ -11515,12 +12358,6 @@
    </para>
 
       <para>
-        Pour tester si l'utilisateur peut accorder un privilège, on ajoute
-        <literal>WITH GRANT OPTION</literal> au mot-clé indiquant le privilège&nbsp;;
-        par exemple <literal>'UPDATE WITH GRANT OPTION'</literal>.
-      </para>
-
-      <para>
         Le <xref linkend="functions-info-schema-table"/> affiche les fonctions qui
         permettent de savoir si un objet particulier est <firstterm>visible</firstterm> dans le chemin
         de recherche courant. Une table est dite visible si son schéma
@@ -11673,6 +12510,10 @@
   <primary>format_type</primary>
 </indexterm>
 
+   <indexterm>
+    <primary>pg_get_keywords</primary>
+   </indexterm>
+
 <indexterm>
   <primary>pg_get_viewdef</primary>
 </indexterm>
@@ -11681,6 +12522,22 @@
   <primary>pg_get_ruledef</primary>
 </indexterm>
 
+   <indexterm>
+    <primary>pg_get_functiondef</primary>
+   </indexterm>
+
+   <indexterm>
+    <primary>pg_get_function_arguments</primary>
+   </indexterm>
+
+   <indexterm>
+    <primary>pg_get_function_identity_arguments</primary>
+   </indexterm>
+
+   <indexterm>
+    <primary>pg_get_function_result</primary>
+   </indexterm>
+
 <indexterm>
   <primary>pg_get_indexdef</primary>
 </indexterm>
@@ -11709,6 +12566,10 @@
   <primary>pg_tablespace_databases</primary>
 </indexterm>
 
+   <indexterm>
+    <primary>pg_typeof</primary>
+   </indexterm>
+
       <para>
         Le <xref linkend="functions-info-catalog-table"/> liste les fonctions qui
 	extraient des informations des catalogues système.
@@ -11732,6 +12593,11 @@
               <entry>récupère le nom SQL d'un type de données</entry>
             </row>
       <row>
+       <entry><literal><function>pg_get_keywords</function>()</literal></entry>
+       <entry><type>setof record</type></entry>
+       <entry>get list of SQL keywords and their categories</entry>
+      </row>
+      <row>
        <entry><literal><function>pg_get_constraintdef</function>(<parameter>constraint_oid</parameter>)</literal></entry>
        <entry><type>text</type></entry>
        <entry>récupère la définition d'une contrainte</entry>
@@ -11754,6 +12620,26 @@
        toutes les variables qu'elle contient font référence à la relation indiquée par le second paramètre</entry>
       </row>
       <row>
+       <entry><literal><function>pg_get_functiondef</function>(<parameter>func_oid</parameter>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>get definition of a function</entry>
+      </row>
+      <row>
+       <entry><literal><function>pg_get_function_arguments</function>(<parameter>func_oid</parameter>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>get argument list of function's definition (with default values)</entry>
+      </row>
+      <row>
+       <entry><literal><function>pg_get_function_identity_arguments</function>(<parameter>func_oid</parameter>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>get argument list to identify a function (without default values)</entry>
+      </row>
+      <row>
+       <entry><literal><function>pg_get_function_result</function>(<parameter>func_oid</parameter>)</literal></entry>
+       <entry><type>text</type></entry>
+       <entry>get <literal>RETURNS</> clause for function</entry>
+      </row>
+      <row>
        <entry><literal><function>pg_get_indexdef</function>(<parameter>index_oid</parameter>)</literal></entry>
        <entry><type>text</type></entry>
        <entry>récupère la commande <command>CREATE INDEX</command> de l'index</entry>
@@ -11822,6 +12708,11 @@
        <entry>récupère l'ensemble des OID des bases qui possèdent des objets dans ce
         tablespace</entry>
       </row>
+      <row>
+       <entry><literal><function>pg_typeof</function>(<parameter>any</parameter>)</literal></entry>
+       <entry><type>regtype</type></entry>
+       <entry>get the data type of any value</entry>
+      </row>
      </tbody>
     </tgroup>
    </table>
@@ -11834,6 +12725,16 @@
   </para>
 
   <para>
+   <function>pg_get_keywords</function> returns a set of records describing
+   the SQL keywords recognized by the server. The <structfield>word</> column
+   contains the keyword.  The <structfield>catcode</> column contains a
+   category code: <literal>U</> for unreserved, <literal>C</> for column name,
+   <literal>T</> for type or function name, or <literal>R</> for reserved.
+   The <structfield>catdesc</> column contains a possibly-localized string
+   describing the category.
+  </para>
+
+  <para>
    <function>pg_get_constraintdef</function>,
    <function>pg_get_indexdef</function>, <function>pg_get_ruledef</function>
    et <function>pg_get_triggerdef</function> reconstruisent respectivement
@@ -11855,6 +12756,20 @@
   </para>
 
   <para>
+   <function>pg_get_functiondef</> returns a complete
+   <command>CREATE OR REPLACE FUNCTION</> statement for a function.
+   <function>pg_get_function_arguments</function> returns the argument list
+   of a function, in the form it would need to appear in within
+   <command>CREATE FUNCTION</>.
+   <function>pg_get_function_result</function> similarly returns the
+   appropriate <literal>RETURNS</> clause for the function.
+   <function>pg_get_function_identity_arguments</function> returns the
+   argument list necessary to identify a function, in the form it
+   would need to appear in within <command>ALTER FUNCTION</>, for
+   instance.  This form omits default values.
+  </para>
+
+  <para>
    <function>pg_get_serial_sequence</function> renvoie le nom de la séquence
    associée à une colonne ou NULL si aucune séquence n'est associée
    à la colonne. Le premier argument en entrée est un nom de table,
@@ -11890,6 +12805,29 @@
    <structname>pg_class</structname>.
   </para>
 
+  <para>
+   <function>pg_typeof</function> returns the OID of the data type of the
+   value that is passed to it.  This can be helpful for troubleshooting or
+   dynamically constructing SQL queries.  The function is declared as
+   returning <type>regtype</>, which is an OID alias type (see
+   <xref linkend="datatype-oid">); this means that it is the same as an
+   OID for comparison purposes but displays as a type name.  For example:
+<programlisting>
+SELECT pg_typeof(33);
+
+ pg_typeof 
+-----------
+ integer
+(1 row)
+
+SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
+ typlen 
+--------
+      4
+(1 row)
+</programlisting>
+  </para>
+
    <indexterm>
     <primary>col_description</primary>
    </indexterm>
@@ -12048,7 +12986,7 @@
       <row>
        <entry><literal><function>txid_visible_in_snapshot</function>(<parameter>bigint</parameter>, <parameter>txid_snapshot</parameter>)</literal></entry>
        <entry><type>boolean</type></entry>
-       <entry>l'ID de transaction est-il visible dans l'instantané&nbsp;?</entry>
+       <entry>l'ID de transaction est-il visible dans l'instantané&nbsp;? (do not use with subtransaction ids)</entry>
       </row>
      </tbody>
     </tgroup>
@@ -12096,11 +13034,14 @@
       <row>
        <entry><type>xip_list</type></entry>
        <entry>
-        txids actifs au moment de l'instantané. Ils sont tous compris entre
-        <literal>xmin</literal> et <literal>xmax</literal>. Un txid qui est
-        <literal>xmin &lt;= txid &lt; xmax</literal> et n'est pas dans la cette liste 
-	est déjà terminé à ce moment de l'instantané, et donc soit visible, soit mort, 
-	selon son statut de validation.
+        Active txids at the time of the snapshot.  The list
+        includes only those active txids between <literal>xmin</>
+        and <literal>xmax</>; there might be active txids higher
+        than xmax.  A txid that is <literal>xmin &lt;= txid &lt;
+        xmax</literal> and not in this list was already completed
+        at the time of the snapshot, and thus either visible or
+        dead according to its commit status.  The list does not
+        include txids of subtransactions.
        </entry>
       </row>
 
@@ -12210,6 +13151,9 @@
     <indexterm>
       <primary>pg_cancel_backend</primary>
     </indexterm>
+   <indexterm>
+    <primary>pg_terminate_backend</primary>
+   </indexterm>
     <indexterm>
       <primary>pg_reload_conf</primary>
     </indexterm>
@@ -12252,6 +13196,13 @@
             </row>
       <row>
        <entry>
+        <literal><function>pg_terminate_backend</function>(<parameter>pid</parameter> <type>int</>)</literal>
+        </entry>
+       <entry><type>boolean</type></entry>
+       <entry>Terminate a backend</entry>
+      </row>
+      <row>
+       <entry>
         <literal><function>pg_reload_conf</function>()</literal>
         </entry>
        <entry><type>boolean</type></entry>
@@ -12275,8 +13226,8 @@
    </para>
 
    <para>
-    <function>pg_cancel_backend</function> envoie un signal demandant l'annulation de
-    la requête (<systemitem>SIGINT</systemitem>) à un processus serveur identifié
+    <function>pg_cancel_backend</function> and <function>pg_terminate_backend</> envoie un signal
+    (respectivement <systemitem>SIGINT</systemitem> or <systemitem>SIGTERM</>) au processus serveur identifié
     par l'ID du processus. L'identifiant du processus serveur actif
     peut être trouvé dans la colonne <structfield>procpid</structfield>
     dans la vue <structname>pg_stat_activity</structname> ou en listant les
@@ -12347,7 +13298,7 @@
             <row>
               <entry>
                 <literal><function>pg_start_backup</function>
-                (<parameter>label</parameter> <type>text</type>)</literal>
+                (<parameter>label</parameter> <type>text</type> <optional>, <parameter>fast</> <type>boolean</> </optional>)</literal>
               </entry>
               <entry><type>text</type></entry>
               <entry>Préparation de la sauvegarde à chaud</entry>
@@ -12402,10 +13353,10 @@
       </table>
 
     <para>
-      <function>pg_start_backup</function> accepte un paramètre unique, 
+      <function>pg_start_backup</function> accepte un paramètre texte, 
       label utilisateur de la sauvegarde (typiquement, le nom
       du fichier d'enregistrement de la sauvegarde). La fonction écrit un
-      fichier de label dans le répertoire de données du cluster et renvoie
+      fichier de label dans le répertoire de données du cluster, performs a checkpoint, et renvoie
       la position du début de la sauvegarde dans le journal de transactions
       au format texte. Ce résultat ne nécessite pas qu'on s'y intéresse, mais
       il est fourni dans cette éventualité.
@@ -12414,6 +13365,10 @@
 -----------------
  0/D4445B8
 (1 row)</programlisting>
+    There is an optional boolean second parameter.  If <literal>true</>,
+    it specifies executing <function>pg_start_backup</> as quickly as
+    possible.  This forces an immediate checkpoint which will cause a
+    spike in I/O operations, slowing any concurrently executing queries.
     </para>
 
     <para>
@@ -12547,18 +13502,23 @@
       </row>
       <row>
        <entry>
-        <literal><function>pg_relation_size</function>(<type>oid</type>)</literal>
+        <literal><function>pg_relation_size</function>(<parameter>relation</parameter> <type>regclass</type>, <parameter>fork</parameter> <type>text</type>)</literal>
         </entry>
        <entry><type>bigint</type></entry>
-       <entry>Espace disque utilisé par la table ou l'index d'OID indiqué</entry>
+       <entry>
+        Disk space used by the specified fork, <literal>'main'</literal> or
+        <literal>'fsm'</literal>, of a table or index with the specified OID
+        or name. The table name can be qualified with a schema name
+       </entry>
       </row>
       <row>
        <entry>
-        <literal><function>pg_relation_size</function>(<type>text</type>)</literal>
+        <literal><function>pg_relation_size</function>(<parameter>relation</parameter> <type>regclass</type>)</literal>
         </entry>
        <entry><type>bigint</type></entry>
-       <entry>Espace disque utilisé par la table ou l'index de nom indiqué.
-       Le nom de la table peut être qualifié par un nom de schéma.</entry>
+       <entry>
+        Shorthand for <literal>pg_relation_size(..., 'main')</literal>
+       </entry>
       </row>
       <row>
        <entry>
@@ -12586,20 +13546,14 @@
       </row>
       <row>
        <entry>
-        <literal><function>pg_total_relation_size</function>(<type>oid</type>)</literal>
+        <literal><function>pg_total_relation_size</function>(<type>regclass</type>)</literal>
         </entry>
        <entry><type>bigint</type></entry>
-       <entry>Espace disque total occupé par la table d'OID indiqué, en
-       incluant les index et les données TOASTées</entry>
-      </row>
-      <row>
        <entry>
-        <literal><function>pg_total_relation_size</function>(<type>text</type>)</literal>
+        Total disk space used by the table with the specified OID or name,
+        including indexes and toasted data.  The table name can be
+        qualified with a schema name
        </entry>
-       <entry><type>bigint</type></entry>
-       <entry>Espace disque total utilisé par la table de nom indiqué, en
-       incluant les index et les données TOASTées. Le nom de la table peut être
-       qualifié par un nom de schéma</entry>
       </row>
      </tbody>
     </tgroup>
@@ -12618,7 +13572,12 @@
 
    <para>
     <function>pg_relation_size</function> accepte l'OID ou le nom d'une table, d'un
-    index ou d'une table toast et renvoie la taille en octets.
+    index ou d'une table toast et renvoie la taille en octets. Specifying
+    <literal>'main'</literal> or leaving out the second argument returns the
+    size of the main data fork of the relation. Specifying
+    <literal>'fsm'</literal> returns the size of the
+    Free Space Map (see <xref linkend="storage-fsm">) associated with the
+    relation.
    </para>
 
    <para>
@@ -12842,7 +13801,8 @@
     <function>pg_advisory_lock</function> verrouille une ressource applicative
     qui peut être identifiée soit par une valeur de clé sur 64
     bits soit par deux valeurs de clé sur 32 bits (les deux espaces
-    de clé ne se surchargent pas). Si une autre session détient déjà un verrou
+    de clé ne se surchargent pas). The key type is specified in <literal>pg_locks.objid</>.
+    Si une autre session détient déjà un verrou
     sur la même ressource, la fonction attend que la ressource
     devienne disponible. Le verrou est exclusif. Les demandes de verrou
     s'empilent de sorte que, si une même ressource est verrouillée trois fois,
@@ -12911,4 +13871,55 @@
    </para>
 
   </sect1>
+  <sect1 id="functions-trigger">
+   <title>Trigger Functions</title>
+
+   <indexterm>
+     <primary>suppress_redundant_updates_trigger</primary>
+   </indexterm>
+
+   <para>
+      Currently <productname>PostgreSQL</> provides one built in trigger
+      function, <function>suppress_redundant_updates_trigger</>, 
+      which will prevent any update
+      that does not actually change the data in the row from taking place, in
+      contrast to the normal behaviour which always performs the update
+      regardless of whether or not the data has changed. (This normal behaviour
+      makes updates run faster, since no checking is required, and is also
+      useful in certain cases.)
+    </para>
+
+    <para>
+      Ideally, you should normally avoid running updates that don't actually
+      change the data in the record. Redundant updates can cost considerable
+      unnecessary time, especially if there are lots of indexes to alter,
+      and space in dead rows that will eventually have to be vacuumed.
+      However, detecting such situations in client code is not
+      always easy, or even possible, and writing expressions to detect
+      them can be error-prone. An alternative is to use 
+      <function>suppress_redundant_updates_trigger</>, which will skip
+      updates that don't change the data. You should use this with care,
+      however. The trigger takes a small but non-trivial time for each record, 
+      so if most of the records affected by an update are actually changed,
+      use of this trigger will actually make the update run slower.
+    </para>
+
+    <para>
+      The <function>suppress_redundant_updates_trigger</> function can be 
+      added to a table like this:
+<programlisting>
+CREATE TRIGGER z_min_update 
+BEFORE UPDATE ON tablename
+FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger();
+</programlisting>
+      In most cases, you would want to fire this trigger last for each row.
+      Bearing in mind that triggers fire in name order, you would then
+      choose a trigger name that comes after the name of any other trigger
+      you might have on the table.
+    </para>
+    <para>
+       For more information about creating triggers, see
+        <xref linkend="SQL-CREATETRIGGER">.
+    </para>
+  </sect1>
 </chapter>

Modified: traduc/trunk/postgresql/installation.xml
===================================================================
--- traduc/trunk/postgresql/installation.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/installation.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -6,7 +6,7 @@
 
 <chapter id="installation">
  <title>Procédure d'installation <phrase>de
-   <productname>PostgreSQL</productname></phrase></title>
+   <productname>PostgreSQL</productname></phrase> from Source Code</title>
 
  <indexterm zone="installation">
   <primary>installation</primary>
@@ -95,7 +95,9 @@
      <para>
       <application>tar</application> est requis pour déballer la distribution
       des sources, associé à <application>gzip</application> ou
-      <application>bzip2</application>.
+      <application>bzip2</application>. In
+      addition, <application>gzip</> is required to install the
+      documentation.
      </para>
     </listitem>
 
@@ -109,8 +111,11 @@
       </indexterm>
 
       La bibliothèque <acronym>GNU</acronym> <productname>Readline</productname> est
-      utilisée par défaut (pour faciliter l'édition des lignes et le parcours de
-      l'historique des commandes). Pour ne pas l'utiliser, il
+      utilisée par défaut. It allows <application>psql</application> (the
+      PostgreSQL command line SQL interpreter) to remember each
+      command you type, and allows you to use arrow keys to recall and
+      edit previous commands.  This is very helpful and is strongly
+      recommended. Pour ne pas l'utiliser, il
       faut préciser <option>--without-readline</option> au moment d'exécuter
       la commande <filename>configure</filename>. Une alternative possible est
       l'utilisation de la bibliothèqe <filename>libedit</filename> sous license
@@ -276,6 +281,9 @@
        <primary>flex</primary>
       </indexterm>
       <indexterm>
+       <primary>lex</primary>
+      </indexterm>
+      <indexterm>
        <primary>bison</primary>
       </indexterm>
       <indexterm>
@@ -287,11 +295,8 @@
       fichiers de définition de l'analyseur ou du « scanner » sont modifiés.
       Les versions nécessaires sont <application>Flex</application> 2.5.4 ou
       ultérieure et <application>Bison</application> 1.875 ou ultérieure.
-      D'autres programmes <application>yacc</application> peuvent parfois
-      être utilisés, mais cela est déconseillé, au regard des
-      efforts supplémentaires que cela demande. 
-      Tout autre programme <application>lex</application> ne fonctionne
-      pas.
+      D'autres programmes <application>lex</application> et
+      <application>yacc</application> ne peuvent pas être utilisés
      </para>
     </listitem>
    </itemizedlist>
@@ -583,23 +588,10 @@
       </varlistentry>
 
       <varlistentry>
-       <term><option>--datadir=<replaceable>REPERTOIRE</replaceable></option></term>
-       <listitem>
-        <para>
-         Prépare le répertoire pour des fichiers de données en lecture seule
-         utilisés par les programmes d'installation. Par défaut, il s'agit de
-         <filename><replaceable>PREFIX</replaceable>/share</filename>. Il est bon de noter que
-         cela n'a rien à voir avec l'emplacement des fichiers de votre base de
-         données.
-        </para>
-       </listitem>
-      </varlistentry>
-
-      <varlistentry>
        <term><option>--sysconfdir=<replaceable>REPERTOIRE</replaceable></option></term>
        <listitem>
         <para>
-         Le répertoire contenant divers fichiers de configuration. Par défaut,
+         Spécifie le répertoire contenant divers fichiers de configuration. Par défaut,
          il s'agit de <filename><replaceable>PREFIX</replaceable>/etc</filename>.
         </para>
        </listitem>
@@ -609,7 +601,7 @@
        <term><option>--libdir=<replaceable>REPERTOIRE</replaceable></option></term>
        <listitem>
         <para>
-         L'endroit où installer les bibliothèques et les modules chargeables
+         Spécifie l'endroit où installer les bibliothèques et les modules chargeables
          dynamiquement. Par défaut, il s'agit de
          <filename><replaceable>EXEC-PREFIX</replaceable>/lib</filename>.
         </para>
@@ -620,39 +612,82 @@
        <term><option>--includedir=<replaceable>REPERTOIRE</replaceable></option></term>
        <listitem>
         <para>
-         Le répertoire où sont installées les en-têtes C et C++. Par défaut, il
+         Spécifie le répertoire où sont installées les en-têtes C et C++. Par défaut, il
          s'agit de <filename><replaceable>PREFIX</replaceable>/include</filename>.
         </para>
        </listitem>
       </varlistentry>
 
       <varlistentry>
+       <term><option>--datarootdir=<replaceable>DIRECTORY</></option></term>
+       <listitem>
+        <para>
+         Sets the root directory for various types of read-only data
+         files.  This only sets the default for some of the following
+         options.  The default is
+         <filename><replaceable>PREFIX</>/share</>.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--datadir=<replaceable>DIRECTORY</></option></term>
+       <listitem>
+        <para>
+         Sets the directory for read-only data files used by the
+         installed programs. The default is
+         <filename><replaceable>DATAROOTDIR</></>. Note that this has
+         nothing to do with where your database files will be placed.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--localedir=<replaceable>DIRECTORY</></option></term>
+       <listitem>
+        <para>
+         Sets the directory for installing locale data, in particular
+         message translation catalog files.  The default is
+         <filename><replaceable>DATAROOTDIR</>/locale</>.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>--mandir=<replaceable>REPERTOIRE</replaceable></option></term>
        <listitem>
         <para>
          Les pages man fournies avec <productname>PostgreSQL</productname> seront
          installées sous ce répertoire, dans leur sous-répertoire
 	 <filename>man<replaceable>x</replaceable></filename> respectif.
-         Par défaut, il s'agit de <filename><replaceable>PREFIX</replaceable>/man</filename>.
+         Par défaut, il s'agit de <filename><replaceable>DATAROOTDIR</replaceable>/man</filename>.
         </para>
        </listitem>
       </varlistentry>
 
       <varlistentry>
-       <term><option>--with-docdir=<replaceable>REPERTOIRE</replaceable></option></term>
-       <term><option>--without-docdir</option></term>
+       <term><option>--docdir=<replaceable>REPERTOIRE</replaceable></option></term>
        <listitem>
         <para>
-         Les fichiers de documentation, sauf les pages <quote>man</quote>,
-         seront installés dans ce répertoire. Par défaut, il s'agit de
-	 <filename><replaceable>PREFIX</replaceable>/doc</filename>. Si l'option
-	 <option>--without-docdir</option> est spécifiée, la
-	 documentation ne sera pas installée par <command>make
-	 install</command>. Ceci est fait pour aider les scripts d'empaquetage
-	 ayant des méthodes particulières pour installer la documentation.
+         Sets the root directory for installing documentation files,
+         except <quote>man</> pages.  This only sets the default for
+         the following options.  The default value for this option is
+         <filename><replaceable>DATAROOTDIR</>/doc/postgresql</>.
         </para>
        </listitem>
       </varlistentry>
+
+      <varlistentry>
+       <term><option>--htmldir=<replaceable>DIRECTORY</></option></term>
+       <listitem>
+        <para>
+         The HTML-formatted documentation for
+         <productname>PostgreSQL</productname> will be installed under
+         this directory.  The default is
+         <filename><replaceable>DATAROOTDIR</></>.
+        </para>
+       </listitem>
+      </varlistentry>
      </variablelist>
 
      <note>
@@ -979,22 +1014,127 @@
       </varlistentry>
 
       <varlistentry>
-       <term><option>--enable-integer-datetimes</option></term>
+       <term><option>--disable-integer-datetimes</option></term>
        <listitem>
         <para>
-         Utilise le stockage des entiers sur 64 bits pour les types datetime
-         et interval plutôt que le stockage par défaut en virgule flottante.
-         Ceci réduit le nombre de valeurs représentatives mais garantit une
-         précision à la microseconde sur toute l'échelle de valeurs (voir
-	 la <phrase>la documentation sur les types de données
-	 date et heure</phrase><phrase><xref
-	 linkend="datatype-datetime"/></phrase>
-         pour plus d'informations).
+         Disable support for 64-bit integer storage for timestamps and
+         intervals, and store datetime values as floating-point
+         numbers instead. Floating-point datetime storage was the
+         default in <productname>PostgreSQL</productname> releases
+         prior to 8.4, but it is now deprecated, because it does not
+         support microsecond precision for the full range of
+         <type>timestamp</type> values. However, integer-based
+         datetime storage requires a 64-bit integer type. Therefore,
+         this option can be used when no such type is available, or
+         for compatibility with applications written for prior
+         versions of <productname>PostgreSQL</productname>. See
+         <![%standalone-include[the documentation about datetime datatypes]]>
+         <![%standalone-ignore[<xref linkend="datatype-datetime">]]>
+         for more information.
         </para>
        </listitem>
       </varlistentry>
 
       <varlistentry>
+       <term><option>--disable-float4-byval</option></term>
+       <listitem>
+        <para>
+         Disable passing float4 values <quote>by value</>, causing them
+         to be passed <quote>by reference</> instead.  This option costs
+         performance, but may be needed for compatibility with old
+         user-defined functions that are written in C and use the
+         <quote>version 0</> calling convention.  A better long-term
+         solution is to update any such functions to use the
+         <quote>version 1</> calling convention.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--disable-float8-byval</option></term>
+       <listitem>
+        <para>
+         Disable passing float8 values <quote>by value</>, causing them
+         to be passed <quote>by reference</> instead.  This option costs
+         performance, but may be needed for compatibility with old
+         user-defined functions that are written in C and use the
+         <quote>version 0</> calling convention.  A better long-term
+         solution is to update any such functions to use the
+         <quote>version 1</> calling convention.
+         Note that this option affects not only float8, but also int8 and some
+         related types such as timestamp.
+         On 32-bit platforms, <option>--disable-float8-byval</> is the default
+         and it is not allowed to select <option>--enable-float8-byval</>.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--with-segsize=<replaceable>SEGSIZE</replaceable></option></term>
+       <listitem>
+        <para>
+         Set the <firstterm>segment size</>, in gigabytes.  Large tables are
+         divided into multiple operating-system files, each of size equal
+         to the segment size.  This avoids problems with file size limits
+         that exist on many platforms.  The default segment size, 1 gigabyte,
+         is safe on all supported platforms.  If your operating system has
+         <quote>largefile</> support (which most do, nowadays), you can use
+         a larger segment size.  This can be helpful to reduce the number of
+         file descriptors consumed when working with very large tables.
+         But be careful not to select a value larger than is supported
+         by your platform and the filesystem(s) you intend to use.  Other
+         tools you might wish to use, such as <application>tar</>, could
+         also set limits on the usable file size.
+         It is recommended, though not absolutely required, that this value
+         be a power of 2.
+         Note that changing this value requires an initdb.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--with-blocksize=<replaceable>BLOCKSIZE</replaceable></option></term>
+       <listitem>
+        <para>
+         Set the <firstterm>block size</>, in kilobytes.  This is the unit
+         of storage and I/O within tables.  The default, 8 kilobytes,
+         is suitable for most situations; but other values may be useful
+         in special cases.
+         The value must be a power of 2 between 1 and 32 (kilobytes).
+         Note that changing this value requires an initdb.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--with-wal-segsize=<replaceable>SEGSIZE</replaceable></option></term>
+       <listitem>
+        <para>
+         Set the <firstterm>WAL segment size</>, in megabytes.  This is
+         the size of each individual file in the WAL log.  It may be useful
+         to adjust this size to control the granularity of WAL log shipping.
+         The default size is 16 megabytes.
+         The value must be a power of 2 between 1 and 64 (megabytes).
+         Note that changing this value requires an initdb.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><option>--with-wal-blocksize=<replaceable>BLOCKSIZE</replaceable></option></term>
+       <listitem>
+        <para>
+         Set the <firstterm>WAL block size</>, in kilobytes.  This is the unit
+         of storage and I/O within the WAL log.  The default, 8 kilobytes,
+         is suitable for most situations; but other values may be useful
+         in special cases.
+         The value must be a power of 2 between 1 and 64 (kilobytes).
+         Note that changing this value requires an initdb.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>--disable-spinlocks</option></term>
        <listitem>
         <para>
@@ -1038,7 +1178,7 @@
          <productname>PostgreSQL</productname> inclut sa propre base de données
 	 des fuseaux horaires, nécessaire pour les opérations sur les dates et
 	 les heures. Cette base de données est en fait compatible avec la base
-	 de fuseaux horaires <quote>zic</quote> fournie par de nombreux
+	 de fuseaux horaires <quote>zoneinfo</quote> fournie par de nombreux
 	 systèmes d'exploitation comme FreeBSD, Linux et Solaris, donc ce serait
 	 redondant de l'installer une nouvelle fois. Quand cette option est
 	 utilisée, la base des fuseaux horaires, fournie par le système, dans
@@ -1102,6 +1242,21 @@
       </varlistentry>
 
       <varlistentry>
+       <term><option>--enable-coverage</option></term>
+       <listitem>
+        <para>
+         If using GCC, all programs and libraries are compiled with
+         code coverage testing instrumentation.  When run, they
+         generate files in the build directory with code coverage
+         metrics.
+         <![%standalone-ignore[See <xref linkend="regress-coverage">
+         for more information.]]> This option is for use only with GCC
+         and when doing development work.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>--enable-profiling</option></term>
        <listitem>
         <para>
@@ -1153,9 +1308,10 @@
          <indexterm>
           <primary>DTrace</primary>
          </indexterm>
-         Compile avec le support de l'outil de trace dynamique, DTrace.
-         Le seul système d'exploitation supportant DTrace pour l'instant
-	 est Solaris.
+         Compile <productname>PostgreSQL</productname> avec le support de l'outil
+	 de trace dynamique, DTrace.
+         <![%standalone-ignore[See <xref linkend="dynamic-trace">
+         for more information.]]>
         </para>
 
         <para>
@@ -1163,13 +1319,14 @@
 	 d'environnement <envar>DTRACE</envar> doit être configurée. Ceci sera
 	 souvent nécessaire car <command>dtrace</command> est typiquement
 	 installé sous <filename>/usr/sbin</filename>, qui pourrait ne pas être
-	 dans le chemin. Des options supplémentaires en ligne de commande
-	 peuvent être indiquées dans la variable d'environnement
-	 <envar>DTRACEFLAGS</envar> pour le programme <command>dtrace</command>.
+	 dans le chemin.
         </para>
 
         <para>
-         Pour inclure le support de DTrace dans un exécutable 64-bit, ajoutez
+         Des options supplémentaires en ligne de commande
+	 peuvent être indiquées dans la variable d'environnement
+	 <envar>DTRACEFLAGS</envar> pour le programme <command>dtrace</command>.
+         On Solaris, pour inclure le support de DTrace dans un exécutable 64-bit, ajoutez
          l'option <literal>DTRACEFLAGS="-64"</literal> pour configure. Par
          exemple, en utilisant le compilateur GCC&nbsp;:
 <screen>./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
@@ -1209,6 +1366,15 @@
     <para>
      <variablelist>
       <varlistentry>
+       <term><envar>BISON</envar></term>
+       <listitem>
+        <para>
+         Bison program
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><envar>CC</envar></term>
        <listitem>
         <para>
@@ -1263,6 +1429,15 @@
       </varlistentry>
 
       <varlistentry>
+       <term><envar>FLEX</envar></term>
+       <listitem>
+        <para>
+         Flex program
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><envar>LDFLAGS</envar></term>
        <listitem>
         <para>
@@ -1315,7 +1490,8 @@
        <listitem>
         <para>
          chemin complet vers l'interpréteur Tcl. Il sera utilisé pour déterminer
-         les dépendances pour la construction de PL/Tcl.
+         les dépendances pour la construction de PL/Tcl, and it will
+         be substituted into Tcl scripts.
         </para>
        </listitem>
       </varlistentry>
@@ -1329,15 +1505,6 @@
         </para>
        </listitem>
       </varlistentry>
-
-      <varlistentry>
-       <term><envar>YACC</envar></term>
-       <listitem>
-        <para>
-         programme Yacc (<literal>bison -y</literal> si utilisation de Bison)
-        </para>
-       </listitem>
-      </varlistentry>
      </variablelist>
     </para>
    </step>
@@ -1814,8 +1981,8 @@
    Unix peuvent aussi fonctionner mais n'ont pas été récemment testés. Dans
    la plupart des cas, toutes les architectures processeurs supportées par
    une système d'exploitation données fonctionneront. Cherchez dans le
-   répertoire <filename>doc/</filename> de la distribution des sources pour
-   vérifier s'il existe une FAQ spécifique à votre système d'exploitation,
+   répertoire <xref linkend="installation-platform-notes"> below to see if
+   there is information spécifique à votre système d'exploitation,
    tout particulièrement dans le cas d'un vieux système.
   </para>
 
@@ -1830,4 +1997,948 @@
   </para>
  </sect1>
 
+ <sect1 id="installation-platform-notes">
+  <title>Platform-Specific Notes</title>
+
+  <para>
+   This section documents additional platform-specific issues
+   regarding the installation and setup of PostgreSQL.  Be sure to
+   read the installation instructions, and in
+   particular <xref linkend="install-requirements"> as well.  Also,
+   check <![%standalone-include[the
+   file <filename>src/test/regress/README</> and the documentation]]>
+   <![%standalone-ignore[<xref linkend="regress">]]> regarding the
+   interpretation of regression test results.
+  </para>
+
+  <para>
+   Platforms that are not covered here have no known platform-specific
+   installation issues.
+  </para>
+
+  <sect2 id="installation-notes-aix">
+   <title>AIX</title>
+
+   <indexterm zone="installation-notes-aix">
+    <primary>AIX</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL on AIX works, but getting it installed properly can be
+    challenging.  Both AIX version 4.3 and 5.3 are supported in
+    theory.  You can use GCC or the native IBM compiler xlc.  In
+    general, using recent versions of AIX and PostgreSQL helps.  Check
+    the build farm for up to date information about which versions of
+    AIX are known to work.
+   </para>
+
+   <para>
+    Use the following <command>configure</command> flags in addition
+    to your own if you have Readline or libz
+    there: <literal>--with-includes=/usr/local/include
+    --with-libraries=/usr/local/lib</literal>.
+   </para>
+
+   <para>
+    If you don't have a PowerPC or use GCC you might see rounding
+    differences in the geometry regression test.  There will probably
+    be warnings about 0.0/0.0 division and duplicate symbols which you
+    can safely ignore.
+   </para>
+
+   <para>
+    Some of the AIX tools may be <quote>a little different</quote>
+    from what you may be accustomed to on other platforms.  If you are
+    looking for a version of <command>ldd</command>, useful for
+    determining what object code depends on what libraries, the
+    following URLs may help you:
+    <ulink url="http://www.faqs.org/faqs/aix-faq/part4/section-22.html"></ulink>,
+    <ulink url="http://www.han.de/~jum/aix/ldd.c"></ulink>.
+   </para>
+
+   <sect3>
+    <title>AIX 4.3.2</title>
+
+    <para>
+     On AIX 4.3.2, you need <filename>libm.a</filename> that is in the
+     fileset bos.adt.libm.  Try the following command:
+<screen>
+$ lslpp -l bos.adt.libm
+</screen>
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>GCC issues</title>
+
+    <para>
+     On AIX 5.3, there have been some problems getting PostgreSQL to
+     compile and run using GCC.
+    </para>
+
+    <para>
+     You will want to use a version of GCC subsequent to 3.3.2,
+     particularly if you use a prepackaged version.  We had good
+     success with 4.0.1.  Problems with earlier versions seem to have
+     more to do with the way IBM packaged GCC than with actual issues
+     with GCC, so that if you compile GCC yourself, you might well
+     have success with an earlier version of GCC.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Unix-domain sockets broken</title>
+
+    <para>
+     AIX 5.3 has a problem
+     where <structname>sockadr_storage</structname> is not defined to
+     be large enough.  In version 5.3, IBM increased the size of
+     <structname>sockaddr_un</structname>, the address structure for
+     Unix-domain sockets, but did not correspondingly increase the
+     size of <structname>sockadr_storage</structname>.  The result of
+     this is that attempts to use Unix-domain sockets with PostgreSQL
+     lead to libpq overflowing the data structure.  TCP/IP connections
+     work OK, but not Unix-domain sockets, which prevents the
+     regression tests from working.
+    </para>
+
+    <para>
+     The problem was reported to IBM, and is recorded as bug report
+     PMR29657.  If you upgrade to maintenance level 5300-03, that will
+     include this fix.  Use the command <literal>oslevel -r</literal>
+     to determine what maintenance level you are at.  An immediate
+     resolution is to alter <symbol>_SS_MAXSIZE</symbol> to = 1025 in
+     <filename>/usr/include/sys/socket.h</filename>.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Memory Management</title>
+    <!-- http://archives.postgresql.org/message-id/603bgqmpl9.fsf@dba2.int.libertyrms.com -->
+
+    <para>
+     AIX can be somewhat peculiar with regards to the way it does
+     memory management.  You can have a server with many multiples of
+     gigabytes of RAM free, but still get out of memory or address
+     space errors when running applications.  One example
+     is <command>createlang</command> failing with unusual errors.
+     For example, running as the owner of the PostgreSQL installation:
+<screen>
+-bash-3.00$ createlang plpgsql template1
+createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plpgsql.so": A memory address is not in the address space for the process.
+</screen>
+    Running as a non-owner in the group posessing the PostgreSQL
+    installation:
+<screen>
+-bash-3.00$ createlang plpgsql template1
+createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plpgsql.so": Bad address
+</screen>
+     Another example is out of memory errors in the PostgreSQL server
+     logs, with every memory allocation near or greater than 256 MB
+     failing.
+    </para>
+
+    <para>
+     The overall cause of all these problems is the default bittedness
+     and memory model used by the server process.  By default, all
+     binaries built on AIX are 32-bit.  This does not depend upon
+     hardware type or kernel in use.  These 32-bit processes are
+     limited to 4 GB of memory laid out in 256 MB segments using one
+     of a few models.  The default allows for less than 256 MB in the
+     heap as it shares a single segment with the stack.
+    </para>
+
+    <para>
+     In the case of the <command>createlang</command> example, above,
+     check your umask and the permissions of the binaries in your
+     PostgreSQL installation.  The binaries involved in that example
+     were 32-bit and installed as mode 750 instead of 755.  Due to the
+     permissions being set in this fashion, only the owner or a member
+     of the possessing group can load the library.  Since it isn't
+     world-readable, the loader places the object into the process'
+     heap instead of the shared library segments where it would
+     otherwise be placed.
+    </para>
+
+    <para>
+     The <quote>ideal</quote> solution for this is to use a 64-bit
+     build of PostgreSQL, but that is not always practical, because
+     systems with 32-bit processors can build, but not run, 64-bit
+     binaries.
+    </para>
+
+    <para>
+     If a 32-bit binary is desired, set <symbol>LDR_CNTRL</symbol> to
+     <literal>MAXDATA=0x<replaceable>n</replaceable>0000000</literal>,
+     where 1 &lt;= n &lt;= 8, before starting the PostgreSQL server,
+     and try different values and <filename>postgresql.conf</filename>
+     settings to find a configuration that works satisfactorily.  This
+     use of <symbol>LDR_CNTRL</symbol> tells AIX that you want the
+     server to have <symbol>MAXDATA</symbol> bytes set aside for the
+     heap, allocated in 256 MB segments.  When you find a workable
+     configuration,
+     <command>ldedit</command> can be used to modify the binaries so
+     that they default to using the desired heap size.  PostgreSQL can
+     also be rebuilt, passing <literal>configure
+     LDFLAGS="-Wl,-bmaxdata:0x<replaceable>n</replaceable>0000000"</literal>
+     to achieve the same effect.
+    </para>
+
+    <para>
+     For a 64-bit build, set <envar>OBJECT_MODE</envar> to 64 and
+     pass <literal>CC="gcc -maix64"</literal>
+     and <literal>LDFLAGS="-Wl,-bbigtoc"</literal>
+     to <command>configure</command>.  (Options for
+    <command>xlc</command> might differ.)  If you omit the export of
+    <envar>OBJECT_MODE</envar>, your build may fail with linker errors.  When
+    <envar>OBJECT_MODE</envar> is set, it tells AIX's build utilities
+    such as <command>ar</>, <command>as</>, and <command>ld</> what
+    type of objects to default to handling.
+    </para>
+
+    <para>
+     By default, overcommit of paging space can happen.  While we have
+     not seen this occur, AIX will kill processes when it runs out of
+     memory and the overcommit is accessed.  The closest to this that
+     we have seen is fork failing because the system decided that
+     there was not enough memory for another process.  Like many other
+     parts of AIX, the paging space allocation method and
+     out-of-memory kill is configurable on a system- or process-wide
+     basis if this becomes a problem.
+    </para>
+
+    <bibliography>
+     <title>References and resources</title>
+
+     <biblioentry>
+      <biblioset relation="article">
+       <title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixprggd/genprogc/lrg_prg_support.htm">Large Program Support</ulink></title>
+      </biblioset>
+      <biblioset relation="book">
+       <title>AIX Documentation: General Programming Concepts: Writing and Debugging Programs</title>
+      </biblioset>
+     </biblioentry>
+
+     <biblioentry>
+      <biblioset relation="article">
+       <title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixprggd/genprogc/address_space.htm">Program Address Space Overview</ulink></title>
+      </biblioset>
+      <biblioset relation="book">
+       <title>AIX Documentation: General Programming Concepts: Writing and Debugging Programs</title>
+      </biblioset>
+     </biblioentry>
+
+     <biblioentry>
+      <biblioset relation="article">
+       <title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/resmgmt2.htm">Performance Overview of the Virtual Memory Manager (VMM)</ulink></title>
+      </biblioset>
+      <biblioset relation="book">
+       <title>AIX Documentation: Performance Management Guide</title>
+      </biblioset>
+     </biblioentry>
+
+     <biblioentry>
+      <biblioset relation="article">
+       <title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/memperf7.htm">Page Space Allocation</ulink></title>
+      </biblioset>
+      <biblioset relation="book">
+       <title>AIX Documentation: Performance Management Guide</title>
+      </biblioset>
+     </biblioentry>
+
+     <biblioentry>
+      <biblioset relation="article">
+       <title><ulink url="http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.doc/aixbman/prftungd/memperf6.htm">Paging-space thresholds tuning</ulink></title>
+      </biblioset>
+      <biblioset relation="book">
+       <title>AIX Documentation: Performance Management Guide</title>
+      </biblioset>
+     </biblioentry>
+
+     <biblioentry>
+       <title><ulink url="  http://www.redbooks.ibm.com/abstracts/sg245674.html?Open">Developing and Porting C and C++ Applications on AIX</ulink></title>
+       <publisher>
+        <publishername>IBM Redbook</publishername>
+       </publisher>
+     </biblioentry>
+    </bibliography>
+   </sect3>
+
+   <sect3>
+    <title>Statistics Collector Issues</title>
+    <!-- http://archives.postgresql.org/message-id/6064jt6cfm.fsf_-_@dba2.int.libertyrms.com -->
+
+    <para>
+     When implementing PostgreSQL version 8.1 on AIX 5.3, we
+     periodically ran into problems where the statistics collector
+     would <quote>mysteriously</quote> not come up successfully.  This
+     appears to be the result of unexpected behaviour in the IPv6
+     implementation.  It looks like PostgreSQL and IPv6 do not play
+     very well together at this time on AIX.
+    </para>
+
+    <para>
+     Any of the following actions <quote>fix</quote> the problem.
+     <itemizedlist>
+      <listitem>
+       <para>
+        Delete the IPv6 address for localhost:
+<screen>
+(as root)
+# ifconfig lo0 inet6 ::1/0 delete
+</screen>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove IPv6 from net services.  The
+        file <filename>/etc/netsvc.conf</filename> on AIX is roughly
+        equivalent to <filename>/etc/nsswitch.conf</filename> on
+        Solaris/Linux.  The default, on AIX, is thus:
+<programlisting>
+hosts=local,bind
+</programlisting>
+        Replace this with:
+<programlisting>
+hosts=local4,bind4
+</programlisting>
+        to deactivate searching for IPv6 addresses.
+       </para>
+      </listitem>
+     </itemizedlist>
+    </para>
+   </sect3>
+  </sect2>
+
+  <sect2 id="installation-notes-cygwin">
+   <title>Cygwin</title>
+
+   <indexterm zone="installation-notes-cygwin">
+    <primary>Cyginw</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL can be built using Cygwin, a Linux-like environment for
+    Windows, but that method is inferior to the native Windows build
+    <![%standalone-ignore[(see <xref linkend="install-win32">)]]> and
+    is no longer recommended.
+   </para>
+
+   <para>
+    When building from source, proceed according to the normal
+    installation procedure (i.e., <literal>./configure;
+    make</literal>; etc.), noting the following-Cygwin specific
+    differences:
+
+    <itemizedlist>
+     <listitem>
+      <para>
+       Set your path to use the Cygwin bin directory before the
+       Windows utilities.  This will help prevent problems with
+       compilation.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       The GNU make command is called "make" not "gmake".
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       The <command>adduser</command> command is not supported; use
+       the appropriate user management application on Windows NT,
+       2000, or XP.  Otherwise, skip this step.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       The <command>su</command> command is not supported; use ssh to
+       simulate su on Windows NT, 2000, or XP. Otherwise, skip this
+       step.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       OpenSSL is not supported.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Start <command>cygserver</command> for shared memory support.
+       To do this, enter the command <literal>/usr/sbin/cygserver
+       &amp;</literal>.  This program needs to be running anytime you
+       start the PostgreSQL server or initialize a database cluster
+       (<command>initdb</command>).  The
+       default <command>cygserver</command> configuration may need to
+       be changed (e.g., increase <symbol>SEMMNS</symbol>) to prevent
+       PostgreSQL from failing due to a lack of system resources.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       The parallel regression tests (<literal>make check</literal>)
+       can generate spurious regression test failures due to
+       overflowing the <function>listen()</function> backlog queue
+       which causes connection refused errors or hangs.  You can limit
+       the number of connections using the make
+       variable <varname>MAX_CONNECTIONS</varname> thus:
+<programlisting>
+make MAX_CONNECTIONS=5 check
+</programlisting>
+       (On some systems you can have up to about 10 simultaneous
+       connections).
+      </para>
+     </listitem>
+    </itemizedlist>
+   </para>
+
+   <para>
+    It is possible to install <command>cygserver</command> and the
+    PostgreSQL server as Windows NT services.  For information on how
+    to do this, please refer to the <filename>README</filename>
+    document included with the PostgreSQL binary package on Cygwin.
+    It is installed in the
+    directory <filename>/usr/share/doc/Cygwin</filename>.
+   </para>
+  </sect2>
+
+  <sect2 id="installation-notes-hpux">
+   <title>HP-UX</title>
+
+   <indexterm zone="installation-notes-hpux">
+    <primary>HP-UX</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL 7.3+ should work on Series 700/800 PA-RISC machines
+    running HP-UX 10.X or 11.X, given appropriate system patch levels
+    and build tools.  At least one developer routinely tests on HP-UX
+    10.20, and we have reports of successful installations on HP-UX
+    11.00 and 11.11.
+   </para>
+
+   <para>
+    Aside from the PostgreSQL source distribution, you will need GNU
+    make (HP's make will not do), and either GCC or HP's full ANSI C
+    compiler.  If you intend to build from CVS sources rather than a
+    distribution tarball, you will also need Flex (GNU lex) and Bison
+    (GNU yacc).  We also recommend making sure you are fairly
+    up-to-date on HP patches.  At a minimum, if you are building 64
+    bit binaries on on HP-UX 11.11 you may need PHSS_30966 (11.11) or a
+    successor patch otherwise <command>initdb</command> may hang:
+<literallayout>
+PHSS_30966  s700_800 ld(1) and linker tools cumulative patch
+</literallayout>
+
+    On general principles you should be current on libc and ld/dld
+    patches, as well as compiler patches if you are using HP's C
+    compiler.  See HP's support sites such
+    as <ulink url="http://itrc.hp.com"></ulink> and
+    <ulink url="ftp://us-ffs.external.hp.com/"></ulink> for free
+    copies of their latest patches.
+   </para>
+
+   <para>
+    If you are building on a PA-RISC 2.0 machine and want to have
+    64-bit binaries using GCC, you must use GCC 64-bit version. GCC
+    binaries for HP-UX PA-RISC and Itanium are available from
+    <ulink url="http://www.hp.com/go/gcc"></ulink>.  Don't forget to
+    get and install binutils at the same time.
+   </para>
+
+   <para>
+    If you are building on a PA-RISC 2.0 machine and want the compiled
+    binaries to run on PA-RISC 1.1 machines you will need to specify
+    <option>+DAportable</option> in <envar>CFLAGS</envar>.
+   </para>
+
+   <para>
+    If you are building on a HP-UX Itanium machine, you will need the
+    latest HP ANSI C compiler with its dependent patch or successor
+    patches:
+<literallayout>
+PHSS_30848  s700_800 HP C Compiler (A.05.57)
+PHSS_30849  s700_800 u2comp/be/plugin library Patch
+</literallayout>
+   </para>
+
+   <para>
+    If you have both HP's C compiler and GCC's, then you might want to
+    explicitly select the compiler to use when you
+    run <command>configure</command>:
+<programlisting>
+./configure CC=cc
+</programlisting>
+    for HP's C compiler, or
+<programlisting>
+./configure CC=gcc
+</programlisting>
+    for GCC.  If you omit this setting, then configure will
+    pick <command>gcc</command> if it has a choice.
+   </para>
+
+   <para>
+    The default install target location
+    is <filename>/usr/local/pgsql</filename>, which you might want to
+    change to something under <filename>/opt</filename>.  If so, use
+    the
+    <option>--prefix</option> switch to <command>configure</command>.
+   </para>
+
+   <para>
+    In the regression tests, there might be some low-order-digit
+    differences in the geometry tests, which vary depending on which
+    compiler and math library versions you use.  Any other error is
+    cause for suspicion.
+   </para>
+  </sect2>
+
+  <sect2 id="installation-notes-irix">
+   <title>IRIX</title>
+
+   <indexterm zone="installation-notes-irix">
+    <primary>IRIX</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL has been reported to run successfully on MIPS r8000,
+    r10000 (both ip25 and ip27) and r12000(ip35) processors, running
+    IRIX 6.5.5m, 6.5.12, 6.5.13, and 6.5.26 with MIPSPro compilers
+    version 7.30, 7.3.1.2m, 7.3, and 7.4.4m.
+   </para>
+
+   <para>
+    You will need the MIPSPro full ANSI C compiler.  There are
+    problems trying to build with GCC.  It is a known GCC bug (not
+    fixed as of version 3.0) related to using functions that return
+    certain kinds of structures. This bug affects functions like
+    <function>inet_ntoa</>, <function>inet_lnaof</>, <function>inet_netof</>, <function>inet_makeaddr</>,
+    and <function>semctl</>.  It is supposed to be fixed by forcing
+    code to link those functions with libgcc, but this has not been
+    tested yet.
+   </para>
+
+   <para>
+    It is known that version 7.4.1m of the MIPSPro compiler generates
+    incorrect code.  The symptom is <quote>invalid primary checkpoint
+    record</quote> when trying to start the database.)  Version 7.4.4m
+    is OK; the status of intermediate versions is uncertain.
+   </para>
+
+   <para>
+    There may be a compilation problem like the following:
+<screen>
+cc-1020 cc: ERROR File = pqcomm.c, Line = 427
+  The identifier "TCP_NODELAY" is undefined.
+
+                if (setsockopt(port->sock, IPPROTO_TCP, TCP_NODELAY,
+</screen>
+    Some versions include TCP definitions
+    in <filename>sys/xti.h</filename>, so it is necessary to
+    add <literal>#include &lt;sys/xti.h&gt;</literal>
+    in <filename>src/backend/libpq/pqcomm.c</> and in
+    <filename>src/interfaces/libpq/fe-connect.c</>.  If you encounter
+    this, please let us know so we can develop a proper fix.
+   </para>
+
+   <para>
+    In the regression tests, there might be some low-order-digit
+    differences in the geometry tests, depending on which FPU are you
+    using.  Any other error is cause for suspicion.
+   </para>
+  </sect2>
+
+  <sect2 id="installation-notes-mingw">
+   <title>MinGW/Native Windows</title>
+
+   <indexterm zone="installation-notes-mingw">
+    <primary>MinGW</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL for Windows can be built using MinGW, a Unix-like build
+    environment for Microsoft operating systems, or using
+    Microsoft's <productname>Visual C++</productname> compiler suite.
+    The MinGW build variant uses the normal build system described in
+    this chapter; the Visual C++ build works completely differently
+    and is described in <![%standalone-include[the
+    documentation]]><![%standalone-ignore[<xref linkend="install-win32">]]>.
+    There is also a precompiled binary installer which you can find at
+    from <ulink url="http://pgfoundry.org/projects/pginstaller"></ulink>.
+    It is a fully native build and uses no additional software like
+    MinGW.  The ready-made installer files are available on the main
+    PostgreSQL FTP servers in the <filename>binary/win32</filename>
+    directory.
+   </para>   
+
+   <para>
+    The native Win32 port requires a 32-bit NT-based Microsoft
+    operating system, like Windows NT 4, Windows 2000/2003, or Windows
+    XP.  (NT 4 is no longer supported.)  Earlier operating systems do
+    not have sufficient infrastructure (but Cygwin may be used on
+    those).  MinGW, the Unix-like build tools, and MSYS, a collection
+    of Unix tools required to run shell scripts
+    like <command>configure</command>, can be downloaded
+    from <ulink url="http://www.mingw.org/"></ulink>.  Neither is
+    required to run the resulting binaries; they are needed only for
+    creating the binaries.
+   </para>
+
+   <para>
+    After you have everything installed, it is suggested that you
+    run <application>psql</application>
+    under <command>CMD.EXE</command>, as the MSYS console has
+    buffering issues.
+   </para>
+  </sect2>
+
+  <sect2 id="installation-notes-sco">
+   <title>SCO OpenServer and SCO UnixWare</title>
+
+   <indexterm zone="installation-notes-sco">
+    <primary>SCO</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <indexterm zone="installation-notes-sco">
+    <primary>UnixWare</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL can be built on SCO UnixWare 7 and SCO OpenServer 5.
+    On OpenServer, you can use either the OpenServer Development Kit
+    or the Universal Development Kit.  However, some tweaking may be
+    needed, as described below.
+   </para>
+
+   <sect3>
+    <title>Skunkware</title>
+
+    <para>
+     You should locate your copy of the SCO Skunkware CD.  The
+     Skunkware CD is included with UnixWare 7 and current versions of
+     OpenServer 5.  Skunkware includes ready-to-install versions of
+     many popular programs that are available on the Internet.  For
+     example, gzip, gunzip, GNU Make, Flex, and Bison are all
+     included.  For UnixWare 7.1, this CD is now labeled "Open License
+     Software Supplement".  If you do not have this CD, the software
+     on it is available via anonymous FTP
+     from <ulink url="ftp://ftp.sco.com/skunkware"></ulink>.
+    </para>
+
+    <para>
+     Skunkware has different versions for UnixWare and OpenServer.
+     Make sure you install the correct version for your operating
+     system, except as noted below.
+    </para>
+
+    <para>
+     On UnixWare 7.1.3 and beyond, the GCC compiler is included on the
+     UDK CD as is GNU Make.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>GNU Make</title>
+
+    <para>
+     You need to use the GNU Make program, which is on the Skunkware
+     CD.  By default, it installs
+     as <filename>/usr/local/bin/make</filename>.  To avoid confusion
+     with the SCO <filename>make</filename> program, you may want to rename GNU <filename>make</filename> to
+     <filename>gmake</filename>.
+    </para>
+
+    <para>
+     As of UnixWare 7.1.3 and above, the GNU Make program is is the
+     OSTK portion of the UDK CD, and is
+     in <filename>/usr/gnu/bin/gmake</filename>.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Readline</title>
+
+    <para>
+     The Readline library is on the Skunkware CD.  But it is not
+     included on the UnixWare 7.1 Skunkware CD.  If you have the
+     UnixWare 7.0.0 or 7.0.1 Skunkware CDs, you can install it from
+     there.  Otherwise,
+     try <ulink url="ftp://ftp.sco.com/skunkware"></ulink>.
+    </para>
+
+    <para>
+     By default, Readline installs into <filename>/usr/local/lib</> and
+     <filename>/usr/local/include</>.  However, the
+     PostgreSQL <command>configure</command> program will not find it
+     there without help.  If you installed Readline, then use the
+     following options to <command>configure</command>:
+<programlisting>
+./configure --with-libraries=/usr/local/lib --with-includes=/usr/local/include
+</programlisting>
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Using the UDK on OpenServer</title>
+
+    <para>
+     If you are using the new Universal Development Kit (UDK) compiler
+     on OpenServer, you need to specify the locations of the UDK
+     libraries:
+<programlisting>
+./configure --with-libraries=/udk/usr/lib --with-includes=/udk/usr/include
+</programlisting>
+     Putting these together with the Readline options from above:
+<programlisting>
+./configure --with-libraries="/udk/usr/lib /usr/local/lib" --with-includes="/udk/usr/include /usr/local/include"
+</programlisting>
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Reading the PostgreSQL man pages</title>
+
+    <para>
+     By default, the PostgreSQL man pages are installed into
+     <filename>/usr/local/pgsql/man</filename>.  By default, UnixWare
+     does not look there for man pages.  To be able to read them you
+     need to modify the
+     <varname>MANPATH</varname> variable
+     in <filename>/etc/default/man</filename>, for example:
+<programlisting>
+MANPATH=/usr/lib/scohelp/%L/man:/usr/dt/man:/usr/man:/usr/share/man:scohelp:/usr/local/man:/usr/local/pgsql/man
+</programlisting>
+    </para>
+
+    <para>
+     On OpenServer, some extra research needs to be invested to make
+     the man pages usable, because the man system is a bit different
+     from other platforms.  Currently, PostgreSQL will not install
+     them at all.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>C99 Issues with the 7.1.1b Feature Supplement</title>
+
+    <para>
+     For compilers earlier than the one released with OpenUNIX 8.0.0
+     (UnixWare 7.1.2), including the 7.1.1b Feature Supplement, you
+     may need to specify <option>-Xb</option>
+     in <varname>CFLAGS</varname> or the <varname>CC</varname>
+     environment variable.  The indication of this is an error in
+     compiling <filename>tuplesort.c</filename> referencing inline
+     functions.  Apparently there was a change in the 7.1.2(8.0.0)
+     compiler and beyond.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title><option>--enable-thread-safety</option> and UnixWare</title>
+
+    <para>
+     If you use the <command>configure</command>
+     option <option>--enable-thread-safety</option>,
+     you <emphasis>must</emphasis> use <option>-Kpthread</option>
+     on <emphasis>all</emphasis> libpq-using programs.  libpq
+     uses <function>pthread_*</function> calls, which are only
+     available with the
+     <option>-Kpthread</>/<option>-Kthread</> flag.
+    </para>
+   </sect3>
+  </sect2>
+
+  <sect2 id="installation-notes-solaris">
+   <title>Solaris</title>
+
+   <indexterm zone="installation-notes-solaris">
+    <primary>Solaris</primary>
+    <secondary>installation on</secondary>
+   </indexterm>
+
+   <para>
+    PostgreSQL is well-supported on Solaris.  The more up to date your
+    operating system, the fewer issues you will experience; details
+    below.
+   </para>
+
+   <para>
+    Note that PostgreSQL is bundled with Solaris 10 (from update 2).
+    Official packages are also available on
+    <ulink url="http://pgfoundry.org/projects/solarispackages/"></ulink>.
+    Packages for older Solaris versions (8, 9) you can be obtained
+    from <ulink url="http://www.sunfreeware.com/"></ulink> or
+    <ulink url="http://www.blastwave.org/"></ulink>.
+   </para>
+
+   <sect3>
+    <title>Required tools</title>
+
+    <para>
+     You can build with either GCC or Sun's compiler suite.  For
+     better code optimization, Sun's compiler is strongly recommended
+     on the SPARC architecture.  We have heard reports of problems
+     when using GCC 2.95.1; gcc 2.95.3 or later is recommended.  If
+     you are using Sun's compiler, be careful not to select
+     <filename>/usr/ucb/cc</filename>;
+     use <filename>/opt/SUNWspro/bin/cc</filename>.
+    </para>
+
+    <para>
+     You can download Sun Studio
+     from <ulink url="http://developers.sun.com/sunstudio/downloads/"></ulink>.
+     Many of GNU tools are integrated into Solaris 10, or they are
+     present on the Solaris companion CD.  If you like packages for
+     older version of Solaris, you can find these tools
+     at <ulink url="http://www.sunfreeware.com"></ulink>
+     or <ulink url="http://www.blastwave.org"></ulink>.  If you prefer
+     sources, look
+     at <ulink url="http://www.gnu.org/order/ftp.html"></ulink>.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Problems with OpenSSL</title>
+
+    <para>
+     When you build PostgreSQL with OpenSSL support you might get
+     compilation errors in the following files:
+     <itemizedlist>
+      <listitem><para><filename>src/backend/libpq/crypt.c</filename></para></listitem>
+      <listitem><para><filename>src/backend/libpq/password.c</filename></para></listitem>
+      <listitem><para><filename>src/interfaces/libpq/fe-auth.c</filename></para></listitem>
+      <listitem><para><filename>src/interfaces/libpq/fe-connect.c</filename></para></listitem>
+     </itemizedlist>
+
+     This is because of a namespace conflict between the standard
+     <filename>/usr/include/crypt.h</filename> header and the header
+     files provided by OpenSSL.
+    </para>
+
+    <para>
+     Upgrading your OpenSSL installation to version 0.9.6a fixes this
+     problem.  Solaris 9 and above has a newer version of OpenSSL.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>configure complains about a failed test program</title>
+
+    <para>
+     If <command>configure</command> complains about a failed test
+     program, this is probably a case of the run-time linker being
+     unable to find some library, probably libz, libreadline or some
+     other non-standard library such as libssl.  To point it to the
+     right location, set the <envar>LDFLAGS</envar> environment
+     variable on the <command>configure</command> command line, e.g.,
+<programlisting>
+configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
+</programlisting>
+     See
+     the <citerefentry><refentrytitle>ld</><manvolnum>1</></citerefentry>
+     man page for more information.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>64-bit build sometimes crashes</title>
+
+    <para>
+     On Solaris 7 and older, the 64-bit version of libc has a buggy
+     <function>vsnprintf</function> routine, which leads to erratic
+     core dumps in PostgreSQL.  The simplest known workaround is to
+     force PostgreSQL to use its own version of vsnprintf rather than
+     the library copy.  To do this, after you
+     run <command>configure</command> edit a file produced by
+     <command>configure</command>:
+     In <filename>src/Makefile.global</filename>, change the line
+<programlisting>
+LIBOBJS =
+</programlisting>
+     to read
+<programlisting>
+LIBOBJS = snprintf.o
+</programlisting>
+     (There might be other files already listed in this variable.
+     Order does not matter.)  Then build as usual.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Compiling for optimal performance</title>
+
+    <para>
+     On the SPARC architecture, Sun Studio is strongly recommended for
+     compilation.  Try using the <option>-xO5</option> optimization
+     flag to generate significantly faster binaries.  Do not use any
+     flags that modify behavior of floating-point operations
+     and <varname>errno</varname> processing (e.g.,
+     <option>-fast</option>).  These flags could raise some
+     nonstandard PostgreSQL behavior for example in the date/time
+     computing.
+    </para>
+
+    <para>
+     If you do not have a reason to use 64-bit binaries on SPARC,
+     prefer the 32-bit version.  The 64-bit operations are slower and
+     64-bit binaries are slower than the 32-bit variants.  And on
+     other hand, 32-bit code on the AMD64 CPU family is not native,
+     and that is why 32-bit code is significant slower on this CPU
+     family.
+    </para>
+
+    <para>
+     Some tricks for tuning PostgreSQL and Solaris for performance can
+     be found
+     at <ulink url="http://www.sun.com/servers/coolthreads/tnb/applications_postgresql.jsp"></ulink>.
+     This article is primary focused on T2000 platform, but many of
+     the recommendations are also useful on other hardware with
+     Solaris.
+    </para>
+   </sect3>
+
+   <sect3>
+    <title>Using DTrace for tracing PostgreSQL</title>
+
+    <para>
+     Yes, using DTrace is possible.  See <![%standalone-include[the
+     documentation]]>
+     <![%standalone-ignore[<xref linkend="dynamic-trace">]]> for further
+     information.  You can also find more information in this
+     article: <ulink url="http://blogs.sun.com/robertlor/entry/user_level_dtrace_probes_in"></ulink>.
+    </para>
+
+    <para>
+     If you see the linking of the postgres executable abort with an
+     error message like
+<screen>
+Undefined                       first referenced
+ symbol                             in file
+AbortTransaction                    utils/probes.o
+CommitTransaction                   utils/probes.o
+ld: fatal: Symbol referencing errors. No output written to postgres
+collect2: ld returned 1 exit status
+gmake: *** [postgres] Error 1
+</screen>
+     your DTrace installation is too old to handle probes in static
+     functions.  You need Solaris 10u4 or newer.
+    </para>
+   </sect3>
+  </sect2>
+ </sect1>
+
 </chapter>

Modified: traduc/trunk/postgresql/keywords.xml
===================================================================
--- traduc/trunk/postgresql/keywords.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/keywords.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -101,6 +101,7 @@
    <row>
     <entry>Mot-clé</entry>
     <entry><productname>PostgreSQL</productname></entry>
+    <entry>SQL:2008</entry>
     <entry>SQL:2003</entry>
     <entry>SQL:1999</entry>
     <entry>SQL-92</entry>
@@ -108,4546 +109,5531 @@
   </thead>
 
   <tbody>
-    <row>
-      <entry><token>A</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ABORT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ABS</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ABSOLUTE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ACCESS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ACTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ADA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>ADD</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ADMIN</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AFTER</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AGGREGATE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ALIAS</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ALL</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ALLOCATE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ALSO</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ALTER</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ALWAYS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ANALYSE</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ANALYZE</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AND</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ANY</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ARE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ARRAY</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AS</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ASC</token></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ASENSITIVE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ASSERTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ASSIGNMENT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ASYMMETRIC</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ATOMIC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ATTRIBUTE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ATTRIBUTES</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>AUTHORIZATION</token></entry>
-      <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>AVG</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BACKWARD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
    <row>
+    <entry><token>A</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ABORT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ABS</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ABSENT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ABSOLUTE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ACCESS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ACCORDING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ACTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ADA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>ADD</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ADMIN</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AFTER</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AGGREGATE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ALIAS</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ALL</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ALLOCATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ALSO</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ALTER</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ALWAYS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ANALYSE</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ANALYZE</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AND</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ANY</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ARE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ARRAY</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ARRAY_AGG</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AS</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ASC</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ASENSITIVE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ASSERTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ASSIGNMENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ASYMMETRIC</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ATOMIC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ATTRIBUTE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ATTRIBUTES</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>AUTHORIZATION</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>AVG</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BACKWARD</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>BASE64</token></entry>
     <entry></entry>
     <entry>non réservé</entry>
+    <entry>non réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
-    <row>
-      <entry><token>BEFORE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BEGIN</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BERNOULLI</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BETWEEN</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BIGINT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BINARY</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BIT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BITVAR</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BIT_LENGTH</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BLOB</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BOOLEAN</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BOTH</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>BREADTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>BY</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>C</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CACHE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CALL</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CALLED</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CARDINALITY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CASCADE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CASCADED</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CASE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CAST</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CATALOG_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CEIL</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CEILING</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CHAIN</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CHAR</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHARACTER</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHARACTERISTICS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CHARACTERS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CHARACTER_LENGTH</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHARACTER_SET_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHARACTER_SET_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHARACTER_SET_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHAR_LENGTH</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHECK</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CHECKED</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CHECKPOINT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CLASS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CLASS_ORIGIN</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CLOB</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CLOSE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CLUSTER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COALESCE</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COBOL</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLATE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLATION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLATION_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLATION_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLATION_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLLECT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COLUMN</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COLUMN_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COMMAND_FUNCTION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COMMAND_FUNCTION_CODE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COMMENT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COMMIT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COMMITTED</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>COMPLETION</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONCURRENTLY</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONDITION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONDITION_NUMBER</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONFIGURATION</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONNECT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONNECTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONNECTION_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRAINT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRAINTS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRAINT_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRAINT_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRAINT_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONSTRUCTOR</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONTAINS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONTAINS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONTINUE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CONVERSION</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CONVERT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COPY</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CORR</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CORRESPONDING</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COST</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COUNT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>COVAR_POP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>COVAR_SAMP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CREATE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CREATEDB</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CREATEROLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CREATEUSER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CROSS</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CSV</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CUBE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CUME_DIST</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CURRENT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_DATE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_DEFAULT_TRANSFORM_GROUP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_PATH</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_ROLE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_TIME</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_TIMESTAMP</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_TRANSFORM_GROUP_FOR_TYPE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>CURRENT_USER</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURSOR</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>CURSOR_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>CYCLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DATA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>DATABASE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DATE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DATETIME_INTERVAL_CODE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>DATETIME_INTERVAL_PRECISION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>DAY</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEALLOCATE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEC</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DECIMAL</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DECLARE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEFAULT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEFAULTS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DEFERRABLE</token></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEFERRED</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DEFINED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DEFINER</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DEGREE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DELETE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DELIMITER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DELIMITERS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DENSE_RANK</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DEPTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DEREF</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DERIVED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DESC</token></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DESCRIBE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DESCRIPTOR</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DESTROY</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DESTRUCTOR</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DETERMINISTIC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DIAGNOSTICS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DICTIONARY</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DISABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DISCARD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DISCONNECT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DISPATCH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DISTINCT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DO</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DOCUMENT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DOMAIN</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DOUBLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DROP</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>DYNAMIC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>DYNAMIC_FUNCTION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>DYNAMIC_FUNCTION_CODE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EACH</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ELEMENT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ELSE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ENABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ENCODING</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ENCRYPTED</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>END</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>END-EXEC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ENUM</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EQUALS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ESCAPE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EVERY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXCEPT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXCEPTION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXCLUDE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXCLUDING</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXCLUSIVE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXEC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXECUTE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXISTING</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXISTS</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXPLAIN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>EXTERNAL</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>EXTRACT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FALSE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FAMILY</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FETCH</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FILTER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FINAL</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FIRST</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FLOAT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FLOOR</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FOLLOWING</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FOR</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FORCE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FOREIGN</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FORTRAN</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>FORWARD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FOUND</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FREE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FREEZE</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FROM</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FULL</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>FUNCTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>FUSION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>G</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>GENERAL</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>GENERATED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>GET</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GLOBAL</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GO</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GOTO</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GRANT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GRANTED</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>GREATEST</token></entry>
-      <entry>non réservé (ne peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>GROUP</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>GROUPING</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HANDLER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HAVING</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>HEADER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HEX</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HIERARCHY</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HOLD</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HOST</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>HOUR</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>IDENTITY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>IF</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IGNORE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ILIKE</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IMMEDIATE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>IMMUTABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IMPLEMENTATION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IMPLICIT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IN</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INCLUDING</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INCREMENT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INDEX</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INDEXES</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INDICATOR</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INFIX</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INHERIT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INHERITS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INITIALIZE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INITIALLY</token></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INNER</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INOUT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INPUT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INSENSITIVE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INSERT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INSTANCE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INSTANTIABLE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INSTEAD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INTEGER</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INTERSECT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INTERSECTION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>INTERVAL</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INTO</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>INVOKER</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>IS</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ISNULL</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ISOLATION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ITERATE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>JOIN</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>K</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>KEY</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>KEY_MEMBER</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>KEY_TYPE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LANCOMPILER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LANGUAGE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LARGE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LAST</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LATERAL</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LEADING</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LEAST</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LEFT</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LENGTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>LESS</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LEVEL</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LIKE</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LIMIT</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LISTEN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LN</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOAD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOCAL</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>LOCALTIME</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOCALTIMESTAMP</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOCATION</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOCATOR</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOCK</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOGIN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>LOWER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>M</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MAP</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MAPPING</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MATCH</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MATCHED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MAX</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MAXVALUE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MEMBER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MERGE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MESSAGE_LENGTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>MESSAGE_OCTET_LENGTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>MESSAGE_TEXT</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>METHOD</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MIN</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MINUTE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MINVALUE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MOD</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MODE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MODIFIES</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MODIFY</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MODULE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MONTH</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>MORE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>MOVE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MULTISET</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>MUMPS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>NAME</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>NAMES</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NATIONAL</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NATURAL</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NCHAR</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NCLOB</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NESTING</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NEW</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NEXT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NO</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NOCREATEDB</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOCREATEROLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOCREATEUSER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOINHERIT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOLOGIN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NONE</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NORMALIZE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NORMALIZED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOSUPERUSER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NOTHING</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOTIFY</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOTNULL</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NOWAIT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NULL</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NULLABLE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>NULLIF</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>NULLS</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>NUMBER</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>NUMERIC</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OBJECT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OCTETS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OCTET_LENGTH</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OF</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OFF</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OFFSET</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OIDS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OLD</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ON</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ONLY</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OPEN</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OPERATION</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OPERATOR</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OPTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OPTIONS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OR</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ORDER</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ORDERING</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ORDINALITY</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OTHERS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OUT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OUTER</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OUTPUT</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OVER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OVERLAPS</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>OVERLAY</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OVERRIDING</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OWNED</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>OWNER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PAD</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETERS</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_MODE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_ORDINAL_POSITION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_SPECIFIC_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_SPECIFIC_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARAMETER_SPECIFIC_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARSER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PARTIAL</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PARTITION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PASCAL</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>PASSWORD</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PATH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PERCENTILE_CONT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PERCENTILE_DISC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PERCENT_RANK</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PLACING</token></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PLANS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PLI</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>POSITION</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>POSTFIX</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>POWER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PRECEDING</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PRECISION</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PREFIX</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PREORDER</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PREPARE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PREPARED</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PRESERVE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PRIMARY</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PRIOR</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PRIVILEGES</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PROCEDURAL</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>PROCEDURE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>PUBLIC</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>QUOTE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RANGE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RANK</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>READ</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>READS</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REAL</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>REASSIGN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RECHECK</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RECURSIVE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REF</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REFERENCES</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>REFERENCING</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_AVGX</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_AVGY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_COUNT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_INTERCEPT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_R2</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_SLOPE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_SXX</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_SXY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REGR_SYY</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REINDEX</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RELATIVE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>RELEASE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RENAME</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REPEATABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>REPLACE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REPLICA</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RESET</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RESTART</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RESTRICT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>RESULT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RETURN</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RETURNED_CARDINALITY</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RETURNED_LENGTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>RETURNED_OCTET_LENGTH</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>RETURNED_SQLSTATE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>RETURNING</token></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RETURNS</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>REVOKE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>RIGHT</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ROLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROLLBACK</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ROLLUP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROUTINE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROUTINE_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROUTINE_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROUTINE_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROW</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>ROWS</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ROW_COUNT</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>ROW_NUMBER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>RULE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SAVEPOINT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SCALE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>SCHEMA</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SCHEMA_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>SCOPE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SCOPE_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SCOPE_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SCOPE_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SCROLL</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SEARCH</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SECOND</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SECTION</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SECURITY</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SELECT</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SELF</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SENSITIVE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SEQUENCE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SERIALIZABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>SERVER_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>SESSION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SESSION_USER</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SET</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SETOF</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SETS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SHARE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SHOW</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SIMILAR</token></entry>
-	  <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SIMPLE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SIZE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SMALLINT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SOME</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SOURCE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SPACE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SPECIFIC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SPECIFICTYPE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SPECIFIC_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SQL</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SQLCODE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SQLERROR</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SQLEXCEPTION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SQLSTATE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SQLWARNING</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SQRT</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STABLE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STANDALONE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>START</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STATE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STATEMENT</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STATIC</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STATISTICS</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STDDEV_POP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STDDEV_SAMP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STDIN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STDOUT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STORAGE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STRICT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STRIP</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STRUCTURE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>STYLE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SUBCLASS_ORIGIN</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>SUBLIST</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SUBMULTISET</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SUBSTRING</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SUM</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>SUPERUSER</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SYMMETRIC</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SYSID</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SYSTEM</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>SYSTEM_USER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TABLE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TABLESAMPLE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TABLESPACE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TABLE_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>TEMP</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TEMPLATE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TEMPORARY</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TERMINATE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>THAN</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TEXT</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>THEN</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TIES</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TIME</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TIMESTAMP</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TIMEZONE_HOUR</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TIMEZONE_MINUTE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TO</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TOP_LEVEL_COUNT</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRAILING</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TRANSACTION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TRANSACTIONS_COMMITTED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRANSACTIONS_ROLLED_BACK</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRANSACTION_ACTIVE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRANSFORM</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRANSFORMS</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRANSLATE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TRANSLATION</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TREAT</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRIGGER</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRIGGER_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRIGGER_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRIGGER_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRIM</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TRUE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>TRUNCATE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TRUSTED</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>TYPE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>UESCAPE</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNBOUNDED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNCOMMITTED</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>UNDER</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNENCRYPTED</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNION</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>UNIQUE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>UNKNOWN</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>UNLISTEN</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNNAMED</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-    </row>
-    <row>
-      <entry><token>UNNEST</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UNTIL</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>UPDATE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>UPPER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>USAGE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>USER</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>USER_DEFINED_TYPE_CATALOG</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>USER_DEFINED_TYPE_CODE</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>USER_DEFINED_TYPE_NAME</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>USER_DEFINED_TYPE_SCHEMA</token></entry>
-      <entry></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>USING</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VACUUM</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VALID</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VALIDATOR</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VALUE</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VALUES</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VARCHAR</token></entry>
-      <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VARIABLE</token></entry>
-      <entry></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VARYING</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VAR_POP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VAR_SAMP</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VERBOSE</token></entry>
-      <entry>réservé (peut être une fonction ou un type)</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VERSION</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>VIEW</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>VOLATILE</token></entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WHEN</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>WHENEVER</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>WHERE</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>WHITESPACE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WIDTH_BUCKET</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WINDOW</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WITH</token></entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>WITHIN</token></entry>
-      <entry></entry>
-      <entry>réservé</entry>
-      <entry></entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WITHOUT</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry></entry>
-    </row>
-    <row>
-      <entry><token>WORK</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>WRITE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
    <row>
+    <entry><token>BEFORE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BEGIN</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BERNOULLI</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BETWEEN</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BIGINT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BINARY</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BIT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BITVAR</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BIT_LENGTH</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BLOB</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BOM</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BOOLEAN</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BOTH</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>BREADTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>BY</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>C</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CACHE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CALL</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CALLED</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CARDINALITY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CASCADE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CASCADED</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CASE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CAST</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CATALOG</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CATALOG_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CEIL</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CEILING</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CHAIN</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CHAR</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHARACTER</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHARACTERISTICS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CHARACTERS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CHARACTER_LENGTH</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHARACTER_SET_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHARACTER_SET_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHARACTER_SET_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHAR_LENGTH</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHECK</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CHECKED</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CHECKPOINT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CLASS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CLASS_ORIGIN</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CLOB</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CLOSE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CLUSTER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COALESCE</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COBOL</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLATE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLATION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLATION_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLATION_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLATION_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLLECT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COLUMN</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COLUMNS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COLUMN_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COMMAND_FUNCTION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COMMAND_FUNCTION_CODE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COMMENT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COMMIT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COMMITTED</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>COMPLETION</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONCURRENTLY</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONDITION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONDITION_NUMBER</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONFIGURATION</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONNECT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONNECTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONNECTION_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRAINT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRAINTS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRAINT_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRAINT_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRAINT_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONSTRUCTOR</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONTAINS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONTENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONTINUE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CONVERSION</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CONVERT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COPY</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CORR</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CORRESPONDING</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COST</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COUNT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>COVAR_POP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>COVAR_SAMP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CREATE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CREATEDB</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CREATEROLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CREATEUSER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CROSS</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CSV</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CUBE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CUME_DIST</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_CATALOG</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_DATE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_DEFAULT_TRANSFORM_GROUP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_PATH</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_ROLE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_SCHEMA</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_TIME</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_TIMESTAMP</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_TRANSFORM_GROUP_FOR_TYPE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>CURRENT_USER</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURSOR</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>CURSOR_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>CYCLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DATA</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>DATABASE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DATETIME_INTERVAL_CODE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>DATETIME_INTERVAL_PRECISION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>DAY</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEALLOCATE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEC</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DECIMAL</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DECLARE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEFAULT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEFAULTS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DEFERRABLE</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEFERRED</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DEFINED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DEFINER</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DEGREE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DELETE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DELIMITER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DELIMITERS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DENSE_RANK</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DEPTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DEREF</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DERIVED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DESC</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DESCRIBE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DESCRIPTOR</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DESTROY</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DESTRUCTOR</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DETERMINISTIC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DIAGNOSTICS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DICTIONARY</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DISABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DISCARD</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DISCONNECT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DISPATCH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DISTINCT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DO</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DOCUMENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DOMAIN</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DOUBLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DROP</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>DYNAMIC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>DYNAMIC_FUNCTION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>DYNAMIC_FUNCTION_CODE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EACH</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ELEMENT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ELSE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EMPTY</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ENABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ENCODING</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ENCRYPTED</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>END</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>END-EXEC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ENUM</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EQUALS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ESCAPE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EVERY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXCEPT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXCEPTION</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXCLUDE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXCLUDING</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXCLUSIVE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXEC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXECUTE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXISTING</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXISTS</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXPLAIN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>EXTERNAL</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>EXTRACT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FALSE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FAMILY</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FETCH</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FILTER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FINAL</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FIRST</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FIRST_VALUE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FLAG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FLOAT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FLOOR</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FOLLOWING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FOR</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FORCE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FOREIGN</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FORTRAN</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>FORWARD</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FOUND</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FREE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FREEZE</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FROM</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FULL</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>FUNCTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>FUSION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>G</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>GENERAL</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>GENERATED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>GET</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GLOBAL</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GO</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GOTO</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GRANT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GRANTED</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>GREATEST</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>GROUP</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>GROUPING</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HANDLER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HAVING</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>HEADER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HEX</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HIERARCHY</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HOLD</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HOST</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>HOUR</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ID</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IDENTITY</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>IF</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IGNORE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ILIKE</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IMMEDIATE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>IMMUTABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IMPLEMENTATION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IMPLICIT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IN</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INCLUDING</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INCREMENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INDENT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INDEX</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INDEXES</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INDICATOR</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INFIX</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INHERIT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INHERITS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INITIALIZE</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INITIALLY</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INNER</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INOUT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INPUT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INSENSITIVE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INSERT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INSTANCE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INSTANTIABLE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INSTEAD</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INTEGER</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INTERSECT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INTERSECTION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>INTERVAL</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INTO</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>INVOKER</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>IS</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ISNULL</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ISOLATION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ITERATE</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>JOIN</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>K</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>KEY</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>KEY_MEMBER</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>KEY_TYPE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LAG</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LANCOMPILER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LANGUAGE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LARGE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LAST</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LAST_VALUE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LATERAL</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LC_COLLATE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LC_CTYPE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LEAD</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LEADING</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LEAST</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LEFT</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LENGTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>LESS</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LEVEL</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LIKE</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LIKE_REGEX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LIMIT</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LISTEN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LN</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOAD</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOCAL</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>LOCALTIME</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOCALTIMESTAMP</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOCATION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOCATOR</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOCK</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOGIN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>LOWER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>M</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MAP</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MAPPING</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MATCH</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MATCHED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MAX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MAXVALUE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MAX_CARDINALITY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MEMBER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MERGE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MESSAGE_LENGTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>MESSAGE_OCTET_LENGTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>MESSAGE_TEXT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>METHOD</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MIN</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MINUTE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MINVALUE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MOD</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MODE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MODIFIES</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MODIFY</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MODULE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MONTH</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>MORE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>MOVE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MULTISET</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>MUMPS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>NAME</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>NAMES</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NAMESPACE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NATIONAL</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NATURAL</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NCHAR</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NCLOB</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NESTING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NEW</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NEXT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NFC</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NFD</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NFKC</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NFKD</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NIL</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NO</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NOCREATEDB</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOCREATEROLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOCREATEUSER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOINHERIT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOLOGIN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NONE</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NORMALIZE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NORMALIZED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOSUPERUSER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NOTHING</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOTIFY</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOTNULL</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NOWAIT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NTH_VALUE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NTILE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NULL</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NULLABLE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>NULLIF</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>NULLS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>NUMBER</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>NUMERIC</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OBJECT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OCCURRENCES_REGEX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OCTETS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OCTET_LENGTH</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OF</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OFF</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OFFSET</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OIDS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OLD</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ON</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ONLY</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OPEN</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OPERATION</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OPERATOR</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OPTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OPTIONS</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OR</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ORDER</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ORDERING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ORDINALITY</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OTHERS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OUT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OUTER</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OUTPUT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OVER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OVERLAPS</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>OVERLAY</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OVERRIDING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OWNED</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>OWNER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>P</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PAD</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETERS</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_MODE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_ORDINAL_POSITION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_SPECIFIC_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_SPECIFIC_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARAMETER_SPECIFIC_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARSER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PARTIAL</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PARTITION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PASCAL</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>PASSING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PASSWORD</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PATH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PERCENTILE_CONT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PERCENTILE_DISC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PERCENT_RANK</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PLACING</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PLANS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PLI</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>POSITION</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>POSITION_REGEX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>POSTFIX</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>POWER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PRECEDING</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PRECISION</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PREFIX</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PREORDER</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PREPARE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PREPARED</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PRESERVE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PRIMARY</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PRIOR</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PRIVILEGES</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PROCEDURAL</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>PROCEDURE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>PUBLIC</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>QUOTE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RANGE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RANK</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>READ</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>READS</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REAL</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>REASSIGN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RECHECK</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RECURSIVE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REF</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REFERENCES</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>REFERENCING</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_AVGX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_AVGY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_COUNT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_INTERCEPT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_R2</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_SLOPE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_SXX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_SXY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REGR_SYY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REINDEX</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RELATIVE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>RELEASE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RENAME</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REPEATABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>REPLACE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REPLICA</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RESET</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RESPECT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RESTART</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RESTRICT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>RESULT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RETURN</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RETURNED_CARDINALITY</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RETURNED_LENGTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>RETURNED_OCTET_LENGTH</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>RETURNED_SQLSTATE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>RETURNING</token></entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RETURNS</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>REVOKE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>RIGHT</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ROLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROLLBACK</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ROLLUP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROUTINE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROUTINE_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROUTINE_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROUTINE_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROW</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ROWS</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>ROW_COUNT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>ROW_NUMBER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>RULE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SAVEPOINT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SCALE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>SCHEMA</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SCHEMA_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>SCOPE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SCOPE_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SCOPE_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SCOPE_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SCROLL</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SEARCH</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SECOND</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SECTION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SECURITY</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SELECT</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SELF</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SENSITIVE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SEQUENCE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SERIALIZABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>SERVER</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SERVER_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>SESSION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SESSION_USER</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SET</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SETOF</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SETS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SHARE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SHOW</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SIMILAR</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SIMPLE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SIZE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SMALLINT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SOME</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SOURCE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SPACE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SPECIFIC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SPECIFICTYPE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SPECIFIC_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SQL</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SQLCODE</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SQLERROR</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SQLEXCEPTION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SQLSTATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SQLWARNING</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SQRT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STABLE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STANDALONE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>START</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STATE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STATEMENT</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STATIC</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STATISTICS</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STDDEV_POP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STDDEV_SAMP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STDIN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STDOUT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STORAGE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STRICT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STRIP</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STRUCTURE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>STYLE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SUBCLASS_ORIGIN</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>SUBLIST</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SUBMULTISET</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SUBSTRING</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SUBSTRING_REGEX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SUM</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>SUPERUSER</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SYMMETRIC</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SYSID</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SYSTEM</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>SYSTEM_USER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>T</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TABLE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TABLESAMPLE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TABLESPACE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TABLE_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>TEMP</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TEMPLATE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TEMPORARY</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TERMINATE</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TEXT</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>THAN</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>THEN</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TIES</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TIME</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TIMESTAMP</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TIMEZONE_HOUR</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TIMEZONE_MINUTE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TO</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TOP_LEVEL_COUNT</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRAILING</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TRANSACTION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TRANSACTIONS_COMMITTED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSACTIONS_ROLLED_BACK</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSACTION_ACTIVE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSFORM</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSFORMS</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSLATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TRANSLATE_REGEX</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRANSLATION</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TREAT</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRIGGER</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRIGGER_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRIGGER_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRIGGER_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRIM</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TRIM_ARRAY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRUE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>TRUNCATE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TRUSTED</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>TYPE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>UESCAPE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNBOUNDED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNCOMMITTED</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>UNDER</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNENCRYPTED</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNION</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>UNIQUE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>UNKNOWN</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>UNLISTEN</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNNAMED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+   </row>
+   <row>
+    <entry><token>UNNEST</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNTIL</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UNTYPED</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>UPDATE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>UPPER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>URI</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>USAGE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>USER</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>USER_DEFINED_TYPE_CATALOG</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>USER_DEFINED_TYPE_CODE</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>USER_DEFINED_TYPE_NAME</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>USER_DEFINED_TYPE_SCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>USING</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VACUUM</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VALID</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VALIDATOR</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VALUE</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VALUES</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VARBINARY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VARCHAR</token></entry>
+    <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VARIABLE</token></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VARIADIC</token></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VARYING</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VAR_POP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VAR_SAMP</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VERBOSE</token></entry>
+    <entry>réservé (peut être une fonction ou un type)</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VERSION</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>VIEW</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>VOLATILE</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WHEN</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>WHENEVER</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>WHERE</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>WHITESPACE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WIDTH_BUCKET</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WINDOW</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WITH</token></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>WITHIN</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WITHOUT</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WORK</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>WRAPPER</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>WRITE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
     <entry><token>XML</token></entry>
     <entry>non réservé</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4655,6 +5641,7 @@
     <entry><token>XMLAGG</token></entry>
     <entry></entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4662,6 +5649,7 @@
     <entry><token>XMLATTRIBUTES</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4669,13 +5657,23 @@
     <entry><token>XMLBINARY</token></entry>
     <entry></entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLCAST</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLCOMMENT</token></entry>
     <entry></entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4683,27 +5681,63 @@
     <entry><token>XMLCONCAT</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLDECLARATION</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>XMLDOCUMENT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLELEMENT</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLEXISTS</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLFOREST</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLITERATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLNAMESPACES</token></entry>
     <entry></entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4711,6 +5745,7 @@
     <entry><token>XMLPARSE</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
@@ -4718,37 +5753,90 @@
     <entry><token>XMLPI</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLQUERY</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLROOT</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
+    <entry></entry>
     <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
    <row>
+    <entry><token>XMLSCHEMA</token></entry>
+    <entry></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
     <entry><token>XMLSERIALIZE</token></entry>
     <entry>non réservé (ne peut pas être une fonction ou un type)</entry>
     <entry>réservé</entry>
+    <entry>réservé</entry>
     <entry></entry>
     <entry></entry>
    </row>
-    <row>
-      <entry><token>YEAR</token></entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
-    <row>
-      <entry><token>ZONE</token></entry>
-      <entry>non réservé</entry>
-      <entry>non réservé</entry>
-      <entry>réservé</entry>
-      <entry>réservé</entry>
-    </row>
+   <row>
+    <entry><token>XMLTABLE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>XMLTEXT</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>XMLVALIDATE</token></entry>
+    <entry></entry>
+    <entry>réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>YEAR</token></entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
+   <row>
+    <entry><token>YES</token></entry>
+    <entry>non réservé</entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+    <entry></entry>
+   </row>
+   <row>
+    <entry><token>ZONE</token></entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>non réservé</entry>
+    <entry>réservé</entry>
+    <entry>réservé</entry>
+   </row>
   </tbody>
  </tgroup>
 </table>

Modified: traduc/trunk/postgresql/libpq.xml
===================================================================
--- traduc/trunk/postgresql/libpq.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/libpq.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -69,6 +69,21 @@
    pour vérifier si la connexion s'est bien effectuée avant de lancer des
    requêtes via l'objet de connexion.
 
+   <note>
+    <para>
+     On Windows, there is a way to improve performance if a single
+     database connection is repeatedly started and shutdown.  Internally,
+     libpq calls WSAStartup() and WSACleanup() for connection startup
+     and shutdown, respectively.  WSAStartup() increments an internal
+     Windows library reference count which is decremented by WSACleanup().
+     When the reference count is just one, calling WSACleanup() frees
+     all resources and all DLLs are unloaded.  This is an expensive
+     operation.  To avoid this, an application can manually call
+     WSAStartup() so resources will not be freed when the last database
+     connection is closed.
+    </para>
+   </note>
+
    <variablelist>
     <varlistentry>
      <term><function>PQconnectdb</function><indexterm><primary>PQconnectdb</primary></indexterm></term>
@@ -105,7 +120,7 @@
    Les mots clés actuellement reconnus sont&nbsp;:
 
    <variablelist>
-    <varlistentry>
+    <varlistentry id="libpq-connect-host" xreflabel="host">
      <term><literal>host</literal></term>
      <listitem>
      <para>
@@ -123,7 +138,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-hostaddr" xreflabel="hostaddr">
      <term><literal>hostaddr</literal></term>
      <listitem>
      <para>
@@ -164,7 +179,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-port" xreflabel="port">
      <term><literal>port</literal></term>
      <listitem>
      <para>
@@ -174,7 +189,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-dbname" xreflabel="dbname">
      <term><literal>dbname</literal></term>
      <listitem>
      <para>
@@ -183,7 +198,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-user" xreflabel="user">
      <term><literal>user</literal></term> 
      <listitem>
      <para>
@@ -194,7 +209,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-password" xreflabel="password">
      <term><literal>password</literal></term>
      <listitem>
      <para>
@@ -204,7 +219,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-connect-timeout" xreflabel="connect_timeout">
      <term><literal>connect_timeout</literal></term>
      <listitem>
      <para>
@@ -216,16 +231,20 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-options" xreflabel="options">
      <term><literal>options</literal></term>
      <listitem>
       <para>
-       Options en ligne de commande à envoyer au serveur.
+           Adds command-line options to send to the server at run-time.
+           For example, setting this to <literal>-c geqo=off</> sets the
+           session's value of the <varname>geqo</> parameter to
+           <literal>off</>.  For a detailed discussion of the available
+           options, consult <xref linkend="runtime-config">.
       </para>
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-tty" xreflabel="tty">
      <term><literal>tty</literal></term>
      <listitem>
      <para>
@@ -235,7 +254,7 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-sslmode" xreflabel="sslmode">
      <term><literal>sslmode</literal></term>
      <listitem>
       <para>
@@ -263,8 +282,44 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
-     <term><literal>requiressl</literal></term>
+        <varlistentry id="libpq-connect-sslverify" xreflabel="sslverify">
+         <term><literal>sslverify</literal></term>
+         <listitem>
+          <para>
+           This option controls how libpq verifies the certificate on the
+           server when performing an <acronym>SSL</> connection. There are
+           three options: <literal>none</> disables verification completely
+           (not recommended); <literal>cert</> enables verification that
+           the server certificate chains to a known certificate
+           authority (CA); <literal>cn</> will both verify that the
+           certificate chains to a known CA and that the <literal>cn</>
+           attribute of the server certificate matches the server's
+           hostname (default).
+          </para>
+
+          <para>
+           It is always recommended to use the <literal>cn</> value for
+           this parameter, since this is the only option that prevents
+           man-in-the-middle attacks. Note that this requires the server
+           name on the certificate to match exactly with the host name
+           used for the connection, and therefore does not support connections
+           to aliased names. It can be used with pure IP address connections
+           only if the certificate also has just the IP address in the
+           <literal>cn</> field.
+          </para>
+
+          <para>
+           If the <literal>cn</> attribute in the certificate sent by the
+           server starts with an asterisk (<literal>*</>), it will be treated
+           as a wildcard. This wildcard can only be present at the start of
+           the value, and will match all characters <emphasis>except</> a
+           dot (<literal>.</>). This means the certificate will not match
+           subdomains.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="libpq-connect-requiressl" xreflabel="requiressl">
      <listitem>
       <para>
        Cette option est obsolète et remplacée par l'option <literal>sslmode</literal>.
@@ -284,7 +339,51 @@
      </listitem>
     </varlistentry>
 
-    <varlistentry>
+        <varlistentry id="libpq-connect-sslcert" xreflabel="sslcert">
+         <term><literal>sslcert</literal></term>
+         <listitem>
+          <para>
+           This parameter specifies the file name of the client SSL
+           certificate.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="libpq-connect-sslkey" xreflabel="sslkey">
+         <term><literal>sslkey</literal></term>
+         <listitem>
+          <para>
+           This parameter specifies the location for the secret key
+           used for the client certificate. It can either specify a filename
+           that will be used instead of the default
+           <filename>~/.postgresql/postgresql.key</>, or can specify an external
+           engine (engines are <productname>OpenSSL</> loadable modules). The
+           external engine specification should consist of a colon-separated
+           engine name and an engine-specific key identifier.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="libpq-connect-sslrootcert" xreflabel="sslrootcert">
+         <term><literal>sslrootcert</literal></term>
+         <listitem>
+          <para>
+           This parameter specifies the file name of the root SSL certificate.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="libpq-connect-sslcrl" xreflabel="sslcrl">
+         <term><literal>sslcrl</literal></term>
+         <listitem>
+          <para>
+           This parameter specifies the file name of the SSL certificate
+           revocation list (CRL).
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry id="libpq-connect-krbsrvname" xreflabel="krbsrvname">
      <term><literal>krbsrvname</literal></term>
      <listitem>
       <para>
@@ -296,7 +395,7 @@
          </listitem>
         </varlistentry>
 
-        <varlistentry>
+        <varlistentry id="libpq-connect-gsslib" xreflabel="gsslib">
          <term><literal>gsslib</literal></term>
          <listitem>
           <para>
@@ -309,7 +408,7 @@
          </listitem>
         </varlistentry>
 
-    <varlistentry>
+    <varlistentry id="libpq-connect-service" xreflabel="service">
      <term><literal>service</literal></term>
      <listitem>
      <para>
@@ -602,7 +701,7 @@
     char   *compiled;  /* Valeur par défaut interne */
     char   *val;       /* Valeur actuelle de l'option ou NULL */
     char   *label;     /* Label du champ pour le dialogue de connexion */
-    char   *dispchar;  /* Caractère à afficher pour ce champ
+    char   *dispchar;  /* Indique comment afficher ce champ
                           dans un dialogue de connexion. Les valeurs sont :
                           ""        Affiche la valeur entrée sans modification
                           "*"       Champ de mot de passe - cache la valeur
@@ -636,6 +735,51 @@
   </listitem>
  </varlistentry>
 
+    <varlistentry>
+     <term><function>PQconninfoParse</function><indexterm><primary>PQconninfoParse</></></term>
+     <listitem>
+      <para>
+       Returns parsed connection options from the provided connection string.
+
+<synopsis>
+PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
+</synopsis>
+      </para>
+
+      <para>
+       Parses a connection string and returns the resulting options as an
+       array; or returns NULL if there is a problem with the connection
+       string.  This can be used to determine
+       the <function>PQconnectdb</function> options in the provided
+       connection string.  The return value points to an array of
+       <structname>PQconninfoOption</structname> structures, which ends
+       with an entry having a null <structfield>keyword</> pointer.
+      </para>
+
+      <para>
+       Note that only options explicitly specified in the string will have
+       values set in the result array; no defaults are inserted.
+      </para>
+
+      <para>
+       If <literal>errmsg</> is not NULL, then <literal>*errmsg</> is set
+       to NULL on success, else to a malloc'd error string explaining
+       the problem.  (It is also possible for <literal>*errmsg</> to be
+       set to NULL even when NULL is returned; this indicates an out-of-memory
+       situation.)
+      </para>
+
+      <para>
+       After processing the options array, free it by passing it to
+       <function>PQconninfoFree</function>.  If this is not done, some memory
+       is leaked for each call to <function>PQconninfoParse</function>.
+       Conversely, if an error occurs and <literal>errmsg</> is not NULL,
+       be sure to free the error string using <function>PQfreemem</>.
+      </para>
+
+   </listitem>
+    </varlistentry>
+
  <varlistentry>
   <term><function>PQfinish</function><indexterm><primary>PQfinish</primary></indexterm></term>
   <listitem>
@@ -906,6 +1050,7 @@
 <literal>is_superuser</literal>,
 <literal>session_authorization</literal>,
 <literal>datestyle</literal>,
+       <literal>IntervalStyle</>,
 <literal>TimeZone</literal>,
 <literal>integer_datetimes</literal> et
 <literal>standard_conforming_strings</literal>.
@@ -913,7 +1058,8 @@
 <literal>integer_datetimes</literal> n'étaient pas rapportés dans les versions
 antérieures à la 8.0&nbsp;;
 <literal>standard_conforming_strings</literal> n'était pas rapporté dans les versions
-antérieures à la 8.1).
+antérieures à la 8.1; <literal>IntervalStyle</> was not reported by releases
+       before 8.4).
 Notez que
 <literal>server_version</literal>,
 <literal>server_encoding</literal> et
@@ -1006,7 +1152,8 @@
        Pratiquement toutes les fonctions <application>libpq</application> initialiseront
        un message pour <function>PQerrorMessage</function> en cas d'échec.
        Notez que, par la convention <application>libpq</application>, un résultat
-       non vide de <function>PQerrorMessage</function> inclura un retour
+       non vide de <function>PQerrorMessage</function> inclura can be multiple lines,
+       and un retour
        chariot à la fin. L'appelant ne devrait pas libérer directement le
        résultat. Il sera libéré quand la poignée <structname>PGconn</structname> associée
        est passée à <function>PQfinish</function>. Vous ne devriez pas supposer
@@ -1082,7 +1229,7 @@
      <listitem>
       <para>
        Renvoie true (1) si la méthode d'authentification de la connexion a
-       utilisé un mot de passe fourni par l'appelant. Renvoie false (0) sinon.
+       utilisé un mot de passe. Renvoie false (0) sinon.
 
        <synopsis>
         int PQconnectionUsedPassword(const PGconn *conn);
@@ -1091,10 +1238,8 @@
       </para>
 
       <para>
-       Cette fonction détecte si un mot de passe fourni à la fonction de
-       connexion a réellement été utilisé. Les mots de passe obtenus à partir
-       d'autres sources (comme le fichier <filename>.pgpass</filename>) ne sont
-       pas considérés comme fourni par l'utilisateur.
+       Cette fonction can be applied after either a failed or successful
+       connection attempt to detect whether the server demanded a password.
       </para>
      </listitem>
     </varlistentry>
@@ -1297,6 +1442,16 @@
        tableau est nul, alors tous les paramètres sont présumés être des chaînes
        de texte.
       </para>
+           <para>
+            Values passed in binary format require knowlege of
+            the internal representation expected by the backend.
+            For example, integers must be passed in network byte
+            order.  Passing <type>numeric</> values requires
+            knowledge of the server storage format, as implemented
+            in
+            <filename>src/backend/utils/adt/numeric.c::numeric_send()</> and
+            <filename>src/backend/utils/adt/numeric.c::numeric_recv()</>.
+           </para>
     </listitem>
   </varlistentry>
 
@@ -1889,31 +2044,6 @@
 </listitem>
 </varlistentry>
 
-<varlistentry>
-<term><function>PQmakeEmptyPGresult</function><indexterm><primary>PQmakeEmptyPGresult</primary></indexterm></term>
-<listitem>
-<para>
-          Construit un objet <structname>PGresult</structname> vide avec le
-          statut donné.
-<synopsis>PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
-</synopsis>
-</para>
-
-<para>
-Il s'agit d'une fonction interne de <application>libpq</application> pour allouer et
-initialiser un objet <structname>PGresult</structname> vide. Cette fonction
-renvoie NULL si la mémoire n'a pas pu être allouée. Il est exporté car
-certaines applications la trouvent utiles pour générer eux-même des objets
-résultats (particulièrement des objets avec des statuts d'erreur). Si
-<parameter>conn</parameter> n'est pas NULL et que <parameter>status</parameter> indique
-une erreur, le message d'erreur actuel pour la connexion spécifiée est copié
-dans <structname>PGresult</structname>. Notez que <function>PQclear</function>
-devrait éventuellement être appelé sur l'objet, comme avec un
-<structname>PGresult</structname> renvoyé par <application>libpq</application>
-elle-même.
-</para>
-</listitem>
-</varlistentry>
 </variablelist>
 </para>
 </sect2>
@@ -2663,33 +2793,6 @@
   </para>
   </listitem>
   </varlistentry>
-
-  <varlistentry>
-  <term><function>PQfreemem</function><indexterm><primary>PQfreemem</primary></indexterm></term>
-  <listitem>
-  <para>
-   Libère la mémoire allouée par <application>libpq</application>.
-<synopsis>void PQfreemem(void *ptr);
-</synopsis>
-</para>
-
-<para>
-   Libère la mémoire allouée par <application>libpq</application>, particulièrement
-   <function>PQescapeByteaConn</function>,
-   <function>PQescapeBytea</function>,
-   <function>PQunescapeBytea</function>,
-   et <function>PQnotifies</function>.
-   Il est particulièrement important que cette fonction soit utilisée sur
-   Microsoft Windows à la place de <function>free()</function>. Ceci est dû
-   au fait qu'une allocation de mémoire dans une DLL et à sa libération dans
-   l'application ne fonctionne que si les options multithread/monothread,
-   release/debug et statique/dynamique sont identiques pour la DLL et pour
-   l'application. Sur les autres plateformes que Microsoft Windows, cette
-   fonction est identique à celle de la bibliothèque standard,
-   <function>free()</function>.
-  </para>
-  </listitem>
-  </varlistentry>
   </variablelist>
    
  </sect2>
@@ -3988,6 +4091,64 @@
 </para>
 
 <variablelist>
+  <variablelist>
+   <varlistentry>
+    <term>
+     <function>PQfreemem</function>
+     <indexterm>
+      <primary>PQfreemem</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Frees memory allocated by <application>libpq</>.
+      <synopsis>
+       void PQfreemem(void *ptr);
+      </synopsis>
+     </para>
+
+     <para>
+      Frees memory allocated by <application>libpq</>, particularly
+      <function>PQescapeByteaConn</function>,
+      <function>PQescapeBytea</function>,
+      <function>PQunescapeBytea</function>,
+      and <function>PQnotifies</function>.
+      It is particularly important that this function, rather than
+      <function>free()</>, be used on Microsoft Windows.  This is because
+      allocating memory in a DLL and releasing it in the application works
+      only if multithreaded/single-threaded, release/debug, and static/dynamic
+      flags are the same for the DLL and the application.  On non-Microsoft
+      Windows platforms, this function is the same as the standard library
+      function <function>free()</>.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQconninfoFree</function>
+     <indexterm>
+      <primary>PQconninfoFree</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Frees the data structures allocated by
+      <function>PQconndefaults</> or <function>PQconninfoParse</>.
+      <synopsis>
+       void PQconninfoFree(PQconninfoOption *connOptions);
+      </synopsis>
+     </para>
+
+     <para>
+      A simple <function>PQfreemem</function> will not do for this, since
+      the array contains references to subsidiary strings.
+     </para>
+    </listitem>
+   </varlistentry>
+
 <varlistentry>
 <term><function>PQencryptPassword</function><indexterm><primary>PQencryptPassword</primary></indexterm></term>
 <listitem>
@@ -4011,6 +4172,211 @@
 </para>
 </listitem>
 </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQmakeEmptyPGresult</function>
+     <indexterm>
+      <primary>PQmakeEmptyPGresult</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Constructs an empty <structname>PGresult</structname> object with the given status.
+      <synopsis>
+       PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
+      </synopsis>
+     </para>
+
+     <para>
+      This is <application>libpq</>'s internal function to allocate and
+      initialize an empty <structname>PGresult</structname> object.  This
+      function returns NULL if memory could not be allocated. It is
+      exported because some applications find it useful to generate result
+      objects (particularly objects with error status) themselves.  If
+      <parameter>conn</parameter> is not null and <parameter>status</>
+      indicates an error, the current error message of the specified
+      connection is copied into the <structname>PGresult</structname>.
+      Also, if <parameter>conn</parameter> is not null, any event procedures
+      registered in the connection are copied into the
+      <structname>PGresult</structname>.  (They do not get
+      <literal>PGEVT_RESULTCREATE</> calls, but see
+      <function>PQfireResultCreateEvents</function>.)
+      Note that <function>PQclear</function> should eventually be called
+      on the object, just as with a <structname>PGresult</structname>
+      returned by <application>libpq</application> itself.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQfireResultCreateEvents</function>
+     <indexterm>
+      <primary>PQfireResultCreateEvents</primary>
+     </indexterm>
+    </term>
+    <listitem>
+     <para>
+      Fires a <literal>PGEVT_RESULTCREATE</literal> event (see <xref
+      linkend="libpq-events">) for each event procedure registered in the
+      <structname>PGresult</structname> object.  Returns non-zero for success,
+      zero if any event procedure fails.
+
+      <synopsis>
+       int PQfireResultCreateEvents(PGconn *conn, PGresult *res);
+      </synopsis>
+     </para>
+
+     <para>
+      The <literal>conn</> argument is passed through to event procedures
+      but not used directly.  It can be <literal>NULL</> if the event
+      procedures won't use it.
+     </para>
+
+     <para>
+      Event procedures that have already received a
+      <literal>PGEVT_RESULTCREATE</> or <literal>PGEVT_RESULTCOPY</> event
+      for this object are not fired again.
+     </para>
+
+     <para>
+      The main reason that this function is separate from
+      <function>PQmakeEmptyPGResult</function> is that it is often appropriate
+      to create a <structname>PGresult</structname> and fill it with data
+      before invoking the event procedures.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQcopyResult</function>
+     <indexterm>
+      <primary>PQcopyResult</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Makes a copy of a <structname>PGresult</structname> object.  The copy is
+      not linked to the source result in any way and
+      <function>PQclear</function> must be called when the copy is no longer
+      needed.  If the function fails, NULL is returned.
+
+      <synopsis>
+       PGresult *PQcopyResult(const PGresult *src, int flags);
+      </synopsis>
+     </para>
+
+     <para>
+      This is not intended to make an exact copy.  The returned result is
+      always put into <literal>PGRES_TUPLES_OK</literal> status, and does not
+      copy any error message in the source.  (It does copy the command status
+      string, however.)  The <parameter>flags</parameter> argument determines
+      what else is copied.  It is a bitwise OR of several flags.
+      <literal>PG_COPYRES_ATTRS</literal> specifies copying the source
+      result's attributes (column definitions).
+      <literal>PG_COPYRES_TUPLES</literal> specifies copying the source
+      result's tuples.  (This implies copying the attributes, too.)
+      <literal>PG_COPYRES_NOTICEHOOKS</literal> specifies
+      copying the source result's notify hooks.
+      <literal>PG_COPYRES_EVENTS</literal> specifies copying the source
+      result's events.  (But any instance data associated with the source
+      is not copied.)
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQsetResultAttrs</function>
+     <indexterm>
+      <primary>PQsetResultAttrs</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Sets the attributes of a <structname>PGresult</structname> object.
+      <synopsis>
+       int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);
+      </synopsis>
+     </para>
+
+     <para>
+      The provided <parameter>attDescs</parameter> are copied into the result.
+      If the <parameter>attDescs</parameter> pointer is NULL or
+      <parameter>numAttributes</parameter> is less than one, the request is
+      ignored and the function succeeds.  If <parameter>res</parameter>
+      already contains attributes, the function will fail.  If the function
+      fails, the return value is zero.  If the function succeeds, the return
+      value is non-zero.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQsetvalue</function>
+     <indexterm>
+      <primary>PQsetvalue</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Sets a tuple field value of a <structname>PGresult</structname> object.
+      <synopsis>
+       int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);
+      </synopsis>
+     </para>
+
+     <para>
+      The function will automatically grow the result's internal tuples array
+      as needed.  However, the <parameter>tup_num</parameter> argument must be
+      less than or equal to <function>PQntuples</function>, meaning this
+      function can only grow the tuples array one tuple at a time.  But any
+      field of any existing tuple can be modified in any order.  If a value at
+      <parameter>field_num</parameter> already exists, it will be overwritten.
+      If <parameter>len</parameter> is <literal>-1</literal> or
+      <parameter>value</parameter> is <literal>NULL</literal>, the field value
+      will be set to an SQL <literal>NULL</literal>.  The
+      <parameter>value</parameter> is copied into the result's private storage,
+      thus is no longer needed after the function
+      returns.  If the function fails, the return value is zero.  If the
+      function succeeds, the return value is non-zero.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>PQresultAlloc</function>
+     <indexterm>
+      <primary>PQresultAlloc</primary>
+     </indexterm>
+    </term>
+
+    <listitem>
+     <para>
+      Allocate subsidiary storage for a <structname>PGresult</structname> object.
+      <synopsis>
+       void *PQresultAlloc(PGresult *res, size_t nBytes);
+      </synopsis>
+     </para>
+
+     <para>
+      Any memory allocated with this function will be freed when
+      <parameter>res</parameter> is cleared.  If the function fails,
+      the return value is <literal>NULL</literal>.  The result is
+      guaranteed to be adequately aligned for any type of data,
+      just as for <function>malloc</>.
+     </para>
+    </listitem>
+   </varlistentry>
+
 </variablelist>
 
 </sect1>
@@ -4120,6 +4486,579 @@
 
 </sect1>
 
+ <sect1 id="libpq-events">
+  <title>Event System</title>
+
+  <para>
+   <application>libpq</application>'s event system is designed to notify
+   registered event handlers about interesting
+   <application>libpq</application> events, such as the creation or
+   destruction of <structname>PGconn</structname> and
+   <structname>PGresult</structname> objects.  A principal use case is that
+   this allows applications to associate their own data with a
+   <structname>PGconn</structname> or <structname>PGresult</structname>
+   and ensure that that data is freed at an appropriate time.
+  </para>
+
+  <para>
+   Each registered event handler is associated with two pieces of data,
+   known to <application>libpq</application> only as opaque <literal>void *</>
+   pointers.  There is a <firstterm>passthrough</> pointer that is provided
+   by the application when the event handler is registered with a
+   <structname>PGconn</>.  The passthrough pointer never changes for the
+   life of the <structname>PGconn</> and all <structname>PGresult</>s
+   generated from it; so if used, it must point to long-lived data.
+   In addition there is an <firstterm>instance data</> pointer, which starts
+   out NULL in every <structname>PGconn</> and <structname>PGresult</>.
+   This pointer can be manipulated using the
+   <function>PQinstanceData</function>,
+   <function>PQsetInstanceData</function>,
+   <function>PQresultInstanceData</function> and
+   <function>PQsetResultInstanceData</function> functions.  Note that
+   unlike the passthrough pointer, instance data of a <structname>PGconn</>
+   is not automatically inherited by <structname>PGresult</>s created from
+   it.  <application>libpq</application> does not know what passthrough
+   and instance data pointers point to (if anything) and will never attempt
+   to free them &mdash; that is the responsibility of the event handler.
+  </para>
+
+  <sect2 id="libpq-events-types">
+   <title>Event Types</title>
+
+   <para>
+    The enum <literal>PGEventId</> names the types of events handled by
+    the event system.  All its values have names beginning with
+    <literal>PGEVT</literal>.  For each event type, there is a corresponding
+    event info structure that carries the parameters passed to the event
+    handlers.  The event types are:
+   </para>
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>PGEVT_REGISTER</literal></term>
+     <listitem>
+      <para>
+       The register event occurs when <function>PQregisterEventProc</function>
+       is called.  It is the ideal time to initialize any
+       <literal>instanceData</literal> an event procedure may need.  Only one
+       register event will be fired per event handler per connection.  If the
+       event procedure fails, the registration is aborted.
+
+      <synopsis>
+typedef struct
+{
+    PGconn *conn;
+} PGEventRegister;
+      </synopsis>
+
+       When a <literal>PGEVT_REGISTER</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventRegister *</structname>.  This structure contains a
+       <structname>PGconn</structname> that should be in the
+       <literal>CONNECTION_OK</literal> status; guaranteed if one calls
+       <function>PQregisterEventProc</function> right after obtaining a good
+       <structname>PGconn</structname>.  When returning a failure code, all
+       cleanup must be performed as no <literal>PGEVT_CONNDESTROY</literal>
+       event will be sent.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>PGEVT_CONNRESET</literal></term>
+     <listitem>
+      <para>
+       The connection reset event is fired on completion of
+       <function>PQreset</function> or <function>PQresetPoll</function>.  In
+       both cases, the event is only fired if the reset was successful.  If
+       the event procedure fails, the entire connection reset will fail; the
+       <structname>PGconn</structname> is put into
+       <literal>CONNECTION_BAD</literal> status and
+       <function>PQresetPoll</function> will return
+       <literal>PGRES_POLLING_FAILED</literal>.
+
+      <synopsis>
+typedef struct
+{
+    PGconn *conn;
+} PGEventConnReset;
+      </synopsis>
+
+       When a <literal>PGEVT_CONNRESET</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventConnReset *</structname>.  Although the contained
+       <structname>PGconn</structname> was just reset, all event data remains
+       unchanged.  This event should be used to reset/reload/requery any
+       associated <literal>instanceData</literal>.  Note that even if the
+       event procedure fails to process <literal>PGEVT_CONNRESET</>, it will
+       still receive a <literal>PGEVT_CONNDESTROY</> event when the connection
+       is closed.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>PGEVT_CONNDESTROY</literal></term>
+     <listitem>
+      <para>
+       The connection destroy event is fired in response to
+       <function>PQfinish</function>.  It is the event procedure's
+       responsibility to properly clean up its event data as libpq has no
+       ability to manage this memory.  Failure to clean up will lead
+       to memory leaks.
+
+      <synopsis>
+typedef struct
+{
+    PGconn *conn;
+} PGEventConnDestroy;
+      </synopsis>
+
+       When a <literal>PGEVT_CONNDESTROY</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventConnDestroy *</structname>.  This event is fired
+       prior to <function>PQfinish</function> performing any other cleanup.
+       The return value of the event procedure is ignored since there is no
+       way of indicating a failure from <function>PQfinish</function>.  Also,
+       an event procedure failure should not abort the process of cleaning up
+       unwanted memory.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>PGEVT_RESULTCREATE</literal></term>
+     <listitem>
+      <para>
+       The result creation event is fired in response to any query execution
+       function that generates a result, including
+       <function>PQgetResult</function>.  This event will only be fired after
+       the result has been created successfully.
+
+      <synopsis>
+typedef struct
+{
+    PGconn *conn;
+    PGresult *result;
+} PGEventResultCreate;
+      </synopsis>
+
+       When a <literal>PGEVT_RESULTCREATE</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventResultCreate *</structname>.  The
+       <parameter>conn</parameter> is the connection used to generate the
+       result.  This is the ideal place to initialize any
+       <literal>instanceData</literal> that needs to be associated with the
+       result.  If the event procedure fails, the result will be cleared and
+       the failure will be propagated.  The event procedure must not try to
+       <function>PQclear</> the result object for itself.  When returning a
+       failure code, all cleanup must be performed as no
+       <literal>PGEVT_RESULTDESTROY</literal> event will be sent.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>PGEVT_RESULTCOPY</literal></term>
+     <listitem>
+      <para>
+       The result copy event is fired in response to
+       <function>PQcopyResult</function>.  This event will only be fired after
+       the copy is complete.  Only event procedures that have
+       successfully handled the <literal>PGEVT_RESULTCREATE</literal>
+       or <literal>PGEVT_RESULTCOPY</literal> event for the source result
+       will receive <literal>PGEVT_RESULTCOPY</literal> events.
+
+      <synopsis>
+typedef struct
+{
+    const PGresult *src;
+    PGresult *dest;
+} PGEventResultCopy;
+      </synopsis>
+
+       When a <literal>PGEVT_RESULTCOPY</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventResultCopy *</structname>.  The
+       <parameter>src</parameter> result is what was copied while the
+       <parameter>dest</parameter> result is the copy destination.  This event
+       can be used to provide a deep copy of <literal>instanceData</literal>,
+       since <literal>PQcopyResult</literal> cannot do that.  If the event
+       procedure fails, the entire copy operation will fail and the
+       <parameter>dest</parameter> result will be cleared.   When returning a
+       failure code, all cleanup must be performed as no
+       <literal>PGEVT_RESULTDESTROY</literal> event will be sent for the
+       destination result.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>PGEVT_RESULTDESTROY</literal></term>
+     <listitem>
+      <para>
+       The result destroy event is fired in response to a
+       <function>PQclear</function>.  It is the event procedure's
+       responsibility to properly clean up its event data as libpq has no
+       ability to manage this memory.  Failure to clean up will lead
+       to memory leaks.
+
+      <synopsis>
+typedef struct
+{
+    PGresult *result;
+} PGEventResultDestroy;
+      </synopsis>
+
+       When a <literal>PGEVT_RESULTDESTROY</literal> event is received, the
+       <parameter>evtInfo</parameter> pointer should be cast to a
+       <structname>PGEventResultDestroy *</structname>.  This event is fired
+       prior to <function>PQclear</function> performing any other cleanup.
+       The return value of the event procedure is ignored since there is no
+       way of indicating a failure from <function>PQclear</function>.  Also,
+       an event procedure failure should not abort the process of cleaning up
+       unwanted memory.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </sect2>
+
+  <sect2 id="libpq-events-proc">
+   <title>Event Callback Procedure</title>
+
+   <variablelist>
+    <varlistentry>
+     <term>
+      <literal>PGEventProc</literal>
+      <indexterm>
+       <primary>PGEventProc</primary>
+      </indexterm>
+     </term>
+
+     <listitem>
+      <para>
+       <literal>PGEventProc</literal> is a typedef for a pointer to an
+       event procedure, that is, the user callback function that receives
+       events from libpq.  The signature of an event procedure must be
+
+      <synopsis>
+int eventproc(PGEventId evtId, void *evtInfo, void *passThrough)
+      </synopsis>
+
+       The <parameter>evtId</parameter> parameter indicates which
+       <literal>PGEVT</literal> event occurred.  The
+       <parameter>evtInfo</parameter> pointer must be cast to the appropriate
+       structure type to obtain further information about the event.
+       The <parameter>passThrough</parameter> parameter is the pointer
+       provided to <function>PQregisterEventProc</function> when the event
+       procedure was registered.  The function should return a non-zero value
+       if it succeeds and zero if it fails.
+      </para>
+
+      <para>
+       A particular event procedure can be registered only once in any
+       <structname>PGconn</>.  This is because the address of the procedure
+       is used as a lookup key to identify the associated instance data.
+      </para>
+
+      <caution>
+       <para>
+        On Windows, functions can have two different addresses: one visible
+        from outside a DLL and another visible from inside the DLL.  One
+        should be careful that only one of these addresses is used with
+        <application>libpq</>'s event-procedure functions, else confusion will
+        result.  The simplest rule for writing code that will work is to
+        ensure that event procedures are declared <literal>static</>.  If the
+        procedure's address must be available outside its own source file,
+        expose a separate function to return the address.
+       </para>
+      </caution>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </sect2>
+
+  <sect2 id="libpq-events-funcs">
+   <title>Event Support Functions</title>
+
+    <variablelist>
+    <varlistentry>
+     <term>
+      <function>PQregisterEventProc</function>
+      <indexterm>
+       <primary>PQregisterEventProc</primary>
+      </indexterm>
+     </term>
+
+     <listitem>
+      <para>
+       Registers an event callback procedure with libpq.
+
+       <synopsis>
+        int PQregisterEventProc(PGconn *conn, PGEventProc proc,
+                                const char *name, void *passThrough);
+       </synopsis>
+      </para>
+
+      <para>
+       An event procedure must be registered once on each
+       <structname>PGconn</> you want to receive events about.  There is no
+       limit, other than memory, on the number of event procedures that
+       can be registered with a connection.  The function returns a non-zero
+       value if it succeeds and zero if it fails.
+      </para>
+
+      <para>
+       The <parameter>proc</parameter> argument will be called when a libpq
+       event is fired.  Its memory address is also used to lookup
+       <literal>instanceData</literal>.  The <parameter>name</parameter>
+       argument is used to refer to the event procedure in error messages.
+       This value cannot be NULL or a zero-length string.  The name string is
+       copied into the <structname>PGconn</>, so what is passed need not be
+       long-lived.  The <parameter>passThrough</parameter> pointer is passed
+       to the <parameter>proc</parameter> whenever an event occurs. This
+       argument can be NULL.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      <function>PQsetInstanceData</function>
+      <indexterm>
+       <primary>PQsetInstanceData</primary>
+      </indexterm>
+     </term>
+     <listitem>
+      <para>
+       Sets the conn's instanceData for proc to data.  This returns non-zero
+       for success and zero for failure.  (Failure is only possible if
+       the proc has not been properly registered in the conn.)
+
+       <synopsis>
+        int PQsetInstanceData(PGconn *conn, PGEventProc proc, void *data);
+       </synopsis>
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      <function>PQinstanceData</function>
+      <indexterm>
+       <primary>PQinstanceData</primary>
+      </indexterm>
+     </term>
+     <listitem>
+      <para>
+       Returns the conn's instanceData associated with proc, or NULL
+       if there is none.
+
+       <synopsis>
+        void *PQinstanceData(const PGconn *conn, PGEventProc proc);
+       </synopsis>
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      <function>PQresultSetInstanceData</function>
+      <indexterm>
+       <primary>PQresultSetInstanceData</primary>
+      </indexterm>
+     </term>
+     <listitem>
+      <para>
+       Sets the result's instanceData for proc to data.  This returns non-zero
+       for success and zero for failure.  (Failure is only possible if the
+       proc has not been properly registered in the result.)
+
+       <synopsis>
+        int PQresultSetInstanceData(PGresult *res, PGEventProc proc, void *data);
+       </synopsis>
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      <function>PQresultInstanceData</function>
+      <indexterm>
+       <primary>PQresultInstanceData</primary>
+      </indexterm>
+     </term>
+     <listitem>
+      <para>
+       Returns the result's instanceData associated with proc, or NULL
+       if there is none.
+
+       <synopsis>
+        void *PQresultInstanceData(const PGresult *res, PGEventProc proc);
+       </synopsis>
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </sect2>
+
+  <sect2 id="libpq-events-example">
+   <title>Event Example</title>
+
+   <para>
+    Here is a skeleton example of managing private data associated with
+    libpq connections and results.
+   </para>
+
+   <programlisting>
+<![CDATA[
+/* required header for libpq events (note: includes libpq-fe.h) */
+#include <libpq-events.h>
+
+/* The instanceData */
+typedef struct
+{
+    int n;
+    char *str;
+} mydata;
+
+/* PGEventProc */
+static int myEventProc(PGEventId evtId, void *evtInfo, void *passThrough);
+
+int
+main(void)
+{
+    mydata *data;
+    PGresult *res;
+    PGconn *conn = PQconnectdb("dbname = postgres");
+
+    if (PQstatus(conn) != CONNECTION_OK)
+    {
+        fprintf(stderr, "Connection to database failed: %s",
+                PQerrorMessage(conn));
+        PQfinish(conn);
+        return 1;
+    }
+
+    /* called once on any connection that should receive events.
+     * Sends a PGEVT_REGISTER to myEventProc.
+     */
+    if (!PQregisterEventProc(conn, myEventProc, "mydata_proc", NULL))
+    {
+        fprintf(stderr, "Cannot register PGEventProc\n");
+        PQfinish(conn);
+        return 1;
+    }
+
+    /* conn instanceData is available */
+    data = PQinstanceData(conn, myEventProc);
+
+    /* Sends a PGEVT_RESULTCREATE to myEventProc */
+    res = PQexec(conn, "SELECT 1 + 1");
+
+    /* result instanceData is available */
+    data = PQresultInstanceData(res, myEventProc);
+
+    /* If PG_COPYRES_EVENTS is used, sends a PGEVT_RESULTCOPY to myEventProc */
+    res_copy = PQcopyResult(res, PG_COPYRES_TUPLES | PG_COPYRES_EVENTS);
+
+    /* result instanceData is available if PG_COPYRES_EVENTS was
+     * used during the PQcopyResult call.
+     */
+    data = PQresultInstanceData(res_copy, myEventProc);
+
+    /* Both clears send a PGEVT_RESULTDESTROY to myEventProc */
+    PQclear(res);
+    PQclear(res_copy);
+
+    /* Sends a PGEVT_CONNDESTROY to myEventProc */
+    PQfinish(conn);
+
+    return 0;
+}
+
+static int
+myEventProc(PGEventId evtId, void *evtInfo, void *passThrough)
+{
+    switch (evtId)
+    {
+        case PGEVT_REGISTER:
+        {
+            PGEventRegister *e = (PGEventRegister *)evtInfo;
+            mydata *data = get_mydata(e->conn);
+
+            /* associate app specific data with connection */
+            PQsetInstanceData(e->conn, myEventProc, data);
+            break;
+        }
+
+        case PGEVT_CONNRESET:
+        {
+            PGEventConnReset *e = (PGEventConnReset *)evtInfo;
+            mydata *data = PQinstanceData(e->conn, myEventProc);
+
+            if (data)
+              memset(data, 0, sizeof(mydata));
+            break;
+        }
+
+        case PGEVT_CONNDESTROY:
+        {
+            PGEventConnDestroy *e = (PGEventConnDestroy *)evtInfo;
+            mydata *data = PQinstanceData(e->conn, myEventProc);
+
+            /* free instance data because the conn is being destroyed */
+            if (data)
+              free_mydata(data);
+            break;
+        }
+
+        case PGEVT_RESULTCREATE:
+        {
+            PGEventResultCreate *e = (PGEventResultCreate *)evtInfo;
+            mydata *conn_data = PQinstanceData(e->conn, myEventProc);
+            mydata *res_data = dup_mydata(conn_data);
+
+            /* associate app specific data with result (copy it from conn) */
+            PQsetResultInstanceData(e->result, myEventProc, res_data);
+            break;
+        }
+
+        case PGEVT_RESULTCOPY:
+        {
+            PGEventResultCopy *e = (PGEventResultCopy *)evtInfo;
+            mydata *src_data = PQresultInstanceData(e->src, myEventProc);
+            mydata *dest_data = dup_mydata(src_data);
+
+            /* associate app specific data with result (copy it from a result) */
+            PQsetResultInstanceData(e->dest, myEventProc, dest_data);
+            break;
+        }
+
+        case PGEVT_RESULTDESTROY:
+        {
+            PGEventResultDestroy *e = (PGEventResultDestroy *)evtInfo;
+            mydata *data = PQresultInstanceData(e->result, myEventProc);
+
+            /* free instance data because the result is being destroyed */
+            if (data)
+              free_mydata(data);
+            break;
+        }
+
+        /* unknown event id, just return TRUE. */
+        default:
+            break;
+    }
+
+    return TRUE; /* event processing succeeded */
+}
+]]>
+</programlisting>
+  </sect2>
+ </sect1>
+
 <sect1 id="libpq-envars">
 <title>Variables d'environnement</title>
 
@@ -4142,11 +5081,8 @@
 <indexterm>
  <primary><envar>PGHOST</envar></primary>
 </indexterm>
-<envar>PGHOST</envar> initialise le nom du serveur de la base de données. S'il
-commence avec une barre oblique, il spécifie une communication de domaine Unix
-plutôt qu'une communication TCP/IP&nbsp;; la valeur est le nom du répertoire où
-le fichier socket est stocké (dans une installation par défaut, cela serait
-<filename>/tmp</filename>).
+<envar>PGHOST</envar>  behaves the same as <xref
+      linkend="libpq-connect-host"> connection parameter.
 </para>
 </listitem>
 <listitem>
@@ -4154,28 +5090,19 @@
 <indexterm>
  <primary><envar>PGHOSTADDR</envar></primary>
 </indexterm>
-<envar>PGHOSTADDR</envar> spécifie l'adresse IP numérique du serveur de la base
-de données. Elle peut être initialisée avec <envar>PGHOST</envar> pour éviter
-la surcharge des recherches DNS. Voir la documentation de ces paramètres, dans
-<function>PQconnectdb</function> ci-dessus, pour des détails sur leur
-interaction.
+<envar>PGHOSTADDR</envar> behaves the same as <xref
+linkend="libpq-connect-hostaddr"> connection parameter.
+Elle peut être initialisée avec <envar>PGHOST</envar> pour éviter
+la surcharge des recherches DNS.
 </para>
-<para>
-Quand ni <envar>PGHOST</envar> ni <envar>PGHOSTADDR</envar> n'est initialisé,
-le comportement par défaut est de se connecter en utilisant un socket de domaine
-Unix&nbsp;; ou sur les machines sans sockets de domaine Unix,
-<application>libpq</application> essaiera de se connecter à
-<literal>localhost</literal>.
-</para>
 </listitem>
 <listitem>
 <para>
 <indexterm>
  <primary><envar>PGPORT</envar></primary>
 </indexterm>
-<envar>PGPORT</envar> initialise le numéro de port TCP ou l'extension du
-fichier socket de domaine Unix pour la communication avec le serveur
-<productname>PostgreSQL</productname>.
+<envar>PGPORT</envar> behaves the same as <xref
+      linkend="libpq-connect-port"> connection parameter.
 </para>
 </listitem>
 <listitem>
@@ -4183,17 +5110,18 @@
 <indexterm>
  <primary><envar>PGDATABASE</envar></primary>
 </indexterm>
-<envar>PGDATABASE</envar>  initialise le nom de la base de données sous
-<productname>PostgreSQL</productname>.
-</para>
+<envar>PGDATABASE</envar> behaves the same as <xref
+      linkend="libpq-connect-dbname"> connection parameter.
+      </para>
 </listitem>
 <listitem>
 <para>
 <indexterm>
  <primary><envar>PGUSER</envar></primary>
 </indexterm>
-<envar>PGUSER</envar> initialise le nom de l'utilisateur se connectant à la
-base de données.
+<envar>PGUSER</envar> behaves the same as <xref
+      linkend="libpq-connect-user"> connection parameter.
+      database.
 </para>
 </listitem>
 <listitem>
@@ -4201,8 +5129,8 @@
 <indexterm>
  <primary><envar>PGPASSWORD</envar></primary>
 </indexterm>
-<envar>PGPASSWORD</envar> initialise le mot de passe utilisé si le serveur
-demande une authentification par mot de passe. L'utilisation de cette variable
+<envar>PGPASSWORD</envar> behaves the same as <xref
+      linkend="libpq-connect-password"> connection parameter. L'utilisation de cette variable
 d'environnement n'est pas recommandée pour des raisons de sécurité (certains
 systèmes d'exploitation autorisent les utilisateurs autres que root à voir les
 variables d'environnement du processus via <application>ps</application>)&nbsp;; à la
@@ -4226,9 +5154,8 @@
 <indexterm>
  <primary><envar>PGSERVICE</envar></primary>
 </indexterm>
-<envar>PGSERVICE</envar> initialise le nom du service à recherche dans
-<filename>pg_service.conf</filename>. Cela offre un raccourci pour la
-configuration de tous les paramètres.
+<envar>PGSERVICE</envar> behaves the same as <xref
+      linkend="libpq-connect-service"> connection parameter.
 </para>
 </listitem>
 <listitem>
@@ -4251,8 +5178,8 @@
 <indexterm>
  <primary><envar>PGOPTIONS</envar></primary>
 </indexterm>
-<envar>PGOPTIONS</envar> initialise les options d'exécution supplémentaires
-pour le serveur <productname>PostgreSQL</productname>.
+<envar>PGOPTIONS</envar> behaves the same as <xref
+      linkend="libpq-connect-options"> connection parameter.
 </para>
 </listitem>
 <listitem>
@@ -4260,37 +5187,32 @@
 <indexterm>
  <primary><envar>PGSSLMODE</envar></primary>
 </indexterm>
-<envar>PGSSLMODE</envar> détermine si et avec quelle priorité une connexion
-<acronym>SSL</acronym> sera négociée avec le serveur. Il existe quatre modes&nbsp;:
-<literal>disable</literal> tentera seulement une connexion non cryptée, donc sans
-<acronym>SSL</acronym>&nbsp;; <literal>allow</literal> négociera en commençant par une
-connexion non <acronym>SSL</acronym> puis, s'il échoue, tentera une connexion
-<acronym>SSL</acronym>&nbsp;; <literal>prefer</literal> (la valeur par défaut) négociera en
-commençant  par une connexion <acronym>SSL</acronym> puis, en cas d'échec, essaiera
-une connexion non <acronym>SSL</acronym>&nbsp;; <literal>require</literal> essaiera seulement
-une connexion <acronym>SSL</acronym>. Si <productname>PostgreSQL</productname> est compilé sans
-le support de SSL, utiliser l'option <literal>require</literal> générera une erreur
-bien que les options <literal>allow</literal> et <literal>prefer</literal> seront acceptées
-mais, en fait, <application>libpq</application> ne tentera pas de connexion <acronym>SSL</acronym>.
+<envar>PGSSLMODE</envar> behaves the same as <xref
+      linkend="libpq-connect-sslmode"> connection parameter.
 </para>
 </listitem>
-<listitem>
-<para>
-<indexterm>
- <primary><envar>PGREQUIRESSL</envar></primary>
-</indexterm>
-<envar>PGREQUIRESSL</envar> initialise une connexion via
-<acronym>SSL</acronym>. S'il est initialisé à
-<quote>1</quote>, <application>libpq</application> refusera de se connecter si le serveur
-n'accepte pas de connexion <acronym>SSL</acronym> (équivalent à un
-<literal>sslmode</literal> valant <literal>prefer</literal>). Cette option est obsolète et
-laisse la place au paramétrage <literal>sslmode</literal>. Elle est seulement disponible
-si <productname>PostgreSQL</productname> est compilé avec le support de SSL.
-</para>
-</listitem>
     <listitem>
      <para>
       <indexterm>
+       <primary><envar>PGSSLVERIFY</envar></primary>
+      </indexterm>
+      <envar>PGSSLVERIFY</envar> behaves the same as <xref
+      linkend="libpq-connect-sslverify"> connection parameter.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGREQUIRESSL</envar></primary>
+      </indexterm>
+      <envar>PGREQUIRESSL</envar> behaves the same as <xref
+      linkend="libpq-connect-requiressl"> connection parameter.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      <indexterm>
        <primary><envar>PGSSLKEY</envar></primary>
       </indexterm>
       <envar>PGSSLKEY</envar> spécifie le jeton matériel qui stocke la clé
@@ -4302,37 +5224,74 @@
      </para>
     </listitem>
 
-<listitem>
-<para>
-<indexterm>
- <primary><envar>PGKRBSRVNAME</envar></primary>
-</indexterm>
-<envar>PGKRBSRVNAME</envar> configure le nom du service Kerberos à utiliser
-lors de l'authentification avec Kerberos 5 ou GSSAPI.
-</para>
-</listitem>
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGSSLCERT</envar></primary>
+      </indexterm>
+      <envar>PGSSLCERT</envar> behaves the same as <xref
+      linkend="libpq-connect-sslcert"> connection parameter.
+     </para>
+    </listitem>
 
     <listitem>
      <para>
       <indexterm>
+       <primary><envar>PGSSLKEY</envar></primary>
+      </indexterm>
+      <envar>PGSSLKEY</envar> behaves the same as <xref
+      linkend="libpq-connect-sslkey"> connection parameter.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGSSLROOTCERT</envar></primary>
+      </indexterm>
+      <envar>PGSSLROOTCERT</envar>  behaves the same as <xref
+      linkend="libpq-connect-sslrootcert"> connection parameter.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGSSLCRL</envar></primary>
+      </indexterm>
+      <envar>PGSSLCRL</envar>  behaves the same as <xref
+      linkend="libpq-connect-sslcrl"> connection parameter.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGKRBSRVNAME</envar></primary>
+      </indexterm>
+      <envar>PGKRBSRVNAME</envar>  behaves the same as <xref
+      linkend="libpq-connect-krbsrvname"> connection parameter.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <indexterm>
        <primary><envar>PGGSSLIB</envar></primary>
       </indexterm>
-      <envar>PGGSSLIB</envar> configure la bibliothèque GSS pour qu'elle
-      utilise l'authentification GSSAPI.
+      <envar>PGGSSLIB</envar> behaves the same as <xref
+      linkend="libpq-connect-gsslib"> connection parameter.
      </para>
     </listitem>
-<listitem>
-<para>
-<indexterm>
- <primary><envar>PGCONNECT_TIMEOUT</envar></primary>
-</indexterm>
-<envar>PGCONNECT_TIMEOUT</envar> initialise le nombre de secondes maximum que
-<application>libpq</application> attendra pour une connexion au serveur
-<productname>PostgreSQL</productname>. Si non initialisée ou si valant zéro,
-<application>libpq</application> attendra indéfiniment. Il n'est pas recommandé
-d'initialiser le délai à moins de deux secondes.
-</para>
-</listitem>
+
+    <listitem>
+     <para>
+      <indexterm>
+       <primary><envar>PGCONNECT_TIMEOUT</envar></primary>
+      </indexterm>
+      <envar>PGCONNECT_TIMEOUT</envar>  behaves the same as <xref
+      linkend="libpq-connect-connect-timeout"> connection parameter.
+     </para>
+    </listitem>
 </itemizedlist>
 </para>
 
@@ -4602,8 +5561,11 @@
   </para>
 
   <para>
-   Pour vérifier que le certificat du serveur est de confiance, placez les
-   certificats des autorités (<acronym>CA</acronym>) de confiance dans le
+   When the <literal>sslverify</> parameter is set to <literal>cn</> or
+   <literal>cert</>, libpq will verify that the server certificate is
+   trustworthy by checking the certificate chain up to a <acronym>CA</>.
+   For this to work, place the certificate of a trusted <acronym>CA</>
+   in the 
    fichier <filename>~/.postgresql/root.crt</filename> dans le répertoire
    personnel de l'utilisateur.
    (Sur Microsoft Windows, le fichier est nommé
@@ -4615,6 +5577,9 @@
    vérifiées si le fichier <filename>~/.postgresql/root.crl</filename> existe
    (<filename>%APPDATA%\postgresql\root.crl</filename> sur Microsoft
    Windows).
+   The location of the root certificate store and the CRL can be overridden
+   by the connection parameters <literal>sslrootcert</> and <literal>sslcrl</>
+   or the environment variables <envar>PGSSLROOTCERT</> and <envar>PGSSLCRL</>.
   </para>
 
   <para>
@@ -4624,38 +5589,18 @@
    personnel de l'utilisateur. Le certificat doit être signé par une des
    autorités (<acronym>CA</acronym>) de confiance du serveur. Un fichier de
    clé privé correspondant <filename>~/.postgresql/postgresql.key</filename>
-   doit aussi être présent sauf si la clé secrète du certificat est stocké
-   dans un jeton matériel, comme spécifié dans <envar>PGSSLKEY</envar>. (Sur
-   Microsoft Windows, ces fichiers sont nommés
-   <filename>%APPDATA%\postgresql\postgresql.crt</filename> et
-   <filename>%APPDATA%\postgresql\postgresql.key</filename>.) Le fichier de
-   clé privée ne doit pas être lisible par tout le monde.
+   doit aussi être présent. The private
+   key file must not allow any access to world or group; achieve this by the
+   command <command>chmod 0600 ~/.postgresql/postgresql.key</command>.
+   On Microsoft Windows these files are named
+   <filename>%APPDATA%\postgresql\postgresql.crt</filename> and
+   <filename>%APPDATA%\postgresql\postgresql.key</filename>, and there
+   is no special permissions check since the directory is presumed secure.
+   The location of the certificate and key files can be overridden by the
+   connection parameters <literal>sslcert</> and <literal>sslkey</> or the
+   environment variables <envar>PGSSLCERT</> and <envar>PGSSLKEY</>.
   </para>
 
-  <para>
-   Si la variable d'environnement <envar>PGSSLKEY</envar> est configuré, sa
-   valeur doit consister d'un nom de moteur et d'un identifiant clé séparés par
-   une virgule. Dans ce cas, <application>libpq</application> chargera le moteur
-   indiqué, c'est-à-dire le module <productname>OpenSSL</productname> qui
-   supporte un matériel spécial et référence la clé avec l'identifiant
-   indiqué. Les identifiants sont spécifiques au moteur. Typiquement, les
-   jetons d'un matériel de chiffrement ne révèlent pas les clés secrètes à
-   l'application. À la place, les applications délèguent les opérations
-   cryptographiques qui nécessitent la clé secrète du jeton matériel.
-  </para>
-
-  <para>
-   Si vous utilisez <acronym>SSL</acronym> dans votre application (ainsi que dans
-   <application>libpq</application>), vous pouvez utiliser
-   <function>PQinitSSL(int)</function> pour indiquer à <application>libpq</application>
-   que la bibliothèque <acronym>SSL</acronym> a déjà été initialisée par votre
-   application.
-   <!-- If this URL changes replace it with a URL to www.archive.org. -->
-   Voir <ulink
-   url="http://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.html"></ulink>
-   pour des détails sur l'API SSL.
-  </para>
-
   <table id="libpq-ssl-file-usage">
    <title>Utilisation du fichier SSL libpq/client</title>
    <tgroup cols="3">
@@ -4700,6 +5645,93 @@
    </tgroup>
   </table>
 
+  <para>
+   If your application initializes <literal>libssl</> and/or
+   <literal>libcrypto</> libraries and <application>libpq</application>
+   is built with <acronym>SSL</> support, you should call
+   <function>PQinitOpenSSL</> to tell <application>libpq</application>
+   that the <literal>libssl</> and/or <literal>libcrypto</> libraries
+   have been initialized by your application, so that
+   <application>libpq</application> will not also initialize those libraries.
+   <!-- If this URL changes replace it with a URL to www.archive.org. -->
+   See <ulink
+   url="http://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.html"></ulink>
+   for details on the SSL API.
+  </para>
+
+  <para>
+   <variablelist>
+    <varlistentry>
+     <term>
+      <function>PQinitOpenSSL</function>
+      <indexterm>
+       <primary>PQinitOpenSSL</primary>
+      </indexterm>
+     </term>
+
+     <listitem>
+      <para>
+       Allows applications to select which security libraries to initialize.
+       <synopsis>
+        void PQinitOpenSSL(int do_ssl, init do_crypto);
+       </synopsis>
+      </para>
+
+      <para>
+       When <parameter>do_ssl</> is non-zero, <application>libpq</application>
+       will initialize the <application>OpenSSL</> library before first
+       opening a database connection.  When <parameter>do_crypto</> is
+       non-zero, the <literal>libcrypto</> library will be initialized.  By
+       default (if <function>PQinitOpenSSL</> is not called), both libraries
+       are initialized.  When SSL support is not compiled in, this function is
+       present but does nothing.
+      </para>
+
+      <para>
+       If your application uses and initializes either <application>OpenSSL</>
+       or its underlying <literal>libcrypto</> library, you <emphasis>must</>
+       call this function with zeroes for the appropriate parameter(s)
+       before first opening a database connection.  Also be sure that you
+       have done that initialization before opening a database connection.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      <function>PQinitSSL</function>
+      <indexterm>
+       <primary>PQinitSSL</primary>
+      </indexterm>
+     </term>
+
+     <listitem>
+      <para>
+       Allows applications to select which security libraries to initialize.
+       <synopsis>
+        void PQinitSSL(int do_ssl);
+       </synopsis>
+      </para>
+
+      <para>
+       This function is equivalent to
+       <literal>PQinitOpenSSL(do_ssl, do_ssl)</>.
+       It is sufficient for applications that initialize both or neither
+       of <application>OpenSSL</> and <literal>libcrypto</>.
+      </para>
+
+      <para>
+       <function>PQinitSSL</> has been present since
+       <productname>PostgreSQL</> 8.0, while <function>PQinitOpenSSL</>
+       was added in <productname>PostgreSQL</> 8.4, so <function>PQinitSSL</>
+       might be preferable for applications that need to work with older
+       versions of <application>libpq</application>.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
 </sect1>
 
 <sect1 id="libpq-threading">
@@ -4912,13 +5944,13 @@
    <title>Premier exemple de programme pour
     <application>libpq</application></title>
 
-<programlisting>/*
+<programlisting><![CDATA[/*
  * testlibpq.c
  *
  *      Test the C version of libpq, the PostgreSQL frontend library.
  */
-#include &lt;stdio.h&gt;
-#include &lt;stdlib.h&gt;
+#include <stdio.h>
+#include <stdlib.h>
 #include "libpq-fe.h"
 
 static void
@@ -4943,7 +5975,7 @@
      * conninfo string; otherwise default to setting dbname=postgres and using
      * environment variables or defaults for all other connection parameters.
      */
-    if (argc &gt; 1)
+    if (argc > 1)
         conninfo = argv[1];
     else
         conninfo = "dbname = postgres";
@@ -5003,14 +6035,14 @@
 
     /* first, print out the attribute names */
     nFields = PQnfields(res);
-    for (i = 0; i &lt; nFields; i++)
+    for (i = 0; i < nFields; i++)
         printf("%-15s", PQfname(res, i));
     printf("\n\n");
 
     /* next, print out the rows */
-    for (i = 0; i &lt; PQntuples(res); i++)
+    for (i = 0; i < PQntuples(res); i++)
     {
-        for (j = 0; j &lt; nFields; j++)
+        for (j = 0; j < nFields; j++)
             printf("%-15s", PQgetvalue(res, i, j));
         printf("\n");
     }
@@ -5030,14 +6062,14 @@
 
     return 0;
 }
-</programlisting>
+]]></programlisting>
   </example>
 
   <example id="libpq-example-2">
    <title>Deuxième exemple de programme pour
     <application>libpq</application></title>
 
-<programlisting>/*
+<programlisting><![CDATA[/*
  * testlibpq2.c
  *      Test of the asynchronous notification interface
  *
@@ -5060,11 +6092,11 @@
  *
  *   INSERT INTO TBL1 VALUES (10);
  */
-#include &lt;stdio.h&gt;
-#include &lt;stdlib.h&gt;
-#include &lt;string.h&gt;
-#include &lt;errno.h&gt;
-#include &lt;sys/time.h&gt;
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/time.h>
 #include "libpq-fe.h"
 
 static void
@@ -5088,7 +6120,7 @@
      * conninfo string; otherwise default to setting dbname=postgres and using
      * environment variables or defaults for all other connection parameters.
      */
-    if (argc &gt; 1)
+    if (argc > 1)
         conninfo = argv[1];
     else
         conninfo = "dbname = postgres";
@@ -5123,7 +6155,7 @@
 
     /* Quit after four notifies are received. */
     nnotifies = 0;
-    while (nnotifies &lt; 4)
+    while (nnotifies < 4)
     {
         /*
          * Sleep until something happens on the connection.  We use select(2)
@@ -5135,13 +6167,13 @@
 
         sock = PQsocket(conn);
 
-        if (sock &lt; 0)
+        if (sock < 0)
             break;              /* shouldn't happen */
 
-        FD_ZERO(&amp;input_mask);
-        FD_SET(sock, &amp;input_mask);
+        FD_ZERO(&input_mask);
+        FD_SET(sock, &input_mask);
 
-        if (select(sock + 1, &amp;input_mask, NULL, NULL, NULL) &lt; 0)
+        if (select(sock + 1, &input_mask, NULL, NULL, NULL) < 0)
         {
             fprintf(stderr, "select() failed: %s\n", strerror(errno));
             exit_nicely(conn);
@@ -5153,7 +6185,7 @@
         {
             fprintf(stderr,
                     "ASYNC NOTIFY of '%s' received from backend pid %d\n",
-                    notify-&gt;relname, notify-&gt;be_pid);
+                    notify->relname, notify->be_pid);
             PQfreemem(notify);
             nnotifies++;
         }
@@ -5166,14 +6198,14 @@
 
     return 0;
 }
-</programlisting>
+]]></programlisting>
   </example>
 
   <example id="libpq-example-3">
    <title>Troisième exemple de programme pour
     <application>libpq</application></title>
 
-<programlisting>/*
+<programlisting><![CDATA[/*
  * testlibpq3.c
  *      Test out-of-line parameters and binary I/O.
  *
@@ -5197,15 +6229,15 @@
  *  t = (8 bytes) 'ho there'
  *  b = (5 bytes) \004\003\002\001\000
  */
-#include &lt;stdio.h&gt;
-#include &lt;stdlib.h&gt;
-#include &lt;string.h&gt;
-#include &lt;sys/types.h&gt;
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
 #include "libpq-fe.h"
 
 /* for ntohl/htonl */
-#include &lt;netinet/in.h&gt;
-#include &lt;arpa/inet.h&gt;
+#include <netinet/in.h>
+#include <arpa/inet.h>
 
 
 static void
@@ -5234,7 +6266,7 @@
     t_fnum = PQfnumber(res, "t");
     b_fnum = PQfnumber(res, "b");
 
-    for (i = 0; i &lt; PQntuples(res); i++)
+    for (i = 0; i < PQntuples(res); i++)
     {
         char       *iptr;
         char       *tptr;
@@ -5269,7 +6301,7 @@
         printf(" t = (%d bytes) '%s'\n",
                PQgetlength(res, i, t_fnum), tptr);
         printf(" b = (%d bytes) ", blen);
-        for (j = 0; j &lt; blen; j++)
+        for (j = 0; j < blen; j++)
             printf("\\%03o", bptr[j]);
         printf("\n\n");
     }
@@ -5291,7 +6323,7 @@
      * conninfo string; otherwise default to setting dbname=postgres and using
      * environment variables or defaults for all other connection parameters.
      */
-    if (argc &gt; 1)
+    if (argc > 1)
         conninfo = argv[1];
     else
         conninfo = "dbname = postgres";
@@ -5355,7 +6387,7 @@
     binaryIntVal = htonl((uint32_t) 2);
 
     /* Set up parameter arrays for PQexecParams */
-    paramValues[0] = (char *) &amp;binaryIntVal;
+    paramValues[0] = (char *) &binaryIntVal;
     paramLengths[0] = sizeof(binaryIntVal);
     paramFormats[0] = 1;        /* binary */
 
@@ -5384,7 +6416,7 @@
 
     return 0;
 }
-</programlisting>
+]]></programlisting>
   </example>
 
  </sect1>

Modified: traduc/trunk/postgresql/monitoring.xml
===================================================================
--- traduc/trunk/postgresql/monitoring.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/monitoring.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -125,6 +125,8 @@
    fois en terme de blocs disque et de lignes individuelles. Il conserve aussi
    la trace de nombre total de lignes dans chaque table ainsi que la date et
    l'heure du dernier VACUUM et du dernier ANALYZE pour chaque table.
+   It can also count calls to user-defined functions and
+   the total time spent in each one.
   </para>
 
   <para>
@@ -147,12 +149,16 @@
   </para>
 
   <para>
-   Le paramètre <xref linkend="guc-track-counts"/> contrôle si l'information
-   est déjà envoyée au processus de récupération des statistiques et détermine
-   du coup s'il y a une surcharge à l'exécution pour le décompte des événements.
+   Le paramètre <xref linkend="guc-track-counts"/> contrôle si
+   statistics are collected about table and index accesses.
   </para>
 
   <para>
+   The parameter <xref linkend="guc-track-functions"> enables tracking of
+   usage of user-defined functions.
+  </para>
+
+  <para>
    Le paramètre <xref linkend="guc-track-activities"/> active la surveillance
    de la commande en cours d'exécution par un processus serveur.
   </para>
@@ -168,6 +174,16 @@
    <command>SET</command>).
   </para>
 
+  <para>
+   The statistics collector communicates with the backends needing 
+   information (including autovacuum) through temporary files.
+   These files are stored in the <filename>pg_stat_tmp</filename> subdirectory.
+   When the postmaster shuts down, a permanent copy of the statistics
+   data is stored in the <filename>global</filename> subdirectory. For increased
+   performance, the parameter <xref linkend="guc-stats-temp-directory"> can
+   be pointed at a RAM based filesystem, decreasing physical I/O requirements.
+  </para>
+
  </sect2>
 
  <sect2 id="monitoring-stats-views">
@@ -389,6 +405,15 @@
       <entry>Identique à <structname>pg_statio_all_sequences</structname>, sauf que
       seules les séquences utilisateur sont affichées.</entry>
      </row>
+
+     <row>
+      <entry><structname>pg_stat_user_functions</></entry>
+      <entry>For all tracked functions, function OID, schema, name, number
+      of calls, total time, and self time.  Self time is the
+      amount of time spent in the function itself, total time includes the
+      time spent in functions it called. Time values are in milliseconds.
+     </entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
@@ -451,7 +476,8 @@
    dans le <xref linkend="monitoring-stats-funcs-table"/>. Les fonctions d'accès
    par base de données prennent un OID de la base de données comme argument pour
    identifier la base de données du rapport. Les fonctions par table et par
-   index prennent l'OID de la table ou de l'index (notez que seuls les tables
+   index prennent l'OID de la table ou de l'index. The functions for function-call statistics
+   take a function OID. (notez que seuls les tables
    et les index de la base de données en cours peuvent être vus par ces
    fonctions). Les fonctions d'accès au processus prennent le numéro
    d'identifiant du processus.
@@ -713,23 +739,61 @@
      </row>
 
      <row>
-      <entry><literal><function>pg_stat_get_backend_idset</function>()</literal></entry>
-      <entry><type>set of integer</type></entry>
+       <!-- See also the entry for this in func.sgml -->
+      <entry><literal><function>pg_backend_pid</function>()</literal></entry>
+      <entry><type>integer</type></entry>
       <entry>
-       Ensemble d'identifiants de processus actifs (de 1 au nombre de processus
-       actifs). Voir l'exemple d'utilisation dans le texte.
+       ID du processus pour le processus serveur attaché à la session en cours
       </entry>
      </row>
 
      <row>
-      <entry><literal><function>pg_backend_pid</function>()</literal></entry>
-      <entry><type>integer</type></entry>
+      <entry><literal><function>pg_stat_get_activity</function>(<type>integer</type>)</literal></entry>
+      <entry><type>setof record</type></entry>
       <entry>
-       ID du processus pour le processus serveur attaché à la session en cours
+       Returns a record of information about the backend with the specified pid, or
+       one record for each active backend in the system if <symbol>NULL</symbol> is
+       specified. The fields returned are the same as in the 
+       <structname>pg_stat_activity</structname> view
       </entry>
      </row>
 
      <row>
+      <entry><literal><function>pg_stat_get_function_calls</function>(<type>oid</type>)</literal></entry>
+      <entry><type>bigint</type></entry>
+      <entry>
+       Number of times the function has been called.
+      </entry>
+     </row>
+
+     <row>
+      <entry><literal><function>pg_stat_get_function_time</function>(<type>oid</type>)</literal></entry>
+      <entry><type>bigint</type></entry>
+      <entry>
+       Total wall clock time spent in the function, in microseconds.  Includes
+       the time spent in functions called by this one.
+      </entry>
+     </row>
+
+     <row>
+      <entry><literal><function>pg_stat_get_function_self_time</function>(<type>oid</type>)</literal></entry>
+      <entry><type>bigint</type></entry>
+      <entry>
+       Time spent in only this function. Time spent in called functions
+       is excluded.
+      </entry>
+     </row>
+
+     <row>
+      <entry><literal><function>pg_stat_get_backend_idset</function>()</literal></entry>
+      <entry><type>setof integer</type></entry>
+      <entry>
+       Set of currently active server process numbers (from 1 to the
+       number of active server processes).  See usage example in the text
+      </entry>
+     </row>
+     
+     <row>
       <entry><literal><function>pg_stat_get_backend_pid</function>(<type>integer</type>)</literal></entry>
       <entry><type>integer</type></entry>
       <entry>
@@ -914,8 +978,8 @@
 
    <note>
     <para>
-     <function>blocks_fetched</function> moins
-     <function>blocks_hit</function> donne le nombre d'appels
+     <function>pg_stat_get_blocks_fetched</function> moins
+     <function>pg_stat_get_blocks_hit</function> donne le nombre d'appels
      lancés pour la table, l'index ou la base de données&nbsp;; mais le nombre 
      réel de lectures physiques est habituellement moindre à cause des tampons
      du noyau.
@@ -923,6 +987,8 @@
    </note>
 
   <para>
+   All functions to access information about backends are indexed by backend id
+   number, except <function>pg_stat_get_activity</function> which is indexed by PID.
    La fonction <function>pg_stat_get_backend_idset</function> fournit un moyen
    agréable de générer une ligne pour chaque processus serveur actif. Par
    exemple, pour afficher les <acronym>PID</acronym> et les requêtes en cours pour
@@ -994,32 +1060,35 @@
   <para>
    <productname>PostgreSQL</productname> fournit un support pour les traces
    dynamiques du serveur de bases de données. Ceci permet l'appel à un outil
-   externe à certains points du code pour tracer son exécution. Actuellement,
-   cette fonctionnalité a pour cible les développeurs de bases de données car
-   il requiert une certaine familiarité avec le code.
+   externe à certains points du code pour tracer son exécution.
   </para>
 
   <para>
-   Un certain nombre de points de trace, souvent appelés sondes, sont déjà
-   insérés dans le code source. Par défaut, les sondes sont désactivées
-   et l'utilisateur doit explicitement demander au script configure de les
-   rendre disponibles pour <productname>PostgreSQL</productname>.
+   A number of probes or trace points are already inserted into the source
+   code. These probes are intended to be used by database developers and
+   administrators. By default the probes are not compiled into
+   <productname>PostgreSQL</productname>; the user needs to explicitly tell
+   the configure script to make the probes available.
   </para>
 
-  <para> 
-   Actuellement, seul l'outil DTrace est supporté, outil qui est disponible
-   uniquement sur Solaris Express et Solaris 10+. Il est attendu que DTrace
-   soit disponible dans le futur sur FreeBSD et Mac OS X. Supporter des
-   outils de traces dynamiques est théoriquement possible en modifiant les
-   définitions des macros <literal>PG_TRACE</literal> dans
-   <filename>src/include/pg_trace.h</filename>.
+  <para>
+   Currently, only the
+   <ulink url="http://opensolaris.org/os/community/dtrace/">DTrace</ulink>
+   utility is supported, which is available
+   on OpenSolaris, Solaris 10, and Mac OS X Leopard. It is expected that
+   DTrace will be available in the future on FreeBSD and possibly other
+   operating systems.  The
+   <ulink url="http://sourceware.org/systemtap/">SystemTap</ulink> project
+   for Linux also provides a DTrace equivalent.  Supporting other dynamic
+   tracing utilities is theoretically possible by changing the definitions for
+   the macros in <filename>src/include/utils/probes.h</>.
   </para>
 
   <sect2 id="compiling-for-trace">
    <title>Compiler en activant les traces dynamiques</title>
 
   <para>
-   Par défaut, les sondes sont désactivées, donc vous aurez besoin d'indiquer
+   Par défaut, les sondes ne sont pas disponibles, donc vous aurez besoin d'indiquer
    explicitement au script configure de les activer dans
    <productname>PostgreSQL</productname>. Pour inclure le support de DTrace,
    ajoutez <option>--enable-dtrace</option> aux options de configure. Lire
@@ -1031,13 +1100,14 @@
    <title>Sondes disponibles</title>
 
   <para>
-   Quelques sondes standards sont fournies dans le code source (bien sûr,
-   d'autres peuvent être ajoutés si nécessaire pour un problème particulier).
-   Elles sont précisées dans <xref linkend="trace-point-table"/>.
+   A number of standard probes are provided in the source code,
+   as shown in <xref linkend="dtrace-probe-point-table">.
+   More can certainly be added to enhance <productname>PostgreSQL</>'s
+   observability.
   </para>
 
- <table id="trace-point-table">
-  <title>Sondes disponibles</title>
+ <table id="dtrace-probe-point-table">
+  <title>Sondes disponibles pour DTrace</title>
   <tgroup cols="3">
    <thead>
     <row>
@@ -1048,74 +1118,461 @@
    </thead>
 
    <tbody>
+     <entry>transaction-start</entry>
+     <entry>(LocalTransactionId)</entry>
+     <entry>Probe that fires at the start of a new transaction.
+      arg0 is the transaction id.</entry>
+    </row>
     <row>
-     <entry>transaction__start</entry>
-     <entry>(int transactionId)</entry>
-     <entry>Début d'une nouvelle transaction.</entry>
+     <entry>transaction-commit</entry>
+     <entry>(LocalTransactionId)</entry>
+     <entry>Probe that fires when a transaction completes successfully.
+      arg0 is the transaction id.</entry>
     </row>
     <row>
-     <entry>transaction__commit</entry>
-     <entry>(int transactionId)</entry>
-     <entry>Fin réussie d'une transaction.</entry>
+     <entry>transaction-abort</entry>
+     <entry>(LocalTransactionId)</entry>
+     <entry>Probe that fires when a transaction completes unsuccessfully.
+      arg0 is the transaction id.</entry>
     </row>
     <row>
-     <entry>transaction__abort</entry>
-     <entry>(int transactionId)</entry>
-     <entry>Échec d'une transaction.</entry>
+     <entry>query-start</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the processing of a query is started.
+      arg0 is the query string.</entry>
     </row>
-             
     <row>
-     <entry>lwlock__acquire</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un LWLock a été acquis.</entry>
+     <entry>query-done</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the processing of a query is complete.
+      arg0 is the query string.</entry>
     </row>
     <row>
-     <entry>lwlock__release</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un LWLock a été lâché.</entry>
+     <entry>query-parse-start</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the parsing of a query is started.
+      arg0 is the query string.</entry>
     </row>
     <row>
-     <entry>lwlock__startwait</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un LWLock n'était pas immédiatement disponible et un processus
-      a commencé à attendre la disponibilité du verrou.
-     </entry>
-    </row>    
+     <entry>query-parse-done</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the parsing of a query is complete.
+      arg0 is the query string.</entry>
+    </row>
     <row>
-     <entry>lwlock__endwait</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un processus a été libéré de son attente d'un LWLock.
-     </entry>
+     <entry>query-rewrite-start</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the rewriting of a query is started.
+      arg0 is the query string.</entry>
     </row>
     <row>
-     <entry>lwlock__condacquire</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un LWLock a été acquis avec succès quand l'appelant indiquait sans
-      attente.</entry>
-    </row> 
+     <entry>query-rewrite-done</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires when the rewriting of a query is complete.
+      arg0 is the query string.</entry>
+    </row>
     <row>
-     <entry>lwlock__condacquire__fail</entry>
-     <entry>(int lockid, int mode)</entry>
-     <entry>Un LWLock n'a pas été acquis quand l'appelant indiquait sans attente.
-     </entry>
+     <entry>query-plan-start</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the planning of a query is started.</entry>
     </row>
     <row>
-     <entry>lock__startwait</entry>
-     <entry>(int locktag_field2, int lockmode)</entry>
-     <entry>Une requête pour un verrou lourd (lmgr lock) est en attente car le
-      verrou n'est pas disponible.
-     </entry>
+     <entry>query-plan-done</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the planning of a query is complete.</entry>
     </row>
     <row>
-     <entry>lock__endwait</entry>
-     <entry>(int locktag_field2, int lockmode)</entry>
-     <entry>Une requête pour un verrou lourd (lmgr lock) a terminé son attente
-      (autrement dit, il a acquis le verrou).
-     </entry>
+     <entry>query-execute-start</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the execution of a query is started.</entry>
     </row>
+    <row>
+     <entry>query-execute-done</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the execution of a query is complete.</entry>
+    </row>
+    <row>
+     <entry>statement-status</entry>
+     <entry>(const char *)</entry>
+     <entry>Probe that fires anytime the server process updates its
+      <structname>pg_stat_activity</>.<structfield>current_query</> status.
+      arg0 is the new status string.</entry>
+    </row>
+    <row>
+     <entry>checkpoint-start</entry>
+     <entry>(int)</entry>
+     <entry>Probe that fires when a checkpoint is started.
+      arg0 holds the bitwise flags used to distinguish different checkpoint
+      types, such as shutdown, immediate or force.</entry>
+    </row>
+    <row>
+     <entry>checkpoint-done</entry>
+     <entry>(int, int, int, int, int)</entry>
+     <entry>Probe that fires when a checkpoint is complete.
+      (The probes listed next fire in sequence during checkpoint processing.)
+      arg0 is the number of buffers written. arg1 is the total number of
+      buffers. arg2, arg3 and arg4 contain the number of xlog file(s) added,
+      removed and recycled respectively.</entry>
+    </row>
+    <row>
+     <entry>clog-checkpoint-start</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the CLOG portion of a checkpoint is started.
+      arg0 is true for normal checkpoint, false for shutdown
+      checkpoint.</entry>
+    </row>
+    <row>
+     <entry>clog-checkpoint-done</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the CLOG portion of a checkpoint is
+      complete. arg0 has the same meaning as for clog-checkpoint-start.</entry>
+    </row>
+    <row>
+     <entry>subtrans-checkpoint-start</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the SUBTRANS portion of a checkpoint is
+      started.
+      arg0 is true for normal checkpoint, false for shutdown
+      checkpoint.</entry>
+    </row>
+    <row>
+     <entry>subtrans-checkpoint-done</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the SUBTRANS portion of a checkpoint is
+      complete. arg0 has the same meaning as for
+      subtrans-checkpoint-start.</entry>
+    </row>
+    <row>
+     <entry>multixact-checkpoint-start</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the MultiXact portion of a checkpoint is
+      started.
+      arg0 is true for normal checkpoint, false for shutdown
+      checkpoint.</entry>
+    </row>
+    <row>
+     <entry>multixact-checkpoint-done</entry>
+     <entry>(bool)</entry>
+     <entry>Probe that fires when the MultiXact portion of a checkpoint is
+      complete. arg0 has the same meaning as for
+      multixact-checkpoint-start.</entry>
+    </row>
+    <row>
+     <entry>buffer-checkpoint-start</entry>
+     <entry>(int)</entry>
+     <entry>Probe that fires when the buffer-writing portion of a checkpoint
+      is started.
+      arg0 holds the bitwise flags used to distinguish different checkpoint
+      types, such as shutdown, immediate or force.</entry>
+    </row>
+    <row>
+     <entry>buffer-sync-start</entry>
+     <entry>(int, int)</entry>
+     <entry>Probe that fires when we begin to write dirty buffers during
+      checkpoint (after identifying which buffers must be written).
+      arg0 is the total number of buffers.
+      arg1 is the number that are currently dirty and need to be written.</entry>
+    </row>
+    <row>
+     <entry>buffer-sync-written</entry>
+     <entry>(int)</entry>
+     <entry>Probe that fires after each buffer is written during checkpoint.
+      arg0 is the ID number of the buffer.</entry>
+    </row>
+    <row>
+     <entry>buffer-sync-done</entry>
+     <entry>(int, int, int)</entry>
+     <entry>Probe that fires when all dirty buffers have been written.
+      arg0 is the total number of buffers.
+      arg1 is the number of buffers actually written by the checkpoint process.
+      arg2 is the number that were expected to be written (arg1 of
+      buffer-sync-start); any difference reflects other processes flushing
+      buffers during the checkpoint.</entry>
+    </row>
+    <row>
+     <entry>buffer-checkpoint-sync-start</entry>
+     <entry>()</entry>
+     <entry>Probe that fires after dirty buffers have been written to the
+      kernel, and before starting to issue fsync requests.</entry>
+    </row>
+    <row>
+     <entry>buffer-checkpoint-done</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when syncing of buffers to disk is
+      complete.</entry>
+    </row>
+    <row>
+     <entry>twophase-checkpoint-start</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the two-phase portion of a checkpoint is
+      started.</entry>
+    </row>
+    <row>
+     <entry>twophase-checkpoint-done</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when the two-phase portion of a checkpoint is
+      complete.</entry>
+    </row>
+    <row>
+     <entry>buffer-read-start</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool)</entry>
+     <entry>Probe that fires when a buffer read is started.
+      arg0 and arg1 contain the fork and block numbers of the page (but
+      arg1 will be -1 if this is a relation extension request).
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.
+      arg5 is true for a local buffer, false for a shared buffer.
+      arg6 is true for a relation extension request, false for normal
+      read.</entry>
+    </row>
+    <row>
+     <entry>buffer-read-done</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool, bool)</entry>
+     <entry>Probe that fires when a buffer read is complete.
+      arg0 and arg1 contain the fork and block numbers of the page (if this
+      is a relation extension request, arg1 now contains the block number
+      of the newly added block).
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.
+      arg5 is true for a local buffer, false for a shared buffer.
+      arg6 is true for a relation extension request, false for normal
+      read.
+      arg7 is true if the buffer was found in the pool, false if not.</entry>
+    </row>
+    <row>
+     <entry>buffer-flush-start</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires before issuing any write request for a shared
+      buffer.
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.</entry>
+    </row>
+    <row>
+     <entry>buffer-flush-done</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires when a write request is complete.  (Note
+      that this just reflects the time to pass the data to the kernel;
+      it's typically not actually been written to disk yet.)
+      The arguments are the same as for buffer-flush-start.</entry>
+    </row>
+    <row>
+     <entry>buffer-write-dirty-start</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires when a server process begins to write a dirty
+      buffer.  (If this happens often, it implies that
+      <xref linkend="guc-shared-buffers"> is too
+      small or the bgwriter control parameters need adjustment.)
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.</entry>
+    </row>
+    <row>
+     <entry>buffer-write-dirty-done</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires when a dirty-buffer write is complete.
+      The arguments are the same as for buffer-write-dirty-start.</entry>
+    </row>
+    <row>
+     <entry>wal-buffer-write-dirty-start</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when when a server process begins to write a
+      dirty WAL buffer because no more WAL buffer space is available.
+      (If this happens often, it implies that
+      <xref linkend="guc-wal-buffers"> is too small.)</entry>
+    </row>
+    <row>
+     <entry>wal-buffer-write-dirty-done</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when a dirty WAL buffer write is complete.</entry>
+    </row>
+    <row>
+     <entry>xlog-insert</entry>
+     <entry>(unsigned char, unsigned char)</entry>
+     <entry>Probe that fires when a WAL record is inserted.
+      arg0 is the resource manager (rmid) for the record.
+      arg1 contains the info flags.</entry>
+    </row>
+    <row>
+     <entry>xlog-switch</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when a WAL segment switch is requested.</entry>
+    </row>
+    <row>
+     <entry>smgr-md-read-start</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires when beginning to read a block from a relation.
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.</entry>
+    </row>
+    <row>
+     <entry>smgr-md-read-done</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int)</entry>
+     <entry>Probe that fires when a block read is complete.
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.
+      arg5 is the number of bytes actually read, while arg6 is the number
+      requested (if these are different it indicates trouble).</entry>
+    </row>
+    <row>
+     <entry>smgr-md-write-start</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid)</entry>
+     <entry>Probe that fires when beginning to write a block to a relation.
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.</entry>
+    </row>
+    <row>
+     <entry>smgr-md-write-done</entry>
+     <entry>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int)</entry>
+     <entry>Probe that fires when a block write is complete.
+      arg0 and arg1 contain the fork and block numbers of the page.
+      arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
+      identifying the relation.
+      arg5 is the number of bytes actually written, while arg6 is the number
+      requested (if these are different it indicates trouble).</entry>
+    </row>
+    <row>
+     <entry>sort-start</entry>
+     <entry>(int, bool, int, int, bool)</entry>
+     <entry>Probe that fires when a sort operation is started.
+      arg0 indicates heap, index or datum sort.
+      arg1 is true for unique-value enforcement.
+      arg2 is the number of key columns.
+      arg3 is the number of kilobytes of work memory allowed.
+      arg4 is true if random access to the sort result is required.</entry>
+    </row>
+    <row>
+     <entry>sort-done</entry>
+     <entry>(bool, long)</entry>
+     <entry>Probe that fires when a sort is complete.
+      arg0 is true for external sort, false for internal sort.
+      arg1 is the number of disk blocks used for an external sort,
+      or kilobytes of memory used for an internal sort.</entry>
+    </row>
+    <row>
+     <entry>lwlock-acquire</entry>
+     <entry>(LWLockId, LWLockMode)</entry>
+     <entry>Probe that fires when an LWLock has been acquired.
+      arg0 is the LWLock's ID.
+      arg1 is the requested lock mode, either exclusive or shared.</entry>
+    </row>
+    <row>
+     <entry>lwlock-release</entry>
+     <entry>(LWLockId)</entry>
+     <entry>Probe that fires when an LWLock has been released (but note
+      that any released waiters have not yet been awakened).
+      arg0 is the LWLock's ID.</entry>
+    </row>
+    <row>
+     <entry>lwlock-wait-start</entry>
+     <entry>(LWLockId, LWLockMode)</entry>
+     <entry>Probe that fires when an LWLock was not immediately available and
+      a server process has begun to wait for the lock to become available.
+      arg0 is the LWLock's ID.
+      arg1 is the requested lock mode, either exclusive or shared.</entry>
+    </row>
+    <row>
+     <entry>lwlock-wait-done</entry>
+     <entry>(LWLockId, LWLockMode)</entry>
+     <entry>Probe that fires when a server process has been released from its
+      wait for an LWLock (it does not actually have the lock yet).
+      arg0 is the LWLock's ID.
+      arg1 is the requested lock mode, either exclusive or shared.</entry>
+    </row>
+    <row>
+     <entry>lwlock-condacquire</entry>
+     <entry>(LWLockId, LWLockMode)</entry>
+     <entry>Probe that fires when an LWLock was successfully acquired when the
+      caller specified no waiting.
+      arg0 is the LWLock's ID.
+      arg1 is the requested lock mode, either exclusive or shared.</entry>
+    </row>
+    <row>
+     <entry>lwlock-condacquire-fail</entry>
+     <entry>(LWLockId, LWLockMode)</entry>
+     <entry>Probe that fires when an LWLock was not successfully acquired when
+      the caller specified no waiting.
+      arg0 is the LWLock's ID.
+      arg1 is the requested lock mode, either exclusive or shared.</entry>
+    </row>
+    <row>
+     <entry>lock-wait-start</entry>
+     <entry>(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE)</entry>
+     <entry>Probe that fires when a request for a heavyweight lock (lmgr lock)
+      has begun to wait because the lock is not available.
+      arg0 through arg3 are the tag fields identifying the object being
+      locked.  arg4 indicates the type of object being locked.
+      arg5 indicates the lock type being requested.</entry>
+    </row>
+    <row>
+     <entry>lock-wait-done</entry>
+     <entry>(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE)</entry>
+     <entry>Probe that fires when a request for a heavyweight lock (lmgr lock)
+      has finished waiting (i.e., has acquired the lock).
+      The arguments are the same as for lock-wait-start.</entry>
+    </row>
+    <row>
+     <entry>deadlock-found</entry>
+     <entry>()</entry>
+     <entry>Probe that fires when a deadlock is found by the deadlock
+      detector.</entry>
+    </row>
+
    </tbody>
    </tgroup>
   </table>
+
+ <table id="typedefs-table">
+  <title>Defined Types Used in Probe Parameters</title>
+  <tgroup cols="2">
+   <thead>
+    <row>
+     <entry>Type</entry>
+     <entry>Definition</entry>
+    </row>
+   </thead>
+
+   <tbody>
+
+    <row>
+     <entry>LocalTransactionId</entry>
+     <entry>unsigned int</entry>
+    </row>
+    <row>
+     <entry>LWLockId</entry>
+     <entry>int</entry>
+    </row>
+    <row>
+     <entry>LWLockMode</entry>
+     <entry>int</entry>
+    </row>
+    <row>
+     <entry>LOCKMODE</entry>
+     <entry>int</entry>
+    </row>
+    <row>
+     <entry>BlockNumber</entry>
+     <entry>unsigned int</entry>
+    </row>
+    <row>
+     <entry>Oid</entry>
+     <entry>unsigned int</entry>
+    </row>
+    <row>
+     <entry>ForkNumber</entry>
+     <entry>int</entry>
+    </row>
+    <row>
+     <entry>bool</entry>
+     <entry>char</entry>
+    </row>
+
+   </tbody>
+   </tgroup>
+  </table>
   </sect2>
 
   <sect2 id="using-trace-points">
@@ -1147,10 +1604,8 @@
       self->ts=0;
 }
 </programlisting>
-   Notez comment le souligné double dans les noms de sonde doit être remplacé
-   par un trait d'union lors de l'utilisation d'un script DTrace. À son
-   exécution, le script de l'exemple D donne une sortie comme&nbsp;:
-<screen># ./txn_count.d `pgrep -n postgres`
+   À son exécution, le script de l'exemple D donne une sortie comme&nbsp;:
+<screen># ./txn_count.d `pgrep -n postgres` or ./txn_count.d &lt;PID&gt;
 ^C
 
 Start                                          71
@@ -1159,83 +1614,156 @@
 </screen>
   </para>
   <para>
-   Vous devez vous rappeler que les programmes de trace doivent être écrits
+   Vous devez vous rappeler que les programmes DTrace doivent être écrits
    soigneusement, sinon les informations récoltées pourraient ne rien valoir.
    Dans la plupart des cas où des problèmes sont découverts, c'est
    l'instrumentation qui est erronée, pas le système sous-jacent. En discutant
    des informations récupérées en utilisant un tel système, il est essentiel de
    s'assurer que le script utilisé est lui-aussi vérifié et discuter.
   </para>
+  <para>
+   More example scripts can be found in the PgFoundry
+   <ulink url="http://pgfoundry.org/projects/dtrace/">dtrace project</ulink>.
+  </para>
   </sect2>
 
   <sect2 id="defining-trace-points">
-   <title>Définir les sondes</title>
+   <title>Définir de nouvelles sondes</title>
 
   <para>
    De nouvelles sondes peuvent être définies dans le code partout où le
    développeur le souhaite bien que cela nécessite une nouvelle compilation.
+   Below are the steps for inserting new probes:
   </para>
 
-  <para>
-   Une sonde peut être insérée en utilisant une des macros de trace.
-   Elles sont choisies suivant le nombre de variables à mettre à disposition
-   pour l'inspection de cette sonde. Tracer l'occurence d'un événement se fait
-   en une seule ligne, en utilisant seulement le nom de la sonde, par
-   exemple&nbsp;:
-<programlisting>PG_TRACE (ma__nouvelle__sonde);
-</programlisting>
-   Des sondes plus complexes peuvent fournir une ou plusieurs variables à
-   l'inspection de l'outil des traces dynamiques en utilisant la macro
-   <literal>PG_TRACE</literal><replaceable>n</replaceable> qui correspond
-   au nombre de paramètres après le nom de la sonde&nbsp;:
-<programlisting>PG_TRACE3 (mon__evenement__complexe, varX, varY, varZ);
-</programlisting>
-   La définition de la sonde transaction__start est montrée ci-dessous&nbsp;:
-<programlisting>static void
-StartTransaction(void)
-{
-    ...
+  <procedure>
+   <step>
+    <para>
+     Decide on probe names and data to be made available through the probes
+    </para>
+   </step>
 
-    /*
-     * génère un nouvel id de transaction
-     */
-    s->transactionId = GetNewTransactionId(false);
+   <step>
+    <para>
+     Add the probe definitions to <filename>src/backend/utils/probes.d</>
+    </para>
+   </step>
 
-    XactLockTableInsert(s->transactionId);
+   <step>
+    <para>
+     Include <filename>pg_trace.h</> if it is not already present in the
+     module(s) containing the probe points, and insert
+     <literal>TRACE_POSTGRESQL</> probe macros at the desired locations
+     in the source code
+    </para>
+   </step>
 
-    PG_TRACE1(transaction__start, s->transactionId);
+   <step>
+    <para>
+     Recompile and verify that the new probes are available
+    </para>
+   </step>
+  </procedure>
 
-    ...
-}    
+  <formalpara>
+   <title>Example:</title>
+   <para>
+    Here is an example of how you would add a probe to trace all new
+    transactions by transaction ID.
+   </para>
+  </formalpara>
+
+  <procedure>
+   <step>
+    <para>
+     Decide that the probe will be named <literal>transaction-start</> and
+     requires a parameter of type LocalTransactionId
+    </para>
+   </step>
+
+   <step>
+    <para>
+     Add the probe definition to <filename>src/backend/utils/probes.d</>:
+<programlisting>
+      probe transaction__start(LocalTransactionId);
 </programlisting>
-   Notez comment l'ID de transaction est rendu disponible à l'outil de traces
-   dynamiques.
-  </para>
+     Note the use of the double underline in the probe name. In a DTrace
+     script using the probe, the double underline needs to be replaced with a
+     hyphen, so <literal>transaction-start</> is the name to document for
+     users.
+    </para>
+   </step>
 
-  <para>
-   L'outil de traces dynamiques peut nécessiter une définition plus complète de
-   ces sondes. Par exemple, DTrace requiert que vous ajoutez de nouvelles sondes
-   dans le fichier <filename>src/backend/utils/probes.d</filename> comme
-   indiqué ici&nbsp;:
-<programlisting>provider postgresql {
-      ...
-      probe transaction__start(int);
-      ...
- };
+   <step>
+    <para>
+     At compile time, <literal>transaction__start</> is converted to a macro
+     called <literal>TRACE_POSTGRESQL_TRANSACTION_START</> (notice the
+     underscores are single here), which is available by including
+     <filename>pg_trace.h</>.  Add the macro call to the appropriate location
+     in the source code.  In this case, it looks like the following:
+
+<programlisting>
+    TRACE_POSTGRESQL_TRANSACTION_START(vxid.localTransactionId);
 </programlisting>
-  </para>
+    </para>
+   </step>
 
+   <step>
+    <para>
+     After recompiling and running the new binary, check that your newly added
+     probe is available by executing the following DTrace command.  You
+     should see similar output:
+<screen>
+# dtrace -ln transaction-start
+   ID    PROVIDER          MODULE           FUNCTION NAME
+18705 postgresql49878     postgres     StartTransactionCommand transaction-start
+18755 postgresql49877     postgres     StartTransactionCommand transaction-start
+18805 postgresql49876     postgres     StartTransactionCommand transaction-start
+18855 postgresql49875     postgres     StartTransactionCommand transaction-start
+18986 postgresql49873     postgres     StartTransactionCommand transaction-start
+</screen>
+    </para>
+   </step>
+  </procedure>
+
   <para>
-   Vous devez faire attention que les types de données spécifiés pour les
-   arguments de la sonde correspondent aux types de données des variables
-   utilisées dans la macro <literal>PG_TRACE</literal>. Ceci n'est pas vérifié
-   au moment de la compilation. Vous pouvez vérifier que votre sonde
-   nouvellement ajoutée est disponible en recompilant, puis en exécutant le
-   nouveau binaire et, en tant que root, en exécutant une commande DTrace tel
-   que&nbsp;:
-<programlisting>dtrace -l -n transaction-start
+   There are a few things to be careful about when adding trace macros
+   to the C code:
+
+   <itemizedlist>
+    <listitem>
+     <para>
+      You should take care that the data types specified for a probe's
+      parameters match the data types of the variables used in the macro.
+      Otherwise, you will get compilation errors.
+     </para>
+    </listitem>
+
+
+    <listitem>
+     <para>
+      On most platforms, if <productname>PostgreSQL</productname> is
+      built with <option>--enable-dtrace</>, the arguments to a trace
+      macro will be evaluated whenever control passes through the
+      macro, <emphasis>even if no tracing is being done</>.  This is
+      usually not worth worrying about if you are just reporting the
+      values of a few local variables.  But beware of putting expensive
+      function calls into the arguments.  If you need to do that,
+      consider protecting the macro with a check to see if the trace
+      is actually enabled:
+
+<programlisting>
+    if (TRACE_POSTGRESQL_TRANSACTION_START_ENABLED())
+        TRACE_POSTGRESQL_TRANSACTION_START(some_function(...));
 </programlisting>
+
+      Each trace macro has a corresponding <literal>ENABLED</> macro.
+     </para>
+    </listitem>
+   </itemizedlist>
+
   </para>
+
   </sect2>
 
  </sect1>

Modified: traduc/trunk/postgresql/plpgsql.xml
===================================================================
--- traduc/trunk/postgresql/plpgsql.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/plpgsql.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -55,6 +55,13 @@
     </itemizedlist>
    </para>
 
+    <para>
+     <application>PL/pgSQL</> functions can be declared to accept a variable
+     number of arguments by using the <literal>VARIADIC</> marker.  This
+     works exactly the same way as for SQL functions, as discussed in
+     <xref linkend="xfunc-sql-variadic-functions">.
+    </para>
+
    <para>
     Les fonctions écrites en <application>PL/pgSQL</application> peuvent être
     utilisées partout où une fonction intégrée peut l'être.
@@ -161,6 +168,8 @@
      du code de retour. Ceci n'ajoute pas de fonctionnalité fondamentale au
      langage mais c'est un moyen agréable principalement pour renvoyer
      plusieurs valeurs.
+     The <literal>RETURNS TABLE</> notation can also be used in place
+     of <literal>RETURNS SETOF</>.
     </para>
 
     <para>
@@ -298,9 +307,11 @@
     <para>
      Toutes les variables utilisées dans un bloc doivent être déclarées 
      dans la section déclaration du bloc.
-     La seule exception est que la variable de boucle d'une boucle <literal>FOR</literal>
+     Les seules exceptions sont que la variable de boucle d'une boucle <literal>FOR</literal>
      effectuant une itération sur des valeurs entières est automatiquement déclarée
-     comme variable entière (type integer).
+     comme variable entière (type integer), and likewise the loop variable of a <literal>FOR</> loop
+     iterating over a cursor's result is automatically declared as a
+     record variable.
      </para>
 
     <para>
@@ -463,6 +474,23 @@
      </para>
 
      <para>
+      Another way to declare a <application>PL/pgSQL</application> function
+      is with <literal>RETURNS TABLE</>, for example:
+
+<programlisting>
+CREATE FUNCTION extended_sales(p_itemno int) RETURNS TABLE(quantity int, total numeric) AS $$
+BEGIN
+    RETURN QUERY SELECT quantity, quantity * price FROM sales WHERE itemno = p_itemno;
+END;
+$$ LANGUAGE plpgsql;
+</programlisting>
+
+      This is exactly equivalent to declaring one or more <literal>OUT</>
+      parameters and specifying <literal>RETURNS SETOF
+      <replaceable>sometype</></literal>.
+     </para>
+
+     <para>
       Lorsque le type de retour d'une fonction <application>PL/pgSQL</application>
       est déclaré comme type polymorphe (<type>anyelement</type>,
       <type>anyarray</type>, <type>anynonarray</type> et <type>anyenum</type>), un
@@ -988,21 +1016,24 @@
      fonctionneront pas dans de tels scénarios. Pour gérer ce type
      de problème, l'instruction <command>EXECUTE</command> est proposée&nbsp;:
 
-<synopsis>EXECUTE <replaceable class="command">chaîne-commande</replaceable> <optional> INTO <optional>STRICT</optional> <replaceable>cible</replaceable> </optional>;
+<synopsis>EXECUTE <replaceable class="command">command-string</replaceable> <optional> INTO <optional>STRICT</optional> <replaceable>target</replaceable> </optional> <optional> USING <replaceable>expression</replaceable> <optional>, ...</optional> </optional>;
 </synopsis>
 
      où <replaceable>chaîne-commande</replaceable> est une expression manipulant
-     une chaîne (de type <type>text</type>) contenant la commande à exécuter
-     et où<replaceable>cible</replaceable> est une variable record ou ligne ou
+     une chaîne (de type <type>text</type>) contenant la commande à exécuter.
+     The optional <replaceable>cible</replaceable> est une variable record ou ligne ou
      même une liste de variables simples ou de champs de lignes/enregistrements
-     séparées par des virgules.
+     séparées par des virgules, into which the results of
+     the command will be stored.  The optional <literal>USING</> expressions
+     supply values to be inserted into the command.
     </para>
 
     <para>
      Aucune substitution des variables <application>PL/pgSQL</application> ne
      se fait dans la chaîne de commande calculée. Toutes les valeurs des
      variables requises doivent être insérées dans la chaîne de commande au
-     moment de sa construction.
+     moment de sa construction; or you can use parameters
+     as described below.
     </para>
 
     <para>
@@ -1033,6 +1064,51 @@
     </para>
 
     <para>
+     The command string can use parameter values, which are referenced
+     in the command as <literal>$1</>, <literal>$2</>, etc.
+     These symbols refer to values supplied in the <literal>USING</>
+     clause.  This method is often preferable to inserting data values
+     into the command string as text: it avoids run-time overhead of
+     converting the values to text and back, and it is much less prone
+     to SQL-injection attacks since there is no need for quoting or escaping.
+     An example is:
+<programlisting>
+EXECUTE 'SELECT count(*) FROM mytable WHERE inserted_by = $1 AND inserted &lt;= $2'
+   INTO c
+   USING checked_user, checked_date;
+</programlisting>
+
+     Note that parameter symbols can only be used for data values
+     &mdash; if you want to use dynamically determined table or column
+     names, you must insert them into the command string textually.
+     For example, if the preceding query needed to be done against a
+     dynamically selected table, you could do this:
+<programlisting>
+EXECUTE 'SELECT count(*) FROM '
+    || tabname::regclass
+    || ' WHERE inserted_by = $1 AND inserted &lt;= $2'
+   INTO c
+   USING checked_user, checked_date;
+</programlisting>
+    </para>
+
+    <para>
+     An <command>EXECUTE</> with a simple constant command string and some
+     <literal>USING</> parameters, as in the first example above, is
+     functionally equivalent to just writing the command directly in
+     <application>PL/pgSQL</application> and allowing replacement of
+     <application>PL/pgSQL</application> variables to happen automatically.
+     The important difference is that <command>EXECUTE</> will re-plan
+     the command on each execution, generating a plan that is specific
+     to the current parameter values; whereas
+     <application>PL/pgSQL</application> normally creates a generic plan
+     and caches it for re-use.  In situations where the best plan depends
+     strongly on the parameter values, <command>EXECUTE</> can be
+     significantly faster; while when the plan is not sensitive to parameter
+     values, re-planning will be a waste.
+    </para>
+
+    <para>
      <command>SELECT INTO</command> n'est actuellement pas supporté à
      l'intérieur de <command>EXECUTE</command>&nbsp;; à la place, exécutez une
      commande <command>SELECT</command> et spécifiez <literal>INTO</literal>
@@ -1051,8 +1127,24 @@
     </para>
    </note>
 
+   <example id="plpgsql-quote-literal-example">
+   <title>Quoting values in dynamic queries</title>
 
+    <indexterm>
+     <primary>quote_ident</primary>
+     <secondary>use in PL/PgSQL</secondary>
+    </indexterm>
 
+    <indexterm>
+     <primary>quote_literal</primary>
+     <secondary>use in PL/PgSQL</secondary>
+    </indexterm>
+
+    <indexterm>
+     <primary>quote_nullable</primary>
+     <secondary>use in PL/PgSQL</secondary>
+    </indexterm>
+
     <para>
      En travaillant avec des commandes dynamiques, vous aurez souvent à gérer
      des échappements de guillemets simples. La méthode recommandée pour
@@ -1077,22 +1169,13 @@
     || quote_literal(valeur_cle);</programlisting>
     </para>
 
-    <indexterm>
-     <primary>quote_ident</primary>
-     <secondary>utilisation dans PL/PgSQL</secondary>
-    </indexterm>
-
-    <indexterm>
-     <primary>quote_literal</primary>
-     <secondary>utilisation dans PL/PgSQL</secondary>
-    </indexterm>
-
     <para>
      Cet exemple démontre l'utilisation des fonctions
-     <function>quote_ident</function> et <function>quote_literal</function>.
+     <function>quote_ident</function> et <function>quote_literal</function> (see <xref
+     linkend="functions-string">).
      Pour plus de sûreté, les expressions contenant
      les identifiants des colonnes et des tables doivent être passées à la
-     fonction <function>quote_ident</function>. Les expressions contenant des
+     fonction <function>quote_ident</function> before insertion in a dynamic query. Les expressions contenant des
      valeurs de type chaîne de caractères doivent être
      passées à <function>quote_literal</function>. Ce sont les étapes
      appropriées pour renvoyer le texte en entrée entouré par des guillemets 
@@ -1100,6 +1183,47 @@
     </para>
 
     <para>
+     Because <function>quote_literal</function> is labelled
+     <literal>STRICT</literal>, it will always return null when called with a
+     null argument.  In the above example, if <literal>newvalue</> or
+     <literal>keyvalue</> were null, the entire dynamic query string would
+     become null, leading to an error from <command>EXECUTE</command>.
+     You can avoid this problem by using the <function>quote_nullable</>
+     function, which works the same as <function>quote_literal</> except that
+     when called with a null argument it returns the string <literal>NULL</>.
+     For example,
+<programlisting>
+EXECUTE 'UPDATE tbl SET '
+        || quote_ident(colname)
+        || ' = '
+        || quote_nullable(newvalue)
+        || ' WHERE key = '
+        || quote_nullable(keyvalue);
+</programlisting>
+     If you are dealing with values that might be null, you should usually
+     use <function>quote_nullable</> in place of <function>quote_literal</>.
+    </para>
+
+    <para>
+     As always, care must be taken to ensure that null values in a query do
+     not deliver unintended results.  For example the <literal>WHERE</> clause
+<programlisting>
+     'WHERE key = ' || quote_nullable(keyvalue)
+</programlisting>
+     will never succeed if <literal>keyvalue</> is null, because the
+     result of using the equality operator <literal>=</> with a null operand
+     is always null.  If you wish null to work like an ordinary key value,
+     you would need to rewrite the above as
+<programlisting>
+     'WHERE key IS NOT DISTINCT FROM ' || quote_nullable(keyvalue)
+</programlisting>
+     (At present, <literal>IS NOT DISTINCT FROM</> is handled much less
+     efficiently than <literal>=</>, so don't do this unless you must.
+     See <xref linkend="functions-comparison"> for
+     more information on nulls and <literal>IS DISTINCT</>.)
+    </para>
+
+    <para>
      Notez que les guillemets dollar sont souvent utiles pour placer un texte
      fixe entre guillemets. Ce serait une très mauvaise idée d'écrire l'exemple
      ci-dessus de cette façon&nbsp;:
@@ -1113,8 +1237,10 @@
      <literal>$$</literal>. La même objection s'applique à tout délimiteur dollar
      que vous pourriez choisir. Donc, pour mettre un texte inconnu entre
      guillemets de façon sûr, vous <emphasis>devez</emphasis> utiliser
-     <function>quote_literal</function>.
+     <function>quote_literal</function>,
+     <function>quote_nullable</>, or <function>quote_ident</>, as appropriate.
     </para>
+   </example>
 
     <para>
      Un exemple bien plus important d'une commande dynamique et
@@ -1197,10 +1323,11 @@
 	   <para>
 		La commande <command>FOR</command> positionne <literal>FOUND</literal> à true
 		si elle effectue une itération une ou plusieurs fois, sinon elle renvoie
-		false. Ceci s'applique aux trois variantes de l'instruction 
+		false. Ceci s'applique aux quatre variantes de l'instruction 
 		<command>FOR</command> (boucles <command>FOR</command> integer,
 		<command>FOR</command> record-set,
-		et <command>FOR</command> record-set dynamique). <literal>FOUND</literal>
+		et <command>FOR</command> record-set dynamique and cursor
+                <command>FOR</> loops). <literal>FOUND</literal>
 		n'est positionnée de cette façon que quand la boucle <command>FOR</command>
 		s'achève&nbsp;;
 		dans l'exécution de la chaîne, <literal>FOUND</literal> 
@@ -1209,6 +1336,14 @@
 		dans le corps de la boucle.
 	   </para>
 	  </listitem>
+          <listitem>
+           <para>
+            A <command>RETURN QUERY</command> and <command>RETURN QUERY
+            EXECUTE</command> statements set <literal>FOUND</literal>
+            true if the query returns at least one row, false if no row
+            is returned.
+           </para>
+          </listitem>
 	 </itemizedlist>
 	 
      <literal>FOUND</literal> est une variable locale à l'intérieur de chaque
@@ -1337,6 +1472,7 @@
 <synopsis>
 RETURN NEXT <replaceable>expression</replaceable>;
 RETURN QUERY <replaceable>requete</replaceable>;
+RETURN QUERY EXECUTE <replaceable class="command">command-string</replaceable> <optional> USING <replaceable>expression</replaceable> <optional>, ...</optional> </optional>;
 </synopsis>
 
      <para>
@@ -1371,6 +1507,14 @@
      </para>
 
      <para>
+      <command>RETURN QUERY</command> has a variant
+      <command>RETURN QUERY EXECUTE</command>, which specifies the
+      query to be executed dynamically.  Parameter expressions can
+      be inserted into the computed query string via <literal>USING</>,
+      in just the same way as in the <command>EXECUTE</> command.
+     </para>
+
+     <para>
       Si vous déclarez la fonction avec des paramètres en sortie, écrivez
       <command>RETURN NEXT</command> sans expression. À chaque exécution,
       les valeurs actuelles des variables paramètres en sortie seront
@@ -1410,11 +1554,6 @@
 
 SELECT * FROM obtenirTousLesTrucs();
 </programlisting>
-
-      Notez que les fonctions utilisant <command>RETURN NEXT</command> ou
-      <command>RETURN QUERY</command> doivent être appelées comme une source de
-      type table dans une clause <literal>FROM</literal>.
-
      </para>
 
      <note>
@@ -1445,8 +1584,8 @@
     <title>Contrôles conditionnels</title>
 
     <para>
-     Les instructions <literal>IF</literal> vous permettent d'exécuter des commandes
-     basées sur certaines conditions. <application>PL/pgSQL</application> a cinq formes de
+     Les instructions <command>IF</> et <command>CASE</> vous permettent d'exécuter des commandes
+     basées sur certaines conditions. <application>PL/pgSQL</application> a trois formes de
      <literal>IF</literal>&nbsp;:
     <itemizedlist>
      <listitem>
@@ -1456,13 +1595,17 @@
       <para><literal>IF ... THEN ... ELSE</literal></para>
      </listitem>
      <listitem>
-      <para><literal>IF ... THEN ... ELSE IF</literal></para>
+      <para><literal>IF ... THEN ... ELSIF ... THEN ... ELSE</literal></para>
      </listitem>
+    </itemizedlist>
+
+    and two forms of <command>CASE</>:
+    <itemizedlist>
      <listitem>
-      <para><literal>IF ... THEN ... ELSIF ... THEN ... ELSE</literal></para>
+      <para><literal>CASE ... WHEN ... THEN ... ELSE ... END CASE</></>
      </listitem>
      <listitem>
-      <para><literal>IF ... THEN ... ELSEIF ... THEN ... ELSE</literal></para>
+      <para><literal>CASE WHEN ... THEN ... ELSE ... END CASE</></>
      </listitem>
     </itemizedlist>
     </para>
@@ -1504,7 +1647,8 @@
        <para>
         Les instructions <literal>IF-THEN-ELSE</literal> s'ajoutent au
         <literal>IF-THEN</literal> en vous permettant de spécifier un autre ensemble
-	d'instructions à exécuter si la condition est fausse.
+	d'instructions à exécuter si la condition n'est pas vraie   (Note this includes the case where the
+        condition evaluates to NULL.).
 	</para>
 
        <para>
@@ -1528,35 +1672,8 @@
     </sect3>
 
      <sect3>
-      <title><literal>IF-THEN-ELSE IF</literal></title>
+      <title><literal>IF-THEN-ELSIF</literal></title>
 
-       <para>
-        Les instructions <literal>IF</literal> peuvent être imbriquées, comme dans 
-	l'exemple suivant&nbsp;:
-<programlisting>IF demo_ligne.sexe = 'm' THEN
-    texte_sexe := ''homme'';
-ELSE
-    IF demo_ligne.sexe = 'f' THEN
-        texte_sexe := 'femme';
-    END IF;
-END IF;
-</programlisting>
-       </para>
-
-       <para>
-        Lorsque vous utilisez cette forme, vous imbriquez une instruction
-        <literal>IF</literal> dans la partie <literal>ELSE</literal> d'une
-	instruction <literal>IF</literal> extérieure. Ainsi, vous avez besoin
-	d'une instruction <literal>END IF</literal> pour chaque <literal>IF</literal>
-	imbriqué et une pour le <literal>IF-ELSE</literal> parent. Ceci fonctionne mais
-	devient fastidieux quand il y a de nombreuses alternatives à traiter.
-	Considérez alors la forme suivante.
-       </para>
-     </sect3>
-
-     <sect3>
-      <title><literal>IF-THEN-ELSIF-ELSE</literal></title>
-
 <synopsis>IF <replaceable>expression-booleenne</replaceable> THEN
     <replaceable>instructions</replaceable>
 <optional> ELSIF <replaceable>expression-booleenne</replaceable> THEN
@@ -1572,10 +1689,16 @@
 </synopsis>
 
        <para>
-        <literal>IF-THEN-ELSIF-ELSE</literal> est une méthode plus pratique pour vérifier 
-	de nombreuses alternatives en une instruction. Elle est équivalente fonctionnellement
-	aux commandes <literal>IF-THEN-ELSE-IF-THEN</literal> imbriquées, mais un seul
-        <literal>END IF</literal> est nécessaire.
+        Sometimes there are more than just two alternatives.
+        <literal>IF-THEN-ELSIF</> provides a convenient
+        method of checking several alternatives in turn.
+        The <literal>IF</> conditions are tested successively
+        until the first one that is true is found.  Then the
+        associated statement(s) are executed, after which control
+        passes to the next statement after <literal>END IF</>.
+        (Any subsequent <literal>IF</> conditions are <emphasis>not</>
+        tested.)  If none of the <literal>IF</> conditions is true,
+        then the <literal>ELSE</> block (if any) is executed.
        </para>
 
        <para>
@@ -1593,15 +1716,128 @@
 END IF;
 </programlisting>
        </para>
+
+       <para>
+        The key word <literal>ELSIF</> can also be spelled
+        <literal>ELSEIF</>.
+       </para>
+
+       <para>
+        An alternative way of accomplishing the same task is to nest
+        <literal>IF-THEN-ELSE</literal> statements, as in the
+        following example:
+
+<programlisting>
+IF demo_row.sex = 'm' THEN
+    pretty_sex := 'man';
+ELSE
+    IF demo_row.sex = 'f' THEN
+        pretty_sex := 'woman';
+    END IF;
+END IF;
+</programlisting>
+       </para>
+
+       <para>
+        However, this method requires writing a matching <literal>END IF</>
+        for each <literal>IF</>, so it is much more cumbersome than
+        using <literal>ELSIF</> when there are many alternatives.
+       </para>
      </sect3>
 
      <sect3>
-      <title><literal>IF-THEN-ELSEIF-ELSE</literal></title>
+      <title>Simple <literal>CASE</></title>
 
-     <para>
-      <literal>ELSEIF</literal> est un alias pour <literal>ELSIF</literal>.
-     </para>
-    </sect3>
+<synopsis>
+CASE <replaceable>search-expression</replaceable>
+    WHEN <replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> <optional> ... </optional></optional> THEN
+      <replaceable>statements</replaceable>
+  <optional> WHEN <replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> <optional> ... </optional></optional> THEN
+      <replaceable>statements</replaceable>
+    ... </optional>
+  <optional> ELSE
+      <replaceable>statements</replaceable> </optional>
+END CASE;
+</synopsis>
+
+      <para>
+       The simple form of <command>CASE</> provides conditional execution
+       based on equality of operands.  The <replaceable>search-expression</>
+       is evaluated (once) and successively compared to each
+       <replaceable>expression</> in the <literal>WHEN</> clauses.
+       If a match is found, then the corresponding
+       <replaceable>statements</replaceable> are executed, and then control
+       passes to the next statement after <literal>END CASE</>.  (Subsequent
+       <literal>WHEN</> expressions are not evaluated.)  If no match is
+       found, the <literal>ELSE</> <replaceable>statements</replaceable> are
+       executed; but if <literal>ELSE</> is not present, then a
+       <literal>CASE_NOT_FOUND</literal> exception is raised.
+      </para>
+
+      <para>
+       Here is a simple example:
+
+<programlisting>
+CASE x
+    WHEN 1, 2 THEN
+        msg := 'one or two';
+    ELSE
+        msg := 'other value than one or two';
+END CASE;
+</programlisting>
+      </para>
+     </sect3>
+
+     <sect3>
+      <title>Searched <literal>CASE</></title>
+
+<synopsis>
+CASE
+    WHEN <replaceable>boolean-expression</replaceable> THEN
+      <replaceable>statements</replaceable>
+  <optional> WHEN <replaceable>boolean-expression</replaceable> THEN
+      <replaceable>statements</replaceable>
+    ... </optional>
+  <optional> ELSE
+      <replaceable>statements</replaceable> </optional>
+END CASE;
+</synopsis>
+
+      <para>
+       The searched form of <command>CASE</> provides conditional execution
+       based on truth of boolean expressions.  Each <literal>WHEN</> clause's
+       <replaceable>boolean-expression</replaceable> is evaluated in turn,
+       until one is found that yields <literal>true</>.  Then the
+       corresponding <replaceable>statements</replaceable> are executed, and
+       then control passes to the next statement after <literal>END CASE</>.
+       (Subsequent <literal>WHEN</> expressions are not evaluated.)
+       If no true result is found, the <literal>ELSE</>
+       <replaceable>statements</replaceable> are executed;
+       but if <literal>ELSE</> is not present, then a
+       <literal>CASE_NOT_FOUND</literal> exception is raised.
+      </para>
+
+      <para>
+       Here is an example:
+
+<programlisting>
+CASE
+    WHEN x BETWEEN 0 AND 10 THEN
+        msg := 'value is between zero and ten';
+    WHEN x BETWEEN 11 AND 20 THEN
+        msg := 'value is between eleven and twenty';
+END CASE;
+</programlisting>
+      </para>
+
+      <para>
+       This form of <command>CASE</> is entirely equivalent to
+       <literal>IF-THEN-ELSIF</>, except for the rule that reaching
+       an omitted <literal>ELSE</> clause results in an error rather
+       than doing nothing.
+      </para>
+
+     </sect3>
    </sect2>
 
    <sect2 id="plpgsql-control-structures-loops">
@@ -1898,7 +2134,7 @@
      L'instruction <literal>FOR-IN-EXECUTE</literal> est un moyen d'itérer sur des 
      lignes&nbsp;:
 <synopsis><optional>&lt;&lt;<replaceable>label</replaceable>&gt;&gt;</optional>
-FOR <replaceable>cible</replaceable> IN EXECUTE <replaceable>expression_texte</replaceable> LOOP 
+FOR <replaceable>target</replaceable> IN EXECUTE <replaceable>text_expression</replaceable> <optional> USING <replaceable>expression</replaceable> <optional>, ...</optional> </optional> LOOP
     <replaceable>instructions</replaceable>
 END LOOP <optional> <replaceable>label</replaceable> </optional>;
 </synopsis>
@@ -1908,7 +2144,15 @@
      permet au développeur de choisir entre la vitesse d'une requête préplanifiée et la 
      flexibilité d'une requête dynamique, uniquement avec l'instruction 
      <command>EXECUTE</command>.
+     As with <command>EXECUTE</command>, parameter values can be inserted
+     into the dynamic command via <literal>USING</>.
     </para>
+
+    <para>
+     Another way to specify the query whose results should be iterated
+     through is to declare it as a cursor.  This is described in
+     <xref linkend="plpgsql-cursor-for-loop">.
+    </para>
   </sect2>
 
   <sect2 id="plpgsql-error-trapping">
@@ -1968,7 +2212,12 @@
       <literal>OTHERS</literal> correspond à tout type d'erreur sauf
       <literal>QUERY_CANCELED</literal> (il est possible, mais pas recommandé, de
       récupérer <literal>QUERY_CANCELED</literal> par son nom). Les noms des
-      conditions ne sont pas sensibles à la casse.
+      conditions ne sont pas sensibles à la casse. Also, an error condition can be specified
+     by <literal>SQLSTATE</> code; for example these are equivalent:
+<programlisting>
+        WHEN division_by_zero THEN ...
+        WHEN SQLSTATE '22012' THEN ...
+</programlisting>
     </para>
 
     <para>
@@ -2142,6 +2391,14 @@
      et la dernière une variable curseur liée.
     </para>
 
+    <note>
+     <para>
+      Bound cursors can also be used without explicitly opening them,
+      via the <command>FOR</> statement described in
+      <xref linkend="plpgsql-cursor-for-loop">.
+     </para>
+    </note>
+
     <sect3>
      <title><command>OPEN FOR</command> <replaceable>requête</replaceable></title>
 
@@ -2370,8 +2627,10 @@
        <para>
         Quand un curseur est positionné sur une ligne d'une table, cette ligne
 	peut être mise à jour ou supprimée en utilisant le curseur qui identifie
-	la ligne. Notez que ceci fonctionne seulement pour des requêtes simples
-	de curseur (sans jointure, sans groupement). Pour des informations
+	la ligne. There are
+        restrictions on what the cursor's query can be (in particular,
+        no grouping) and it's best to use <literal>FOR UPDATE</> in the
+        cursor.  Pour des informations
 	supplémentaires, voir la page de référence
         <xref linkend="sql-declare" endterm="sql-declare-title"/>.
        </para>
@@ -2513,6 +2772,35 @@
        </para>
      </sect3>
    </sect2>
+   <sect2 id="plpgsql-cursor-for-loop">
+    <title>Looping Through a Cursor's Result</title>
+
+    <para>
+     There is a variant of the <command>FOR</> statement that allows
+     iterating through the rows returned by a cursor.  The syntax is:
+
+<synopsis>
+<optional> &lt;&lt;<replaceable>label</replaceable>&gt;&gt; </optional>
+FOR <replaceable>recordvar</replaceable> IN <replaceable>bound_cursor</replaceable> <optional> ( <replaceable>argument_values</replaceable> ) </optional> LOOP
+    <replaceable>statements</replaceable>
+END LOOP <optional> <replaceable>label</replaceable> </optional>;
+</synopsis>
+
+     The cursor variable must have been bound to some query when it was
+     declared, and it <emphasis>cannot</> be open already.  The
+     <command>FOR</> statement automatically opens the cursor, and it closes
+     the cursor again when the loop exits.  A list of actual argument value
+     expressions must appear if and only if the cursor was declared to take
+     arguments.  These values will be substituted in the query, in just
+     the same way as during an <command>OPEN</>.
+     The variable <replaceable>recordvar</replaceable> is automatically
+     defined as type <type>record</> and exists only inside the loop (any
+     existing definition of the variable name is ignored within the loop).
+     Each row returned by the cursor is successively assigned to this
+     record variable and the loop body is executed.
+    </para>
+   </sect2>
+
   </sect1>
 
   <sect1 id="plpgsql-errors-and-messages">
@@ -2531,12 +2819,18 @@
     Utilisez l'instruction <command>RAISE</command> pour rapporter des messages et 
     lever des erreurs.
 
-<synopsis>RAISE <replaceable class="parameter">niveau</replaceable> '<replaceable class="parameter">format</replaceable>' <optional>, <replaceable class="parameter">expression</replaceable> <optional>, ...</optional></optional>;
+<synopsis>RAISE <optional> <replaceable class="parameter">level</replaceable> </optional> '<replaceable class="parameter">format</replaceable>' <optional>, <replaceable class="parameter">expression</replaceable> <optional>, ...</optional></optional> <optional> USING <replaceable class="parameter">option</replaceable> = <replaceable class="parameter">expression</replaceable> <optional>, ... </optional> </optional>;
+RAISE <optional> <replaceable class="parameter">level</replaceable> </optional> <replaceable class="parameter">condition_name</> <optional> USING <replaceable class="parameter">option</replaceable> = <replaceable class="parameter">expression</replaceable> <optional>, ... </optional> </optional>;
+RAISE <optional> <replaceable class="parameter">level</replaceable> </optional> SQLSTATE '<replaceable class="parameter">sqlstate</>' <optional> USING <replaceable class="parameter">option</replaceable> = <replaceable class="parameter">expression</replaceable> <optional>, ... </optional> </optional>;
+RAISE <optional> <replaceable class="parameter">level</replaceable> </optional> USING <replaceable class="parameter">option</replaceable> = <replaceable class="parameter">expression</replaceable> <optional>, ... </optional>;
+RAISE ;
 </synopsis>
 
-    Les niveaux possibles sont <literal>DEBUG</literal>,
+    The <replaceable class="parameter">level</replaceable> option specifies
+    the error severity.  Allowed niveaux sont <literal>DEBUG</literal>,
     <literal>LOG</literal>, <literal>INFO</literal>, <literal>NOTICE</literal>,
-    <literal>WARNING</literal>  et <literal>EXCEPTION</literal>.
+    <literal>WARNING</literal>  et <literal>EXCEPTION</literal>, with <literal>EXCEPTION</literal>
+    being the default.
     <literal>EXCEPTION</literal> lève une erreur (ce qui annule habituellement
     la transaction en cours). Les autres niveaux ne font que générer des messages aux
     différents niveaux de priorité.
@@ -2547,19 +2841,17 @@
    </para>
 
    <para>
-    Au sein de la chaîne de formatage, <literal>%</literal> est remplacé par
-    la représentation de la chaîne argument optionnelle suivante. Écrivez
-    <literal>%%</literal> pour signifier un caractère <literal>%</literal>. Les
-    arguments peuvent être de simples variables ou des expressions mais le format
-    doit être une simple chaîne de caractères.
+    After <replaceable class="parameter">level</replaceable> if any,
+    you can write a <replaceable class="parameter">format</replaceable>
+    (which must be a simple string literal, not an expression).  The
+    format string specifies the error message text to be reported.
+    The format string can be followed
+    by optional argument expressions to be inserted into the message.
+    Inside the format string, <literal>%</literal> is replaced by the
+    string representation of the next optional argument's value. Write
+    <literal>%%</literal> to emit a literal <literal>%</literal>.
    </para>
 
-   <!--
-   Cet exemple devrait fonctionner mais ce n'est pas le cas&nbsp;:
-   	RAISE NOTICE 'Id nombre ' || key || ' not found!';
-   Remettez le quand nous permettront les formats autres que chaînes de caractères.
-    -->
-
    <para>
     Dans cet exemple, la valeur de <literal>v_job_id</literal> remplace le <literal>%</literal>
     dans la chaîne.
@@ -2568,18 +2860,89 @@
    </para>
 
    <para>
-    Cet exemple interromp la transaction avec le message d'erreur donné.
-<programlisting>RAISE EXCEPTION 'ID inexistant --> %', id_utilisateur;
+    You can attach additional information to the error report by writing
+    <literal>USING</> followed by <replaceable
+    class="parameter">option</replaceable> = <replaceable
+    class="parameter">expression</replaceable> items.  The allowed
+    <replaceable class="parameter">option</replaceable> keywords are
+    <literal>MESSAGE</>, <literal>DETAIL</>, <literal>HINT</>, and
+    <literal>ERRCODE</>, while each <replaceable
+    class="parameter">expression</replaceable> can be any string-valued
+    expression.
+    <literal>MESSAGE</> sets the error message text (this option can't
+    be used in the form of <command>RAISE</> that includes a format
+    string before <literal>USING</>).
+    <literal>DETAIL</> supplies an error detail message, while
+    <literal>HINT</> supplies a hint message.
+    <literal>ERRCODE</> specifies the error code (SQLSTATE) to report,
+    either by condition name as shown in <xref linkend="errcodes-appendix">,
+    or directly as a five-character SQLSTATE code.
+   </para>
+
+   <para>
+    This example will abort the transaction with the given error message
+    and hint:
+<programlisting>
+RAISE EXCEPTION 'Nonexistent ID --> %', user_id USING HINT = 'Please check your user id';
 </programlisting>
    </para>
 
    <para>
-    <command>RAISE EXCEPTION</command> génère toujours le même code <varname>SQLSTATE</varname>,
-    <literal>P0001</literal>, quelque soit le message avec lequel il a été invoqué. Il
-    est possible d'intercepter cette exception avec
-    <literal>EXCEPTION ... WHEN RAISE_EXCEPTION THEN ...</literal> 
-    mais l'origine du <command>RAISE</command> déclencheur est inconnue.
+    These two examples show equivalent ways of setting the SQLSTATE:
+<programlisting>
+RAISE 'Duplicate user ID: %', user_id USING ERRCODE = 'unique_violation';
+RAISE 'Duplicate user ID: %', user_id USING ERRCODE = '23505';
+</programlisting>
    </para>
+
+   <para>
+    There is a second <command>RAISE</> syntax in which the main argument
+    is the condition name or SQLSTATE to be reported, for example:
+<programlisting>
+RAISE division_by_zero;
+RAISE SQLSTATE '22012';
+</programlisting>
+    In this syntax, <literal>USING</> can be used to supply a custom
+    error message, detail, or hint.  Another way to do the earlier
+    example is
+<programlisting>
+RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;
+</programlisting>
+   </para>
+
+   <para>
+    Still another variant is to write <literal>RAISE USING</> or <literal>RAISE
+    <replaceable class="parameter">level</replaceable> USING</> and put
+    everything else into the <literal>USING</> list.
+   </para>
+
+   <para>
+    The last variant of <command>RAISE</> has no parameters at all.
+    This form can only be used inside a <literal>BEGIN</> block's
+    <literal>EXCEPTION</> clause;
+    it causes the error currently being handled to be re-thrown to the
+    next enclosing block.
+   </para>
+
+   <para>
+    If no condition name nor SQLSTATE is specified in a
+    <command>RAISE EXCEPTION</command> command, the default is to use
+    <literal>RAISE_EXCEPTION</> (<literal>P0001</>).  If no message
+    text is specified, the default is to use the condition name or
+    SQLSTATE as message text.
+   </para>
+
+   <note>
+    <para>
+     When specifying an error code by SQLSTATE code, you are not
+     limited to the predefined error codes, but can select any
+     error code consisting of five digits and/or upper-case ASCII
+     letters, other than <literal>00000</>.  It is recommended that
+     you avoid throwing error codes that end in three zeroes, because
+     these are category codes and can only be trapped by trapping
+     the whole category.
+    </para>
+   </note>
  </sect1>
 
  <sect1 id="plpgsql-trigger">
@@ -2614,7 +2977,8 @@
        Type de données <type>RECORD</type>&nbsp;; variable contenant la nouvelle ligne 
        de base de données pour les opérations <command>INSERT</command>/<command>UPDATE</command> 
        dans les triggers de niveau ligne. Cette variable est
-       <symbol>NULL</symbol> dans un trigger de niveau instruction.
+       <symbol>NULL</symbol> dans un trigger de niveau instruction
+       and for <command>DELETE</command> operations.
       </para>
      </listitem>
     </varlistentry>
@@ -2626,7 +2990,7 @@
        Type de données <type>RECORD</type>&nbsp;; variable contenant l'ancienne ligne de 
        base de données pour les opérations <command>UPDATE</command>/<command>DELETE</command> 
        dans les triggers de niveau ligne. Cette variable est <symbol>NULL</symbol>
-       dans les triggers de niveau instruction.
+       dans les triggers de niveau instruction and for <command>INSERT</command> operations.
       </para>
      </listitem>
     </varlistentry>
@@ -2666,8 +3030,8 @@
      <listitem>
       <para>
        Type de données <type>text</type>&nbsp;; une chaîne, <literal>INSERT</literal>,
-       <literal>UPDATE</literal> ou <literal>DELETE</literal>, indiquant
-       pour quelle opération le trigger a été lancé.
+       <literal>UPDATE</literal>, <literal>DELETE</literal> ou <literal>TRUNCATE</>,
+       indiquant pour quelle opération le trigger a été lancé.
       </para>
      </listitem>
     </varlistentry>
@@ -3636,14 +4000,6 @@
 
      <listitem>
       <para>
-       Pas besoin de curseurs dans <application>PL/pgSQL</application>, mettez juste la requête
-       dans l'instruction <literal>FOR</literal> (voir <xref
-       linkend="plpgsql-porting-ex2"/>).
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
        Dans <productname>PostgreSQL</productname>, le corps de la fonction doit être
        écrit comme une chaîne litérale. Du coup, vous avez besoin d'utiliser
        les guillemets dollar ou l'échappement des simples guillemets dans le
@@ -3679,6 +4035,23 @@
       </para>
      </listitem>
 
+     <listitem>
+      <para>
+       <command>FOR</> loops over queries (other than cursors) also work
+       differently: the target variable(s) must have been declared,
+       whereas <application>PL/SQL</> always declares them implicitly.
+       An advantage of this is that the variable values are still accessible
+       after the loop exits.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       There are various notational differences for the use of cursor
+       variables.
+      </para>
+     </listitem>
+
     </itemizedlist>
    </para>
 
@@ -3771,8 +4144,7 @@
     <para>
      La procédure suivante récupère des lignes d'une instruction <command>SELECT</command>
      et construit une grande fonction dont les résultats sont dans une instruction
-     <literal>IF</literal> pour favoriser l'efficacité. Notez particulièrement les 
-     différences dans le curseur et la boucle <literal>FOR</literal>.
+     <literal>IF</literal> pour favoriser l'efficacité.
     </para>
 
     <para>
@@ -3809,15 +4181,14 @@
 
 <programlisting>CREATE OR REPLACE FUNCTION cs_update_referrer_type_proc() RETURNS void AS $func$
 DECLARE
-    referrer_key RECORD;  -- declare a generic record to be used in a FOR
+    CURSOR referrer_keys IS
+        SELECT * FROM cs_referrer_keys
+        ORDER BY try_order;
     func_body text;
     func_cmd text;
 BEGIN 
     func_body := 'BEGIN' ;
 
-    -- Remarquez comment nous parcourons les résultats d'une requête dans une boucle FOR
-    -- en utilisant la construction FOR &lt;record&gt;.
-
     FOR referrer_key IN SELECT * FROM cs_referrer_keys ORDER BY try_order LOOP
 	func_body := func_body ||
 	' IF v_' || referrer_key.kind
@@ -4077,7 +4448,9 @@
      <callout arearefs="co.plpgsql-porting-raise">
       <para>
        La syntaxe de <literal>RAISE</literal> est considérablement différente de
-       l'instruction Oracle similaire.
+       l'instruction Oracle similaire., although the basic case <literal>RAISE</>
+       <replaceable class="parameter">exception_name</replaceable> works
+       similarly.
       </para>
      </callout>
      

Modified: traduc/trunk/postgresql/runtime.xml
===================================================================
--- traduc/trunk/postgresql/runtime.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/runtime.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -5,7 +5,7 @@
      révision $Revision$ -->
 
 <chapter id="runtime">
- <title>Environnement du système d'exploitation</title>
+ <title>Server Setup and Operation</title>
 
  <para>
   Ce chapitre discute de la configuration, du lancement du serveur de bases de
@@ -150,11 +150,12 @@
    l'environnement et l'applique à la base de données initialisée. Il est
    possible de spécifier une locale différente pour la base de données&nbsp;;
    la <xref linkend="locale"/> propose plus d'informations là-dessus.
-   L'ordre de tri utilisé à l'intérieur du groupe de bases de données est
-   initialisé par <command>initdb</command> et ne peut pas être modifié après,
-   en dehors de la sauvegarde des données, du redémarrage de
-   <command>initdb</command> et du rechargement des données. Il y a aussi un
-   impact sur les performances lors de l'utilisation de locales autres que
+   The default sort order used
+   within the particular database cluster is set by
+   <command>initdb</command>, and while you can create new databases using
+   different sort order, the order used in the template databases that initdb
+   creates cannot be changed without dropping and recreating them.
+   There is also a performance impact for using locales autres que
    <literal>c</literal> ou <literal>posix</literal>. Du coup, il est important de faire ce
    choix correctement la première fois.
   </para>
@@ -193,7 +194,8 @@
     En particulier, des écritures asynchrones (décalées dans le temps) sur le
     serveur <acronym>NFS</acronym> peuvent poser des soucis de fiabilité. Si
     possible, montez les systèmes de fichiers <acronym>NFS</acronym> en
-    synchrone (autrement dit sans cache) pour éviter cela. Les
+    synchrone (autrement dit sans cache) pour éviter cela. Also, soft-mounting
+    <acronym>NFS</> is not recommended. Les
     <acronym>SAN</acronym> utilisent un protocole de communication bas-niveau
     plutôt que <acronym>NFS</acronym>.
    </para>
@@ -1056,60 +1058,53 @@
     </variablelist>
 
    <table id="shared-memory-parameters">
-    <title>Paramètres de configuration affectant l'utilisation de la mémoire
-    partagée par <productname>PostgreSQL</productname></title>
+    <title><productname>PostgreSQL</productname> shared memory usage</>
 
     <tgroup cols="2">
      <colspec colnum="1" colwidth="0.5*"/>
      <colspec colnum="2" colwidth="1.5*"/>
      <thead>
       <row>
-       <entry>Nom</entry>
-       <entry>Multiplicateur approximatif (octets par incrément) à
-       partir de la 8.3</entry>
+       <entry>Usage</>
+       <entry>Approximate shared memory bytes required (as of 8.3)</>
       </row>
      </thead>
 
      <tbody>
       <row>
-       <entry><xref linkend="guc-max-connections"/></entry>
-       <entry>1800 + 270 * <xref linkend="guc-max-locks-per-transaction"/></entry>
+       <entry>Connections</>
+       <entry>(1800 + 270 * <xref
+       linkend="guc-max-locks-per-transaction">) * <xref
+       linkend="guc-max-connections"></entry>
       </row>
 
       <row>
-       <entry><xref linkend="guc-autovacuum-max-workers"/></entry>
-       <entry>1800 + 270 * <xref linkend="guc-max-locks-per-transaction"/></entry>
+       <entry>Autovacuum workers</>
+       <entry>(1800 + 270 * <xref
+       linkend="guc-max-locks-per-transaction">) * <xref
+       linkend="guc-autovacuum-max-workers"></entry>
       </row>
 
       <row>
-       <entry><xref linkend="guc-max-prepared-transactions"/></entry>
-       <entry>770 + 270 * <xref linkend="guc-max-locks-per-transaction"/></entry>
+       <entry>Prepared transactions</>
+       <entry>(770 + 270 * <xref
+       linkend="guc-max-locks-per-transaction">) * <xref linkend="guc-max-prepared-transactions"></entry>
       </row>
 
       <row>
-       <entry><xref linkend="guc-shared-buffers"/></entry>
-       <entry>8400 (en supposant un <symbol>BLCKSZ</symbol> à 8&nbsp;Ko)</entry>
+       <entry>Shared disk buffers</>
+       <entry>(<xref linkend="guc-block-size"> + 208) * <xref linkend="guc-shared-buffers"></entry>
       </row>
 
       <row>
-       <entry><xref linkend="guc-wal-buffers"/></entry>
-       <entry>8200 (en supposant un <symbol>XLOG_BLCKSZ</symbol> à 8&nbsp;Ko)</entry>
+       <entry>WAL buffers</>
+       <entry>(<xref linkend="guc-wal-block-size"> + 8) * <xref linkend="guc-wal-buffers"></entry>
       </row>
 
       <row>
-       <entry><xref linkend="guc-max-fsm-relations"/></entry>
-       <entry>70</entry>
+       <entry>Fixed space requirements</>
+       <entry>770 kB</entry>
       </row>
-
-      <row>
-       <entry><xref linkend="guc-max-fsm-pages"/></entry>
-       <entry>6</entry>
-      </row>
-
-      <row>
-       <entry>Pré-requis d'un espace fixe</entry>
-       <entry>770&nbsp;Ko</entry>
-      </row>
      </tbody>
     </tgroup>
    </table>
@@ -1282,11 +1277,17 @@
      <term><systemitem>sigterm</systemitem><indexterm><primary>sigterm</primary></indexterm></term>
      <listitem>
       <para>
+       This is the <firstterm>Smart Shutdown</firstterm> mode.
        Après réception de <systemitem>sigterm</systemitem>, le serveur
        désactive les nouvelles connexions mais permet aux sessions en cours de
        terminer leur travail normalement. Il s'arrête seulement après que toutes
        les sessions se sont terminées normalement. C'est l'arrêt intelligent
        (<firstterm>smart shutdown</firstterm>).
+       If the server is in online backup mode, it additionally waits
+       until online backup mode is no longer active.  While backup mode is
+       active, new connections will still be allowed, but only to superusers
+       (this exception allows a superuser to connect to terminate
+       online backup mode).
       </para>
      </listitem>
     </varlistentry>
@@ -1295,11 +1296,13 @@
      <term><systemitem>sigint</systemitem><indexterm><primary>sigint</primary></indexterm></term>
      <listitem>
       <para>
+       This is the <firstterm>Fast Shutdown</firstterm> mode.
        Le serveur désactive les nouvelles connexions et envoie à tous
        les processus serveur le signal <systemitem>sigterm</systemitem>, qui les
        fera annuler leurs transactions courantes pour quitter rapidement. Il
        attend ensuite la fin des processus serveur et s'arrête finalement.
-       C'est l'arrêt rapide (<firstterm>fast shutdown</firstterm>).
+       If the server is in online backup mode, backup mode will be
+       terminated, rendering the backup useless.
       </para>
      </listitem>
     </varlistentry>
@@ -1308,8 +1311,8 @@
      <term><systemitem>sigquit</systemitem><indexterm><primary>sigquit</primary></indexterm></term>
      <listitem>
       <para>
-      Voici l'arrêt immédiat (<firstterm>immediate shutdown</firstterm>), qui
-       demande au processus <command>postgres</command> maître d'envoyer un signal
+       This is the <firstterm>Immediate Shutdown</firstterm> mode.
+       Le processus <command>postgres</command> maître envoie un signal
        <systemitem>sigquit</systemitem> à tous les processus fils et à quitter
        immédiatement non proprement. Les processus fils quittent immédiatement
        à réception du signal <systemitem>sigquit</systemitem>. ceci amènera une
@@ -1344,6 +1347,14 @@
     les sous-processus individuels à la main.
    </para>
   </important>
+
+  <para>
+   To terminate an individual session while allowing other sessions to
+   continue, use <function>pg_terminate_backend()</> (see <xref
+   linkend="functions-admin-signal-table">) or send a
+   <systemitem>SIGTERM</> signal to the child process associated with
+   the session.
+  </para>
  </sect1>
 
  <sect1 id="preventing-server-spoofing">
@@ -1388,10 +1399,10 @@
    (<xref linkend="auth-pg-hba-conf"/>) et avoir les fichiers SSL pour la clé,
    <filename>server.key</filename>, et pour le certificat,
    <filename>server.crt</filename> (<xref linkend="ssl-tcp"/>). Le client TCP
-   doit se connecter en utilisant <literal>sslmode='require'</literal>
-   (<xref linkend="libpq-connect"/>) et avoir un certificat SSL,
-   <filename>~/.postgresql/root.crt</filename> (<xref
-   linkend="libpq-ssl"/>).
+   doit se connecter en utilisant <literal>sslmode='require'</literal>,
+   specify <literal>sslverify='cn'</>
+   or <literal>sslverify='cert'</> and have the required certificate
+   files present (<xref linkend="libpq-connect">).
   </para>
  </sect1>
   
@@ -1514,8 +1525,8 @@
 
    <listitem>
     <para> 
-     Il est possible que le client et le serveur fournissent des clés SSL ou
-     des certificats à l'autre. Cela demande une configuration supplémentaire
+     Il est possible que le client et le serveur fournissent des certificats
+     SSL à l'autre. Cela demande une configuration supplémentaire
      de chaque côté mais cela fournit une vérification plus forte de l'identité
      que la simple utilisation de mots de passe. Cela empêche un ordinateur de
      se faire passer pour le serveur assez longtemps pour lire le mot de passe
@@ -1612,18 +1623,27 @@
    Pour démarrer le mode <acronym>SSL</acronym>, les fichiers
    <filename>server.crt</filename> et <filename>server.key</filename> doivent
    exister dans le répertoire de données du serveur. Ces fichiers doivent
-   contenir, respectivement, le certificat et la clé privée du serveur. Si
+   contenir, respectivement, le certificat et la clé privée du serveur.
+   On Unix systems, the permissions on <filename>server.key</filename> must
+   disallow any access to world or group; achieve this by the command
+   <command>chmod 0600 server.key</command>.  
+   Si
    la clé privée est protégée par une phrase de passe, le serveur la
    demandera et ne se lancera pas tant qu'elle n'aura pas été saisie.
   </para>
 
+  <sect2 id="ssl-client-certificates">
+   <title>Using client certificates</title>
+   
   <para>
    Pour réclamer l'envoi d'un certificat de confiance par le client, placez
    les certificats des autorités (<acronym>CA</acronym>) de confiance dans
-   le fichier <filename>root.crt</filename> du répertoire des données. Un
+   le fichier <filename>root.crt</filename> du répertoire des données, and
+   set the <literal>clientcert</literal> parameter to <literal>1</literal>
+   on the appropriate line(s) in pg_hba.conf. Un
    certificat pourra ensuite être réclamé lors du lancement de la connexion
    SSL. (Voir <xref linkend="libpq-ssl"/> pour une description de la
-   configuration des certificats client.) Le serveur vérifiera que le
+   configuration de certificats sur le client.) Le serveur vérifiera que le
    certificat du client est signé par une des autorités de confiance. Les
    entrées de la liste de révocation des certificats sont aussi vérifiées
    si le fichier <filename>root.crl</filename> existe.
@@ -1633,12 +1653,23 @@
   </para>
 
   <para>
-   Si le fichier <filename>root.crt</filename> est absent, les certificats du
-   client ne seront pas réclamés et vérifiés. Dans ce mode, SSL fournit une
-   communication chiffrée mais pas d'authentification.
+   The <literal>clientcert</literal> option in <filename>pg_hba.conf</>
+   is available for all authentication methods, but only for rows
+   specified as <literal>hostssl</>. Unless specified, the default is
+   not to verify the client certificate.
   </para>
 
   <para>
+   You can use the authentication method <literal>cert</> to use the
+   client certificate for authenticating users. See
+   <xref linkend="auth-cert"> for details.
+  </para>
+  </sect2>
+
+  <sect2 id="ssl-server-files">
+   <title>SSL Server File Usage</title>
+
+  <para>
    Les fichiers <filename>server.key</filename>,
    <filename>server.crt</filename>, <filename>root.crt</filename> et
    <filename>root.crl</filename> sont seulement examinés au démarrage du
@@ -1676,7 +1707,7 @@
      <row>
       <entry><filename>root.crt</filename></entry>
       <entry>autorités de confiance pour les certificats</entry>
-      <entry>réclame le certificat du client&nbsp;; vérifie que le certificat
+      <entry>checks that le certificat du client&nbsp;; vérifie que le certificat
       du client est signé par une autorité de confiance</entry>
      </row>
 
@@ -1689,6 +1720,7 @@
     </tbody>
    </tgroup>
   </table>
+  </sect2>
 
   <sect2 id="ssl-certificate-creation">
    <title>Créer un certificat auto-signé</title>
@@ -1714,10 +1746,16 @@
     Maintenant, lancez&nbsp;:
 <programlisting>
 openssl req -x509 -in server.req -text -key server.key -out server.crt
+</programlisting>
+    pour transormer le certificat en un certificat auto-signé et pour copier
+    la clé et le certificat là où le serveur les cherchera. 
+    Finally do:
+<programlisting>
 chmod og-rwx server.key
 </programlisting>
-    pour transormer le certificat en un certificat auto-signé et pour copier
-    la clé et le certificat là où le serveur les cherchera. Pour plus de
+    because the server will reject the file if its permissions are more
+    liberal than this.
+    Pour plus de
     détails sur la façon de créer la clé privée et le certificat de votre
     serveur, référez-vous à la documentation
     d'<productname>OpenSSL</productname>.
@@ -1728,7 +1766,9 @@
     certificat signé par une autorité (<acronym>CA</acronym>) (un des
     <acronym>CAs</acronym> global ou un local) devra être utilisé lorsque
     le serveur sera en production pour que le client puisse vérifier
-    l'identité du serveur.
+    l'identité du serveur. If all the clients
+    are local to the organization, using a local <acronym>CA</> is
+    recommended.
    </para>
 
   </sect2>
@@ -1756,23 +1796,64 @@
    <command>ssh</command> en tant qu'un utilisateur quelconque. Ensuite, vous
    pouvez établir un tunnel sécurisé avec une commande comme ceci sur la machine
    cliente&nbsp;:
-<programlisting>ssh -L 3333:foo.com:5432 joe at foo.com</programlisting>
-   Le premier numéro de l'argument <option>-l</option>, 3333, est le numéro de
-port de votre bout du tunnel&nbsp;; il peut être choisi librement. Le second
-numéro, 5432, est le bout distant du tunnel&nbsp;: le numéro de port que votre
-serveur utilise. Le nom ou l'adresse entre les numéros de port est l'hôte
-disposant du serveur de bases de données auquel vous souhaitez vous connecter.
-Pour cela, vous vous connectez au port 3333 de votre machine locale&nbsp;:
-<programlisting>psql -h localhost -p 3333 postgres</programlisting>
+<programlisting>ssh -L 63333:localhost:5432 joe at foo.com</programlisting>
+   Le premier numéro de l'argument <option>-l</option>, 63333, est le numéro de
+   port de votre bout du tunnel&nbsp;; il peut être choisi librement.
+   (IANA reserves ports 49152 through 65535 for private use.)  Le second
+   numéro, 5432, est le bout distant du tunnel&nbsp;: le numéro de port que votre
+   serveur utilise. Le nom ou l'adresse entre les numéros de port est l'hôte
+   disposant du serveur de bases de données auquel vous souhaitez vous connecter,
+   as seen from the host you are logging in to, which
+   is <literal>foo.com</literal> in this example.In order to connect
+   to the database server using this tunnel, you connect to port 63333
+   on the local machine:
+<programlisting>psql -h localhost -p 63333 postgres</programlisting>
    Sur le serveur de bases de données, il semblera que vous êtes réellement
-   l'utilisateur <literal>joe at foo.com</literal> et il utilisera la procédure
-   d'authentification adéquate pour cet utilisateur. Pour que la configuration
-   du serveur réussisse, vous devez être autorisé à vous connecter via
-   <command>ssh</command> en tant que <literal>joe at foo.com</literal>, comme si
-   vous essayez d'utiliser <command>ssh</command> pour configurer une session
-   terminal.
+   l'utilisateur <literal>joe</literal> on host <literal>foo.com</literal>
+   connecting to <literal>localhost</literal> in that context, and it
+   will use whatever authentication procedure was configured for
+   connections from this user and host.  Note that the server will not
+   think the connection is SSL-encrypted, since in fact it is not
+   encrypted between the
+   <application>SSH</application> server and the
+   <productname>PostgreSQL</productname> server.  This should not pose any
+   extra security risk as long as they are on the same machine.
   </para>
 
+  <para>
+   In order for the
+   tunnel setup to succeed you must be allowed to connect via
+   <command>ssh</command> as <literal>joe at foo.com</literal>, just
+   as if you had attempted to use <command>ssh</command> to set up a
+   terminal session.
+  </para>
+
+  <para>
+   You could also have set up the port forwarding as
+<programlisting>
+ssh -L 63333:foo.com:5432 joe at foo.com
+</programlisting>
+   but then the database server will see the connection as coming in
+   on its <literal>foo.com</literal> interface, which is not opened by
+   the default setting <literal>listen_addresses =
+   'localhost'</literal>.  This is usually not what you want.
+  </para>
+
+  <para>
+   If you have to <quote>hop</quote> to the database server via some
+   login host, one possible setup could look like this:
+<programlisting>
+ssh -L 63333:db.foo.com:5432 joe at shell.foo.com
+</programlisting>
+   Note that this way the connection
+   from <literal>shell.foo.com</literal>
+   to <literal>db.foo.com</literal> will not be encrypted by the SSH
+   tunnel.
+   SSH offers quite a few configuration possibilities when the network
+   is restricted in various ways.  Please refer to the SSH
+   documentation for details.
+  </para>
+
   <tip>
    <para>
     Plusieurs autres applications existantes peuvent fournir des tunnels

Modified: traduc/trunk/postgresql/spi.xml
===================================================================
--- traduc/trunk/postgresql/spi.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/spi.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -529,6 +529,16 @@
       </para>
      </listitem>
     </varlistentry>
+
+    <varlistentry>
+     <term><symbol>SPI_OK_REWRITTEN</symbol></term>
+     <listitem>
+      <para>
+       if the command was rewritten into another kind of command (e.g.,
+       <command>UPDATE</command> became an <command>INSERT</command>) by a <link linkend="rules">rule</link>.
+      </para>
+     </listitem>
+    </varlistentry>
    </variablelist>
   </para>
 
@@ -676,6 +686,150 @@
 
 <!-- *********************************************** -->
 
+<refentry id="spi-spi-execute-with-args">
+ <refmeta>
+  <refentrytitle>SPI_execute_with_args</refentrytitle>
+ </refmeta>
+
+ <refnamediv>
+  <refname>SPI_execute_with_args</refname>
+  <refpurpose>execute a command with out-of-line parameters</refpurpose>
+ </refnamediv>
+
+ <indexterm><primary>SPI_execute_with_args</primary></indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+int SPI_execute_with_args(const char *<parameter>command</parameter>,
+                          int <parameter>nargs</parameter>, Oid *<parameter>argtypes</parameter>,
+                          Datum *<parameter>values</parameter>, const char *<parameter>nulls</parameter>,
+                          bool <parameter>read_only</parameter>, long <parameter>count</parameter>)
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+  <title>Description</title>
+
+  <para>
+   <function>SPI_execute_with_args</function> executes a command that might
+   include references to externally supplied parameters.  The command text
+   refers to a parameter as <literal>$<replaceable>n</></literal>, and
+   the call specifies data types and values for each such symbol.
+   <parameter>read_only</parameter> and <parameter>count</parameter> have
+   the same interpretation as in <function>SPI_execute</function>.
+  </para>
+
+  <para>
+   The main advantage of this routine compared to
+   <function>SPI_execute</function> is that data values can be inserted
+   into the command without tedious quoting/escaping, and thus with much
+   less risk of SQL-injection attacks.
+  </para>
+
+  <para>
+   Similar results can be achieved with <function>SPI_prepare</> followed by
+   <function>SPI_execute_plan</function>; however, when using this function
+   the query plan is customized to the specific parameter values provided.
+   For one-time query execution, this function should be preferred.
+   If the same command is to be executed with many different parameters,
+   either method might be faster, depending on the cost of re-planning
+   versus the benefit of custom plans.
+  </para>
+ </refsect1>
+
+ <refsect1>
+  <title>Arguments</title>
+
+  <variablelist>
+   <varlistentry>
+    <term><literal>const char * <parameter>command</parameter></literal></term>
+    <listitem>
+     <para>
+      command string
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>int <parameter>nargs</parameter></literal></term>
+    <listitem>
+     <para>
+      number of input parameters (<literal>$1</>, <literal>$2</>, etc.)
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>Oid * <parameter>argtypes</parameter></literal></term>
+    <listitem>
+     <para>
+      an array containing the <acronym>OID</acronym>s of
+      the data types of the parameters
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>Datum * <parameter>values</parameter></literal></term>
+    <listitem>
+     <para>
+      an array of actual parameter values
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>const char * <parameter>nulls</parameter></literal></term>
+    <listitem>
+     <para>
+      an array describing which parameters are null
+     </para>
+
+     <para>
+      If <parameter>nulls</parameter> is <symbol>NULL</symbol> then
+      <function>SPI_execute_with_args</function> assumes that no parameters are
+      null.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>bool <parameter>read_only</parameter></literal></term>
+    <listitem>
+     <para>
+      <literal>true</> for read-only execution
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>long <parameter>count</parameter></literal></term>
+    <listitem>
+     <para>
+      maximum number of rows to process or return
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
+ </refsect1>
+
+ <refsect1>
+  <title>Return Value</title>
+
+  <para>
+   The return value is the same as for <function>SPI_execute</function>.
+  </para>
+
+  <para>
+   <varname>SPI_processed</varname> and
+   <varname>SPI_tuptable</varname> are set as in
+   <function>SPI_execute</function> if successful.
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- *********************************************** -->
+
 <refentry id="spi-spi-prepare">
  <refmeta>
   <refentrytitle>SPI_prepare</refentrytitle>
@@ -1440,6 +1594,152 @@
 
 <!-- *********************************************** -->
 
+<refentry id="spi-spi-cursor-open-with-args">
+ <refmeta>
+  <refentrytitle>SPI_cursor_open_with_args</refentrytitle>
+ </refmeta>
+
+ <refnamediv>
+  <refname>SPI_cursor_open_with_args</refname>
+  <refpurpose>set up a cursor using a query and parameters</refpurpose>
+ </refnamediv>
+
+ <indexterm><primary>SPI_cursor_open_with_args</primary></indexterm>
+
+ <refsynopsisdiv>
+<synopsis>
+Portal SPI_cursor_open_with_args(const char *<parameter>name</parameter>,
+                                 const char *<parameter>command</parameter>,
+                                 int <parameter>nargs</parameter>, Oid *<parameter>argtypes</parameter>,
+                                 Datum *<parameter>values</parameter>, const char *<parameter>nulls</parameter>,
+                                 bool <parameter>read_only</parameter>, int <parameter>cursorOptions</parameter>)
+</synopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+  <title>Description</title>
+
+  <para>
+   <function>SPI_cursor_open_with_args</function> sets up a cursor
+   (internally, a portal) that will execute the specified query.
+   Most of the parameters have the same meanings as the corresponding
+   parameters to <function>SPI_prepare_cursor</function>
+   and <function>SPI_cursor_open</function>.
+  </para>
+
+  <para>
+   For one-time query execution, this function should be preferred
+   over <function>SPI_prepare_cursor</function> followed by
+   <function>SPI_cursor_open</function>.
+   If the same command is to be executed with many different parameters,
+   either method might be faster, depending on the cost of re-planning
+   versus the benefit of custom plans.
+  </para>
+
+  <para>
+   The passed-in data will be copied into the cursor's portal, so it
+   can be freed while the cursor still exists.
+  </para>
+ </refsect1>
+
+ <refsect1>
+  <title>Arguments</title>
+
+  <variablelist>
+   <varlistentry>
+    <term><literal>const char * <parameter>name</parameter></literal></term>
+    <listitem>
+     <para>
+      name for portal, or <symbol>NULL</symbol> to let the system
+      select a name
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>const char * <parameter>command</parameter></literal></term>
+    <listitem>
+     <para>
+      command string
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>int <parameter>nargs</parameter></literal></term>
+    <listitem>
+     <para>
+      number of input parameters (<literal>$1</>, <literal>$2</>, etc.)
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>Oid * <parameter>argtypes</parameter></literal></term>
+    <listitem>
+     <para>
+      an array containing the <acronym>OID</acronym>s of
+      the data types of the parameters
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>Datum * <parameter>values</parameter></literal></term>
+    <listitem>
+     <para>
+      an array of actual parameter values
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>const char * <parameter>nulls</parameter></literal></term>
+    <listitem>
+     <para>
+      an array describing which parameters are null
+     </para>
+
+     <para>
+      If <parameter>nulls</parameter> is <symbol>NULL</symbol> then
+      <function>SPI_cursor_open_with_args</function> assumes that no
+      parameters are null.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>bool <parameter>read_only</parameter></literal></term>
+    <listitem>
+     <para>
+      <literal>true</> for read-only execution
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term><literal>int <parameter>cursorOptions</parameter></literal></term>
+    <listitem>
+     <para>
+      integer bitmask of cursor options; zero produces default behavior
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
+ </refsect1>
+
+ <refsect1>
+  <title>Return Value</title>
+
+  <para>
+   Pointer to portal containing the cursor.  Note there is no error
+   return convention; any error will be reported via <function>elog</>.
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- *********************************************** -->
+
 <refentry id="spi-spi-cursor-find">
  <refmeta>
   <refentrytitle>SPI_cursor_find</refentrytitle>
@@ -3267,8 +3567,11 @@
    <filename>contrib/spi</filename>.
   </para>
 
-<programlisting>#include "executor/spi.h"
+<programlisting>#include "postgres.h"
 
+#include "executor/spi.h"
+#include "utils/builtins.h"
+
 #ifdef PG_MODULE_MAGIC
 PG_MODULE_MAGIC;
 #endif
@@ -3283,8 +3586,7 @@
     int proc;
 
     /* Convertir l'objet texte donné en chaîne C */
-    command = DatumGetCString(DirectFunctionCall1(textout,
-                                                  PointerGetDatum(sql)));
+    command = text_to_cstring(sql);
 
     SPI_connect();
     

Modified: traduc/trunk/postgresql/syntax.xml
===================================================================
--- traduc/trunk/postgresql/syntax.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/syntax.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -186,6 +186,57 @@
    </para>
 
    <para>
+    <indexterm><primary>Unicode escape</primary><secondary>in
+    identifiers</secondary></indexterm> A variant of quoted
+    identifiers allows including escaped Unicode characters identified
+    by their code points.  This variant starts
+    with <literal>U&amp;</literal> (upper or lower case U followed by
+    ampersand) immediately before the opening double quote, without
+    any spaces in between, for example <literal>U&amp;"foo"</literal>.
+    (Note that this creates an ambiguity with the
+    operator <literal>&amp;</literal>.  Use spaces around the operator to
+    avoid this problem.)  Inside the quotes, Unicode characters can be
+    specified in escaped form by writing a backslash followed by the
+    four-digit hexadecimal code point number or alternatively a
+    backslash followed by a plus sign followed by a six-digit
+    hexadecimal code point number.  For example, the
+    identifier <literal>"data"</literal> could be written as
+<programlisting>
+U&amp;"d\0061t\+000061"
+</programlisting>
+    The following less trivial example writes the Russian
+    word <quote>slon</quote> (elephant) in Cyrillic letters:
+<programlisting>
+U&amp;"\0441\043B\043E\043D"
+</programlisting>
+   </para>
+
+   <para>
+    If a different escape character than backslash is desired, it can
+    be specified using
+    the <literal>UESCAPE</literal><indexterm><primary>UESCAPE</primary></indexterm>
+    clause after the string, for example:
+<programlisting>
+U&amp;"d!0061t!+000061" UESCAPE '!'
+</programlisting>
+    The escape character can be any single character other than a
+    hexadecimal digit, the plus sign, a single quote, a double quote,
+    or a whitespace character.  Note that the escape character is
+    written in single quotes, not double quotes.
+   </para>
+
+   <para>
+    To include the escape character in the identifier literally, write
+    it twice.
+   </para>
+
+   <para>
+    The Unicode escape syntax works only when the server encoding is
+    UTF8.  When other server encodings are used, only code points in
+    the ASCII range (up to <literal>\007F</literal>) can be specified.
+   </para>
+
+   <para>
     Mettre un identifieur entre guillemets le rend sensible à la casse
     alors que les noms sans guillemets sont toujours convertis en minuscules. Par
     exemple, les identifieurs <literal>FOO</literal>, <literal>foo</literal> et
@@ -257,14 +308,19 @@
      spécifié par le standard <acronym>SQL</acronym>&nbsp;;
      <productname>PostgreSQL</productname> suit le standard).
     </para>
+   </sect3>
 
-    <para>
-     <indexterm>
-      <primary>syntaxe de chaîne d'échappement</primary>
+   <sect3 id="sql-syntax-strings-escape">
+    <title>String Constants with C-Style Escapes</title>
+
+     <indexterm zone="sql-syntax-strings-escape">
+      <primary>escape string syntax</primary>
      </indexterm>
-     <indexterm>
-      <primary>échappement antislash</primary>
+     <indexterm zone="sql-syntax-strings-escape">
+      <primary>backslash escapes</primary>
      </indexterm>
+
+    <para>
      <productname>PostgreSQL</productname> accepte aussi les constantes de
      chaîne d'<quote>échappement</quote> qui sont une extension au standard SQL.
      Une constante de type chaîne d'échappement est indiquée en écrivant la
@@ -276,26 +332,79 @@
      (<literal>\</literal>) comme une séquence type C
      d'<firstterm>échappement d'antislash</firstterm> avec laquelle la combinaison
      d'antislash et du (ou des) caractère(s) suivant représente une valeur
-     spéciale.
-     <literal>\b</literal> est un antislash,
-     <literal>\f</literal> est un <quote>form feed</quote>,
-     <literal>\n</literal> est un retour à la ligne,
-     <literal>\r</literal> est un retour chariot,
-     <literal>\t</literal> est une tabulation.
-     Sont aussi supportés
-     <literal>\<replaceable>chiffres</replaceable></literal>, où
-     <replaceable>chiffres</replaceable> représente la valeur octale d'un
-     octet et <literal>\x<replaceable>chiffreshexa</replaceable></literal>, où
-     <replaceable>chiffreshexa</replaceable> représentela valeur hexadécimale
-     d'un octet. (C'est de votre responsabilité de vous assurer que les
-     séquences d'octets créées sont des caractères valides dans le codage du jeu
-     de caractères du serveur.) Tout autre caractère suivi d'un antislash est
+     spéciale, as shown in <xref linkend="sql-backslash-table">.
+    </para>
+
+     <table id="sql-backslash-table">
+      <title>Backslash Escape Sequences</title>
+      <tgroup cols="2">
+      <thead>
+       <row>
+        <entry>Backslash Escape Sequence</>
+        <entry>Interpretation</entry>
+       </row>
+      </thead>
+
+      <tbody>
+       <row>
+        <entry><literal>\b</literal></entry>
+        <entry>backspace</entry>
+       </row>
+       <row>
+        <entry><literal>\f</literal></entry>
+        <entry>form feed</entry>
+       </row>
+       <row>
+        <entry><literal>\n</literal></entry>
+        <entry>newline</entry>
+       </row>
+       <row>
+        <entry><literal>\r</literal></entry>
+        <entry>carriage return</entry>
+       </row>
+       <row>
+        <entry><literal>\t</literal></entry>
+        <entry>tab</entry>
+       </row>
+       <row>
+        <entry>
+         <literal>\<replaceable>o</replaceable></literal>,
+         <literal>\<replaceable>oo</replaceable></literal>,
+         <literal>\<replaceable>ooo</replaceable></literal>
+         (<replaceable>o</replaceable> = 0 - 7)
+        </entry>
+        <entry>octal byte value</entry>
+       </row>
+       <row>
+        <entry>
+         <literal>\x<replaceable>h</replaceable></literal>,
+         <literal>\x<replaceable>hh</replaceable></literal>
+         (<replaceable>h</replaceable> = 0 - 9, A - F)
+        </entry>
+        <entry>hexadecimal byte value</entry>
+       </row>
+      </tbody>
+      </tgroup>
+     </table>
+
+    <para>
+     Tout autre caractère suivi d'un antislash est
      pris littéralement. Du coup, pour inclure un caractère antislash, écrivez
      deux antislashs (<literal>\\</literal>). De plus, un guillemet simple
      peut être inclus dans une chaîne d'échappement en écrivant
      <literal>\'</literal>, en plus de la façon normale <literal>''</literal>.
     </para>
 
+    <para>
+     It is your responsibility that the byte sequences you create are
+     valid characters in the server character set encoding.  When the
+     server encoding is UTF-8, then the alternative Unicode escape
+     syntax, explained in <xref linkend="sql-syntax-strings-uescape">,
+     should be used instead.  (The alternative would be doing the
+     UTF-8 encoding by hand and writing out the bytes, which would be
+     very cumbersome.)
+    </para>
+
     <caution>
     <para>
      Si le paramètre de configuration
@@ -330,6 +439,65 @@
     </para>
    </sect3>
 
+   <sect3 id="sql-syntax-strings-uescape">
+    <title>String Constants with Unicode Escapes</title>
+
+    <indexterm  zone="sql-syntax-strings-uescape">
+     <primary>Unicode escape</primary>
+     <secondary>in string constants</secondary>
+    </indexterm>
+
+    <para>
+     <productname>PostgreSQL</productname> also supports another type
+     of escape syntax for strings that allows specifying arbitrary
+     Unicode characters by code point.  A Unicode escape string
+     constant starts with <literal>U&amp;</literal> (upper or lower case
+     letter U followed by ampersand) immediately before the opening
+     quote, without any spaces in between, for
+     example <literal>U&amp;'foo'</literal>.  (Note that this creates an
+     ambiguity with the operator <literal>&amp;</literal>.  Use spaces
+     around the operator to avoid this problem.)  Inside the quotes,
+     Unicode characters can be specified in escaped form by writing a
+     backslash followed by the four-digit hexadecimal code point
+     number or alternatively a backslash followed by a plus sign
+     followed by a six-digit hexadecimal code point number.  For
+     example, the string <literal>'data'</literal> could be written as
+<programlisting>
+U&amp;'d\0061t\+000061'
+</programlisting>
+     The following less trivial example writes the Russian
+     word <quote>slon</quote> (elephant) in Cyrillic letters:
+<programlisting>
+U&amp;'\0441\043B\043E\043D'
+</programlisting>
+    </para>
+
+    <para>
+     If a different escape character than backslash is desired, it can
+     be specified using
+     the <literal>UESCAPE</literal><indexterm><primary>UESCAPE</primary></indexterm>
+     clause after the string, for example:
+<programlisting>
+U&amp;'d!0061t!+000061' UESCAPE '!'
+</programlisting>
+     The escape character can be any single character other than a
+     hexadecimal digit, the plus sign, a single quote, a double quote,
+     or a whitespace character.
+    </para>
+
+    <para>
+     The Unicode escape syntax works only when the server encoding is
+     UTF8.  When other server encodings are used, only code points in
+     the ASCII range (up to <literal>\007F</literal>) can be
+     specified.
+    </para>
+
+    <para>
+     To include the escape character in the string literally, write it
+     twice.
+    </para>
+   </sect3>
+
    <sect3 id="sql-syntax-dollar-quoting">
      <title>Constantes de chaînes avec guillemet dollar</title>
 
@@ -1024,6 +1192,12 @@
 
     <listitem>
      <para>
+      A window function call.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
       Une conversion de type.
      </para>
     </listitem>
@@ -1192,7 +1366,18 @@
 (fonctionligne(a,b)).col3</programlisting>
 
     Donc, une référence de colonne qualifiée est réellement un cas spécial de 
-    syntaxe de sélection de champ.
+    syntaxe de sélection de champ. An important special case is
+    extracting a field from a table column that is of a composite type:
+
+<programlisting>
+(compositecol).somefield
+(mytable.compositecol).somefield
+</programlisting>
+
+    The parentheses are required here to show that
+    <structfield>compositecol</> is a column name not a table name,
+    or that <structname>mytable</> is a table name not a schema name
+    in the second case.
    </para>
   </sect2>
 
@@ -1239,7 +1424,7 @@
     non du nom du schéma) suivi par sa liste d'arguments entre
     parenthèses&nbsp;:
 
-<synopsis><replaceable>fonction</replaceable>(<optional><replaceable>expression</replaceable> <optional>,<replaceable>expression</replaceable> ...</optional></optional> )</synopsis>
+<synopsis><replaceable>nom_fonction</replaceable>(<optional><replaceable>expression</replaceable> <optional>,<replaceable>expression</replaceable> ...</optional></optional> )</synopsis>
    </para>
 
    <para>
@@ -1270,14 +1455,14 @@
     expression d'agrégat est une des suivantes&nbsp;:
 
 <synopsis><replaceable>nom_agregat</replaceable> (<replaceable>expression</replaceable> [ , ... ] )
-<replaceable>nom_agregat</replaceable> (ALL <replaceable>expression</replaceable>)
-<replaceable>nom_agregat</replaceable> (DISTINCT <replaceable>expression</replaceable> [ , ... ] )
+<replaceable>nom_agregat</replaceable> (ALL <replaceable>expression</replaceable> [ , ... ] )
+<replaceable>nom_agregat</replaceable> (DISTINCT <replaceable>expression</replaceable>)
 <replaceable>nom_agregat</replaceable> ( * )</synopsis>
 
     où <replaceable>nom_agregat</replaceable> est un agrégat précédemment
     défini (parfois qualifié d'un nom de schéma) et 
     <replaceable>expression</replaceable> est toute expression de valeur qui ne
-    contient pas lui-même une expression d'agrégat.
+    contient pas lui-même une expression d'agrégat or a window function call.
    </para>
 
    <para>
@@ -1339,6 +1524,119 @@
    </note>
   </sect2>
 
+  <sect2 id="syntax-window-functions">
+   <title>Window Function Calls</title>
+
+   <indexterm zone="syntax-window-functions">
+    <primary>window function</primary>
+    <secondary>invocation</secondary>
+   </indexterm>
+
+   <indexterm zone="syntax-window-functions">
+    <primary>OVER clause</primary>
+   </indexterm>
+
+   <para>
+    A <firstterm>window function call</firstterm> represents the application
+    of an aggregate-like function over some portion of the rows selected
+    by a query.  Unlike regular aggregate function calls, this is not tied
+    to grouping of the selected rows into a single output row &mdash; each
+    row remains separate in the query output.  However the window function
+    is able to scan all the rows that would be part of the current row's
+    group according to the grouping specification (<literal>PARTITION BY</>
+    list) of the window function call.
+    The syntax of a window function call is one of the following:
+
+<synopsis>
+<replaceable>function_name</replaceable> (<optional><replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> ... </optional></optional>) OVER ( <replaceable class="parameter">window_definition</replaceable> )
+<replaceable>function_name</replaceable> (<optional><replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> ... </optional></optional>) OVER <replaceable>window_name</replaceable>
+<replaceable>function_name</replaceable> ( * ) OVER ( <replaceable class="parameter">window_definition</replaceable> )
+<replaceable>function_name</replaceable> ( * ) OVER <replaceable>window_name</replaceable>
+</synopsis>
+    where <replaceable class="parameter">window_definition</replaceable>
+    has the syntax
+<synopsis>
+[ <replaceable class="parameter">existing_window_name</replaceable> ]
+[ PARTITION BY <replaceable class="parameter">expression</replaceable> [, ...] ]
+[ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | USING <replaceable class="parameter">operator</replaceable> ] [ NULLS { FIRST | LAST } ] [, ...] ]
+[ <replaceable class="parameter">frame_clause</replaceable> ]
+</synopsis>
+    and the optional <replaceable class="parameter">frame_clause</replaceable>
+    can be one of
+<synopsis>
+RANGE UNBOUNDED PRECEDING
+RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+ROWS UNBOUNDED PRECEDING
+ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+</synopsis>
+
+    Here, <replaceable>expression</replaceable> represents any value
+    expression that does not itself contain window function calls.
+    The <literal>PARTITION BY</> and <literal>ORDER BY</> lists have
+    essentially the same syntax and semantics as <literal>GROUP BY</>
+    and <literal>ORDER BY</> clauses of the whole query.
+    <replaceable>window_name</replaceable> is a reference to a named window
+    specification defined in the query's <literal>WINDOW</literal> clause.
+    Named window specifications are usually referenced with just
+    <literal>OVER</> <replaceable>window_name</replaceable>, but it is
+    also possible to write a window name inside the parentheses and then
+    optionally supply an ordering clause and/or frame clause (the referenced
+    window must lack these clauses, if they are supplied here).
+    This latter syntax follows the same rules as modifying an existing
+    window name within the <literal>WINDOW</literal> clause; see the
+    <xref linkend="sql-select" endterm="sql-select-title"> reference
+    page for details.
+   </para>
+
+   <para>
+    The <replaceable class="parameter">frame_clause</replaceable> specifies
+    the set of rows constituting the <firstterm>window frame</>, for those
+    window functions that act on the frame instead of the whole partition.
+    The default framing option is <literal>RANGE UNBOUNDED PRECEDING</>,
+    which is the same as <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND
+    CURRENT ROW</>; it selects rows up through the current row's last
+    peer in the <literal>ORDER BY</> ordering (which means all rows if
+    there is no <literal>ORDER BY</>).  The options
+    <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</> and
+    <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</>
+    are also equivalent: they always select all rows in the partition.
+    Lastly, <literal>ROWS UNBOUNDED PRECEDING</> or its verbose equivalent
+    <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW</> select
+    all rows up through the current row (regardless of duplicates).
+    Beware that this option can produce implementation-dependent results
+    if the <literal>ORDER BY</> ordering does not order the rows uniquely.
+   </para>
+
+   <para>
+    The built-in window functions are described in <xref
+    linkend="functions-window-table">.  Other window functions can be added by
+    the user.  Also, any built-in or user-defined aggregate function can be
+    used as a window function.
+   </para>
+
+   <para>
+    The syntaxes using <literal>*</> are used for calling parameter-less
+    aggregate functions as window functions, for example
+    <literal>count(*) OVER (PARTITION BY x ORDER BY y)</>.
+    <literal>*</> is customarily not used for non-aggregate window functions.
+    Aggregate window functions, unlike normal aggregate functions, do not
+    allow <literal>DISTINCT</> to be used within the function argument list.
+   </para>
+
+   <para>
+    Window function calls are permitted only in the <literal>SELECT</literal>
+    list and the <literal>ORDER BY</> clause of the query.
+   </para>
+
+   <para>
+    More information about window functions can be found in
+    <xref linkend="tutorial-window"> and
+    <xref linkend="queries-window">.
+   </para>
+  </sect2>
+
   <sect2 id="sql-syntax-type-casts">
    <title>Conversions de type</title>
 
@@ -1463,7 +1761,7 @@
     Un constructeur de tableau est une expression qui construit une valeur de
     tableau à partir de valeurs de ses membres. Un constructeur de tableau
     simple utilise le mot clé <literal>ARRAY</literal>, un crochet ouvrant
-    <literal>[</literal>, une ou plusieurs expressions (séparées par des virgules)
+    <literal>[</literal>, une liste d'expressions (séparées par des virgules)
     pour les valeurs des éléments du tableau et finalement un crochet fermant
     <literal>]</literal>. Par exemple&nbsp;:
 <programlisting>SELECT ARRAY[1,2,3+4];
@@ -1471,10 +1769,22 @@
 ---------
  {1,2,7}
 (1 row)</programlisting>
-    Le type d'élément du tableau est le type commun des expressions des membres,
+    Par défaut, le type d'élément du tableau est le type commun des expressions des membres,
     déterminé en utilisant les mêmes règles que pour les constructions
     <literal>UNION</literal> ou <literal>CASE</literal> (voir la <xref
-    linkend="typeconv-union-case"/>). 
+    linkend="typeconv-union-case"/>).
+    You can override this by explicitly casting the array constructor to the
+    desired type, for example:
+<programlisting>
+SELECT ARRAY[1,2,22.7]::integer[];
+  array
+----------
+ {1,2,23}
+(1 row)
+</programlisting>
+    This has the same effect as casting each expression to the array
+    element type individually.
+    For more on casting, see <xref linkend="sql-syntax-type-casts">.
    </para>
 
    <para>
@@ -1498,6 +1808,8 @@
     Comme les tableaux multidimensionnels doivent être rectangulaires, les
     constructeurs internes du même niveau doivent produire des
     sous-tableaux de dimensions identiques.
+    Any cast applied to the outer <literal>ARRAY</> constructor propagates
+    automatically to all the inner constructors.
   </para>
 
   <para>
@@ -1512,6 +1824,19 @@
                      array
 ------------------------------------------------
  {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}
+(1 row)
+</programlisting>
+  </para>
+
+  <para>
+   You can construct an empty array, but since it's impossible to have an
+   array with no type, you must explicitly cast your empty array to the
+   desired type.  For example:
+<programlisting>
+SELECT ARRAY[]::integer[];
+ array
+-------
+ {}
 (1 row)</programlisting>
   </para>
 

Modified: traduc/trunk/postgresql/trigger.xml
===================================================================
--- traduc/trunk/postgresql/trigger.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/trigger.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -39,7 +39,8 @@
     exécuté. Les fonctions déclencheur peuvent être définies pour s'exécuter
     avant ou après une commande <command>INSERT</command>,
     <command>UPDATE</command> ou <command>DELETE</command>, soit une fois par
-    ligne modifiée, soit une fois par expression <acronym>SQL</acronym>. Si un
+    ligne modifiée, soit une fois par expression <acronym>SQL</acronym>. Triggers can also fire
+    for <command>TRUNCATE</command> statements. Si un
     événement déclencheur se produit, le gestionnaire de déclencheurs est appelé
     au bon moment pour gérer l'événement.
     </para>
@@ -73,6 +74,8 @@
     applicable. Ces deux types sont quelque fois appelés respectivement des
     <firstterm>déclencheurs niveau ligne</firstterm> et des
     <firstterm>déclencheurs niveau instruction</firstterm>.
+    Triggers on <command>TRUNCATE</command> may only be
+    defined at statement-level.
    </para>
 
    <para>
@@ -411,6 +414,15 @@
 	   </para>
 	  </listitem>
 	 </varlistentry>
+
+         <varlistentry>
+          <term><literal>TRIGGER_FIRED_BY_TRUNCATE(tg_event)</literal></term>
+          <listitem>
+           <para>
+            Returns true if the trigger was fired by a <command>TRUNCATE</command> command.
+           </para>
+          </listitem>
+         </varlistentry>
 	</variablelist>
        </para>
       </listitem>
@@ -559,7 +571,7 @@
 
    <para>
     Voici le code source de la fonction trigger :
-<programlisting>#include "postgres.h"
+<programlisting><![CDATA[#include "postgres.h"
 #include "executor/spi.h"       /* nécessaire pour fonctionner avec SPI */
 #include "commands/trigger.h"   /* ... et les déclencheurs */
 
@@ -570,7 +582,7 @@
 Datum
 trigf(PG_FUNCTION_ARGS)
 {
-    TriggerData *trigdata = (TriggerData *) fcinfo-&gt;context;
+    TriggerData *trigdata = (TriggerData *) fcinfo->context;
     TupleDesc   tupdesc;
     HeapTuple   rettuple;
     char       *when;
@@ -583,38 +595,38 @@
         elog(ERROR, "trigf: not called by trigger manager");
 
     /* nuplet à retourner à l'exécuteur */
-    if (TRIGGER_FIRED_BY_UPDATE(trigdata-&gt;tg_event))
-        rettuple = trigdata-&gt;tg_newtuple;
+    if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
+        rettuple = trigdata->tg_newtuple;
     else
-        rettuple = trigdata-&gt;tg_trigtuple;
+        rettuple = trigdata->tg_trigtuple;
 
     /* vérification des valeurs NULL */
-    if (!TRIGGER_FIRED_BY_DELETE(trigdata-&gt;tg_event)
-        &amp;&amp; TRIGGER_FIRED_BEFORE(trigdata-&gt;tg_event))
+    if (!TRIGGER_FIRED_BY_DELETE(trigdata->tg_event)
+        && TRIGGER_FIRED_BEFORE(trigdata->tg_event))
         checkNULL = true;
 
-    if (TRIGGER_FIRED_BEFORE(trigdata-&gt;tg_event))
+    if (TRIGGER_FIRED_BEFORE(trigdata->tg_event))
         when = "before";
     else
         when = "after ";
 
-    tupdesc = trigdata-&gt;tg_relation-&gt;rd_att;
+    tupdesc = trigdata->tg_relation->rd_att;
 
     /* connexion au gestionnaire SPI */
-    if ((ret = SPI_connect()) &lt; 0)
-        elog(INFO, "trigf (fired %s): SPI_connect returned %d", when, ret);
+    if ((ret = SPI_connect()) < 0)
+        elog(ERROR, "trigf (fired %s): SPI_connect returned %d", when, ret);
 
     /* obtient le nombre de lignes dans la table */
     ret = SPI_exec("SELECT count(*) FROM ttest", 0);
 
-    if (ret &lt; 0)
-        elog(NOTICE, "trigf (fired %s): SPI_exec returned %d", when, ret);
+    if (ret < 0)
+        elog(ERROR, "trigf (fired %s): SPI_exec returned %d", when, ret);
 
     /* count(*) renvoie int8, prenez garde à bien convertir */
-    i = DatumGetInt64(SPI_getbinval(SPI_tuptable-&gt;vals[0],
-                                    SPI_tuptable-&gt;tupdesc,
+    i = DatumGetInt64(SPI_getbinval(SPI_tuptable->vals[0],
+                                    SPI_tuptable->tupdesc,
                                     1,
-                                    &amp;isNULL));
+                                    &isNULL));
 
     elog (INFO, "trigf (fired %s): there are %d rows in ttest", when, i);
 
@@ -622,18 +634,19 @@
 
     if (checkNULL)
     {
-        SPI_getbinval(rettuple, tupdesc, 1, &amp;isNULL);
+        SPI_getbinval(rettuple, tupdesc, 1, &isNULL);
         if (isNULL)
             rettuple = NULL;
     }
 
     return PointerGetDatum(rettuple);
 }
-</programlisting>
+]]></programlisting>
    </para>
 
    <para>
-    Après avoir compilé le code source, déclarez la fonction et les
+    Après avoir compilé le code source (see <xref
+    linkend="dfunc">), déclarez la fonction et les
     déclencheurs&nbsp;:
 <programlisting>CREATE FUNCTION trigf() RETURNS trigger
     AS '<replaceable>nomfichier</replaceable>'

Modified: traduc/trunk/postgresql/typeconv.xml
===================================================================
--- traduc/trunk/postgresql/typeconv.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/typeconv.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -171,21 +171,19 @@
 </indexterm>
 
 <para>
-Concernant les types <acronym>SQL</acronym> standards, une heuristique
-additionnelle est fournie dans l'analyseur pour permettre de meilleures
-estimations du comportement approprié. Il y a plusieurs 
-<firstterm>catégories de types</firstterm> basiques définies&nbsp;:
-<type>boolean</type>, <type>numeric</type>, <type>string</type>,
-<type>bitstring</type>, <type>datetime</type>, <type>timespan</type>,
-<type>geometric</type>, <type>network</type> et utilisateurs.  Chaque
-catégorie, à l'exception des types définis par l'utilisateur, a un ou plusieurs
-<firstterm>types pré-définis</firstterm> qui sont préférentiellement
-choisis quand il y a une ambiguïté.  Dans la catégorie des types
-utilisateurs, chaque type est son propre type préféré.  Les
-expressions ambiguës (celles avec de multiples solutions d'analyse
-candidates) peuvent souvent être résolues quand il y a de nombreux
-types pré-définis possibles mais elles soulèveront une erreur quand il
-existe des choix multiples pour des types utilisateurs.
+An additional heuristic is provided in the parser to allow better guesses
+at proper casting behavior among groups of types that have implicit casts.
+Data types are divided into several basic <firstterm>type
+categories</firstterm>, including <type>boolean</type>, <type>numeric</type>,
+<type>string</type>, <type>bitstring</type>, <type>datetime</type>,
+<type>timespan</type>, <type>geometric</type>, <type>network</type>, and
+user-defined.  (For a list see <xref linkend="catalog-typcategory-table">;
+but note it is also possible to create custom type categories.)  Within each
+category there can be one or more <firstterm>preferred types</firstterm>, which
+are preferentially selected when there is ambiguity.  With careful selection
+of preferred types and available implicit casts, it is possible to ensure that
+ambiguous expressions (those with multiple candidate parsing solutions) can be
+resolved in a useful way.
 </para>
 
 <para>
@@ -202,27 +200,6 @@
 
 <listitem>
 <para>
-Les types utilisateurs dont l'analyseur n'a pas
-à priori connaissance, devraient être
-<quote>plus hauts</quote> dans la hiérarchie des types. Dans les
-expressions de types mixtes, les types natifs doivent toujours être
-convertis en un type utilisateur (seulement si la conversion est
-nécessaire bien sûr).
-</para>
-</listitem>
-
-<listitem>
-<para>
-Les types utilisateurs ne sont pas liés.  Actuellement,
-<productname>PostgreSQL</productname> n'a pas d'informations
-disponibles sur les relations entre les types, autres que celles fournies 
-par les heuristiques codées en dur pour les types natifs et les relations
-implicites basées sur les fonctions et les conversions disponibles.
-</para>
-</listitem>
-
-<listitem>
-<para>
 Il n'y aura pas de surcharge depuis l'analyseur ou l'exécuteur si une
 requête n'a pas besoin d'une conversion implicite de types.  C'est-à-dire que
 si une requête est bien formulée et si les types sont déjà bien distinguables,
@@ -357,7 +334,7 @@
 Dans le cas contraire, échouer car le choix correct ne peut pas être
 déduit sans plus d'indices.  Se débarrasser maintenant des candidats qui
 n'acceptent pas la catégorie sélectionnée.  De plus, si des candidats
-acceptent un type préféré comme argument donné, se débarrasser des
+acceptent un type préféré de cette catégorie, se débarrasser des
 candidats qui acceptent, pour cet argument, les types qui ne sont pas
 préférés.
 </para>
@@ -536,6 +513,31 @@
 position dans le chemin de recherche.
 </para>
 </step>
+<step performance="optional">
+<para>
+If a function is declared with a <literal>VARIADIC</> array parameter, and
+the call does not use the <literal>VARIADIC</> keyword, then the function
+is treated as if the array parameter were replaced by one or more occurrences
+of its element type, as needed to match the call.  After such expansion the
+function might have effective argument types identical to some non-variadic
+function.  In that case the function appearing earlier in the search path is
+used, or if the two functions are in the same schema, the non-variadic one is
+preferred.
+</para>
+</step>
+<step performance="optional">
+<para>
+Functions that have default values for parameters are considered to match any
+call that omits zero or more of the defaultable parameter positions.  If more
+than one such function matches a call, the one appearing earliest in the
+search path is used.  If there are two or more such functions in the same
+schema with identical parameter types in the non-defaulted positions (which is
+possible if they have different sets of defaultable parameters), the system
+will not be able to determine which to prefer, and so an <quote>ambiguous
+function call</> error will result if no better match to the call can be
+found.
+</para>
+</step>
 </substeps>
 </step>
 
@@ -622,7 +624,7 @@
 Dans le cas contraire, échouer car le choix correct ne peut pas être
 déduit sans plus d'indices.  Se débarrasser maintenant des candidats qui
 n'acceptent pas la catégorie sélectionnée.  De plus, si des candidats
-acceptent un type préféré comme argument donné, se débarrasser des
+acceptent un type préféré dans cette catégorie, se débarrasser des
 candidats qui acceptent, pour cet argument, les types qui ne sont pas
 préférés.
 </para>
@@ -817,8 +819,8 @@
 l'opérateur est converti en <type>bpchar</type> (
 <quote>blank-padded char</quote>, le nom interne du type de données
 <type>character</type> (caractère)) pour correspondre au type de la
-colonne cible (comme les types <type>text</type> et
-<type>bpchar</type> ont une compatibilité binaire, cette conversion
+colonne cible (comme la conversion de <type>text</type> à
+<type>bpchar</type> est compatible binairement, cette conversion
 n'insère aucun appel réel à une fonction). Enfin, la fonction de
 taille <literal>bpchar(bpchar, integer)</literal> est trouvée dans le
 catalogue système et appliquée au résultat de l'opérateur et à la

Modified: traduc/trunk/postgresql/wal.xml
===================================================================
--- traduc/trunk/postgresql/wal.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/wal.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -153,6 +153,20 @@
    aussi connue sous le nom de REDO).
   </para>
 
+   <tip>
+    <para>
+     Because <acronym>WAL</acronym> restores database file
+     contents after a crash, journaled filesystems are not necessary for
+     reliable storage of the data files or WAL files.  In fact, journaling
+     overhead can reduce performance, especially if journaling
+     causes file system <emphasis>data</emphasis> to be flushed
+     to disk.  Fortunately, data flushing during journaling can
+     often be disabled with a filesystem mount option, e.g.
+     <literal>data=writeback</> on a Linux ext3 file system.
+     Journaled file systems do improve boot speed after a crash.
+    </para>
+   </tip>
+
    <para>
     Utiliser les journaux de transaction permet de réduire de façon
     significative le nombre d'écritures sur le disque puisque seul le journal
@@ -346,13 +360,14 @@
    point de contrôle.  Au moment du point de contrôle, toutes les
    pages de données non propres sont écrites sur le disque et une
    entrée spéciale, pour le point de contrôle, est écrite dans le
-   journal. En cas de défaillance, la procédure de récupération recherche le
+   journal. (The changes were previously flushed to the <acronym>WAL</acronym> files.)
+   En cas de défaillance, la procédure de récupération recherche le
    dernier enregistrement d'un point de vérification dans les traces
    (enregistrement connus sous le nom de <quote>redo log</quote>) à partir
    duquel il devra lancer l'opération
    REDO. Toute modification effectuée sur les fichiers de données avant ce point
-   est sûre d'avoir été enregistrée sur disque. Du coup, après qu'un point de
-   vérification est réalisé, tous les segments représentant des journaux de
+   est garantie d'avoir été enregistrée sur disque. Du coup, après un point de
+   vérification, tous les segments représentant des journaux de
    transaction précédant celui
    contenant le <quote>redo record</quote> ne sont plus nécessaires et peuvent
    être soit recyclés soit supprimés (quand l'archivage des journaux de
@@ -361,6 +376,14 @@
   </para>
 
   <para>
+   The checkpoint requirement of flushing all dirty data pages to disk
+   can cause a significant I/O load.  For this reason, checkpoint
+   activity is throttled so I/O begins at checkpoint start and completes
+   before the next checkpoint starts;  this minimizes performance
+   degradation during checkpoints.
+  </para>
+
+  <para>
    Le processus d'écriture en tâche de fond lance automatiquement un point de
    contrôle de temps en temps&nbsp;: tous les <xref
    linkend="guc-checkpoint-segments"/> journaux de transaction ou dès que <xref
@@ -550,8 +573,11 @@
   <para>
    Les journaux de transaction sont stockés dans le répertoire
    <filename>pg_xlog</filename> sous le répertoire de données, comme un ensemble
-   de fichiers, chacun d'une taille de 16&nbsp;Mo généralement. Chaque
-   fichier est divisé en pages de généralement 8&nbsp;Ko. Les en-têtes de
+   de fichiers, chacun d'une taille de 16&nbsp;Mo généralement (but the size can be changed
+   by altering the <option>--with-wal-segsize</> configure option when
+   building the server). Chaque
+   fichier est divisé en pages de généralement 8&nbsp;Ko (this size can be changed via the <option>--with-wal-blocksize</>
+   configure option). Les en-têtes de
    l'entrée du journal sont décrites dans
    <filename>access/xlog.h</filename>&nbsp;; le contenu de l'entrée dépend
    du type de l'événement qui est enregistré.  Les fichiers
@@ -595,7 +621,8 @@
    l'avant à partir de la position du journal indiquée dans l'entrée du
    point de contrôle. Parce que l'ensemble du contenu des pages de
    données est sauvegardé dans le journal à la première modification de
-   page après un point de contrôle, toutes les pages changées depuis
+   page après un point de contrôle (assuming
+   <xref linkend="guc-full-page-writes"> is not disabled), toutes les pages changées depuis
    le point de contrôle seront restaurées dans un état cohérent.
   </para>
 

Modified: traduc/trunk/postgresql/xfunc.xml
===================================================================
--- traduc/trunk/postgresql/xfunc.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/xfunc.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -97,10 +97,10 @@
    </para>
 
    <para>
-    <indexterm><primary>SETOF</primary><seealso>fonction</seealso></indexterm>
     Une fonction SQL peut être déclarée de façon à renvoyer un ensemble (set)
     en spécifiant le type renvoyé par la fonction comme <literal>SETOF
-    <replaceable>un_type</replaceable></literal>. Dans ce
+    <replaceable>un_type</replaceable></literal>, or equivalently by declaring it as
+    <literal>RETURNS TABLE(<replaceable>columns</>)</literal>. Dans ce
     cas, toutes les lignes de la dernière requête sont renvoyées. Des détails
     supplémentaires sont donnés plus loin dans ce chapitre.
    </para>
@@ -110,7 +110,9 @@
     de plusieurs instructions SQL séparées par des points-virgule. Un
     point-virgule après la dernière instruction est optionnel. Sauf si la
     fonction déclare renvoyer <type>void</type>, la dernière instruction doit
-    être un <command>SELECT</command>.
+    être un <command>SELECT</command>,
+    or an <command>INSERT</>, <command>UPDATE</>, or <command>DELETE</>
+    that has a <literal>RETURNING</> clause.
    </para>
 
    <para>
@@ -123,12 +125,11 @@
     placer de commandes <command>BEGIN</command>, <command>COMMIT</command>,
     <command>ROLLBACK</command> ou <command>SAVEPOINT</command> dans une fonction
     <acronym>SQL</acronym>). Néanmoins, la commande finale doit être un
-    <command>SELECT</command> qui renvoie ce qui a été spécifié comme type
+    <command>SELECT</command> or have a <literal>RETURNING</> clause
+    qui renvoie ce qui a été spécifié comme type
     de retour de la fonction. Autrement, si vous voulez définir une fonction
     SQL qui réalise des actions mais n'a pas de valeur utile à renvoyer,
-    vous pouvez la définir comme renvoyant <type>void</type>. Dans ce cas, le
-    corps de la fonction ne doit pas finir avec un
-    <command>SELECT</command>. Par exemple, cette fonction supprime les 
+    vous pouvez la définir comme renvoyant <type>void</type>. Par exemple, cette fonction supprime les 
     lignes avec des salaires négatifs depuis la table <literal>emp</literal>&nbsp;:
 
 <screen>CREATE FUNCTION nettoie_emp() RETURNS void AS '
@@ -251,6 +252,16 @@
 </programlisting>
 
      qui ajuste le solde et renvoie sa nouvelle valeur.
+     The same thing could be done in one command using <literal>RETURNING</>:
+
+<programlisting>
+CREATE FUNCTION tf1 (integer, numeric) RETURNS numeric AS $$
+    UPDATE bank
+        SET balance = balance - $2
+        WHERE accountno = $1
+    RETURNING balance;
+$$ LANGUAGE SQL;
+</programlisting>
     </para>
 
    </sect2>
@@ -405,7 +416,7 @@
     l'analyseur. Si vous essayez de le faire sans, vous obtiendrez quelque chose
     comme ceci&nbsp;:
     <screen>SELECT nouveau_emp().nom;
-ERROR:  syntax error at or near "." at character 17
+ERROR:  syntax error at or near "."
 LINE 1: SELECT nouveau_emp().nom;
                             ^
 </screen>
@@ -468,7 +479,7 @@
    </sect2>
 
    <sect2 id="xfunc-output-parameters">
-    <title>Fonctions avec des paramètres en sortie</title>
+    <title>Fonctions <acronym>SQL</> avec des paramètres en sortie</title>
 
    <indexterm>
     <primary>fonction</primary>
@@ -539,13 +550,132 @@
 
     <para>
      Les paramètres peuvent être marqués comme <literal>IN</literal> (par défaut),
-     <literal>OUT</literal> ou <literal>INOUT</literal>. Un paramètre <literal>INOUT</literal>
+     <literal>OUT</literal> ou <literal>INOUT</literal>, or <literal>VARIADIC</>.
+     Un paramètre <literal>INOUT</literal>
      sert à la fois de paramètre en entrée (il fait partie de la liste
      d'arguments en appel) et comme paramètre de sortie (il fait partie du
      type d'enregistrement résultat).
+     <literal>VARIADIC</> parameters are input parameters, but are treated
+     specially as described next.
     </para>
    </sect2>
 
+   <sect2 id="xfunc-sql-variadic-functions">
+    <title><acronym>SQL</> Functions with Variable Numbers of Arguments</title>
+
+    <indexterm>
+     <primary>function</primary>
+     <secondary>variadic</secondary>
+    </indexterm>
+
+    <indexterm>
+     <primary>variadic function</primary>
+    </indexterm>
+
+    <para>
+     <acronym>SQL</acronym> functions can be declared to accept
+     variable numbers of arguments, so long as all the <quote>optional</>
+     arguments are of the same data type.  The optional arguments will be
+     passed to the function as an array.  The function is declared by
+     marking the last parameter as <literal>VARIADIC</>; this parameter
+     must be declared as being of an array type.  For example:
+
+<screen>
+CREATE FUNCTION mleast(VARIADIC numeric[]) RETURNS numeric AS $$
+    SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i);
+$$ LANGUAGE SQL;
+
+SELECT mleast(10, -1, 5, 4.4);
+ mleast 
+--------
+     -1
+(1 row)
+</screen>
+
+     Effectively, all the actual arguments at or beyond the
+     <literal>VARIADIC</> position are gathered up into a one-dimensional
+     array, as if you had written
+
+<screen>
+SELECT mleast(ARRAY[10, -1, 5, 4.4]);    -- doesn't work
+</screen>
+
+     You can't actually write that, though &mdash; or at least, it will
+     not match this function definition.  A parameter marked
+     <literal>VARIADIC</> matches one or more occurrences of its element
+     type, not of its own type.
+    </para>
+
+    <para>
+     Sometimes it is useful to be able to pass an already-constructed array
+     to a variadic function; this is particularly handy when one variadic
+     function wants to pass on its array parameter to another one.  You can
+     do that by specifying <literal>VARIADIC</> in the call:
+
+<screen>
+SELECT mleast(VARIADIC ARRAY[10, -1, 5, 4.4]);
+</screen>
+
+     This prevents expansion of the function's variadic parameter into its
+     element type, thereby allowing the array argument value to match
+     normally.  <literal>VARIADIC</> can only be attached to the last
+     actual argument of a function call.
+    </para>
+   </sect2>
+
+   <sect2 id="xfunc-sql-parameter-defaults">
+    <title><acronym>SQL</> Functions with Default Values for Arguments</title>
+
+    <indexterm>
+     <primary>function</primary>
+     <secondary>default values for arguments</secondary>
+    </indexterm>
+
+    <para>
+     Functions can be declared with default values for some or all input
+     arguments.  The default values are inserted whenever the function is
+     called with insufficiently many actual arguments.  Since arguments
+     can only be omitted from the end of the actual argument list, all
+     parameters after a parameter with a default value have to have
+     default values as well.
+    </para>
+
+    <para>
+     For example:
+<screen>
+CREATE FUNCTION foo(a int, b int DEFAULT 2, c int DEFAULT 3)
+RETURNS int
+LANGUAGE SQL
+AS $$
+    SELECT $1 + $2 + $3;
+$$;
+
+SELECT foo(10, 20, 30);
+ foo 
+-----
+  60
+(1 row)
+
+SELECT foo(10, 20);
+ foo 
+-----
+  33
+(1 row)
+
+SELECT foo(10);
+ foo 
+-----
+  15
+(1 row)
+
+SELECT foo();  -- fails since there is no default for the first argument
+ERROR:  function foo() does not exist
+</screen>
+     The <literal>=</literal> sign can also be used in place of the
+     key word <literal>DEFAULT</literal>,
+    </para>
+   </sect2>
+
    <sect2 id="xfunc-sql-table-functions">
     <title>Fonctions <acronym>SQL</acronym> comme sources de table</title>
 
@@ -590,12 +720,17 @@
     </para>
    </sect2>
 
-   <sect2>
+   <sect2 id="xfunc-sql-functions-returning-set">
     <title>Fonctions <acronym>SQL</acronym> renvoyant un ensemble </title>
 
+    <indexterm>
+     <primary>function</primary>
+     <secondary>with SETOF</secondary>
+    </indexterm>
+
     <para>
      Quand une fonction SQL est déclarée renvoyer un <literal>SETOF
-     <replaceable>un_type</replaceable></literal>, la requête finale <command>SELECT</command> de
+     <replaceable>un_type</replaceable></literal>, la requête finale de
      la fonction est complètement exécutée et chaque ligne extraite est renvoyée
      en tant qu'élément de l'ensemble résultat.
     </para>
@@ -629,7 +764,7 @@
 
 <programlisting>
 CREATE FUNCTION sum_n_product_with_tab (x int, OUT sum int, OUT product int) RETURNS SETOF record AS $$
-    SELECT x + tab.y, x * tab.y FROM tab;
+    SELECT $1 + tab.y, tab.y * tab.y FROM tab;
 $$ LANGUAGE SQL;
 </programlisting>
 
@@ -686,6 +821,53 @@
      renvoyée pour <literal>Enfant2</literal>, <literal>Enfant3</literal>, etc. C'est parce
      que la fonction <function>listeenfant</function> renvoie un ensemble vide
      pour ces arguments et ainsi aucune ligne n'est générée.
+    </para>
+
+    <note>
+     <para>
+      If a function's last command is <command>INSERT</>, <command>UPDATE</>,
+      or <command>DELETE</> with <literal>RETURNING</>, that command will
+      always be executed to completion, even if the function is not declared
+      with <literal>SETOF</> or the calling query does not fetch all the
+      result rows.  Any extra rows produced by the <literal>RETURNING</>
+      clause are silently dropped, but the commanded table modifications
+      still happen (and are all completed before returning from the function).
+     </para>
+    </note>
+   </sect2>
+
+   <sect2 id="xfunc-sql-functions-returning-table">
+    <title><acronym>SQL</acronym> Functions Returning <literal>TABLE</></title>
+
+    <indexterm>
+     <primary>function</primary>
+     <secondary>RETURNS TABLE</secondary>
+    </indexterm>
+
+    <para>
+     There is another way to declare a function as returning a set,
+     which is to use the syntax
+     <literal>RETURNS TABLE(<replaceable>columns</>)</literal>.
+     This is equivalent to using one or more <literal>OUT</> parameters plus
+     marking the function as returning <literal>SETOF record</> (or
+     <literal>SETOF</> a single output parameter's type, as appropriate).
+     This notation is specified in recent versions of the SQL standard, and
+     thus may be more portable than using <literal>SETOF</>.
+    </para>
+
+    <para>
+     For example, the preceding sum-and-product example could also be
+     done this way:
+
+<programlisting>
+CREATE FUNCTION sum_n_product_with_tab (x int) RETURNS TABLE(sum int, product int) AS $$
+    SELECT $1 + tab.y, $1 * tab.y FROM tab;
+$$ LANGUAGE SQL;
+</programlisting>
+
+     It is not allowed to use explicit <literal>OUT</> or <literal>INOUT</>
+     parameters with the <literal>RETURNS TABLE</> notation &mdash; you must
+     put all the output columns in the <literal>TABLE</> list.
  </para>
     </sect2>
 
@@ -752,7 +934,7 @@
      Le polymorphisme peut être utilisé avec les fonctions qui ont des
      arguments en sortie. Par exemple&nbsp;:
 <screen>CREATE FUNCTION dup (f1 anyelement, OUT f2 anyelement, OUT f3 anyarray)
-AS 'select $1, array[$1,$1]' LANGUAGE sql;
+AS 'select $1, array[$1,$1]' LANGUAGE SQL;
 
 SELECT * FROM dup(22);
  f2 |   f3
@@ -761,6 +943,38 @@
 (1 row)
 </screen>
     </para>
+
+    <para>
+     Polymorphism can also be used with variadic functions.
+     For example:
+<screen>
+CREATE FUNCTION anyleast (VARIADIC anyarray) RETURNS anyelement AS $$
+    SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i);
+$$ LANGUAGE SQL;
+
+SELECT anyleast(10, -1, 5, 4);
+ anyleast 
+----------
+       -1
+(1 row)
+
+SELECT anyleast('abc'::text, 'def');
+ anyleast 
+----------
+ abc
+(1 row)
+
+CREATE FUNCTION concat(text, VARIADIC anyarray) RETURNS text AS $$
+    SELECT array_to_string($2, $1);
+$$ LANGUAGE SQL;
+
+SELECT concat('|', 1, 4, 2);
+ concat 
+--------
+ 1|4|2
+(1 row)
+</screen>
+    </para>
    </sect2>
   </sect1>
 
@@ -808,6 +1022,16 @@
         d'éviter le problème en ne choisissant aucun nom conflictuel.
       </para>
       
+   <para>
+    Another possible conflict is between variadic and non-variadic functions.
+    For instance, it is possible to create both <literal>foo(numeric)</> and
+    <literal>foo(VARIADIC numeric[])</>.  In this case it is unclear which one
+    should be matched to a call providing a single numeric argument, such as
+    <literal>foo(10.1)</>.  The rule is that the function appearing
+    earlier in the search path is used, or if the two functions are in the
+    same schema, the non-variadic one is preferred.
+   </para>
+   
       <para>
         Lors de la surcharge de fonctions en langage C, il existe une
         contrainte supplémentaire&nbsp;: le nom C de chaque fonction dans la
@@ -1381,15 +1605,15 @@
      <structname>text</structname>, nous devrions utiliser un fragment de code comme
      celui-ci&nbsp;:
 
-<programlisting>#include "postgres.h"
+<programlisting><![CDATA[#include "postgres.h"
 ...
 char buffer[40]; /* notre donnée source */
 ...
 text *destination = (text *) palloc(VARHDRSZ + 40);
-destination-&gt;length = VARHDRSZ + 40;
-memcpy(destination-&gt;data, buffer, 40);
+destination->length = VARHDRSZ + 40;
+memcpy(destination->data, buffer, 40);
 ...
-</programlisting>
+]]></programlisting>
 
      <literal>VARHDRSZ</literal> est équivalent à <literal>sizeof(int4)</literal> mais
      est considéré comme une meilleure tournure de référence à la taille de
@@ -1606,8 +1830,8 @@
     <para>
      Voici quelques exemples&nbsp;:
 
-<programlisting>#include "postgres.h"
-#include &lt;string.h&gt;
+<programlisting><![CDATA[#include "postgres.h"
+#include <string.h>
 
 /* par valeur */
          
@@ -1634,8 +1858,8 @@
 {
     Point     *new_point = (Point *) palloc(sizeof(Point));
 
-    new_point-&gt;x = pointx-&gt;x;
-    new_point-&gt;y = pointy-&gt;y;
+    new_point->x = pointx->x;
+    new_point->y = pointy->y;
        
     return new_point;
 }
@@ -1671,7 +1895,7 @@
            VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
     return new_text;
 }
-</programlisting>
+]]></programlisting>
     </para>
 
     <para>
@@ -1775,8 +1999,8 @@
     <para>
      Voici la même fonction que précédemment, codée en style version-1
      
-<programlisting>#include "postgres.h"
-#include &lt;string.h&gt;
+<programlisting><![CDATA[#include "postgres.h"
+#include <string.h>
 #include "fmgr.h"
 
 /* par valeur */
@@ -1814,8 +2038,8 @@
     Point     *pointy = PG_GETARG_POINT_P(1);
     Point     *new_point = (Point *) palloc(sizeof(Point));
 
-    new_point-&gt;x = pointx-&gt;x;
-    new_point-&gt;y = pointy-&gt;y;
+    new_point->x = pointx->x;
+    new_point->y = pointy->y;
        
     PG_RETURN_POINT_P(new_point);
 }
@@ -1858,7 +2082,7 @@
            VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
     PG_RETURN_TEXT_P(new_text);
 }
-</programlisting>
+]]></programlisting>
     </para>
 
     <para>
@@ -2316,7 +2540,7 @@
      En utilisant les conventions d'appel de la version 0, nous pouvons définir
      <function>c_surpaye</function> comme&nbsp;:
      
-<programlisting>#include "postgres.h"
+<programlisting><![CDATA[#include "postgres.h"
 #include "executor/executor.h"  /* pour GetAttributeByName() */
 
 bool
@@ -2326,16 +2550,16 @@
     bool isNULL;
     int32 salaire;
 
-    salaire = DatumGetInt32(GetAttributeByName(t, "salaire", &amp;isNULL));
+    salaire = DatumGetInt32(GetAttributeByName(t, "salaire", &isNULL));
     if (isNULL)
         return false;
-    return salaire &gt; limite;
+    return salaire > limite;
 }
-</programlisting>
+]]></programlisting>
 
      Dans le codage version-1, le code ci-dessus devient&nbsp;:
 
-<programlisting>#include "postgres.h"
+<programlisting><![CDATA[#include "postgres.h"
 #include "executor/executor.h"  /* pour GetAttributeByName() */
 
 PG_FUNCTION_INFO_V1(c_overpaid);
@@ -2348,16 +2572,16 @@
     bool isNULL;
     Datum salaire;
 
-    salaire = GetAttributeByName(t, "salaire", &amp;isNULL);
+    salaire = GetAttributeByName(t, "salaire", &isNULL);
     if (isNULL)
         PG_RETURN_BOOL(false);
     /* Autrement, nous pourrions préférer de lancer PG_RETURN_NULL() pour un
        salaire NULL.
     */
 
-    PG_RETURN_BOOL(DatumGetInt32(salaire) &gt; limite);
+    PG_RETURN_BOOL(DatumGetInt32(salaire) > limite);
 }
-</programlisting>
+]]></programlisting>
     </para>
 
     <para>
@@ -2733,7 +2957,7 @@
     <para>
      Et voici un exemple complet d'une simple <acronym>SRF</acronym> retournant un
      type composite&nbsp;:
-     <programlisting>PG_FUNCTION_INFO_V1(retcomposite);
+     <programlisting><![CDATA[PG_FUNCTION_INFO_V1(retcomposite);
 
 Datum
 retcomposite(PG_FUNCTION_ARGS)
@@ -2753,13 +2977,13 @@
         funcctx = SRF_FIRSTCALL_INIT();
 
         /* switch to memory context appropriate for multiple function calls */
-        oldcontext = MemoryContextSwitchTo(funcctx-&gt;multi_call_memory_ctx);
+        oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
         /* total number of tuples to be returned */
-        funcctx-&gt;max_calls = PG_GETARG_UINT32(0);
+        funcctx->max_calls = PG_GETARG_UINT32(0);
 
         /* Build a tuple descriptor for our result type */
-        if (get_call_result_type(fcinfo, NULL, &amp;tupdesc) != TYPEFUNC_COMPOSITE)
+        if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
             ereport(ERROR,
                     (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                      errmsg("function returning record called in context "
@@ -2770,7 +2994,7 @@
          * C strings
          */
         attinmeta = TupleDescGetAttInMetadata(tupdesc);
-        funcctx-&gt;attinmeta = attinmeta;
+        funcctx->attinmeta = attinmeta;
 
         MemoryContextSwitchTo(oldcontext);
     }
@@ -2778,11 +3002,11 @@
     /* stuff done on every call of the function */
     funcctx = SRF_PERCALL_SETUP();
 
-    call_cntr = funcctx-&gt;call_cntr;
-    max_calls = funcctx-&gt;max_calls;
-    attinmeta = funcctx-&gt;attinmeta;
+    call_cntr = funcctx->call_cntr;
+    max_calls = funcctx->max_calls;
+    attinmeta = funcctx->attinmeta;
  
-    if (call_cntr &lt; max_calls)    /* do when there is more left to send */
+    if (call_cntr < max_calls)    /* do when there is more left to send */
     {
         char       **values;
         HeapTuple    tuple;
@@ -2821,7 +3045,7 @@
         SRF_RETURN_DONE(funcctx);
     }
 }
-</programlisting>
+]]></programlisting>
 
      Voici une façon de déclarer cette fonction en SQL&nbsp;:
      
@@ -2936,6 +3160,23 @@
      Notez l'utilisation de STRICT&nbsp;; ceci est primordial car le code ne se
      préoccupe pas de tester une entrée NULL.
     </para>
+
+    <para>
+     There is a variant of polymorphism that is only available to C-language
+     functions: they can be declared to take parameters of type
+     <literal>"any"</>.  (Note that this type name must be double-quoted,
+     since it's also a SQL reserved word.)  This works like
+     <type>anyelement</> except that it does not constrain different
+     <literal>"any"</> arguments to be the same type, nor do they help
+     determine the function's result type.  A C-language function can also
+     declare its final parameter to be <literal>VARIADIC "any"</>.  This will
+     match one or more actual arguments of any type (not necessarily the same
+     type).  These arguments will <emphasis>not</> be gathered into an array
+     as happens with normal variadic functions; they will just be passed to
+     the function separately.  The <function>PG_NARGS()</> macro and the
+     methods described above must be used to determine the number of actual
+     arguments and their types when using this feature.
+    </para>
    </sect2>
 
    <sect2>

Modified: traduc/trunk/postgresql/xindex.xml
===================================================================
--- traduc/trunk/postgresql/xindex.xml	2009-04-15 19:50:08 UTC (rev 1295)
+++ traduc/trunk/postgresql/xindex.xml	2009-04-16 15:29:44 UTC (rev 1296)
@@ -450,6 +450,13 @@
         requête</entry>
        <entry>4</entry>
       </row>
+      <row>
+       <entry>comparePartial - (optional method) compare partial key from
+        query and key from index, and return an integer less than zero, zero,
+        or greater than zero, indicating whether GIN should ignore this index
+        entry, treat the entry as a match, or stop the index scan</entry>
+       <entry>5</entry>
+      </row>
      </tbody>
     </tgroup>
    </table>
@@ -498,19 +505,27 @@
    les risques de résultats incohérents pour les cas spécifiques. En suivant
    cette approche, nous devons tout d'abord écrire&nbsp;:
 
-<programlisting>#define Mag(c) ((c)-&gt;x*(c)-&gt;x + (c)-&gt;y*(c)-&gt;y)
+<programlisting><![CDATA[
+#define Mag(c)  ((c)->x*(c)->x + (c)->y*(c)->y)
 
-bool
-complex_abs_eq(Complex *a, Complex *b)
+static int
+complex_abs_cmp_internal(Complex *a, Complex *b)
 {
-    double amag = Mag(a), bmag = Mag(b);
-    return (amag == bmag);
+    double      amag = Mag(a),
+                bmag = Mag(b);
+
+    if (amag < bmag)
+        return -1;
+    if (amag > bmag)
+        return 1;
+    return 0;
 }
-</programlisting>
+]]></programlisting>
 
    Maintenant, la fonction plus-petit-que ressemble à ceci&nbsp;:
 
-<programlisting>PG_FUNCTION_INFO_V1(complex_abs_lt);
+<programlisting><![CDATA[
+PG_FUNCTION_INFO_V1(complex_abs_lt);
 
 Datum
 complex_abs_lt(PG_FUNCTION_ARGS)
@@ -518,9 +533,9 @@
     Complex    *a = (Complex *) PG_GETARG_POINTER(0);
     Complex    *b = (Complex *) PG_GETARG_POINTER(1);
 
-    PG_RETURN_BOOL(complex_abs_cmp_internal(a, b) &lt; 0);
+    PG_RETURN_BOOL(complex_abs_cmp_internal(a, b) < 0);
 }
-</programlisting>
+]]></programlisting>
 
    Les quatre autres fonctions diffèrent seulement sur la façon dont ils
    comparent le résultat de la fonction interne au zéro.
@@ -604,15 +619,16 @@
    Maintenant que nous avons les opérateurs requis et la routine d'appui, nous
    pouvons enfin créer la classe d'opérateur.
 
-<programlisting>CREATE OPERATOR CLASS complex_abs_ops
+<programlisting><![CDATA[
+CREATE OPERATOR CLASS complex_abs_ops
     DEFAULT FOR TYPE complex USING btree AS
-        OPERATOR        1       &lt; ,
-        OPERATOR        2       &lt;= ,
+        OPERATOR        1       < ,
+        OPERATOR        2       <= ,
         OPERATOR        3       = ,
-        OPERATOR        4       &gt;= ,
-        OPERATOR        5       &gt; ,
+        OPERATOR        4       >= ,
+        OPERATOR        5       > ,
         FUNCTION        1       complex_abs_cmp(complex, complex);
-</programlisting>
+]]></programlisting>
   </para>
 
   <para>
@@ -701,88 +717,88 @@
    être parcouru en utilisant une valeur de comparaison d'un autre type. La
    famille peut être dupliqué par ces définitions&nbsp;:
 
-<programlisting>
+<programlisting><![CDATA[
 CREATE OPERATOR FAMILY integer_ops USING btree;
 
 CREATE OPERATOR CLASS int8_ops
 DEFAULT FOR TYPE int8 USING btree FAMILY integer_ops AS
-  -- comparaisons int8 standard
-  OPERATOR 1 &lt; ,
-  OPERATOR 2 &lt;= ,
+  -- standard int8 comparisons
+  OPERATOR 1 < ,
+  OPERATOR 2 <= ,
   OPERATOR 3 = ,
-  OPERATOR 4 &gt;= ,
-  OPERATOR 5 &gt; ,
+  OPERATOR 4 >= ,
+  OPERATOR 5 > ,
   FUNCTION 1 btint8cmp(int8, int8) ;
 
 CREATE OPERATOR CLASS int4_ops
 DEFAULT FOR TYPE int4 USING btree FAMILY integer_ops AS
-  -- comparaisons int4 standard
-  OPERATOR 1 &lt; ,
-  OPERATOR 2 &lt;= ,
+  -- standard int4 comparisons
+  OPERATOR 1 < ,
+  OPERATOR 2 <= ,
   OPERATOR 3 = ,
-  OPERATOR 4 &gt;= ,
-  OPERATOR 5 &gt; ,
+  OPERATOR 4 >= ,
+  OPERATOR 5 > ,
   FUNCTION 1 btint4cmp(int4, int4) ;
 
 CREATE OPERATOR CLASS int2_ops
 DEFAULT FOR TYPE int2 USING btree FAMILY integer_ops AS
-  -- comparaisons int2 standard
-  OPERATOR 1 &lt; ,
-  OPERATOR 2 &lt;= ,
+  -- standard int2 comparisons
+  OPERATOR 1 < ,
+  OPERATOR 2 <= ,
   OPERATOR 3 = ,
-  OPERATOR 4 &gt;= ,
-  OPERATOR 5 &gt; ,
+  OPERATOR 4 >= ,
+  OPERATOR 5 > ,
   FUNCTION 1 btint2cmp(int2, int2) ;
 
 ALTER OPERATOR FAMILY integer_ops USING btree ADD
-  -- comparaisons inter-types int8 vs int2
-  OPERATOR 1 &lt; (int8, int2) ,
-  OPERATOR 2 &lt;= (int8, int2) ,
+  -- cross-type comparisons int8 vs int2
+  OPERATOR 1 < (int8, int2) ,
+  OPERATOR 2 <= (int8, int2) ,
   OPERATOR 3 = (int8, int2) ,
-  OPERATOR 4 &gt;= (int8, int2) ,
-  OPERATOR 5 &gt; (int8, int2) ,
+  OPERATOR 4 >= (int8, int2) ,
+  OPERATOR 5 > (int8, int2) ,
   FUNCTION 1 btint82cmp(int8, int2) ,
 
-  -- comparaisons inter-types  int8 vs int4
-  OPERATOR 1 &lt; (int8, int4) ,
-  OPERATOR 2 &lt;= (int8, int4) ,
+  -- cross-type comparisons int8 vs int4
+  OPERATOR 1 < (int8, int4) ,
+  OPERATOR 2 <= (int8, int4) ,
   OPERATOR 3 = (int8, int4) ,
-  OPERATOR 4 &gt;= (int8, int4) ,
-  OPERATOR 5 &gt; (int8, int4) ,
+  OPERATOR 4 >= (int8, int4) ,
+  OPERATOR 5 > (int8, int4) ,
   FUNCTION 1 btint84cmp(int8, int4) ,
 
-  -- comparaisons inter-types int4 vs int2
-  OPERATOR 1 &lt; (int4, int2) ,
-  OPERATOR 2 &lt;= (int4, int2) ,
+  -- cross-type comparisons int4 vs int2
+  OPERATOR 1 < (int4, int2) ,
+  OPERATOR 2 <= (int4, int2) ,
   OPERATOR 3 = (int4, int2) ,
-  OPERATOR 4 &gt;= (int4, int2) ,
-  OPERATOR 5 &gt; (int4, int2) ,
+  OPERATOR 4 >= (int4, int2) ,
+  OPERATOR 5 > (int4, int2) ,
   FUNCTION 1 btint42cmp(int4, int2) ,
 
-  -- comparaisons inter-types int4 vs int8
-  OPERATOR 1 &lt; (int4, int8) ,
-  OPERATOR 2 &lt;= (int4, int8) ,
+  -- cross-type comparisons int4 vs int8
+  OPERATOR 1 < (int4, int8) ,
+  OPERATOR 2 <= (int4, int8) ,
   OPERATOR 3 = (int4, int8) ,
-  OPERATOR 4 &gt;= (int4, int8) ,
-  OPERATOR 5 &gt; (int4, int8) ,
+  OPERATOR 4 >= (int4, int8) ,
+  OPERATOR 5 > (int4, int8) ,
   FUNCTION 1 btint48cmp(int4, int8) ,
 
-  -- comparaisons inter-types int2 vs int8
-  OPERATOR 1 &lt; (int2, int8) ,
-  OPERATOR 2 &lt;= (int2, int8) ,
+  -- cross-type comparisons int2 vs int8
+  OPERATOR 1 < (int2, int8) ,
+  OPERATOR 2 <= (int2, int8) ,
   OPERATOR 3 = (int2, int8) ,
-  OPERATOR 4 &gt;= (int2, int8) ,
-  OPERATOR 5 &gt; (int2, int8) ,
+  OPERATOR 4 >= (int2, int8) ,
+  OPERATOR 5 > (int2, int8) ,
   FUNCTION 1 btint28cmp(int2, int8) ,
 
-  -- comparaisons inter-types int2 vs int4
-  OPERATOR 1 &lt; (int2, int4) ,
-  OPERATOR 2 &lt;= (int2, int4) ,
+  -- cross-type comparisons int2 vs int4
+  OPERATOR 1 < (int2, int4) ,
+  OPERATOR 2 <= (int2, int4) ,
   OPERATOR 3 = (int2, int4) ,
-  OPERATOR 4 &gt;= (int2, int4) ,
-  OPERATOR 5 &gt; (int2, int4) ,
+  OPERATOR 4 >= (int2, int4) ,
+  OPERATOR 5 > (int2, int4) ,
   FUNCTION 1 btint24cmp(int2, int4) ;
-</programlisting>
+]]></programlisting>
 
    Notez que cette définition <quote>surcharge</quote> la stratégie de
    l'opérateur et les numéros de fonction support&nbsp;: chaque numéro survient
@@ -934,16 +950,22 @@
    peut être accompli exactement par un index B-tree sur la colonne entière.
    Mais il y a des cas où un index est utile comme un guide inexact vers la
    colonne correspondante. Par exemple, si un index GiST enregistre seulement
-   les rectangles limite des objets, alors il ne peut pas exactement satisfaire
+   les rectangles limite des objets géométriques, alors il ne peut pas exactement satisfaire
    une condition <literal>WHERE</literal> qui teste le chevauchement entre des objets
    non rectangulaires comme des polygones. Cependant, nous pourrions utiliser
    l'index pour trouver des objets dont les rectangles limites chevauchent les
    limites de l'objet cible. Dans ce cas, l'index est dit être à perte
-   pour l'opérateur, et nous ajoutons <literal>RECHECK</literal> à la clause
-   <literal>OPERATOR</literal> dans la commande <command>CREATE OPERATOR CLASS</command>. 
-   <literal>RECHECK</literal> est valide si l'index garantie de retourner toutes les
-   lignes requises, plus peut-être des lignes supplémentaires pouvant être
-   éliminées par le recours à l'opérateur original.
+   pour l'opérateur.  Lossy index searches are implemented by having the index
+   method return a <firstterm>recheck</> flag when a row might or might
+   not really satisfy the query condition.  The core system will then
+   test the original query condition on the retrieved row to see whether
+   it should be returned as a valid match.  This approach works if
+   the index is guaranteed to return all the required rows, plus perhaps
+   some additional rows, which can be eliminated by performing the original
+   operator invocation.  The index methods that support lossy searches
+   (currently, GiST and GIN) allow the support functions of individual
+   operator classes to set the recheck flag, and so this is essentially an
+   operator-class feature.
   </para>
 
   <para>



More information about the Trad mailing list