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

admin at listes.postgresql.fr admin at listes.postgresql.fr
Dim 12 Avr 22:26:50 CEST 2009


Author: gleu
Date: 2009-04-12 22:26:49 +0200 (Sun, 12 Apr 2009)
New Revision: 1291

Added:
   traduc/trunk/postgresql/auto-explain.xml
   traduc/trunk/postgresql/btree-gin.xml
   traduc/trunk/postgresql/citext.xml
   traduc/trunk/postgresql/pgstatstatements.xml
Modified:
   traduc/trunk/postgresql/indices.xml
   traduc/trunk/postgresql/information_schema.xml
   traduc/trunk/postgresql/install-win32.xml
   traduc/trunk/postgresql/intagg.xml
   traduc/trunk/postgresql/intarray.xml
   traduc/trunk/postgresql/legal.xml
   traduc/trunk/postgresql/lobj.xml
   traduc/trunk/postgresql/maintenance.xml
   traduc/trunk/postgresql/mvcc.xml
   traduc/trunk/postgresql/nls.xml
   traduc/trunk/postgresql/pageinspect.xml
   traduc/trunk/postgresql/perform.xml
   traduc/trunk/postgresql/pgbench.xml
   traduc/trunk/postgresql/pgbuffercache.xml
   traduc/trunk/postgresql/pgfreespacemap.xml
   traduc/trunk/postgresql/pgstandby.xml
   traduc/trunk/postgresql/pgstattuple.xml
   traduc/trunk/postgresql/plperl.xml
   traduc/trunk/postgresql/plpython.xml
   traduc/trunk/postgresql/pltcl.xml
   traduc/trunk/postgresql/postgres.xml
   traduc/trunk/postgresql/protocol.xml
   traduc/trunk/postgresql/queries.xml
   traduc/trunk/postgresql/query.xml
   traduc/trunk/postgresql/reference.xml
   traduc/trunk/postgresql/regress.xml
   traduc/trunk/postgresql/release.xml
   traduc/trunk/postgresql/rules.xml
   traduc/trunk/postgresql/sources.xml
   traduc/trunk/postgresql/sql.xml
   traduc/trunk/postgresql/start.xml
   traduc/trunk/postgresql/storage.xml
   traduc/trunk/postgresql/textsearch.xml
   traduc/trunk/postgresql/user-manag.xml
   traduc/trunk/postgresql/vacuumlo.xml
   traduc/trunk/postgresql/xaggr.xml
   traduc/trunk/postgresql/xtypes.xml
Log:
Merge 8.4 : ?\195?\169tape 2.


Added: traduc/trunk/postgresql/auto-explain.xml
===================================================================
--- traduc/trunk/postgresql/auto-explain.xml	                        (rev 0)
+++ traduc/trunk/postgresql/auto-explain.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -0,0 +1,177 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.3 2009-01-02 01:16:02 tgl Exp $ -->
+
+<sect1 id="auto-explain">
+ <title>auto_explain</title>
+
+ <indexterm zone="auto-explain">
+  <primary>auto_explain</primary>
+ </indexterm>
+
+ <para>
+  The <filename>auto_explain</filename> module provides a means for
+  logging execution plans of slow statements automatically, without
+  having to run <xref linkend="sql-explain" endterm="sql-explain-title">
+  by hand.  This is especially helpful for tracking down un-optimized queries
+  in large applications.
+ </para>
+
+ <para>
+  The module provides no SQL-accessible functions.  To use it, simply
+  load it into the server.  You can load it into an individual session:
+
+  <programlisting>
+LOAD 'auto_explain';
+  </programlisting>
+
+  (You must be superuser to do that.)  More typical usage is to preload
+  it into all sessions by including <literal>auto_explain</> in
+  <xref linkend="guc-shared-preload-libraries"> in
+  <filename>postgresql.conf</>.  Then you can track unexpectedly slow queries
+  no matter when they happen.  Of course there is a price in overhead for
+  that.
+ </para>
+
+ <sect2>
+  <title>Configuration parameters</title>
+
+ <para>
+  There are several configuration parameters that control the behavior of
+  <filename>auto_explain</filename>.  Note that the default behavior is
+  to do nothing, so you must set at least
+  <varname>auto_explain.log_min_duration</varname> if you want any results.
+ </para>
+
+  <variablelist>
+   <varlistentry>
+    <term>
+     <varname>auto_explain.log_min_duration</varname> (<type>integer</type>)
+    </term>
+    <indexterm>
+     <primary><varname>auto_explain.log_min_duration</> configuration parameter</primary>
+    </indexterm>
+    <listitem>
+     <para>
+      <varname>auto_explain.log_min_duration</varname> is the minimum statement
+      execution time, in milliseconds, that will cause the statement's plan to
+      be logged. Setting this to zero logs all plans. Minus-one (the default)
+      disables logging of plans.  For example, if you set it to
+      <literal>250ms</literal> then all statements that run 250ms or longer
+      will be logged. Only superusers can change this setting.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <varname>auto_explain.log_analyze</varname> (<type>boolean</type>)
+    </term>
+    <indexterm>
+     <primary><varname>auto_explain.log_analyze</> configuration parameter</primary>
+    </indexterm>
+    <listitem>
+     <para>
+      <varname>auto_explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</>
+      output, rather than just <command>EXPLAIN</> output, to be printed
+      when an execution plan is logged. This parameter is off by default.
+      Only superusers can change this setting.
+     </para>
+     <note>
+      <para>
+       When this parameter is on, per-plan-node timing occurs for all
+       statements executed, whether or not they run long enough to actually
+       get logged.  This can have extremely negative impact on performance.
+      </para>
+     </note>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <varname>auto_explain.log_verbose</varname> (<type>boolean</type>)
+    </term>
+    <indexterm>
+     <primary><varname>auto_explain.log_verbose</> configuration parameter</primary>
+    </indexterm>
+    <listitem>
+     <para>
+      <varname>auto_explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</>
+      output, rather than just <command>EXPLAIN</> output, to be printed
+      when an execution plan is logged. This parameter is off by default.
+      Only superusers can change this setting.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <varname>auto_explain.log_nested_statements</varname> (<type>boolean</type>)
+    </term>
+    <indexterm>
+     <primary><varname>auto_explain.log_nested_statements</> configuration parameter</primary>
+    </indexterm>
+    <listitem>
+     <para>
+      <varname>auto_explain.log_nested_statements</varname> causes nested
+      statements (statements executed inside a function) to be considered
+      for logging.  When it is off, only top-level query plans are logged. This
+      parameter is off by default. Only superusers can change this setting.
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
+
+  <para>
+   In order to set these parameters in your <filename>postgresql.conf</> file,
+   you will need to add <literal>auto_explain</> to
+   <xref linkend="guc-custom-variable-classes">.  Typical usage might be:
+  </para>
+
+  <programlisting>
+# postgresql.conf
+shared_preload_libraries = 'auto_explain'
+
+custom_variable_classes = 'auto_explain'
+auto_explain.log_min_duration = '3s'
+  </programlisting>
+ </sect2>
+
+ <sect2>
+  <title>Example</title>
+
+  <programlisting>
+  postgres=# LOAD 'auto_explain';
+  postgres=# SET auto_explain.log_min_duration = 0;
+  postgres=# SELECT count(*)
+               FROM pg_class, pg_index
+              WHERE oid = indrelid AND indisunique;
+  </programlisting>
+
+  <para>
+   This might produce log output such as:
+  </para>
+
+  <programlisting><![CDATA[
+  LOG:  duration: 0.986 ms  plan:
+          Aggregate  (cost=14.90..14.91 rows=1 width=0)
+            ->  Hash Join  (cost=3.91..14.70 rows=81 width=0)
+                  Hash Cond: (pg_class.oid = pg_index.indrelid)
+                  ->  Seq Scan on pg_class  (cost=0.00..8.27 rows=227 width=4)
+                  ->  Hash  (cost=2.90..2.90 rows=81 width=4)
+                        ->  Seq Scan on pg_index  (cost=0.00..2.90 rows=81 width=4)
+                              Filter: indisunique
+  STATEMENT:  SELECT count(*)
+            FROM pg_class, pg_index
+           WHERE oid = indrelid AND indisunique;
+]]>
+  </programlisting>
+ </sect2>
+
+ <sect2>
+  <title>Author</title>
+
+  <para>
+   Takahiro Itagaki <email>itagaki.takahiro at oss.ntt.co.jp</email>
+  </para>
+ </sect2>
+
+</sect1>

Added: traduc/trunk/postgresql/btree-gin.xml
===================================================================
--- traduc/trunk/postgresql/btree-gin.xml	                        (rev 0)
+++ traduc/trunk/postgresql/btree-gin.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -0,0 +1,58 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/btree-gin.sgml,v 1.1 2009-03-25 23:20:01 tgl Exp $ -->
+
+<sect1 id="btree-gin">
+ <title>btree_gin</title>
+
+ <indexterm zone="btree-gin">
+  <primary>btree_gin</primary>
+ </indexterm>
+
+ <para>
+  <filename>btree_gin</> provides sample GIN operator classes that
+  implement B-Tree equivalent behavior for the data types
+  <type>int2</>, <type>int4</>, <type>int8</>, <type>float4</>,
+  <type>float8</>, <type>timestamp with time zone</>,
+  <type>timestamp without time zone</>, <type>time with time zone</>,
+  <type>time without time zone</>, <type>date</>, <type>interval</>,
+  <type>oid</>, <type>money</>, <type>"char"</>,
+  <type>varchar</>, <type>text</>, <type>bytea</>, <type>bit</>,
+  <type>varbit</>, <type>macaddr</>, <type>inet</>, and <type>cidr</>.
+ </para>
+
+ <para>
+  In general, these operator classes will not outperform the equivalent
+  standard btree index methods, and they lack one major feature of the
+  standard btree code: the ability to enforce uniqueness.  However,
+  they are useful for GIN testing and as a base for developing other
+  GIN operator classes.  Also, for queries that test both a GIN-indexable
+  column and a btree-indexable column, it might be more efficient to create
+  a multi-column GIN index that uses one of these opclasses than to create
+  two separate indexes that would have to be combined via bitmap ANDing.
+ </para>
+
+ <sect2>
+  <title>Example usage</title>
+
+<programlisting>
+CREATE TABLE test (a int4);
+-- create index
+CREATE INDEX testidx ON test USING gin (a);
+-- query
+SELECT * FROM test WHERE a &lt; 10;
+</programlisting>
+
+ </sect2>
+
+ <sect2>
+  <title>Authors</title>
+
+  <para>
+   Teodor Sigaev (<email>teodor at stack.net</email>) and
+   Oleg Bartunov (<email>oleg at sai.msu.su</email>).  See
+   <ulink url="http://www.sai.msu.su/~megera/oddmuse/index.cgi/Gin"></ulink>
+   for additional information.
+  </para>
+
+ </sect2>
+
+</sect1>

Added: traduc/trunk/postgresql/citext.xml
===================================================================
--- traduc/trunk/postgresql/citext.xml	                        (rev 0)
+++ traduc/trunk/postgresql/citext.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -0,0 +1,224 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/citext.sgml,v 1.2 2008-09-12 18:29:49 tgl Exp $ -->
+
+<sect1 id="citext">
+ <title>citext</title>
+
+ <indexterm zone="citext">
+  <primary>citext</primary>
+ </indexterm>
+
+ <para>
+  The <filename>citext</> module provides a case-insensitive
+  character string type, <type>citext</>. Essentially, it internally calls
+  <function>lower</> when comparing values. Otherwise, it behaves almost
+  exactly like <type>text</>.
+ </para>
+
+ <sect2>
+  <title>Rationale</title>
+
+  <para>
+   The standard approach to doing case-insensitive matches
+   in <productname>PostgreSQL</> has been to use the <function>lower</>
+   function when comparing values, for example
+
+  <programlisting>
+   SELECT * FROM tab WHERE lower(col) = LOWER(?);
+  </programlisting>
+  </para>
+
+  <para>
+   This works reasonably well, but has a number of drawbacks:
+  </para>
+
+   <itemizedlist>
+    <listitem>
+     <para>
+      It makes your SQL statements verbose, and you always have to remember to
+      use <function>lower</> on both the column and the query value.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      It won't use an index, unless you create a functional index using
+      <function>lower</>.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      If you declare a column as <literal>UNIQUE</> or <literal>PRIMARY
+      KEY</>, the implicitly generated index is case-sensitive.  So it's
+      useless for case-insensitive searches, and it won't enforce
+      uniqueness case-insensitively.
+     </para>
+    </listitem>
+   </itemizedlist>
+
+   <para>
+    The <type>citext</> data type allows you to eliminate calls
+    to <function>lower</> in SQL queries, and allows a primary key to
+    be case-insensitive. <type>citext</> is locale-aware, just
+    like <type>text</>, which means that the comparison of uppercase and
+    lowercase characters is dependent on the rules of
+    the <literal>LC_CTYPE</> locale setting. Again, this behavior is
+    identical to the use of <function>lower</> in queries. But because it's
+    done transparently by the datatype, you don't have to remember to do
+    anything special in your queries.
+   </para>
+
+ </sect2>
+
+ <sect2>
+  <title>How to Use It</title>
+
+  <para>
+   Here's a simple example of usage:
+
+  <programlisting>
+   CREATE TABLE users (
+       nick CITEXT PRIMARY KEY,
+       pass TEXT   NOT NULL
+   );
+
+   INSERT INTO users VALUES ( 'larry',  md5(random()::text) );
+   INSERT INTO users VALUES ( 'Tom',    md5(random()::text) );
+   INSERT INTO users VALUES ( 'Damian', md5(random()::text) );
+   INSERT INTO users VALUES ( 'NEAL',   md5(random()::text) );
+   INSERT INTO users VALUES ( 'Bj&oslash;rn',  md5(random()::text) );
+
+   SELECT * FROM users WHERE nick = 'Larry';
+  </programlisting>
+
+   The <command>SELECT</> statement will return one tuple, even though
+   the <structfield>nick</> column was set to <quote>larry</> and the query
+   was for <quote>Larry</>.
+  </para>
+ </sect2>
+
+ <sect2>
+  <title>String Comparison Behavior</title>
+  <para>
+   In order to emulate a case-insensitive collation as closely as possible,
+   there are <type>citext</>-specific versions of a number of the comparison
+   operators and functions.  So, for example, the regular expression
+   operators <literal>~</> and <literal>~*</> exhibit the same behavior when
+   applied to <type>citext</>: they both compare case-insensitively.
+   The same is true
+   for <literal>!~</> and <literal>!~*</>, as well as for the
+   <literal>LIKE</> operators <literal>~~</> and <literal>~~*</>, and
+   <literal>!~~</> and <literal>!~~*</>. If you'd like to match
+   case-sensitively, you can always cast to <type>text</> before comparing.
+  </para>
+
+  <para>
+   Similarly, all of the following functions perform matching
+   case-insensitively if their arguments are <type>citext</>:
+  </para>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+      <function>regexp_replace()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>regexp_split_to_array()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>regexp_split_to_table()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>replace()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>split_part()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>strpos()</>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+      <function>translate()</>
+    </para>
+   </listitem>
+  </itemizedlist>
+
+  <para>
+   For the regexp functions, if you want to match case-sensitively, you can
+   specify the <quote>c</> flag to force a case-sensitive match.  Otherwise,
+   you must cast to <type>text</> before using one of these functions if
+   you want case-sensitive behavior.
+  </para>
+
+ </sect2>
+
+ <sect2>
+  <title>Limitations</title>
+
+   <itemizedlist>
+    <listitem>
+     <para>
+      <type>citext</>'s behavior depends on
+      the <literal>LC_CTYPE</> setting of your database. How it compares
+      values is therefore determined when
+      <application>initdb</> is run to create the cluster. It is not truly
+      case-insensitive in the terms defined by the Unicode standard.
+      Effectively, what this means is that, as long as you're happy with your
+      collation, you should be happy with <type>citext</>'s comparisons. But
+      if you have data in different languages stored in your database, users
+      of one language may find their query results are not as expected if the
+      collation is for another language.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+       <type>citext</> is not as efficient as <type>text</> because the
+       operator functions and the btree comparison functions must make copies
+       of the data and convert it to lower case for comparisons. It is,
+       however, slightly more efficient than using <function>lower</> to get
+       case-insensitive matching.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <type>citext</> doesn't help much if you need data to compare
+      case-sensitively in some contexts and case-insensitively in other
+      contexts.  The standard answer is to use the <type>text</> type and
+      manually use the <function>lower</> function when you need to compare
+      case-insensitively; this works all right if case-insensitive comparison
+      is needed only infrequently.  If you need case-insensitive most of
+      the time and case-sensitive infrequently, consider storing the data
+      as <type>citext</> and explicitly casting the column to <type>text</>
+      when you want case-sensitive comparison.  In either situation, you
+      will need two indexes if you want both types of searches to be fast.
+    </para>
+    </listitem>
+   </itemizedlist>
+ </sect2>
+
+ <sect2>
+  <title>Author</title>
+
+  <para>
+   David E. Wheeler <email>david at kineticode.com</email>
+  </para>
+
+  <para>
+    Inspired by the original <type>citext</> module by Donald Fraser.
+  </para>
+
+ </sect2>
+
+</sect1>

Modified: traduc/trunk/postgresql/indices.xml
===================================================================
--- traduc/trunk/postgresql/indices.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/indices.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -157,7 +157,7 @@
    et <literal>~</literal> <emphasis>si</emphasis> le motif est une constante et
    se trouve au début de la chaîne à rechercher &mdash; par exemple,
    <literal>col LIKE 'foo%'</literal> ou <literal>col ~ '^foo'</literal>, mais
-   pas <literal>col LIKE '%bar'</literal>. Toutefois, si le serveur
+   pas <literal>col LIKE '%bar'</literal>. Toutefois, si la base de données
    n'utilise pas la locale C, il est nécessaire de créer l'index avec
    une classe d'opérateur spéciale pour supporter l'indexation à correspondance
    de modèles. Voir la <xref linkend="indexes-opclass"/> ci-dessous. Il est
@@ -188,14 +188,10 @@
 
   <note>
    <para>
-    Les tests ont montré que les index de hachage (<foreignphrase>hash
-    index</foreignphrase>) de <productname>PostgreSQL</productname>
-    n'offrent pas de meilleure performance que les index B-tree. De plus, la
-    taille de l'index et son temps de construction sont bien pires. D'autre
-    part, les opérations sur les index de hachage
+    Les opérations sur les index de hachage
     ne sont pas tracées par les WAL. Il est dont généralement nécessaire de
     les reconstruire avec <command>REINDEX</command> après un crash de la base.
-    Pour ces raisons, l'utilisation des index de hachage est découragée.
+    Pour cette raison, l'utilisation des index de hachage est découragée.
    </para>
   </note>  
 
@@ -304,7 +300,7 @@
   </para>
 
   <para>
-   Actuellement, seuls les types d'index B-trees et GiST supportent les
+   Actuellement, seuls les types d'index B-trees, GiST et GIN supportent les
    index multicolonnes. 32 colonnes peuvent être précisées, au maximum.
    Cette limite peut être modifiée à la compilation de
    <productname>PostgreSQL</productname>. Voir le fichier 
@@ -351,6 +347,13 @@
   </para>
 
   <para>
+   A multicolumn GIN index can be used with query conditions that
+   involve any subset of the index's columns. Unlike B-tree or GiST,
+   index search effectiveness is the same regardless of which index column(s)
+   the query conditions use.
+  </para>
+
+  <para>
    Chaque colonne doit évidemment être utilisée avec des opérateurs appropriés
    au type de l'index&nbsp;; les clauses qui impliquent d'autres opérateurs ne
    sont pas pris en compte.
@@ -913,26 +916,27 @@
     <listitem>
      <para>
       Les classes d'opérateurs <literal>text_pattern_ops</literal>,
-      <literal>varchar_pattern_ops</literal>,
-      <literal>bpchar_pattern_ops</literal>, et
-      <literal>name_pattern_ops</literal> supportent les index B-tree sur
-      les types <type>text</type>, <type>varchar</type>, <type>char</type>,
-      et <type>name</type>, respectivement.
-      À la différence des classes d'opérateurs par défaut, 
+      <literal>varchar_pattern_ops</literal> et
+      <literal>bpchar_pattern_ops</literal> supportent les index B-tree sur
+      les types <type>text</type>, <type>varchar</type> et <type>char</type>,
+      respectivement. À la différence des classes d'opérateurs par défaut, 
       les valeurs sont comparées strictement caractère par caractère plutôt 
       que suivant les règles de tri spécifiques à la localisation.
       Cela rend ces index utilisables pour des requêtes qui utilisent des
       recherches sur des motifs (<literal>LIKE</literal> ou des expressions 
-      régulières POSIX) quand le serveur n'utilise pas la localisation standard
+      régulières POSIX) quand la base de données n'utilise pas la locale standard
       <quote>C</quote>.
       Par exemple, on peut indexer une colonne <type>varchar</type>
       comme ceci&nbsp;:
 <programlisting>CREATE INDEX test_index ON test_table (col varchar_pattern_ops);</programlisting>
       Il faut créer un index avec la classe d'opérateurs par
-      défaut pour que les requêtes qui utilisent une comparaison
+      défaut pour que les requêtes qui utilisent une comparaison <literal>&lt;</>,
+      <literal>&lt;=</>, <literal>&gt;</> ou <literal>&gt;=</>
       ordinaire utilisent un index. De telles requêtes ne peuvent pas utiliser
       les classes d'opérateurs 
       <literal><replaceable>xxx</replaceable>_pattern_ops</literal>.
+      (Ordinary equality comparisons can use these
+      operator classes, however.)  
       Il est possible de créer plusieurs index sur la même colonne
       avec différentes classes d'opérateurs.
       Si la locale C est utilisée, les classes

Modified: traduc/trunk/postgresql/information_schema.xml
===================================================================
--- traduc/trunk/postgresql/information_schema.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/information_schema.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -704,18 +704,11 @@
   </para>
 
   <para>
-   Dans <productname>PostgreSQL</productname>, seuls les droits sur les tables
-   entières peuvent être donnés, pas sur les colonnes. De ce fait,
-   la vue contient les mêmes informations que
-   <literal>table_privileges</literal>, représentée par une ligne pour chaque
-   colonne de la table correspondante. Cela ne représente toutefois que les
-   types de privilèges pour lesquels la granularité de type colonne
-   existe&nbsp;:
+   If a privilege has been granted on an entire table, it will show up in
+   this view as a grant for each column, but only for the
+   privilege types where column granularity is possible:
    <literal>SELECT</literal>, <literal>INSERT</literal>,
-   <literal>UPDATE</literal>, <literal>REFERENCES</literal>. Pour rendre les
-   applications compatibles avec les développements futurs, il est préférable
-   d'utiliser cette vue à la place de <literal>table_privileges</literal> si un
-   des ces types de privilèges est concerné.
+   <literal>UPDATE</literal>, <literal>REFERENCES</literal>.
   </para>
 
   <table>
@@ -2261,6 +2254,237 @@
   </table>
  </sect1>
 
+ <sect1 id="infoschema-foreign-data-wrapper-options">
+  <title><literal>foreign_data_wrapper_options</literal></title>
+
+  <para>
+   The view <literal>foreign_data_wrapper_options</literal> contains
+   all the options defined for foreign-data wrappers in the current
+   database.  Only those foreign-data wrappers are shown that the
+   current user has access to (by way of being the owner or having
+   some privilege).
+  </para>
+
+  <table>
+   <title><literal>foreign_data_wrapper_options</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>foreign_data_wrapper_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that the foreign-data wrapper is defined in (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_data_wrapper_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign-data wrapper</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of an option</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_value</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Value of the option</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-data-wrappers">
+  <title><literal>foreign_data_wrappers</literal></title>
+
+  <para>
+   The view <literal>foreign_data_wrappers</literal> contains all
+   foreign-data wrappers defined in the current database.  Only those
+   foreign-data wrappers are shown that the current user has access to
+   (by way of being the owner or having some privilege).
+  </para>
+
+  <table>
+   <title><literal>foreign_data_wrappers</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>foreign_data_wrapper_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that contains the foreign-data
+      wrapper (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_data_wrapper_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign-data wrapper</entry>
+     </row>
+
+     <row>
+      <entry><literal>authorization_identifier</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the owner of the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><literal>library_name</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>File name of the library that implementing this foreign-data wrapper</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_data_wrapper_language</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Language used to implement this foreign-data wrapper</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-server-options">
+  <title><literal>foreign_server_options</literal></title>
+
+  <para>
+   The view <literal>foreign_server_options</literal> contains all the
+   options defined for foreign servers in the current database.  Only
+   those foreign servers are shown that the current user has access to
+   (by way of being the owner or having some privilege).
+  </para>
+
+  <table>
+   <title><literal>foreign_server_options</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>foreign_server_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that the foreign server is defined in (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of an option</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_value</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Value of the option</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-servers">
+  <title><literal>foreign_servers</literal></title>
+
+  <para>
+   The view <literal>foreign_servers</literal> contains all foreign
+   servers defined in the current database.  Only those foreign
+   servers are shown that the current user has access to (by way of
+   being the owner or having some privilege).
+  </para>
+
+  <table>
+   <title><literal>foreign_servers</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>foreign_server_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that the foreign server is defined in (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_data_wrapper_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that contains the foreign-data
+      wrapper used by the foreign server (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_data_wrapper_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign-data wrapper used by the foreign server</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_type</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Foreign server type information, if specified upon creation</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_version</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Foreign server version information, if specified upon creation</entry>
+     </row>
+
+     <row>
+      <entry><literal>authorization_identifier</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the owner of the foreign server</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
  <sect1 id="infoschema-key-column-usage">
   <title><literal>key_column_usage</literal></title>
 
@@ -2638,8 +2862,10 @@
   <para>
    La vue <literal>referential_constraints</literal> contient toutes les
    contraintes référentielles (clés étrangères) au sein de la base de données
-   courante qui appartiennent à une table possédée par un rôle actuellement
-   actif.
+   courante.
+   Only those constraints are shown for which the current user has
+   write access to the referencing table (by way of being the
+   owner or having some privilege other than SELECT).
   </para>
 
   <table>
@@ -2809,8 +3035,9 @@
       <entry><type>character_data</type></entry>
       <entry>
        Type de privilège&nbsp;: <literal>SELECT</literal>,
-       <literal>INSERT</literal>, <literal>UPDATE</literal> ou
-       <literal>REFERENCES</literal>
+       <literal>INSERT</literal>, <literal>UPDATE</literal>,
+       <literal>DELETE</literal>, <literal>TRUNCATE</literal>,
+       <literal>REFERENCES</literal> ou <literal>TRIGGER</literal>
       </entry>
      </row>
 
@@ -3011,12 +3238,9 @@
   <title><literal>role_usage_grants</literal></title>
 
   <para>
-   La vue <literal>role_usage_grants</literal> est utilisée pour identifier
+   La vue <literal>role_usage_grants</literal> identifie
    les privilèges d'<literal>USAGE</literal> sur différents types d'objets
-   accordés à un rôle actif ou par un rôle actif. Sous
-   <productname>PostgreSQL</productname>, cela s'applique uniquement aux
-   domaines. Puisqu'il n'y a pas de réels privilèges sur les domaines sous
-   <productname>PostgreSQL</productname>, cette vue est vide.
+   where the grantor or grantee is a currently enabled role.
    Plus d'informations sous <literal>usage_privileges</literal>.
    Dans le futur, cette vue pourrait contenir des informations plus utiles.
   </para>
@@ -3040,13 +3264,13 @@
      <row>
       <entry><literal>grantor</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Dans le futur, le nom du rôle qui a octroyé le privilège</entry>
+      <entry>Nom du rôle qui a octroyé le privilège</entry>
      </row>
 
      <row>
       <entry><literal>grantee</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Dans le futur, le nom du rôle bénéficiaire</entry>
+      <entry>Nom du rôle bénéficiaire</entry>
      </row>
 
      <row>
@@ -3059,7 +3283,8 @@
      <row>
       <entry><literal>object_schema</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Nom du schéma qui contient l'objet</entry>
+      <entry>Nom du schéma qui contient l'objet, if applicable,
+      else an empty string</entry>
      </row>
 
      <row>
@@ -3071,7 +3296,7 @@
      <row>
       <entry><literal>object_type</literal></entry>
       <entry><type>character_data</type></entry>
-      <entry>Dans le futur, le type de l'objet</entry>
+      <entry><literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
      </row>
 
      <row>
@@ -3096,6 +3321,7 @@
 
   <para>
    La vue <literal>routine_privileges</literal> identifie tous les privilèges
+   granted on functions to a currently enabled role or by a currently enabled role.
    Il existe une ligne pour chaque combinaison fonction, donneur, bénéficiaire.
   </para>
 
@@ -4514,7 +4740,7 @@
   <para>
    La vue <literal>table_constraints</literal> contient toutes les contraintes
    appartenant aux tables possédées par l'utilisateur courant ou pour lesquelles
-   l'utilisateur courant dispose de certains droits.
+   l'utilisateur courant dispose de certains droits différents de SELECT.
   </para>
 
   <table>
@@ -4660,9 +4886,9 @@
       <entry><type>character_data</type></entry>
       <entry>
        Type de privilège&nbsp;: <literal>SELECT</literal>,
-       <literal>DELETE</literal>, <literal>INSERT</literal>,
-       <literal>UPDATE</literal>, <literal>REFERENCES</literal>
-       ou <literal>TRIGGER</literal>
+       <literal>INSERT</literal>, <literal>UPDATE</literal>,
+       <literal>DELETE</literal>, <literal>TRUNCATE</literal>,
+       <literal>REFERENCES</literal> ou <literal>TRIGGER</literal>
       </entry>
      </row>
 
@@ -4814,7 +5040,7 @@
   <para>
    La vue <literal>triggers</literal> contient tous les déclencheurs définis
    dans la base de données courante qu'un rôle actif possède ou pour lesquels
-   il dispose de privilèges.
+   il dispose de privilèges différents de SELECT.
   </para>
 
   <table>
@@ -5005,16 +5231,24 @@
   <title><literal>usage_privileges</literal></title>
 
   <para>
-   La vue <literal>usage_privileges</literal> permet d'identifier les
+   La vue <literal>usage_privileges</literal> identifie les
    privilèges d'<literal>USAGE</literal> accordés sur différents objets à un rôle
    actif ou par un rôle actif. Sous <productname>PostgreSQL</productname>,
-   cela s'applique uniquement aux domaines. Puisqu'il n'y a pas de réels
+   cela s'applique aux domaines. Puisqu'il n'y a pas de réels
    privilèges sur les domaines sous <productname>PostgreSQL</productname>,
    cette vue est affiche les privilèges <literal>USAGE</literal> implicitement
-   octroyés à <literal>PUBLIC</literal> pour tous les domaines.
-   Dans le futur, cette vue pourrait contenir plus d'informations utiles.
+   octroyés à <literal>PUBLIC</literal> pour tous les domaines, foreign-data wrappers, and foreign servers.  There is one
+   row for each combination of object, grantor, and grantee.
   </para>
 
+  <para>
+   Since domains do not have real privileges
+   in <productname>PostgreSQL</productname>, this view shows implicit
+   non-grantable <literal>USAGE</literal> privileges granted by the
+   owner to <literal>PUBLIC</literal> for all domains.  The other
+   object types, however, show real privileges.
+  </para>
+
   <table>
    <title>Colonnes de <literal>usage_privileges</literal></title>
 
@@ -5034,14 +5268,13 @@
      <row>
       <entry><literal>grantor</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Actuellement initialisé avec le nom du propriétaire de
-       l'objet</entry>
+      <entry>Name of the role that granted the privilege</entry>
      </row>
 
      <row>
       <entry><literal>grantee</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Actuellement toujours <literal>PUBLIC</literal></entry>
+      <entry>Name of the role that the privilege was granted to</entry>
      </row>
 
      <row>
@@ -5054,7 +5287,8 @@
      <row>
       <entry><literal>object_schema</literal></entry>
       <entry><type>sql_identifier</type></entry>
-      <entry>Nom du schéma qui contient l'objet</entry>
+      <entry>Nom du schéma qui contient l'objet, if applicable,
+      else an empty string</entry>
      </row>
 
      <row>
@@ -5066,7 +5300,7 @@
      <row>
       <entry><literal>object_type</literal></entry>
       <entry><type>character_data</type></entry>
-      <entry>Actuellement toujours <literal>DOMAIN</literal></entry>
+      <entry><literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
      </row>
 
      <row>
@@ -5078,13 +5312,125 @@
      <row>
       <entry><literal>is_grantable</literal></entry>
       <entry><type>character_data</type></entry>
-      <entry>Actuellement toujours <literal>NO</literal></entry>
+      <entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
      </row>
     </tbody>
    </tgroup>
   </table>
  </sect1>
+ <sect1 id="infoschema-user-mapping-options">
+  <title><literal>user_mapping_options</literal></title>
 
+  <para>
+   The view <literal>user_mapping_options</literal> contains all the
+   options defined for user mappings in the current database.  Only
+   those user mappings are shown where the current user has access to
+   the corresponding foreign server (by way of being the owner or
+   having some privilege).
+  </para>
+
+  <table>
+   <title><literal>user_mapping_options</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>authorization_identifier</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the user being mapped,
+      or <literal>PUBLIC</literal> if the mapping is public</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that the foreign server used by this
+      mapping is defined in (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign server used by this mapping</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of an option</entry>
+     </row>
+
+     <row>
+      <entry><literal>option_value</literal></entry>
+      <entry><type>character_data</type></entry>
+      <entry>Value of the option.  This column will show as null
+      unless the current user is the user being mapped, or the mapping
+      is for <literal>PUBLIC</literal> and the current user is the
+      server owner, or the current user is a superuser.  The intent is
+      to protect password information stored as user mapping
+      option.</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
+ <sect1 id="infoschema-user-mappings">
+  <title><literal>user_mappings</literal></title>
+
+  <para>
+   The view <literal>user_mappings</literal> contains all user
+   mappings defined in the current database.  Only those user mappings
+   are shown where the current user has access to the corresponding
+   foreign server (by way of being the owner or having some
+   privilege).
+  </para>
+
+  <table>
+   <title><literal>user_mappings</literal> Columns</title>
+
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>Name</entry>
+      <entry>Data Type</entry>
+      <entry>Description</entry>
+     </row>
+    </thead>
+
+    <tbody>
+     <row>
+      <entry><literal>authorization_identifier</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the user being mapped,
+      or <literal>PUBLIC</literal> if the mapping is public</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_catalog</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the database that the foreign server used by this
+      mapping is defined in (always the current database)</entry>
+     </row>
+
+     <row>
+      <entry><literal>foreign_server_name</literal></entry>
+      <entry><type>sql_identifier</type></entry>
+      <entry>Name of the foreign server used by this mapping</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </table>
+ </sect1>
+
  <sect1 id="infoschema-view-column-usage">
   <title><literal>view_column_usage</literal></title>
 

Modified: traduc/trunk/postgresql/install-win32.xml
===================================================================
--- traduc/trunk/postgresql/install-win32.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/install-win32.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -5,7 +5,8 @@
      révision $Revision$ -->
 
 <chapter id="install-win32">
- <title>Installation sur <productname>Windows</productname></title>
+ <title>Installation à partir du code source sur
+   <productname>Windows</productname></title>
 
  <indexterm>
   <primary>installation</primary>
@@ -37,9 +38,9 @@
  <para>
   La construction par <productname>MinGW</productname> ou
   <productname>Cygwin</productname> utilise le système habituel de construction,
-  voir <xref linkend="installation"/> et les FAQ dans
-  <filename>doc/FAQ_MINGW</filename> et <filename>do/FAQ_CYGWIN</filename>.
-  Notez que <productname>Cygwin</productname> n'est pas recommandé, et devrait
+  voir <xref linkend="installation"/> et les notes spécifiques dans <xref
+  linkend="installation-notes-mingw"> et <xref linkend="installation-notes-cygwin">.
+  <productname>Cygwin</productname> n'est pas recommandé, et devrait
   seulement être utilisé pour les anciennes versions de
   <productname>Windows</productname> où la construction native ne fonctionne
   pas, comme par exemple <productname>Windows 98</productname>.

Modified: traduc/trunk/postgresql/intagg.xml
===================================================================
--- traduc/trunk/postgresql/intagg.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/intagg.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -13,7 +13,10 @@
 
  <para>
   Le module <filename>intagg</filename> fournit un
-  agrégateur d'entiers et un énumérateur.
+  agrégateur d'entiers et un énumérateur. <filename>intagg</filename> is now obsolete, because there
+  are built-in functions that provide a superset of its capabilities.
+  However, the module is still provided as a compatibility wrapper around
+  the built-in functions.
  </para>
 
  <sect2>
@@ -23,45 +26,19 @@
   L'agrégateur est une fonction d'agrégat
   <function>int_array_aggregate(integer)</function> qui produit un tableau
   d'entiers contenant exactement les entiers fournis en argument.
+  This is a wrapper around <function>array_agg</>,
+  which does the same thing for any array type.
  </para>
 
  <para>
-  Exemple&nbsp;:
- </para>
-
- <programlisting>
-test=# select int_array_aggregate(i) from
-test-#   generate_series(1,10,2) i;
- int_array_aggregate
----------------------
- {1,3,5,7,9}
-(1 row)
- </programlisting>
-
- <para>
   L'énumérateur est une fonction
   <function>int_array_enum(integer[])</function> qui renvoie
   <type>setof integer</type>. C'est essentiellement une opération reverse de
   l'agrégateur&nbsp;: elle étend un tableau d'entiers en un ensemble de
-  lignes.
+  lignes. This is a wrapper around <function>unnest</>,
+  which does the same thing for any array type.
  </para>
 
- <para>
-   Exemple&nbsp;:
- </para>
- 
- <programlisting>
-test=# select * from int_array_enum(array[1,3,5,7,9]);
- int_array_enum
-----------------
-              1
-              3
-              5
-              7
-              9
-(5 rows)
- </programlisting>
-
  </sect2>
 
  <sect2>

Modified: traduc/trunk/postgresql/intarray.xml
===================================================================
--- traduc/trunk/postgresql/intarray.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/intarray.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -141,13 +141,13 @@
       au moins un élément en commun</entry>
      </row>
      <row>
-      <entry><literal>int[] @&gt; int[]</literal></entry>
+      <entry><literal>int[] @ int[]</literal></entry>
       <entry><type>boolean</type></entry>
       <entry>contient &mdash; <literal>true</literal> si le tableau gauche
       contient le tableau droit</entry>
      </row>
      <row>
-      <entry><literal>int[] &lt;@ int[]</literal></entry>
+      <entry><literal>int[] ~ int[]</literal></entry>
       <entry><type>boolean</type></entry>
       <entry>est contenu &mdash; <literal>true</literal> si le tableau gauche
       est contenu dans le tableau droit</entry>
@@ -218,11 +218,13 @@
   </table>
 
   <para>
-   Avant PostgreSQL 8.2, les opérateurs de contenance @&gt; et &lt;@ étaient
-   appelés respectivement @ et ~. Ces noms sont toujours disponibles mais sont
-   devenus obsolètes et pourraient éventuellement être supprimés. Notez que 
-   les anciens noms sont inversés par rapport à la convention suivie par les
-   types de données géométriques.
+   The containment operators <literal>@</> and <literal>~</> are functionally
+   equivalent to <productname>PostgreSQL</>'s built-in operators
+   <literal>@&gt;</> and <literal>&lt;@</>, respectively, except that
+   <literal>@</> and <literal>~</> work only on integer arrays.  These
+   operator names are deprecated and will eventually be retired.  (Notice that
+   these names are reversed from the convention formerly followed by the core
+   geometric datatypes!)
   </para>
 
   <para>
@@ -244,23 +246,27 @@
 
   <para>
    <filename>intarray</filename> fournit un support des index pour les
-   opérateurs <literal>&amp;&amp;</literal>, <literal>@&gt;</literal>,
-   <literal>&lt;@</literal> et <literal>@@</literal>, ainsi qu'une égalité
-   des tableaux standards. L'implémentation utilise une structure de données
-   RD-tree avec une compression interne à perte.
+   opérateurs <literal>&amp;&amp;</literal>, <literal>@</literal>,
+   <literal>~</literal> et <literal>@@</literal>, ainsi qu'une égalité
+   des tableaux standards
+   and the built-in <literal>@&gt;</> and <literal>&lt;@</> operators
+   (when used on integer arrays).
   </para>
 
   <para>
    Deux classes d'opérateur pour index GiST sont fournies&nbsp;:
    <literal>gist__int_ops</literal> (utilisé par défaut) convient pour des
-   tableaux de petites et moyennes tailles alors que
+   tableaux d'ensembles de données de petites et moyennes tailles alors que
    <literal>gist__intbig_ops</literal> utilise une signature plus importante
-   et est donc plus intéressant pour indexer des gros tableaux.
+   et est donc plus intéressant pour indexer des gros ensembles de données.
+   (i.e., columns containing a large number of distinct array values).
+   The implementation uses an RD-tree data structure with
+   built-in lossy compression.
   </para>
 
   <para>
-   Il y a aussi une classe d'opérateur GIN,<literal>gin__int_ops</literal>, qui
-   n'est pas disponible par défaut.
+   Il y a aussi une classe d'opérateur GIN,<literal>gin__int_ops</literal>
+   supporting the same operators, qui n'est pas disponible par défaut.
   </para>
 
   <para>
@@ -319,7 +325,7 @@
  <sect2>
   <title>Auteurs</title>
   <para>
-   Ce travail a été réalisé par Teodor Sigaev (<email>teodor at stack.net</email>)
+   Ce travail a été réalisé par Teodor Sigaev (<email>teodor at sigaev.ru</email>)
    et Oleg Bartunov (<email>oleg at sai.msu.su</email>). Voir le
    <ulink url="http://www.sai.msu.su/~megera/postgres/gist">site de
    GiST</ulink> pour des informations supplémentaires. Andrey Oktyabrski a fait

Modified: traduc/trunk/postgresql/legal.xml
===================================================================
--- traduc/trunk/postgresql/legal.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/legal.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -5,7 +5,7 @@
      révision $Revision$ -->
 
 <copyright>
- <year>1996-2008</year>
+ <year>1996-2009</year>
  <holder>The PostgreSQL Global Development Group</holder>
 </copyright>
 
@@ -13,7 +13,7 @@
  <title>Legal Notice</title>
 
  <para>
-  <productname>PostgreSQL</productname> is Copyright &copy; 1996-2008
+  <productname>PostgreSQL</productname> is Copyright &copy; 1996-2009
   by the PostgreSQL Global Development Group and is distributed under
   the terms of the license of the University of California below.
  </para>

Modified: traduc/trunk/postgresql/lobj.xml
===================================================================
--- traduc/trunk/postgresql/lobj.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/lobj.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -155,6 +155,28 @@
      client, pas par le serveur. Donc il doit exister dans le système de fichier
      du client et lisible par l'application du client.
     </para>
+    
+    <para>
+     The function
+<synopsis>
+Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId);
+</synopsis>
+     <indexterm><primary>lo_import_with_oid</></>
+     also imports a new large object.  The OID to be assigned can be
+     specified by <replaceable class="parameter">lobjId</replaceable>;
+     if so, failure occurs if that OID is already in use for some large
+     object.  If <replaceable class="parameter">lobjId</replaceable>
+     is <symbol>InvalidOid</symbol> (zero) then <function>lo_import_with_oid</> assigns an unused
+     OID (this is the same behavior as <function>lo_import</>).
+     The return value is the OID that was assigned to the new large object,
+     or <symbol>InvalidOid</symbol> (zero) on failure.
+    </para>
+
+    <para>
+     <function>lo_import_with_oid</> is new as of <productname>PostgreSQL</productname>
+     8.4 and uses <function>lo_create</function> internally which is new in 8.1; if this function is run against 8.0 or before, it will
+     fail and return <symbol>InvalidOid</symbol>.
+    </para>
    </sect2>
 
    <sect2>
@@ -380,6 +402,9 @@
 INSERT INTO image (nom, donnees)
     VALUES ('superbe image', lo_import('/etc/motd'));
 
+INSERT INTO image (name, raster)  -- same as above, but specify OID to use
+    VALUES ('beautiful image', lo_import('/etc/motd', 68583));
+
 SELECT lo_export(image.donnees, '/tmp/motd') FROM image
     WHERE nom = 'superbe image';
 </programlisting>
@@ -412,7 +437,7 @@
   <example id="lo-example">
    <title>Exemple de programme sur les objets larges avec
 <application>libpq</application></title>
-<programlisting>/*--------------------------------------------------------------
+<programlisting><![CDATA[/*--------------------------------------------------------------
  *
  * testlo.c--
  *    test utilisant des objets larges avec libpq
@@ -421,16 +446,16 @@
  *
  *--------------------------------------------------------------
  */
-#include &lt;stdio.h&gt;
-#include &quot;libpq-fe.h&quot;
-#include &quot;libpq/libpq-fs.h&quot;
+#include <stdio.h>
+#include "libpq-fe.h"
+#include "libpq/libpq-fs.h"
 
 #define BUFSIZE          1024
 
 /*
  * importFile
- *    importe le fichier &quot;in_filename&quot; dans la base de données
- *    en tant qu'objet &quot;lobjOid&quot;
+ *    importe le fichier "in_filename" dans la base de données
+ *    en tant qu'objet "lobjOid"
  *
  */
 Oid
@@ -447,9 +472,9 @@
      * ouvre le fichier à lire
      */
     fd = open(filename, O_RDONLY, 0666);
-    if (fd &lt; 0)
+    if (fd < 0)
     {                           /* error */
-        fprintf(stderr, &quot;can't open unix file %s\n&quot;, filename);
+        fprintf(stderr, "can't open unix file %s\n", filename);
     }
 
     /*
@@ -457,18 +482,18 @@
      */
     lobjId = lo_creat(conn, INV_READ | INV_WRITE);
     if (lobjId == 0)
-        fprintf(stderr, &quot;can't create large object\n&quot;);
+        fprintf(stderr, "can't create large object\n");
 
     lobj_fd = lo_open(conn, lobjId, INV_WRITE);
 
     /*
      * lit le fichier Unix écrit dans le fichier inversion
      */
-    while ((nbytes = read(fd, buf, BUFSIZE)) &gt; 0)
+    while ((nbytes = read(fd, buf, BUFSIZE)) > 0)
     {
         tmp = lo_write(conn, lobj_fd, buf, nbytes);
-        if (tmp &lt; nbytes)
-            fprintf(stderr, &quot;error while reading large object\n&quot;);
+        if (tmp < nbytes)
+            fprintf(stderr, "error while reading large object\n");
     }
 
     (void) close(fd);
@@ -486,9 +511,9 @@
     int         nread;
 
     lobj_fd = lo_open(conn, lobjId, INV_READ);
-    if (lobj_fd &lt; 0)
+    if (lobj_fd < 0)
     {
-        fprintf(stderr, &quot;can't open large object %d\n&quot;,
+        fprintf(stderr, "can't open large object %d\n",
                 lobjId);
     }
 
@@ -496,15 +521,15 @@
     buf = malloc(len + 1);
 
     nread = 0;
-    while (len - nread &gt; 0)
+    while (len - nread > 0)
     {
         nbytes = lo_read(conn, lobj_fd, buf, len - nread);
         buf[nbytes] = ' ';
-        fprintf(stderr, &quot;&gt;&gt;&gt; %s&quot;, buf);
+        fprintf(stderr, ">>> %s";, buf);
         nread += nbytes;
     }
     free(buf);
-    fprintf(stderr, &quot;\n&quot;);
+    fprintf(stderr, "\n");
     lo_close(conn, lobj_fd);
 }
 
@@ -518,34 +543,34 @@
     int         i;
 
     lobj_fd = lo_open(conn, lobjId, INV_WRITE);
-    if (lobj_fd &lt; 0)
+    if (lobj_fd < 0)
     {
-        fprintf(stderr, &quot;can't open large object %d\n&quot;,
+        fprintf(stderr, "can't open large object %d\n",
                 lobjId);
     }
 
     lo_lseek(conn, lobj_fd, start, SEEK_SET);
     buf = malloc(len + 1);
 
-    for (i = 0; i &lt; len; i++)
+    for (i = 0; i < len; i++)
         buf[i] = 'X';
     buf[i] = ' ';
 
     nwritten = 0;
-    while (len - nwritten &gt; 0)
+    while (len - nwritten > 0)
     {
         nbytes = lo_write(conn, lobj_fd, buf + nwritten, len - nwritten);
         nwritten += nbytes;
     }
     free(buf);
-    fprintf(stderr, &quot;\n&quot;);
+    fprintf(stderr, "\n");
     lo_close(conn, lobj_fd);
 }
 
 /*
  * exportFile
- *    exporte l'objet large &quot;lobjOid&quot; dans le fichier
- * &quot;out_filename&quot;
+ *    exporte l'objet large "lobjOid" dans le fichier
+ * "out_filename"
  *
  */
 void
@@ -558,12 +583,12 @@
     int         fd;
 
     /*
-     * ouvre l'&quot;objet&quot; large
+     * ouvre l' « objet » large
      */
     lobj_fd = lo_open(conn, lobjId, INV_READ);
-    if (lobj_fd &lt; 0)
+    if (lobj_fd < 0)
     {
-        fprintf(stderr, &quot;can't open large object %d\n&quot;,
+        fprintf(stderr, "can't open large object %d\n",
                 lobjId);
     }
 
@@ -571,21 +596,21 @@
      * ouvre le fichier à écrire
      */
     fd = open(filename, O_CREAT | O_WRONLY, 0666);
-    if (fd &lt; 0)
+    if (fd < 0)
     {                           /* error */
-        fprintf(stderr, &quot;can't open unix file %s\n&quot;,
+        fprintf(stderr, "can't open unix file %s\n",
                 filename);
     }
 
     /*
      * lit à partir du fichier inversion et écrit dans le fichier Unix
      */
-    while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) &gt; 0)
+    while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0)
     {
         tmp = write(fd, buf, nbytes);
-        if (tmp &lt; nbytes)
+        if (tmp < nbytes)
         {
-            fprintf(stderr, &quot;error while writing %s\n&quot;,
+            fprintf(stderr, "error while writing %s\n",
                     filename);
         }
     }
@@ -615,7 +640,7 @@
 
     if (argc != 4)
     {
-        fprintf(stderr, &quot;Usage: %s database_name in_filename out_filename\n&quot;,
+        fprintf(stderr, "Usage: %s database_name in_filename out_filename\n",
                 argv[0]);
         exit(1);
     }
@@ -632,32 +657,32 @@
     /* check to see that the backend connection was successfully made */
     if (PQstatus(conn) == CONNECTION_BAD)
     {
-        fprintf(stderr, &quot;Connection to database '%s' failed.\n&quot;, database);
-        fprintf(stderr, &quot;%s&quot;, PQerrorMessage(conn));
+        fprintf(stderr, "Connection to database '%s' failed.\n", database);
+        fprintf(stderr, "%s", PQerrorMessage(conn));
         exit_nicely(conn);
     }
 
-    res = PQexec(conn, &quot;begin&quot;);
+    res = PQexec(conn, "begin");
     PQclear(res);
 
-    printf(&quot;importing file %s\n&quot;, in_filename);
+    printf("importing file %s\n", in_filename);
 /*  lobjOid = importFile(conn, in_filename); */
     lobjOid = lo_import(conn, in_filename);
 /*
-    printf(&quot;as large object %d.\n&quot;, lobjOid);
+    printf("as large object %d.\n", lobjOid);
 
-    printf(&quot;picking out bytes 1000-2000 of the large object\n&quot;);
+    printf("picking out bytes 1000-2000 of the large object\n");
     pickout(conn, lobjOid, 1000, 1000);
 
-    printf(&quot;overwriting bytes 1000-2000 of the large object with X's\n&quot;);
+    printf("overwriting bytes 1000-2000 of the large object with X's\n");
     overwrite(conn, lobjOid, 1000, 1000);
 */
 
-    printf(&quot;exporting large object to file %s\n&quot;, out_filename);
+    printf("exporting large object to file %s\n", out_filename);
 /*    exportFile(conn, lobjOid, out_filename); */
     lo_export(conn, lobjOid, out_filename);
 
-    res = PQexec(conn, &quot;end&quot;);
+    res = PQexec(conn, "end");
     PQclear(res);
     PQfinish(conn);
     exit(0);

Modified: traduc/trunk/postgresql/maintenance.xml
===================================================================
--- traduc/trunk/postgresql/maintenance.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/maintenance.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -20,7 +20,7 @@
    tâches soient réalisées de façon régulière pour atteindre les performances
    optimales. Ces tâches, discutées maintenant, sont <emphasis>requises</emphasis>
    mais elles sont répétitives par nature et peuvent être facilement automatisées
-   en utilisant des outils Unix standards comme les scripts
+   en utilisant des outils standards comme les scripts
    <application>cron</application> ou le <application>Task Scheduler</application>
    de Windows. La responsabilité de la mise en place de ces
    scripts et du contrôle de leur bon fonctionnement relève de l'administrateur
@@ -50,6 +50,14 @@
   </para>
 
   <para>
+   <ulink
+   url="http://bucardo.org/check_postgres/"><application>check_postgres.pl</></ulink>
+   is available for monitoring database health and reporting unusual
+   conditions.  <application>check_postgres.pl</> integrates with
+   Nagios and MRTG, but can be run standalone too.
+  </para>
+
+  <para>
    <productname>PostgreSQL</productname> demande peu de maintenance par rapport
    à d'autres SGBD. Néanmoins, un suivi vigilant de ces tâches participera
    beaucoup à rendre le système productif et agréable à utiliser.
@@ -63,9 +71,28 @@
   </indexterm>
 
   <para>
+   <productname>PostgreSQL</productname> databases require periodic
+   maintenance known as <firstterm>vacuuming</>.  For many installations, it
+   is sufficient to let vacuuming be performed by the <firstterm>autovacuum
+   daemon</>, which is described in <xref linkend="autovacuum">.  You might
+   need to adjust the autovacuuming parameters described there to obtain best
+   results for your situation.  Some database administrators will want to
+   supplement or replace the daemon's activities with manually-managed
+   <command>VACUUM</> commands, which typically are executed according to a
+   schedule by <application>cron</application> or <application>Task
+   Scheduler</> scripts.  To set up manually-managed vacuuming properly,
+   it is essential to understand the issues discussed in the next few
+   subsections.  Administrators who rely on autovacuuming may still wish
+   to skim this material to help them understand and adjust autovacuuming.
+  </para>
+
+  <sect2 id="vacuum-basics">
+   <title>Vacuuming Basics</title>
+
+  <para>
    La commande <xref linkend="sql-vacuum" endterm="sql-vacuum-title"/> de
-   <productname>PostgreSQL</productname> doit être exécutée régulièrement pour
-   plusieurs raisons&nbsp;:
+   <productname>PostgreSQL</productname> doit traiter chaque table régulièrement
+   pour plusieurs raisons&nbsp;:
 
     <orderedlist>
      <listitem>
@@ -85,28 +112,38 @@
     </orderedlist>
   </para>
 
-  <para>
-   La forme standard de <command>VACUUM</command> peut s'exécuter en parallèle
-   avec les opérations de production de la base. Les commandes telles que
-   <command>SELECT</command>, <command>INSERT</command>, <command>UPDATE</command>
-   et <command>DELETE</command> continueront à fonctionner comme d'habitude
-   mais vous ne pourrez pas modifier la définition d'une table avec des commandes
-   comme <command>ALTER TABLE ADD COLUMN</command> lorsqu'elle est la cible du
-   VACUUM. De plus, <command>VACUUM</command> nécessite une quantité
-   supplémentaire de trafic en entrée/sortie qui peut causer des performances
-   amoindries pour les autres sessions actives. Des paramètres de
-   configuration peuvent être ajustés pour réduire l'impact sur les performances
-   du VACUUM en tâche de fond &mdash; voir
-   <xref linkend="runtime-config-resource-vacuum-cost"/>.
-  </para>
+    Each of these reasons dictates performing <command>VACUUM</> operations
+    of varying frequency and scope, as explained in the following subsections.
+   </para>
 
-  <para>
-   Heureusement, <xref linkend="autovacuum" endterm="autovacuum-title"/> surveille
-   l'activité des tables et exécute des <command>VACUUM</command> si
-   nécessaire. L'autovacuum fonctionne dynamiquement donc il est souvent
-   meilleur que des opérations de VACUUM programmées..
-  </para>
+   <para>
+    There are two variants of <command>VACUUM</>: standard <command>VACUUM</>
+    and <command>VACUUM FULL</>.  <command>VACUUM FULL</> can reclaim more
+    disk space but runs much more slowly.  Also,
+    the standard form of <command>VACUUM</> can run in parallel with production
+    database operations.  (Commands such as <command>SELECT</command>,
+    <command>INSERT</command>, <command>UPDATE</command>, and
+    <command>DELETE</command> will continue to function as normal, though you
+    will not be able to modify the definition of a table with commands such as
+    <command>ALTER TABLE</command> while it is being vacuumed.)
+    <command>VACUUM FULL</> requires exclusive lock on the table it is
+    working on, and therefore cannot be done in parallel with other use
+    of the table.  Another disadvantage of <command>VACUUM FULL</> is that
+    while it reduces table size, it does not reduce index size proportionally;
+    in fact it can make indexes <emphasis>larger</>.  Generally, therefore,
+    administrators should strive to use standard <command>VACUUM</> and
+    avoid <command>VACUUM FULL</>.
+   </para>
 
+   <para>
+    <command>VACUUM</command> creates a substantial amount of I/O
+    traffic, which can cause poor performance for other active sessions.
+    There are configuration parameters that can be adjusted to reduce the
+    performance impact of background vacuuming &mdash; see
+    <xref linkend="runtime-config-resource-vacuum-cost">.
+   </para>
+  </sect2>
+
   <sect2 id="vacuum-for-space-recovery">
    <title>Récupérer l'espace disque</title>
 
@@ -115,11 +152,11 @@
    </indexterm>
 
    <para>
-    Dans son fonctionnement normal, <productname>PostgreSQL</productname> ne
-    supprime pas immédiatement les versions périmées des lignes après un
-    <command>UPDATE</command> ou un <command>DELETE</command>.  Cette approche est
+    Avec <productname>PostgreSQL</productname>, les versions périmées des
+    lignes ne sont pas immédiatement supprimées après une commande
+    <command>UPDATE</command> ou <command>DELETE</command>.  Cette approche est
     nécessaire pour la consistance des accès
-    concurrents (voir le <xref linkend="mvcc"/>)&nbsp;: les versions de la ligne ne
+    concurrents (voir le <xref linkend="mvcc"/>)&nbsp;: la version de la ligne ne
     doit pas être supprimée tant qu'elle est susceptible d'être lue par une
     autre transaction. Mais finalement, une ligne qui est plus vieille que
     toutes les transactions en cours n'est plus utile du tout. La place qu'elle
@@ -129,72 +166,59 @@
    </para>
 
    <para>
-    Il existe deux variantes de la commande <command>VACUUM</command>. La
-    première forme, connu en tant que <quote>vacuum fainéant</quote> ou plus
-    simplement <command>VACUUM</command>, marque les données mortes dans les
-    tables et les index pour une utilisation future&nbsp;; il ne tente
-    <emphasis>pas</emphasis> de récupérer l'espace utilisée par
-    cette donnée morte sauf si l'espace est à la fin de la table et qu'un
-    verrou exclusif de table puisse être facilement obtenu. L'espace inutilisé
-    au début ou au milieu du fichier ne résulte pas en un raccourcissement du
-    fichier et de l'espace redonné au système d'exploitation. Cette variante de
-    <command>VACUUM</command> peut être lancé en concurrence avec les autres
-    opérations normales de la base de données.
+    The standard form of <command>VACUUM</command> removes dead row
+    versions in tables and indexes and marks the space available for
+    future reuse.  However, it will not return the space to the operating
+    system, except in the special case where one or more pages at the
+    end of a table become entirely free and an exclusive table lock can be
+    easily obtained.  In contrast, <command>VACUUM FULL</> actively compacts
+    tables by moving row versions to earlier pages.  It is thus able to
+    force pages at the end of the table to become entirely free, whereupon
+    it will return them to the operating system.  However, if many rows
+    must be moved, this can take a long time.  Also, moving a row requires
+    transiently making duplicate index entries for it (the entry pointing
+    to its new location must be made before the old entry can be removed);
+    so moving a lot of rows this way causes severe index bloat.
    </para>
 
    <para>
-   La seconde forme est la commande <command>VACUUM FULL</command>. Elle utilise
-   un algorithme plus agressif pour récupérer l'espace consommé par les versions
-   mortes des lignes. Tout espace qui est libéré par <command>VACUUM
-   FULL</command> est immédiatement rendu au système d'exploitation et les
-   données de la table sont compressées sur le disque. Malheureusement,
-   cette variante de la commande <command>VACUUM</command> acquiert un verrou
-   exclusif sur chaque table avant que <command>VACUUM FULL</command> ne la
-   traite. Du coup, utiliser fréquemment <command>VACUUM FULL</command> peut
-   avoir un effet extrêmement négatif sur les performances des requêtes
-   concurrentes sur la base de données.
+    The usual goal of routine vacuuming is to do standard <command>VACUUM</>s
+    often enough to avoid needing <command>VACUUM FULL</>.  The
+    autovacuum daemon attempts to work this way, and in fact will
+    never issue <command>VACUUM FULL</>.  In this approach, the idea
+    is not to keep tables at their minimum size, but to maintain steady-state
+    usage of disk space: each table occupies space equivalent to its
+    minimum size plus however much space gets used up between vacuumings.
+    Although <command>VACUUM FULL</> can be used to shrink a table back
+    to its minimum size and return the disk space to the operating system,
+    there is not much point in this if the table will just grow again in the
+    future.  Thus, moderately-frequent standard <command>VACUUM</> runs are a
+    better approach than infrequent <command>VACUUM FULL</> runs for
+    maintaining heavily-updated tables.
    </para>
 
    <para>
-    La forme standard de <command>VACUUM</command> est mieux utilisé dans le but de
-    maintenir une utilisation simple de l'espace disque. Donc, vous avez besoin
-    de redonner de l'espace disque au système d'exploitation, vous pouvez
-    utiliser <command>VACUUM FULL</command> &mdash; mais quel est l'intérêt de redonner
-    de l'espace disque qui devra ensuite être de nouveau alloué&nbsp;? Des
-    <command>VACUUM</command> standard et d'une fréquence modérée sont une meilleure
-    approche que des <command>VACUUM FULL</command>, même non fréquents, pour maintenir
-    des tables mises à jour fréquemment.
+    Some administrators prefer to schedule vacuuming themselves, for example
+    doing all the work at night when load is low.
+    The difficulty with doing vacuuming according to a fixed schedule
+    is that if a table has an unexpected spike in update activity, it may
+    get bloated to the point that <command>VACUUM FULL</> is really necessary
+    to reclaim space.  Using the autovacuum daemon alleviates this problem,
+    since the daemon schedules vacuuming dynamically in response to update
+    activity.  It is unwise to disable the daemon completely unless you
+    have an extremely predictable workload.  One possible compromise is
+    to set the daemon's parameters so that it will only react to unusually
+    heavy update activity, thus keeping things from getting out of hand,
+    while scheduled <command>VACUUM</>s are expected to do the bulk of the
+    work when the load is typical.
    </para>
-
+   
    <para>
-    Heureusement, l'autovacuum (<xref linkend="autovacuum"/>) surveille
-    l'activité des tables et exécute des opérations <command>VACUUM</command>
-    si nécessaire. Ceci élimine le besoin pour les administrateurs de
-    s'inquiéter pour récupération de la place disque dans la plupart des cas.
-   </para>
-
-   <para>
-    Pour les administrateurs qui veulent contrôler <command>VACUUM</command>
-    eux-mêmes, la forme standard du <command>VACUUM</command> est mieux
-    utilisée pour maintenir une bonne utilisation de l'espace disque. Si vous
-    avez besoin de récupérer l'espace disque, vous pouvez utiliser 
-    <command>VACUUM FULL</command> mais c'est déconseillé si la table va
-    grossir de nouveau dans le futur. Des exécutions modérément fréquentes
-    du <command>VACUUM</command> standard sont une meilleure approche que des
-    <command>VACUUM FULL</command> occasionnels pour maintenir des tables
-    fréquemment mises à jour. Néanmoins, si des tables fréquemment mises à
-    jour n'ont pas eu de <command>VACUUM</command> fréquent, vous pouvez
-    utiliser <command>VACUUM FULL</command> ou <command>CLUSTER</command>
-    pour obtenir de nouveau de bonnes performances (il est bien plus lent
-    de parcourir une table contenant une grosse majorité de lignes mortes).
-   </para>
-
-   <para>
-    Pour ceux qui n'utilisent pas autovacuum, une approche alternative est de
+    Pour ceux qui n'utilisent pas autovacuum, une approche typique alternative est de
     planifier un <command>VACUUM</command> sur la base complète une fois
     par jour lorsque l'utilisation n'est pas grande, avec en plus des
     opérations de <command>VACUUM</command> plus fréquentes pour les tables
-    très impactées par des mises à jour, si nécessaire.
+    très impactées par des mises à jour, de la façon adéquate.
     (Certaines installations avec énormément de mises à jour peuvent exécuter
     des VACUUM toutes les quelques minutes.) Si vous avez plusieurs bases dans
     un cluster, n'oubliez pas d'exécuter un <command>VACUUM</command> sur
@@ -202,23 +226,37 @@
     linkend="app-vacuumdb" endterm="app-vacuumdb-title"/> pourrait être utile.
    </para>
 
+   <tip>
    <para>
-    <command>VACUUM FULL</command> est recommandé dans les cas où vous savez que vous
-    avez supprimé la majorité des lignes dans une table, de façon à ce que la
-    taille de la table soit réduit de façon conséquente avec l'approche plus
-    plus agressive de <command>VACUUM FULL</command>. Utilisez le <command>VACUUM</command>
-    standard, et non pas <command>VACUUM FULL</command>, pour les nettoyages standards.
+    Neither form of <command>VACUUM</> is entirely satisfactory when
+    a table contains large numbers of dead row versions as a result of
+    massive update or delete activity.  If you have such a table and
+    you need to reclaim the excess disk space it occupies, the best
+    way is to use <xref linkend="sql-cluster" endterm="sql-cluster-title">
+    or one of the table-rewriting variants of
+    <xref linkend="sql-altertable" endterm="sql-altertable-title">.
+    These commands rewrite an entire new copy of the table and build
+    new indexes for it.  Like <command>VACUUM FULL</>, they require
+    exclusive lock.  Note that they also temporarily use extra disk
+    space, since the old copies of the table and indexes can't be
+    released until the new ones are complete.  In the worst case where
+    your disk is nearly full, <command>VACUUM FULL</> may be the only
+    workable alternative.
    </para>
+   </tip>
 
+   <tip>
    <para>
     Si vous avez une table dont le contenu entier est supprimé sur une base périodique,
-    considérez de le faire avec <command>TRUNCATE</command> plutôt qu'avec
+    considérez de le faire avec <xref linkend="sql-truncate" endterm="sql-truncate-title"> plutôt qu'avec
     <command>DELETE</command> suivi par un <command>VACUUM</command>.
     <command>TRUNCATE</command> supprime le contenu entier de la table
     immédiatement sans nécessiter un <command>VACUUM</command> ou
     <command>VACUUM FULL</command> pour réclamer l'espace disque maintenant
     inutilisé.
-</para>
+    The disadvantage is that strict MVCC semantics are violated.
+   </para>
+   </tip>
   </sect2>
 
   <sect2 id="vacuum-for-statistics">
@@ -246,6 +284,18 @@
    </para>
 
    <para>
+    The autovacuum daemon, if enabled, will automatically issue
+    <command>ANALYZE</> commands whenever the content of a table has
+    changed sufficiently.  However, administrators might prefer to rely
+    on manually-scheduled <command>ANALYZE</> operations, particularly
+    if it is known that update activity on a table will not affect the
+    statistics of <quote>interesting</> columns.  The daemon schedules
+    <command>ANALYZE</> strictly as a function of the number of rows
+    inserted or updated; it has no knowledge of whether that will lead
+    to meaningful statistical changes.
+   </para>
+
+   <para>
     À l'instar du nettoyage pour récupérer l'espace, les statistiques doivent
     être plus souvent collectées pour les tables intensément modifiées que pour
     celles qui le sont moins. Mais même si la table est très modifiée, il se
@@ -267,7 +317,7 @@
     mettre à jour certaines statistiques plus souvent que les autres en
     fonction des besoins de l'application. Quoi qu'il en soit, dans la pratique,
     il est généralement mieux de simplement analyser la base entière car il s'agit
-    d'une opération rapide. Elle utilise un système d'échantillonage des lignes d'une
+    d'une opération rapide. <command>ANALYZE</> utilise un système d'échantillonage des lignes d'une
     table, ce qui lui évite de lire chaque ligne.
    </para>
 
@@ -278,26 +328,11 @@
      le niveau de détail des statistiques collectées pour chaque colonne. Les
      colonnes très utilisées dans les clauses <literal>WHERE</literal> et dont la
      distribution n'est pas uniforme requièrent des histogrammes plus précis
-     que les autres colonnes. Voir <command>ALTER TABLE SET STATISTICS</command>.
+     que les autres colonnes. Voir <command>ALTER TABLE SET STATISTICS</command>,
+     or change the database-wide default using the <xref
+     linkend="guc-default-statistics-target"> configuration parameter.
     </para>
    </tip>
-
-   <para>
-    Heureusement, <xref linkend="autovacuum" endterm="autovacuum-title"/> surveille
-    l'activité des tables et exécute des opérations <command>ANALYZE</command>
-    si nécessaire. Ceci élimine le besoin pour les administrateurs de
-    planifier manuellement ces opérations.
-   </para>
-
-   <para>
-    Pour ceux qui n'utilisent pas l'autovacuum, une approche alternative
-    serait de planifier un <command>ANALYZE</command> sur la base complète
-    au moins une fois par jour&nbsp;; cela peut être combiné avec un
-    <command>VACUUM</command> le soir. Néanmoins, les sites avec relativement
-    peu de modifications dans les statistiques de table peuvent trouver cela
-    trop et peut-être que des <command>ANALYZE</command> moins fréquents
-    seraient suffisants.
-   </para>
   </sect2>
 
   <sect2 id="vacuum-for-wraparound">
@@ -348,11 +383,15 @@
    </para>
 
    <para>
-    Le comportement du <command>VACUUM</command> est contrôlé par le paramètre
-    de configuration <xref linkend="guc-vacuum-freeze-min-age"/>&nbsp;: tout
-    XID plus ancien que  <varname>vacuum_freeze_min_age</varname> transactions
-    est remplacé par <literal>FrozenXID</literal>. Les valeurs plus importantes
-    que <varname>vacuum_freeze_min_age</varname> préserve l'information
+    Le comportement du <command>VACUUM</command> est contrôlé par deux paramètres
+    de configuration&nbsp;: <xref linkend="guc-vacuum-freeze-min-age"/> and
+    <xref linkend="guc-vacuum-freeze-table-age">. .
+    <varname>vacuum_freeze_table_age</> controls when <command>VACUUM</>
+    performs a full sweep of the table, in order to replace old XID values 
+    with <literal>FrozenXID</>.  <varname>vacuum_freeze_min_age</> 
+    controls how old an XID value has to be before it's replaced with
+    <literal>FrozenXID</>. Les valeurs plus importantes de ces deux paramètres
+    préservent l'information
     transactionnelles plus longtemps alors que les valeurs plus petites
     augmentent le nombre de transactions qui peuvent survenir avant un nouveau
     VACUUM de la table.
@@ -360,11 +399,11 @@
 
    <para>
     Le temps maximum où une table peut rester sans VACUUM est de deux millions
-    de transactions moins <varname>vacuum_freeze_min_age</varname> qui a été
-    utilisé lors du dernier VACUUM. Si elle devait rester sans VACUUM après
+    de transactions moins <varname>vacuum_freeze_min_age</varname> quand
+    <command>VACUUM</> last scanned the whole table. Si elle devait rester sans
+    VACUUM après
     cela, des pertes de données pourraient survenir. Pour s'assurer que cela
-    n'arrive pas, <xref linkend="autovacuum" endterm="autovacuum-title"/> décrit dans
-    <xref linkend="autovacuum"/> est appelé sur chaque table qui pourrait
+    n'arrive pas, autovacuum est appelé sur chaque table qui pourrait
     contenir des XID plus âgés que ne l'indique le paramètre de configuration
     <xref linkend="guc-autovacuum-freeze-max-age"/>. (Ceci arrivera même si
     autovacuum est désactivé.)
@@ -386,12 +425,14 @@
    </para>
 
    <para>
-    Le seul inconvénient à augmenter <varname>autovacuum_freeze_max_age</varname>
+    Le seul inconvénient à augmenter <varname>vacuum_freeze_table_age</> et
+    <varname>autovacuum_freeze_max_age</varname>
     est que le sous-répertoire <filename>pg_clog</filename> du cluster prendre
     plus de place car il doit stocker le statut du COMMIT pour toutes les
     transactions depuis <varname>autovacuum_freeze_max_age</varname>. L'état de
     COMMIT utilise deux bits par transaction, donc si
-    <varname>autovacuum_freeze_max_age</varname> a une valeur maximum permise
+    <varname>autovacuum_freeze_max_age</varname> et
+    <varname>vacuum_freeze_table_age</> ont une valeur maximum permise
     d'un peu moins que deux billion, <filename>pg_clog</filename> peut grossir
     jusqu'à la moitié d'un Go. Si c'est rien comparé à votre taille de base
     totale, configurer <varname>autovacuum_freeze_max_age</varname> à son
@@ -437,16 +478,27 @@
 SELECT datname, age(datfrozenxid) FROM pg_database;</programlisting>
 
     La colonne <literal>age</literal> mesure le nombre de transactions à partir
-    du XID final vers le XID de transaction en cours. Immédiatement après un
-    <command>VACUUM</command>, <literal>age(relfrozenxid)</literal> devrait être
-    un peu plus que le paramètre <varname>vacuum_freeze_min_age</varname> qui a
-    été utilisé (plus par le nombre de transactions commencées depuis l'exécution
-    de <command>VACUUM</command>). Si <literal>age(relfrozenxid)</literal> dépasse
-    <varname>autovacuum_freeze_max_age</varname>, un autovacuum sera bientôt
-    forcé sur la table.
+    du XID final vers le XID de transaction en cours. When <command>VACUUM</>
+    scans the whole table, after it's finished <literal>age(relfrozenxid)</>
+    should be a little more than the <varname>vacuum_freeze_min_age</> setting
+    that was used (more by the number of transactions started since the
+    <command>VACUUM</> started).
    </para>
 
    <para>
+    <command>VACUUM</> normally only scans pages that have been modified
+    since last vacuum, but <structfield>relfrozenxid</> can only be advanced
+    when the whole table is scanned. The whole table is scanned when
+    <structfield>relfrozenxid</> is more than
+    <varname>vacuum_freeze_table_age</> transactions old, if
+    <command>VACUUM FREEZE</> command is used, or if all pages happen to
+    require vacuuming to remove dead row versions. If no whole-table-scanning
+    <command>VACUUM</> is issued on the table until
+    <varname>autovacuum_freeze_max_age</> is reached, an autovacuum will soon
+    be forced for the table.
+   </para>
+
+   <para>
     Si pour une certaine raison l'autovacuum échoue à effacer les anciens XID
     d'une table, le système commencera à émettre des messages d'avertissement
     comme ceci quand les plus anciens XID de la base atteignent les 10 millions
@@ -454,9 +506,13 @@
 
 <programlisting>
 WARNING:  database "mydb" must be vacuumed within 177009986 transactions
-HINT:  To avoid a database shutdown, execute a full-database VACUUM in "mydb".
+HINT:  To avoid a database shutdown, execute a database-wide VACUUM in "mydb".
 </programlisting>
 
+    (A manual <command>VACUUM</> should fix the problem, as suggested by the
+    hint; but note that the <command>VACUUM</> must be performed by a
+    superuser, else it will fail to process system catalogs and thus not
+    be able to advance the database's <structfield>datfrozenxid</>.)
     Si ces avertissements sont ignorés, le système s'arrêtera et refusera
     d'exécuter toute nouvelle transaction dès qu'il n'en restera qu'un
     million avant la réinitialisation&nbsp;:
@@ -486,8 +542,8 @@
     <secondary>information générale</secondary>
    </indexterm>
    <para>
-    À partir de <productname>PostgreSQL </productname> 8.1, il existe un
-    processus serveur optionnel appelé <firstterm>autovacuum</firstterm>,
+    <productname>PostgreSQL </productname> dispose d'une fonctionnalité
+    optionnelle mais hautement recommandée appelée <firstterm>autovacuum</firstterm>,
     dont le but est d'automatiser l'exécution des commandes
     <command>VACUUM</command> et <command>ANALYZE </command>. Une fois activé,
     autovacuum vérifie les tables ayant un grand nombre de lignes insérées,
@@ -500,9 +556,9 @@
    </para>
 
    <para>
-    À partir de <productname>PostgreSQL</productname> 8.3, l'autovacuum a
-    une architecture multi-processus&nbsp;: il y a un processus démon appelé
-    le lanceur d'autovacuum (<firstterm>autovacuum launcher</firstterm>), qui
+    The <quote>autovacuum daemon</> actually consists of multiple processes.
+    Un processus démon permanent appelé <firstterm>autovacuum launcher</firstterm>
+    (autrement dit le lanceur d'autovacuum), qui
     est en charge de lancer un processus travailleur (<firstterm>autovacuum
     worker</firstterm>) pour toutes les bases de données. Le lanceur distribuera
     le travail dans le temps mais essaiera de lancer un nouveau travailleur sur
@@ -535,8 +591,8 @@
    <para>
     Les tables dont la valeur de <structfield>relfrozenxid</structfield> est
     plus importante que <varname>autovacuum_freeze_max_age</varname> sont
-    toujours l'objet d'un VACUUM. Sinon, deux conditions sont utilisées pour
-    déterminer l'opération qui s'applique. Si le nombre de lignes obsolètes
+    toujours l'objet d'un VACUUM (this also applies to those tables whose freeze max age has
+    been modified via storage parameters; see below). Sinon, si le nombre de lignes obsolètes
     depuis le dernier <command>VACUUM</command> dépasse une <quote>limite de
     vacuum</quote>, la table bénéficie d'un VACUUM. La limite est définie
     ainsi&nbsp;:
@@ -551,7 +607,11 @@
     statistiques&nbsp;; c'est un nombre à peu près précis, mis à jour après
     chaque instruction <command>UPDATE</command> et <command>DELETE</command>
     (il est seulement à peu près précis car certaines informations pourraient
-    être perdues en cas de grosse charge). Pour ANALYZE, une condition similaire
+    être perdues en cas de grosse charge).
+   </para>
+
+   <para>
+    Pour ANALYZE, une condition similaire
     est utilisée&nbsp;: la limite, définie comme
 <programlisting>limite du analyze = limite de base du analyze + facteur d'échelle du analyze * nombre de lignes</programlisting>
     est comparée au nombre de lignes insérées ou mises à jour depuis
@@ -561,66 +621,39 @@
    <para>
     Les limites et facteurs d'échelle par défaut sont pris dans
     <filename>postgresql.conf</filename>, mais il est possible de les surcharger
-    table par table avec des entrées du catalogue système <link
-    linkend="catalog-pg-autovacuum"><structname>pg_autovacuum</structname></link>.
-    Si une ligne <structname>pg_autovacuum</structname> existe pour une table
-    particulière, les paramètres qu'elle indique sont appliqués&nbsp;; sinon les
-    paramètres globaux sont utilisés. Voir <xref linkend="runtime-config-autovacuum"/>
-    pour plus de détails sur les paramètres globaux.
+    table par table; see 
+    <xref linkend="sql-createtable-storage-parameters"
+    endterm="sql-createtable-storage-parameters-title"> for more information.
+    If a setting
+    has been changed via storage parameters, that value is used; otherwise the
+    global settings are used. See <xref linkend="runtime-config-autovacuum"> for
+    more details on the global settings.
    </para>
 
    <para>
     En plus des valeurs de la limite de base et des facteurs d'échelle, il
-    existe cinq autres paramètres pouvant être configurés pour chaque table
-    dans <structname>pg_autovacuum</structname>. Le premier,
-    <structname>pg_autovacuum</structname>.<structfield>enabled</structfield>,
+    existe six autres paramètres autovacuum pouvant être configurés pour chaque table
+    via storage parameters.. Le premier paramètre, <literal>autovacuum_enabled</>,
     peut être configuré à <literal>false</literal> pour instruire le démon
     autovacuum de laisser cette table particulière. Dans ce cas, autovacuum
     touchera seulement la table quand il devra le faire pour prévenir la
-    réinitialisation de l'ID de transaction. Les deux paramètres suivants, le
-    délai du coût du VACUUM
-    (<structname>pg_autovacuum</structname>.<structfield>vac_cost_delay</structfield>)
+    réinitialisation de l'ID de transaction. Deux autres paramètres, le
+    délai du coût du VACUUM (<literal>autovacuum_vacuum_cost_delay</literal>)
     et la limite du coût du VACUUM
-    (<structname>pg_autovacuum</structname>.<structfield>vac_cost_limit</structfield>),
+    (<literal>autovacuum_vacuum_cost_limit</literal>),
     sont utilisés pour configurer des valeurs spécifiques aux tables pour
     la fonctionnalité <xref linkend="runtime-config-resource-vacuum-cost"
     endterm="runtime-config-resource-vacuum-cost-title"/>.
-    Les deux derniers paramètres,
-    (<structname>pg_autovacuum</structname>.<structfield>freeze_min_age</structfield>)
-    et
-    (<structname>pg_autovacuum</structname>.<structfield>freeze_max_age</structfield>), 
+    <literal>autovacuum_freeze_min_age</literal>,
+    <literal>autovacuum_freeze_max_age</literal> et
+    <literal>autovacuum_freeze_table_age</literal>
     sont utilisés pour configurer des valeurs par table, respectivement
-    <xref linkend="guc-vacuum-freeze-min-age"/> et
-    <xref linkend="guc-autovacuum-freeze-max-age"/>.
+    <xref linkend="guc-vacuum-freeze-min-age"/>,
+    <xref linkend="guc-autovacuum-freeze-max-age"/> et
+    <xref linkend="guc-vacuum-freeze-table-age">.
    </para>
 
    <para>
-    Si une des valeurs dans <structname>pg_autovacuum</structname> est négative
-    ou si aucune ligne n'est présente dans <structname>pg_autovacuum</structname>
-    quelque soit la table, les valeurs correspondantes de
-    <filename>postgresql.conf</filename> sont utilisées.
-   </para>
-
-   <para>
-    Il n'y a pas de support pour créer des entrées dans
-    <structname>pg_autovacuum</structname>, sauf en réalisant soi-même des
-    insertions manuelles dans le catalogue. Cette fonctionnalité sera améliorée
-    dans les prochaines versions et il est vraisemblable que la définition du
-    catalogue changera.
-   </para>
-
-   <caution>
-    <para>
-     Le contenu du catalogue système <structname>pg_autovacuum</structname>
-     n'est actuellement pas pris en compte dans les sauvegardes de bases de
-     données créées par les outils <command>pg_dump</command> et
-     <command>pg_dumpall</command>. Si vous voulez les préserver après
-     un cycle sauvegarde/restauration, assurez-vous que vous avez sauvegardé
-     manuellement le catalogue.
-    </para>
-   </caution>
-
-   <para>
     Lorsque plusieurs processus autovacuum sont en cours d'exécution, la
     limite de coût est <quote>répartie</quote> parmi tous les processus pour
     que l'impact total sur le système soit identique quelque soit le nombre

Modified: traduc/trunk/postgresql/mvcc.xml
===================================================================
--- traduc/trunk/postgresql/mvcc.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/mvcc.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -252,21 +252,20 @@
    </indexterm>
 
    <para>
-    <firstterm>Read Commited</firstterm>
-    est le niveau d'isolation par défaut de
-    <productname>PostgreSQL</productname>. Lorsqu'une transaction fonctionne
-    avec ce niveau d'isolation, une requête <command>SELECT</command> voit
-    uniquement les données validées avant que la requête soit lancée&nbsp;;
-    elle ne voit jamais, lors de l'exécution de la requête, ni les données 
-    non validées ni les modifications validées par les transactions concurrentes
-    (néanmoins, le <command>SELECT</command> voit les effets des
-    précédentes mises à jour dans sa propre transaction, et ce même si elles ne
-    sont pas validées). Dans les faits, une requête <command>SELECT</command> voit
-    une image de la base de données à l'instant où la requête a été lancée.
-    Notez que des commandes <command>SELECT</command> successives peuvent voir
-    des données différentes, y compris si elles font partie de la même
-    transaction, si d'autres transactions valident des modifications de données
-    pendant l'exécution du premier <command>SELECT</command>.
+    <firstterm>Read Committed</firstterm> is the default isolation
+    level in <productname>PostgreSQL</productname>.  When a transaction
+    uses this isolation level, a <command>SELECT</command> query
+    (without a <literal>FOR UPDATE/SHARE</> clause) sees only data
+    committed before the query began; it never sees either uncommitted
+    data or changes committed during query execution by concurrent
+    transactions.  In effect, a <command>SELECT</command> query sees
+    a snapshot of the database as of the instant the query begins to
+    run.   However, <command>SELECT</command> does see the effects
+    of previous updates executed within its own transaction, even
+    though they are not yet committed.  Also note that two successive
+    <command>SELECT</command> commands can see different data, even
+    though they are within a single transaction, if other transactions
+    commit changes during execution of the first <command>SELECT</command>.
    </para>
 
    <para>
@@ -288,23 +287,23 @@
     condition de la recherche de la commande (la clause <literal>WHERE</literal>) est
     ré-évaluée pour savoir si la version mise à jour de la ligne correspond
     toujours à la condition de recherche. Dans ce cas, la deuxième mise à jour
-    continue son opération en commençant par la version mise à jour de la
-    ligne (dans le cas des commandes <command>SELECT FOR UPDATE</command> et
+    continue son opération en utilisant la version mise à jour de la
+    ligne. Dans le cas des commandes <command>SELECT FOR UPDATE</command> et
     <command>SELECT FOR SHARE</command>, cela signifie que la version mise à
-    jour de la ligne est verrouillée et renvoyée au client).
+    jour de la ligne est verrouillée et renvoyée au client.
    </para>
 
    <para>
     À cause de la règle ci-dessus, une commande de mise à jour a la
     possibilité de voir une image non cohérente&nbsp;: elle peut voir les effets
-    de commandes de mises à jour concurrentes affectant les mêmes lignes que
+    de commandes de mises à jour concurrentes sur les mêmes lignes que
     celles qu'elle essaie de mettre à jour mais elle ne voit pas les effets de
     ces commandes sur les autres lignes de la base de données. Ce comportement
     rend le mode de lecture validée non convenable pour les commandes qui
-    impliquent des conditions de recherche complexes. Néanmoins, il est
+    impliquent des conditions de recherche complexes&nbsp;; néanmoins, il est
     intéressant pour
     les cas simples. Par exemple, considérons la mise à jour de balances de
-    banque avec des transactions comme
+    banque avec des transactions comme&nbsp;:
 
 <screen>BEGIN;
 UPDATE comptes SET balance = balance + 100.00 WHERE no_compte = 12345;
@@ -319,22 +318,46 @@
    </para>
 
    <para>
-    Comme dans le mode de lecture validée, chaque nouvelle commande commence
-    avec une nouvelle image incluant toutes les transactions validées jusque là,
-    les commandes suivantes dans la transaction verront les effets
-    de la transaction concurrente validée dans tous les cas. La problématique
-    ici est de savoir si à l'intérieur d'une <emphasis>même</emphasis> commande, nous
-    avons ou non une vision totalement cohérente de la base de données.
+    More complex usage can produce undesirable results in Read Committed
+    mode.  For example, consider a <command>DELETE</command> command
+    operating on data that is being both added and removed from its
+    restriction criteria by another command, e.g. assume
+    <literal>website</literal> is a two-row table with
+    <literal>website.hits</literal> equaling <literal>9</literal> and
+    <literal>10</literal>:
+
+<screen>
+BEGIN;
+UPDATE website SET hits = hits + 1;
+-- run from another session:  DELETE FROM website WHERE hits = 10;
+COMMIT;
+</screen>
+
+    The <command>DELETE</command> will have no effect even though
+    there is a <literal>website.hits = 10</literal> row before and
+    after the <command>UPDATE</command>. This occurs because the
+    pre-update row value <literal>9</> is skipped, and when the
+    <command>UPDATE</command> completes and <command>DELETE</command>
+    obtains a lock, the new row value is no longer <literal>10</> but
+    <literal>11</>, which no longer matches the criteria.
    </para>
 
    <para>
-    L'isolation partielle de la transaction fournie par le mode de lecture
-    validée est adéquate pour de nombreuses applications et ce mode est rapide
-    et simple à utiliser. Néanmoins, pour les applications réalisant des
-    requêtes et mises à jour complexes, il pourrait être nécessaire de garantir
-    une vue plus cohérente de la base de données que ce que fournit le mode
-    Read Commited.
+    Because Read Committed mode starts each command with a new snapshot
+    that includes all transactions committed up to that instant,
+    subsequent commands in the same transaction will see the effects
+    of the committed concurrent transaction in any case.  The point
+    at issue above is whether or not a <emphasis>single</> command
+    sees an absolutely consistent view of the database.
    </para>
+
+   <para>
+    The partial transaction isolation provided by Read Committed mode
+    is adequate for many applications, and this mode is fast and simple
+    to use;  however, it is not sufficient for all cases.  Applications
+    that do complex queries and updates might require a more rigorously
+    consistent view of the database than Read Committed mode provides.
+   </para>
   </sect2>
 
   <sect2 id="xact-serializable">

Modified: traduc/trunk/postgresql/nls.xml
===================================================================
--- traduc/trunk/postgresql/nls.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/nls.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -201,9 +201,8 @@
     qui créera un nouveau catalogue de messages vides (le fichier pot avec
     lequel la traduction a été initiée) et le fusionnera avec les fichiers PO existants.
     Si l'algorithme de fusion a une incertitude sur un message particulier,
-    il le marquera <quote>fuzzy</quote> comme expliqué ci-dessus. Dans la cas où
-    quelque chose se passerait mal, l'ancien fichier PO est sauvegardé avec une
-    extension <filename>.po.old</filename>.
+    il le marquera <quote>fuzzy</quote> comme expliqué ci-dessus. Le nouveau
+    fichier PO est sauvegardé avec l'extension <filename>.po.new</filename>.
    </para>
   </sect2>
 

Modified: traduc/trunk/postgresql/pageinspect.xml
===================================================================
--- traduc/trunk/postgresql/pageinspect.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pageinspect.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -24,7 +24,7 @@
   <variablelist>
    <varlistentry>
     <term>
-     <function>get_raw_page(text, int) returns bytea</function>
+     <function>get_raw_page(relname text, fork text, blkno int) returns bytea</function>
     </term>
 
     <listitem>
@@ -33,17 +33,32 @@
       et renvoie une copie en tant que valeur de type  <type>bytea</type>. Ceci
       permet la récupération de la copie cohérente à un instant t d'un bloc
       spécifique.
+      <literal>fork</literal> should be <literal>'main'</literal> for the main
+      data fork, or <literal>'fsm'</literal> for the FSM.
      </para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
     <term>
-     <function>page_header(bytea) returns record</function>
+     <function>get_raw_page(relname text, blkno int) returns bytea</function>
     </term>
 
     <listitem>
      <para>
+      A shorthand of above, for reading from the main fork. Equal to
+      <literal>get_raw_page(relname, 0, blkno)</literal>
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>page_header(page bytea) returns record</function>
+    </term>
+
+    <listitem>
+     <para>
       <function>page_header</function> affiche les champs communs à toutes les
       pages des tables et index <productname>PostgreSQL</productname>.
      </para>
@@ -69,7 +84,7 @@
 
    <varlistentry>
     <term>
-     <function>heap_page_items(bytea) returns setof record</function>
+     <function>heap_page_items(page bytea) returns setof record</function>
     </term>
 
     <listitem>
@@ -98,7 +113,7 @@
 
    <varlistentry>
     <term>
-     <function>bt_metap(text) returns record</function>
+     <function>bt_metap(relname text) returns record</function>
     </term>
 
     <listitem>
@@ -121,7 +136,7 @@
 
    <varlistentry>
     <term>
-     <function>bt_page_stats(text, int) returns record</function>
+     <function>bt_page_stats(relname text, blkno int) returns record</function>
     </term>
 
     <listitem>
@@ -149,7 +164,7 @@
 
    <varlistentry>
     <term>
-     <function>bt_page_items(text, int) returns setof record</function>
+     <function>bt_page_items(relname text, blkno int) returns setof record</function>
     </term>
 
     <listitem>
@@ -172,6 +187,26 @@
      </programlisting>
     </listitem>
    </varlistentry>
+
+   <varlistentry>
+    <term>
+     <function>fsm_page_contents(page bytea) returns text</function>
+    </term>
+
+    <listitem>
+     <para>
+      <function>fsm_page_contents</function> shows the internal node structure
+      of a FSM page. The output is a multi-line string, with one line per
+      node in the binary tree within the page. Only those nodes that are not
+      zero are printed. The so-called "next" pointer, which points to the
+      next slot to be returned from the page, is also printed.
+     </para>
+     <para>
+      See <filename>src/backend/storage/freespace/README</> for more
+      information on the structure of an FSM page.
+     </para>
+    </listitem>
+   </varlistentry>
   </variablelist>
  </sect2>
 

Modified: traduc/trunk/postgresql/perform.xml
===================================================================
--- traduc/trunk/postgresql/perform.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/perform.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -564,7 +564,7 @@
    sur une base colonne-par-colonne en utilisant la commande <command>ALTER
    TABLE SET STATISTICS</command> ou globalement en initialisant la variable de
    configuration <xref linkend="guc-default-statistics-target"/>. La limite par
-   défaut est actuellement de dix entrées. Augmenter la limite pourrait
+   défaut est actuellement de cent entrées. Augmenter la limite pourrait
    permettre des estimations plus précises du planificateur, en particulier
    pour les colonnes ayant des distributions de données irrégulières, au prix
    d'un plus grand espace consommé dans <structname>pg_statistic</structname> et

Modified: traduc/trunk/postgresql/pgbench.xml
===================================================================
--- traduc/trunk/postgresql/pgbench.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pgbench.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -40,7 +40,7 @@
   Les quatre premières lignes indiquent simplement certains des paramètres
   les plus importants. La ligne suivant rapporte le nombre de transactions
   terminées et souhaitées (le dernier étant juste le produit du nombre
-  de clients avec le nombre de transactions)&nbsp;; ils doivent être égaux
+  de clients avec le nombre de transactions par client)&nbsp;; ils doivent être égaux
   sauf si un échec est arrivé avant la fin. Les deux dernières lignes
   précisent le taux de transactions, avec et sans le temps de lancement
   de la session.
@@ -108,7 +108,7 @@
    Dans la plupart des cas, vous aurez besoin de quelques options pour que
    ce test soit réellement intéressant. Les options les plus importantes
    sont <literal>-c</literal> (nombre de clients), <literal>-t</literal>
-   (nombre de transactions) et <literal>-f</literal> (pour spécifier un script
+   (nombre de transactions), <literal>-T</> (time limit) et <literal>-f</literal> (pour spécifier un script
    personnalisé). Voir ci-dessous pour une liste complète.
   </para>
 
@@ -183,6 +183,32 @@
       </entry>
      </row>
      <row>
+      <entry><literal>-T</literal> <replaceable>seconds</></entry>
+      <entry>
+       Duration of benchmark test in seconds. <literal>-t</literal> and
+       <literal>-T</literal> are mutually exclusive.
+      </entry>
+     </row>
+     <row>
+      <entry><literal>-M</literal> <replaceable>querymode</></entry>
+      <entry>
+       Protocol to use for submitting queries for the server:
+         <itemizedlist>
+          <listitem>
+           <para><literal>simple</>: use simple query protocol.</para>
+          </listitem>
+          <listitem>
+           <para><literal>extended</>: use extended query protocol.</para>
+          </listitem>
+          <listitem>
+           <para><literal>prepared</>: use extended query protocol with prepared statements.</para>
+          </listitem>
+         </itemizedlist>
+       The default is simple query protocol.  (See <xref linkend="protocol">
+       for more information.)
+      </entry>
+     </row>
+     <row>
       <entry><literal>-N</literal></entry>
       <entry>
        Ne met pas à jour les tables <structname>tellers</structname> et
@@ -518,8 +544,8 @@
 
   <para>
    En premier lieu, ne <emphasis>jamais</emphasis> croire tout test qui ne
-   s'exécute que pendant quelques secondes. Augmentez suffisamment le paramètre
-   <literal>-t</literal> pour que le test dure plusieurs minutes pour rendre
+   s'exécute que pendant quelques secondes. Use the <literal>-t</> or <literal>-T</> option
+   pour que le test dure plusieurs minutes pour rendre
    le bruit insignifiant. Dans certains cas, nous avez besoin de quelques
    heures pour obtenir des chiffres reproductibles. Exécuter le test plusieurs
    fois est une bonne idée pour savoir si vos résultats sont reproductibles.

Modified: traduc/trunk/postgresql/pgbuffercache.xml
===================================================================
--- traduc/trunk/postgresql/pgbuffercache.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pgbuffercache.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -85,6 +85,13 @@
      </row>
 
      <row>
+      <entry><structfield>relforknumber</structfield></entry>
+      <entry><type>smallint</type></entry>
+      <entry></entry>
+      <entry>Fork number within the relation</entry>
+     </row>
+
+     <row>
       <entry><structfield>isdirty</structfield></entry>
       <entry><type>boolean</type></entry>
       <entry></entry>

Modified: traduc/trunk/postgresql/pgfreespacemap.xml
===================================================================
--- traduc/trunk/postgresql/pgfreespacemap.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pgfreespacemap.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-15"?>
-<!-- Dernière modification
-     le       $Date$
-     par      $Author$
-     révision $Revision$ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/pgfreespacemap.sgml,v 2.5 2008-10-02 12:20:50 heikki Exp $ -->
 
 <sect1 id="pgfreespacemap">
  <title>pg_freespacemap</title>
@@ -12,251 +8,115 @@
  </indexterm>
 
  <para>
-  Le module <filename>pg_freespacemap</filename> fournit un moyen pour
-  examiner la carte des espaces libres (<acronym>FSM</acronym>, acronyme
-  anglais de <foreignphrase>Free Space Map</foreignphrase>). Il donne deux
-  fonctions C&nbsp;:
-  <function>pg_freespacemap_relations</function> et
-  <function>pg_freespacemap_pages</function> qui renvoient chacune un
-  ensemble d'enregistrements ainsi que deux vues
-  <structname>pg_freespacemap_relations</structname> et
-  <structname>pg_freespacemap_pages</structname> qui emballent les fonctions
-  pour une utilisation agréable.
+  The <filename>pg_freespacemap</> module provides a means for examining the
+  free space map (FSM). It provides a function called
+  <function>pg_freespace</function>, or two overloaded functions, to be
+  precise. The functions show the value recorded in the free space map for
+  a given page, or for all pages in the relation.
  </para>
 
  <para>
-  Par défaut, l'accès publique aux fonctions et vues est interdit, dans le
-  cas où une faille de sécurité traînerait.
+  By default public access is revoked from the functions, just in case
+  there are security issues lurking.
  </para>
 
  <sect2>
-  <title>Les vues <filename>pg_freespacemap</filename></title>
+  <title>Functions</title>
 
-  <para>
-   Voici la définition des colonnes fournies par les vues&nbsp;:
-  </para>
+  <variablelist>
+   <varlistentry>
+    <term>
+     <function>pg_freespace(rel regclass IN, blkno bigint IN) returns int2</function>
+    </term>
 
-  <table>
-   <title>Colonnes de <structname>pg_freespacemap_relations</structname></title>
+    <listitem>
+     <para>
+      Returns the amount of free space on the page of the relation, specified
+      by <literal>blkno</>, according to the FSM.
+      (blkno).
+     </para>
+    </listitem>
+   </varlistentry>
 
-   <tgroup cols="4">
-    <thead>
-     <row>
-      <entry>Nom</entry>
-      <entry>Type</entry>
-      <entry>Référence</entry>
-      <entry>Description</entry>
-     </row>
-    </thead>
-    <tbody>
 
-     <row>
-      <entry><structfield>reltablespace</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_tablespace.oid</literal></entry>
-      <entry>OID du tablespace de la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>reldatabase</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_database.oid</literal></entry>
-      <entry>OID de la base de données contenant cette relation</entry>
-     </row>
-     <row>
-      <entry><structfield>relfilenode</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_class.relfilenode</literal></entry>
-      <entry>Champ relfilenode de la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>avgrequest</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Moyenne de la demande d'espace libre (NULL pour les index)</entry>
-     </row>
-     <row>
-      <entry><structfield>interestingpages</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Nombre de pages reportées la dernière fois comme contenant de
-      l'espace libre utile</entry>
-     </row>
-     <row>
-      <entry><structfield>storedpages</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Nombre de pages stockées actuellement dans la carte des espaces
-      libres</entry>
-     </row>
-     <row>
-      <entry><structfield>nextpage</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Index de la page (en commençant à 0) pour démarrer la prochaine
-      recherche</entry>
-     </row>
+   <varlistentry>
+    <term>
+     <function>pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)</function>
+    </term>
 
-    </tbody>
-   </tgroup>
-  </table>
+    <listitem>
+     <para>
+      Displays the the amount of free space on each page of the relation,
+      according to the FSM. A set of <literal>(blkno bigint, avail int2)</>
+      tuples is returned, one tuple for each page in the relation.
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
 
-  <table>
-   <title>Colonnes de <structname>pg_freespacemap_pages</structname></title>
-
-   <tgroup cols="4">
-    <thead>
-     <row>
-      <entry>Nom</entry>
-      <entry>Type</entry>
-      <entry>Référence</entry>
-      <entry>Description</entry>
-     </row>
-    </thead>
-    <tbody>
-
-     <row>
-      <entry><structfield>reltablespace</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_tablespace.oid</literal></entry>
-      <entry>OID du tablespace de la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>reldatabase</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_database.oid</literal></entry>
-      <entry>OID de la base de données contenant la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>relfilenode</structfield></entry>
-      <entry><type>oid</type></entry>
-      <entry><literal>pg_class.relfilenode</literal></entry>
-      <entry>Champ relfilenode de la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>relblocknumber</structfield></entry>
-      <entry><type>bigint</type></entry>
-      <entry></entry>
-      <entry>Nombre de pages dans la relation</entry>
-     </row>
-     <row>
-      <entry><structfield>bytes</structfield></entry>
-      <entry><type>integer</type></entry>
-      <entry></entry>
-      <entry>Octets libres dans la page, ou NULL pour une page d'index (voir
-      ci-dessous)</entry>
-     </row>
-
-    </tbody>
-   </tgroup>
-  </table>
-
   <para>
-   Pour <structname>pg_freespacemap_relations</structname>, il existe une ligne
-   pour chaque relation comprise dans la carte des espaces libres.
-   <structfield>storedpages</structfield> est le nombre de pages actuellement
-   stockées dans la carte alors que <structfield>interestingpages</structfield>
-   est le nombre de pages que le dernier <command>VACUUM</command> pense
-   avoir des quantités utiles d'espace libre.
+   The values stored in the free space map are not exact. They're rounded
+   to precision of 1/256th of BLCKSZ (32 bytes with default BLCKSZ), and
+   they're not kept fully up-to-date as tuples are inserted and updated.
   </para>
 
   <para>
-   Si <structfield>storedpages</structfield> est très souvent moindre que
-   <structfield>interestingpages</structfield>, alors augmenter
-   <varname>max_fsm_pages</varname> serait une bonne idée. De plus, si le
-   nombre de lignes dans <structname>pg_freespacemap_relations</structname>
-   est proche de <varname>max_fsm_relations</varname>, alors vous devez
-   considérer l'augmentation de <varname>max_fsm_relations</varname>.
+   For indexes, what is tracked is entirely-unused pages, rather than free
+   space within pages.  Therefore, the values are not meaningful, just
+   whether a page is full or empty.
   </para>
 
   <para>
-   Pour <structname>pg_freespacemap_pages</structname>, il existe une ligne
-   par page dans la carte des espaces libres. Le nombre de lignes pour une
-   relation correspondra au contenu de la colonne
-   <structfield>storedpages</structfield> dans
-   <structname>pg_freespacemap_relations</structname>.
+   NOTE: The interface was changed in version 8.4, to reflect the new FSM
+   implementation introduced in the same version.
   </para>
-
-  <para>
-   Pour les index, seules des pages entièrement inutilisées sont tracées
-   (plutôt que des espaces libres dans les pages). Du coup, la taille
-   moyenne de la demande et les octets libres dans une page ne sont pas utiles
-   et sont affichés NULL.
-  </para>
-
-  <para>
-   Comme la carte est partagé par toutes les bases de données, les entrées
-   correspondant à des relations n'appartenant pas à la base de données
-   courante seront disponibles. Ceci signifie qu'il pourrait y avoir des
-   lignes dont la jointure n'est pas vérifiée avec
-   <structname>pg_class</structname> pour certaines lignes, ou qu'il pourrait
-   y avoir des jointures incorrectes. Si vous essayez d'établir une jointure
-   avec <structname>pg_class</structname>, il serait une bonne idée de
-   restreindre cette jointure aux lignes dont
-   <structfield>reldatabase</structfield> est égal à l'OID de la base de
-   données actuelle ou à zéro.
-  </para>
-
-  <para>
-   Quand une des vues est utilisé, des verrous sont posés sur la carte des
-   espaces libres suffisamment longtemps pour copier toutes les données d'état
-   permettant l'affichage de la vue. Ceci vous assure que l'ensemble des
-   résultats est cohérent tout en ne bloquant pas l'activité normal plus
-   longtemps que nécessaire. Néanmoin, si les vues sont fréquemment lues,
-   cela pourrait avoir un impact sur les performances de la base de données.
-  </para>
  </sect2>
 
  <sect2>
-  <title>Affichage en sortie</title>
+  <title>Sample output</title>
 
   <programlisting>
-regression=# SELECT c.relname, r.avgrequest, r.interestingpages, r.storedpages
-             FROM pg_freespacemap_relations r INNER JOIN pg_class c
-             ON r.relfilenode = c.relfilenode AND
-                r.reldatabase IN (0, (SELECT oid FROM pg_database
-                                      WHERE datname = current_database()))
-             ORDER BY r.storedpages DESC LIMIT 10;
-             relname             | avgrequest | interestingpages | storedpages
----------------------------------+------------+------------------+-------------
- onek                            |        256 |              109 |         109
- pg_attribute                    |        167 |               93 |          93
- pg_class                        |        191 |               49 |          49
- pg_attribute_relid_attnam_index |            |               48 |          48
- onek2                           |        256 |               37 |          37
- pg_depend                       |         95 |               26 |          26
- pg_type                         |        199 |               16 |          16
- pg_rewrite                      |       1011 |               13 |          13
- pg_class_relname_nsp_index      |            |               10 |          10
- pg_proc                         |        302 |                8 |           8
-(10 rows)
+postgres=# SELECT * FROM pg_freespace('foo');
+ blkno | avail 
+-------+-------
+     0 |     0
+     1 |     0
+     2 |     0
+     3 |    32
+     4 |   704
+     5 |   704
+     6 |   704
+     7 |  1216
+     8 |   704
+     9 |   704
+    10 |   704
+    11 |   704
+    12 |   704
+    13 |   704
+    14 |   704
+    15 |   704
+    16 |   704
+    17 |   704
+    18 |   704
+    19 |  3648
+(20 rows)
 
-regression=# SELECT c.relname, p.relblocknumber, p.bytes
-             FROM pg_freespacemap_pages p INNER JOIN pg_class c
-             ON p.relfilenode = c.relfilenode AND
-                p.reldatabase IN (0, (SELECT oid FROM pg_database
-                                      WHERE datname = current_database()))
-             ORDER BY c.relname LIMIT 10;
-   relname    | relblocknumber | bytes
---------------+----------------+-------
- a_star       |              0 |  8040
- abstime_tbl  |              0 |  7908
- aggtest      |              0 |  8008
- altinhoid    |              0 |  8128
- altstartwith |              0 |  8128
- arrtest      |              0 |  7172
- b_star       |              0 |  7976
- box_tbl      |              0 |  7912
- bt_f8_heap   |             54 |  7728
- bt_i4_heap   |             49 |  8008
-(10 rows)
+postgres=# SELECT * FROM pg_freespace('foo', 7);
+ pg_freespace 
+--------------
+         1216
+(1 row)
+
   </programlisting>
  </sect2>
 
  <sect2>
-  <title>Auteur</title>
+  <title>Author</title>
 
   <para>
-   Mark Kirkwood <email>markir at paradise.net.nz</email>
+   Original version by Mark Kirkwood <email>markir at paradise.net.nz</email>.
+   Rewritten in version 8.4 to suit new FSM implementation by Heikki
+   Linnakangas <email>heikki at enterprisedb.com</email>
   </para>
  </sect2>
 

Modified: traduc/trunk/postgresql/pgstandby.xml
===================================================================
--- traduc/trunk/postgresql/pgstandby.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pgstandby.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -217,13 +217,6 @@
     </tbody>
    </tgroup>
   </table>
-  <note>
-   <para>
-    <literal>--help</literal> n'est pas accepté car
-    <application>pg_standby</application> n'a pas pour but d'être utilisé
-    de façon interactive, sauf lors des développements et lors des tests.
-   </para>
-  </note>
  </sect2>
 
  <sect2>
@@ -320,6 +313,15 @@
   </itemizedlist>
 
   <para>
+   The <literal>copy</> command on Windows sets the final file size
+   before the file is completely copied, which would ordinarly confuse
+   <application>pg_standby</application>.  Therefore
+   <application>pg_standby</application> waits <literal>sleeptime</>
+   seconds once it sees the proper file size.  GNUWin32's <literal>cp</>
+   sets the file size only after the file copy is complete.
+  </para>
+
+  <para>
    Comme l'exemple Windows utilise <literal>copy</literal> aux deux bouts,
    soit l'un soit les deux serveurs pourront accéder au répertoire d'archive
    via le réseau.

Added: traduc/trunk/postgresql/pgstatstatements.xml
===================================================================
--- traduc/trunk/postgresql/pgstatstatements.xml	                        (rev 0)
+++ traduc/trunk/postgresql/pgstatstatements.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -0,0 +1,265 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/pgstatstatements.sgml,v 1.1 2009-01-04 22:19:59 tgl Exp $ -->
+
+<sect1 id="pgstatstatements">
+ <title>pg_stat_statements</title>
+
+ <indexterm zone="pgstatstatements">
+  <primary>pg_stat_statements</primary>
+ </indexterm>
+
+ <para>
+  The <filename>pg_stat_statements</filename> module provides a means for
+  tracking execution statistics of all SQL statements executed by a server.
+ </para>
+
+ <para>
+  The module must be loaded by adding <literal>pg_stat_statements</> to
+  <xref linkend="guc-shared-preload-libraries"> in
+  <filename>postgresql.conf</>, because it requires additional shared memory.
+  This means that a server restart is needed to add or remove the module.
+ </para>
+
+ <sect2>
+  <title>The <structname>pg_stat_statements</structname> view</title>
+
+  <para>
+   The statistics gathered by the module are made available via a system view
+   named <structname>pg_stat_statements</>.  This view contains one row for
+   each distinct query text, database ID, and user ID (up to the maximum
+   number of distinct statements that the module can track).  The columns
+   of the view are:
+  </para>
+
+  <table>
+   <title><structname>pg_stat_statements</> 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>userid</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 user who executed the statement</entry>
+     </row>
+
+     <row>
+      <entry><structfield>dbid</structfield></entry>
+      <entry><type>oid</type></entry>
+      <entry><literal><link linkend="catalog-pg-database"><structname>pg_database</structname></link>.oid</literal></entry>
+      <entry>OID of database in which the statement was executed</entry>
+     </row>
+
+    <row>
+      <entry><structfield>query</structfield></entry>
+      <entry><type>text</type></entry>
+      <entry></entry>
+      <entry>Text of the statement (up to <xref linkend="guc-track-activity-query-size"> bytes)</entry>
+     </row>
+
+     <row>
+      <entry><structfield>calls</structfield></entry>
+      <entry><type>bigint</type></entry>
+      <entry></entry>
+      <entry>Number of times executed</entry>
+     </row>
+
+     <row>
+      <entry><structfield>total_time</structfield></entry>
+      <entry><type>double precision</type></entry>
+      <entry></entry>
+      <entry>Total time spent in the statement, in seconds</entry>
+     </row>
+
+     <row>
+      <entry><structfield>rows</structfield></entry>
+      <entry><type>bigint</type></entry>
+      <entry></entry>
+      <entry>Total number of rows retrieved or affected by the statement</entry>
+     </row>
+
+    </tbody>
+   </tgroup>
+  </table>
+
+  <para>
+   This view, and the function <function>pg_stat_statements_reset</>,
+   are available only in databases they have been specifically installed into
+   by running the <filename>pg_stat_statements.sql</> install script.
+   However, statistics are tracked across all databases of the server
+   whenever the <filename>pg_stat_statements</filename> module is loaded
+   into the server, regardless of presence of the view.
+  </para>
+
+  <para>
+   For security reasons, non-superusers are not allowed to see the text of
+   queries executed by other users.  They can see the statistics, however,
+   if the view has been installed in their database.
+  </para>
+
+  <para>
+   Note that statements are considered the same if they have the same text,
+   regardless of the values of any out-of-line parameters used in the
+   statement.  Using out-of-line parameters will help to group statements
+   together and may make the statistics more useful.
+  </para>
+ </sect2>
+
+ <sect2>
+  <title>Functions</title>
+
+  <variablelist>
+   <varlistentry>
+    <term>
+     <function>pg_stat_statements_reset() returns void</function>
+    </term>
+
+    <listitem>
+     <para>
+      <function>pg_stat_statements_reset</function> discards all statistics
+      gathered so far by <filename>pg_stat_statements</>.
+      By default, this function can only be executed by superusers.
+     </para>
+    </listitem>
+   </varlistentry>
+
+  </variablelist>
+ </sect2>
+
+ <sect2>
+  <title>Configuration parameters</title>
+
+  <variablelist>
+   <varlistentry>
+    <term>
+     <varname>pg_stat_statements.max</varname> (<type>integer</type>)
+    </term>
+
+    <listitem>
+     <para>
+      <varname>pg_stat_statements.max</varname> is the maximum number of
+      statements tracked by the module (i.e., the maximum number of rows
+      in the <structname>pg_stat_statements</> view).  If more distinct
+      statements than that are observed, information about the least-executed
+      statements is discarded.
+      The default value is 1000.
+      This parameter can only be set at server start.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <varname>pg_stat_statements.track</varname> (<type>enum</type>)
+    </term>
+
+    <listitem>
+     <para>
+      <varname>pg_stat_statements.track</varname> controls which statements
+      are counted by the module.
+      Specify <literal>top</> to track top-level statements (those issued
+      directly by clients), <literal>all</> to also track nested statements
+      (such as statements invoked within functions), or <literal>none</> to
+      disable.
+      The default value is <literal>top</>.
+      Only superusers can change this setting.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <varname>pg_stat_statements.save</varname> (<type>boolean</type>)
+    </term>
+
+    <listitem>
+     <para>
+      <varname>pg_stat_statements.save</varname> specifies whether to
+      save statement statistics across server shutdowns.
+      If it is <literal>off</> then statistics are not saved at
+      shutdown nor reloaded at server start.
+      The default value is <literal>on</>.
+      This parameter can only be set in the <filename>postgresql.conf</>
+      file or on the server command line.
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
+
+  <para>
+   The module requires additional shared memory amounting to about
+   <varname>pg_stat_statements.max</varname> <literal>*</>
+   <xref linkend="guc-track-activity-query-size"> bytes.  Note that this
+   memory is consumed whenever the module is loaded, even if
+   <varname>pg_stat_statements.track</> is set to <literal>none</>.
+  </para>
+
+  <para>
+   In order to set any of these parameters in your
+   <filename>postgresql.conf</> file,
+   you will need to add <literal>pg_stat_statements</> to
+   <xref linkend="guc-custom-variable-classes">.  Typical usage might be:
+  </para>
+
+  <programlisting>
+# postgresql.conf
+shared_preload_libraries = 'pg_stat_statements'
+
+custom_variable_classes = 'pg_stat_statements'
+pg_stat_statements.max = 10000
+pg_stat_statements.track = all
+  </programlisting>
+ </sect2>
+
+ <sect2>
+  <title>Sample output</title>
+
+  <programlisting>
+$ pgbench -i bench
+
+postgres=# SELECT pg_stat_statements_reset();
+
+$ pgbench -c10 -t300 -M prepared bench
+
+postgres=# \x
+postgres=# SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 3;
+-[ RECORD 1 ]------------------------------------------------------------
+userid     | 10
+dbid       | 63781
+query      | UPDATE branches SET bbalance = bbalance + $1 WHERE bid = $2;
+calls      | 3000
+total_time | 20.716706
+rows       | 3000
+-[ RECORD 2 ]------------------------------------------------------------
+userid     | 10
+dbid       | 63781
+query      | UPDATE tellers SET tbalance = tbalance + $1 WHERE tid = $2;
+calls      | 3000
+total_time | 17.1107649999999
+rows       | 3000
+-[ RECORD 3 ]------------------------------------------------------------
+userid     | 10
+dbid       | 63781
+query      | UPDATE accounts SET abalance = abalance + $1 WHERE aid = $2;
+calls      | 3000
+total_time | 0.645601
+rows       | 3000
+  </programlisting>
+ </sect2>
+
+ <sect2>
+  <title>Author</title>
+
+  <para>
+   Takahiro Itagaki <email>itagaki.takahiro at oss.ntt.co.jp</email>
+  </para>
+ </sect2>
+
+</sect1>

Modified: traduc/trunk/postgresql/pgstattuple.xml
===================================================================
--- traduc/trunk/postgresql/pgstattuple.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pgstattuple.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -196,38 +196,38 @@
 
        <row>
         <entry><structfield>index_size</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Nombre total de page dans l'index</entry>
        </row>
 
        <row>
         <entry><structfield>root_block_no</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Enmplacement du bloc racine</entry>
        </row>
 
        <row>
         <entry><structfield>internal_pages</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Nombre de pages <quote>internes</quote> (niveau
 	supérieur)</entry>
        </row>
 
        <row>
         <entry><structfield>leaf_pages</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Nombre de pages feuilles</entry>
        </row>
 
        <row>
         <entry><structfield>empty_pages</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Nombre de pages vides</entry>
        </row>
 
        <row>
         <entry><structfield>deleted_pages</structfield></entry>
-        <entry><type>integer</type></entry>
+        <entry><type>bigint</type></entry>
         <entry>Nombre de pages supprimées</entry>
        </row>
 
@@ -257,7 +257,7 @@
 
    <varlistentry>
     <term>
-     <function>pg_relpages(text) returns integer</function>
+     <function>pg_relpages(text) returns bigint</function>
     </term>
 
     <listitem>
@@ -271,10 +271,10 @@
  </sect2>
 
  <sect2>
-  <title>Auteur</title>
+  <title>Auteurs</title>
 
   <para>
-   Tatsuo Ishii
+   Tatsuo Ishii et Satoshi Nagayasu
   </para>
  </sect2>
 

Modified: traduc/trunk/postgresql/plperl.xml
===================================================================
--- traduc/trunk/postgresql/plperl.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/plperl.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -22,7 +22,7 @@
   </para>
 
   <para>
-   L'avantage habituellement cité quant à l'utilisation de Perl est que cela
+   Le principal avantage habituellement cité quant à l'utilisation de Perl est que cela
    permet l'utilisation des nombreux opérateurs et fonctions de <quote>gestion
    de chaînes</quote> disponibles grâce à Perl dans des procédures stockées.
    L'analyse de chaînes complexes se trouve facilité par l'utilisation de Perl
@@ -310,23 +310,8 @@
 
   <para>
    L'accès à la base de données à l'intérieur de vos fonctions écrites en Perl
-   peut se faire à partir de la fonction <function>spi_exec_query</function>
-   décrite ci-dessous ou à partir du module expérimental <ulink
-   url="http://www.cpan.org/modules/by-module/DBD/APILOS/">
-   <literal>DBD::PgSPI</literal></ulink>
-   (aussi disponible sur un miroir du <ulink 
-   url="http://www.cpan.org/SITES.html">
-   <acronym>CPAN</acronym></ulink>).
-   Ce module rend accessible un descripteur de base de données conforme à
-   <acronym>DBI</acronym> nommé
-   <varname>$pg_dbh</varname> qui peut être utilisé pour exécuter des
-   requêtes en utilisant la syntaxe habituelle de
-   <acronym>DBI</acronym>.<indexterm><primary>DBI</primary></indexterm>
-  </para>
+   peut se faire à partir des fonctions suivantes&nbsp;:
 
-  <para>
-   Actuellement, PL/Perl fournit les commandes Perl supplémentaires&nbsp;:
-
    <variablelist>
      <varlistentry>
 
@@ -739,8 +724,8 @@
          <term><literal>$_TD-&gt;{event}</literal></term>
          <listitem>
            <para>
-             Événement du déclencheur&nbsp;: <literal>INSERT</literal>, 
-             <literal>UPDATE</literal>, <literal>DELETE</literal> ou <literal>UNKNOWN</literal>
+             Événement du déclencheur&nbsp;: <literal>INSERT</>, <literal>UPDATE</>,
+       <literal>DELETE</>, <literal>TRUNCATE</> ou <literal>UNKNOWN</>
            </para>
          </listitem>
        </varlistentry>
@@ -828,14 +813,14 @@
    </para>
 
    <para>
-     Les déclencheurs peuvent renvoyer un des éléments suivants&nbsp;:
+     Les déclencheurs niveau ligne peuvent renvoyer un des éléments suivants&nbsp;:
   
      <variablelist>
        <varlistentry>
          <term><literal>return;</literal></term>
          <listitem>
            <para>
-             Exécute l'instruction
+             Exécute l'opération
            </para>
          </listitem>
        </varlistentry>
@@ -844,7 +829,7 @@
          <term><literal>"SKIP"</literal></term>
          <listitem>
            <para>
-             N'exécute pas l'instruction
+             N'exécute pas l'opération
            </para>
          </listitem>
        </varlistentry>

Modified: traduc/trunk/postgresql/plpython.xml
===================================================================
--- traduc/trunk/postgresql/plpython.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/plpython.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -335,7 +335,7 @@
        <warning>
         <para>
          Actuellement, à cause du
-         <ulink url="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1483133&amp;group_id=5470&amp;atid=105470">bogue #1483133</ulink> de Python,
+         <ulink url="http://bugs.python.org/issue1483133">bogue #1483133</ulink> de Python,
          certaines versions de débogage de Python 2.4
          (configuré et compilé avec l'option <literal>--with-pydebug</literal>)
          sont connues pour arrêter brutalement le serveur
@@ -380,35 +380,37 @@
 
   <para>
    Quand une fonction est utilisée comme un déclencheur, le dictionnaire
-   <literal>TD</literal> contient des valeurs relatives au déclencheur. Les
-   lignes du déclencheur sont dans <literal>TD["new"]</literal> et/ou
-   <literal>TD["old"]</literal> suivant l'événement ayant lancé le déclencheur.
+   <literal>TD</literal> contient des valeurs relatives au déclencheur.
    <literal>TD["event"]</literal> contient l'événement en tant que chaîne
    (<literal>INSERT</literal>, <literal>UPDATE</literal>,
-   <literal>DELETE</literal> ou <literal>UNKNOWN</literal>).
+   <literal>DELETE</literal>, <literal>TRUNCATE</> ou <literal>UNKNOWN</literal>).
    <literal>TD["when"]</literal> contient soit <literal>BEFORE</literal>, soit
    <literal>AFTER</literal> soit <literal>UNKNOWN</literal>.
    <literal>TD["level"]</literal> contient une valeur parmi <literal>ROW</literal>,
    <literal>STATEMENT</literal> et <literal>UNKNOWN</literal>.
+   For a row-level trigger, the trigger
+   rows are in <literal>TD["new"]</> and/or <literal>TD["old"]</>
+   depending on the trigger event.
    <literal>TD["name"]</literal> contient le nom du déclencheur,
    <literal>TD["table_name"]</literal> contient le nom de la table pour laquelle
    a été exécuté le déclencheur,
    <literal>TD["table_schema"]</literal> contient le schéma de la table pour laquelle
    a été exécuté le déclencheur,
-   <literal>TD["name"]</literal> contient le nom du déclencheur et
    <literal>TD["relid"]</literal> l'OID de la table sur lequel le déclencheur a été
    activé. Si la commande <command>CREATE TRIGGER</command> incluait des
    arguments, ils sont disponibles dans les variables de
    <literal>TD["args"][0]</literal> à
-   <literal>TD["args"][(<replaceable>n</replaceable>-1)]</literal>.
+   <literal>TD["args"][<replaceable>n</replaceable>-1]</literal>.
   </para>
 
   <para>
-   Si <literal>TD["when"]</literal> vaut <literal>BEFORE</literal>, vous pourriez
+   Si <literal>TD["when"]</literal> vaut <literal>BEFORE</literal> and
+   <literal>TD["level"]</literal> is <literal>ROW</>, vous pourriez
    renvoyer <literal>None</literal> ou <literal>"OK"</literal> à partir de la
    fonction Python pour indiquer que la ligne n'est pas modifiée,
    <literal>"SKIP"</literal> pour annuler l'événement ou <literal>"MODIFY"</literal> pour
    indiquer que vous avez modifié la ligne.
+   Otherwise the return value is ignored.
   </para>
  </sect1>
 

Modified: traduc/trunk/postgresql/pltcl.xml
===================================================================
--- traduc/trunk/postgresql/pltcl.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/pltcl.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -569,7 +569,7 @@
        <listitem>
 	<para>
 	 La chaîne <literal>BEFORE</literal> ou <literal>AFTER</literal> suivant le type
-	 d'appel du déclencheur.
+	 de l'événement du déclencheur.
 	</para>
        </listitem>
       </varlistentry>
@@ -579,7 +579,7 @@
        <listitem>
 	<para>
 	 La chaîne <literal>ROW</literal> ou <literal>STATEMENT</literal> suivant le type
-	 d'appel du déclencheur.
+	 de l'événement du déclencheur.
 	</para>
        </listitem>
       </varlistentry>
@@ -588,8 +588,9 @@
        <term><varname>$TG_op</varname></term>
        <listitem>
 	<para>
-	 La chaîne <literal>INSERT</literal>, <literal>UPDATE</literal> ou
-	 <literal>DELETE</literal> suivant le type d'appel du déclencheur.
+	 La chaîne <literal>INSERT<literal/>, <literal>UPDATE</literal>,
+         <literal>DELETE</literal> ou <literal>TRUNCATE</literal> suivant le
+	 type de l'événement du déclencheur.
 	</para>
        </listitem>
       </varlistentry>
@@ -602,6 +603,7 @@
 	 table pour les actions <command>INSERT</command> ou <command>UPDATE</command>
 	 ou vide pour <command>DELETE</command>. Le tableau est indexé par nom de
 	 colonne. Les colonnes NULL n'apparaissent pas dans le tableau.
+         This is not set for statement-level triggers.
 	</para>
        </listitem>
       </varlistentry>
@@ -614,6 +616,7 @@
 	 table pour les actions <command>UPDATE</command> or <command>DELETE</command> ou vide
 	 pour <command>INSERT</command>. Le tableau est indexé par nom de colonne. Les
 	 colonnes NULL n'apparaissent pas dans le tableau.
+         This is not set for statement-level triggers.
 	</para>
        </listitem>
       </varlistentry>

Modified: traduc/trunk/postgresql/postgres.xml
===================================================================
--- traduc/trunk/postgresql/postgres.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/postgres.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -178,9 +178,9 @@
   &installw;
   &runtime;
   &config;
+  &client-auth;
   &user-manag;
   &manage-ag;
-  &client-auth;
   &charset;
   &maintenance;
   &backup;

Modified: traduc/trunk/postgresql/protocol.xml
===================================================================
--- traduc/trunk/postgresql/protocol.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/protocol.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -299,19 +299,6 @@
      </varlistentry>
 
      <varlistentry>
-      <term>authenticationcryptpassword</term>
-      <listitem>
-       <para>
-        Le client doit alors envoyer un PasswordMessage contenant le mot
-        de passe chiffré à l'aide de crypt(3), en utilisant le composant salt de deux
-        caractères spécifié dans le message AuthenticationCryptPassword. Si le
-        mot de passe est correct, le serveur répond AuthenticationOk,
-        ErrorResponse sinon.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
       <term>authenticationmd5password</term>
       <listitem>
        <para>
@@ -1090,22 +1077,25 @@
       <para>
        À ce jour, il existe un certain nombre de paramètres codés en dur pour
        lesquels des messages ParameterStatus seront engendrés&nbsp;: on trouve
-     <literal>server_version</literal>,
-     <literal>client_encoding</literal>,
-     <literal>server_encoding</literal>,
-     <literal>is_superuser</literal>,
-     <literal>session_authorization</literal> et
-     <literal>session_authorization</literal>,
-     <literal>datestyle</literal>,
-     <literal>timezone</literal> et
-     <literal>integer_datetimes</literal>
-     (<literal>server_encoding</literal>, <literal>timezone</literal> et
-     <literal>integer_datetimes</literal> n'ont pas été reportés par les sorties avant
-     la 8.0). Notez que
-     <literal>server_version</literal>,
-     <literal>server_encoding</literal> et
-     <literal>integer_datetimes</literal> sont des pseudo-paramètres qui ne peuvent pas
-     changer après le lancement.
+       <literal>server_version</literal>,
+       <literal>client_encoding</literal>,
+       <literal>server_encoding</literal>,
+       <literal>is_superuser</literal>,
+       <literal>session_authorization</literal> et
+       <literal>session_authorization</literal>,
+       <literal>DateStyle</literal>,
+       <literal>IntervalStyle</literal>,
+       <literal>TimeZone</literal> et
+       <literal>integer_datetimes</literal>
+       (<literal>server_encoding</literal>, <literal>timezone</literal> et
+       <literal>integer_datetimes</literal> n'ont pas été reportés par les
+       sorties avant la 8.0&nbsp;; <literal>standard_conforming_strings</literal>
+       was not reported by releases before 8.1; <literal>IntervalStyle</literal>
+       was not reported by releases before 8.4.). Notez que
+       <literal>server_version</literal>,
+       <literal>server_encoding</literal> et
+       <literal>integer_datetimes</literal> sont des pseudo-paramètres qui ne peuvent pas
+       changer après le lancement.
        Cet ensemble pourrait changer dans le futur, voire devenir configurable.
        De toute façon, un client peut ignorer un message ParameterStatus
        pour les paramètres qu'il ne comprend pas ou qui ne le concernent pas.
@@ -1514,65 +1504,8 @@
 </listitem>
 </varlistentry>
 
-
 <varlistentry>
 <term>
-AuthenticationCryptPassword (B)
-</term>
-<listitem>
-<para>
-
-<variablelist>
-<varlistentry>
-<term>
-        Byte1('R')
-</term>
-<listitem>
-<para>
-                Marqueur de demande d'authentification.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Int32(10)
-</term>
-<listitem>
-<para>
-                Taille du message en octets, y compris la taille elle-même.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Int32(4)
-</term>
-<listitem>
-<para>
-                Un mot de passe chiffré à l'aide de crypt() est requis.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-        Byte2
-</term>
-<listitem>
-<para>
-                Composant (salt) à utiliser lors du chiffrement du mot de
-		passe.
-</para>
-</listitem>
-</varlistentry>
-</variablelist>
-
-</para>
-</listitem>
-</varlistentry>
-
-
-<varlistentry>
-<term>
 AuthenticationMD5Password (B)
 </term>
 <listitem>

Modified: traduc/trunk/postgresql/queries.xml
===================================================================
--- traduc/trunk/postgresql/queries.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/queries.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -31,9 +31,12 @@
    <firstterm>requête</firstterm>. En SQL, la commande <xref linkend="sql-select"
    endterm="sql-select-title"/> est utilisée pour spécifier des requêtes. La
    syntaxe générale de la commande <command>SELECT</command> est
-<synopsis>SELECT <replaceable>liste_select</replaceable> FROM <replaceable>expression_table</replaceable> <optional><replaceable>specification_tri</replaceable></optional></synopsis>
+<synopsis>
+<optional>WITH <replaceable>with_requêtes</replaceable></optional> SELECT <replaceable>liste_select</replaceable> FROM <replaceable>expression_table</replaceable> <optional><replaceable>specification_tri</replaceable></optional>
+</synopsis>
    Les sections suivantes décrivent le détail de la liste de sélection,
-   l'expression des tables et la spécification du tri.
+   l'expression des tables et la spécification du tri. <literal>WITH</>
+   queries are treated last since they are an advanced feature.
   </para>
 
   <para>
@@ -930,7 +933,58 @@
     ventes dépasse 5000. Notez que les expressions d'agrégats n'ont pas besoin
     d'être identiques dans toutes les parties d'une requête.
    </para>
+
+   <para>
+    If a query contains aggregate function calls, but no <literal>GROUP BY</>
+    clause, grouping still occurs: the result is a single group row (or
+    perhaps no rows at all, if the single row is then eliminated by
+    <literal>HAVING</>).
+    The same is true if it contains a <literal>HAVING</> clause, even
+    without any aggregate function calls or <literal>GROUP BY</> clause.
+   </para>
   </sect2>
+
+  <sect2 id="queries-window">
+   <title>Window Function Processing</>
+
+   <indexterm zone="queries-window">
+    <primary>window function</primary>
+    <secondary>order of execution</>
+   </indexterm>
+
+   <para>
+    If the query contains any window functions (see
+    <xref linkend="tutorial-window"> and
+    <xref linkend="syntax-window-functions">), these functions are evaluated
+    after any grouping, aggregation, and <literal>HAVING</> filtering is
+    performed.  That is, if the query uses any aggregates, <literal>GROUP
+    BY</>, or <literal>HAVING</>, then the rows seen by the window functions
+    are the group rows instead of the original table rows from
+    <literal>FROM</>/<literal>WHERE</>.
+   </para>
+
+   <para>
+    When multiple window functions are used, all the window functions having
+    syntactically equivalent <literal>PARTITION BY</> and <literal>ORDER BY</>
+    clauses in their window definitions are guaranteed to be evaluated in a
+    single pass over the data. Therefore they will see the same sort ordering,
+    even if the <literal>ORDER BY</> does not uniquely determine an ordering.
+    However, no guarantees are made about the evaluation of functions having
+    different <literal>PARTITION BY</> or <literal>ORDER BY</> specifications.
+    (In such cases a sort step is typically required between the passes of
+    window function evaluations, and the sort is not guaranteed to preserve
+    ordering of rows that its <literal>ORDER BY</> sees as equivalent.)
+   </para>
+
+   <para>
+    Currently, window functions always require presorted data, and so the
+    query output will be ordered according to one or another of the window
+    functions' <literal>PARTITION BY</>/<literal>ORDER BY</> clauses.
+    It is not recommendable to rely on this, however.  Use an explicit
+    top-level <literal>ORDER BY</> clause if you want to be sure the
+    results are sorted in a particular way.
+   </para>
+  </sect2>
  </sect1>
 
 
@@ -1016,12 +1070,32 @@
 
    <para>
     Si aucun nom de colonne en sortie n'est spécifié en utilisant
-    <literal>AS</literal>, le système affecte un nom par défaut. Pour les références de
+    <literal>AS</literal>, le système affecte un nom de colonne par défaut.
+    Pour les références de
     colonne simple, c'est le nom de la colonne référencée. Pour les appels de
     fonction, il s'agit du nom de la fonction. Pour les expressions complexes,
     le système générera un nom générique.
    </para>
 
+   <para>
+    The <literal>AS</> keyword is optional, but only if the new column
+    name does not match any
+    <productname>PostgreSQL</productname> keyword (see <xref
+    linkend="sql-keywords-appendix">).  To avoid an accidental match to
+    a keyword, you can double-quote the column name.  For example,
+    <literal>VALUE</> is a keyword, so this does not work:
+<programlisting>
+SELECT a value, b + c AS sum FROM ...
+</programlisting>
+    but this does:
+<programlisting>
+SELECT a "value", b + c AS sum FROM ...
+</programlisting>
+    For protection against possible
+    future keyword additions, it is recommended that you always either
+    write <literal>AS</literal> or double-quote the output column name.
+   </para>
+
    <note>
     <para>
      Le nom des colonnes en sortie est différent ici de ce qui est fait dans la
@@ -1299,7 +1373,8 @@
   <para>
    <literal>OFFSET</literal> indique de passer ce nombre de lignes avant de renvoyer 
    les lignes restantes. <literal>OFFSET 0</literal> revient à oublier la clause
-   <literal>OFFSET</literal>. Si à la fois <literal>OFFSET</literal> et <literal>LIMIT</literal>
+   <literal>OFFSET</literal>, and <literal>LIMIT NULL</> is the same
+   as omitting the <literal>LIMIT</> clause. Si à la fois <literal>OFFSET</literal> et <literal>LIMIT</literal>
    apparaissent, alors les <literal>OFFSET</literal> lignes sont laissées avant de
    commencer le renvoi des <literal>LIMIT</literal> lignes.
   </para>
@@ -1401,4 +1476,280 @@
 
  </sect1>
 
+
+ <sect1 id="queries-with">
+  <title><literal>WITH</literal> Queries</title>
+
+  <indexterm zone="queries-with">
+   <primary>WITH</primary>
+   <secondary>in SELECT</secondary>
+  </indexterm>
+
+  <indexterm>
+   <primary>common table expression</primary>
+   <see>WITH</see>
+  </indexterm>
+
+  <para>
+   <literal>WITH</> provides a way to write subqueries for use in a larger
+   <literal>SELECT</> query.  The subqueries can be thought of as defining
+   temporary tables that exist just for this query.  One use of this feature
+   is to break down complicated queries into simpler parts.  An example is:
+
+<programlisting>
+WITH regional_sales AS (
+        SELECT region, SUM(amount) AS total_sales
+        FROM orders
+        GROUP BY region
+     ), top_regions AS (
+        SELECT region
+        FROM regional_sales
+        WHERE total_sales &gt; (SELECT SUM(total_sales)/10 FROM regional_sales)
+     )
+SELECT region,
+       product,
+       SUM(quantity) AS product_units,
+       SUM(amount) AS product_sales
+FROM orders
+WHERE region IN (SELECT region FROM top_regions)
+GROUP BY region, product;
+</programlisting>
+
+   which displays per-product sales totals in only the top sales regions.
+   This example could have been written without <literal>WITH</>,
+   but we'd have needed two levels of nested sub-SELECTs.  It's a bit
+   easier to follow this way.
+  </para>
+
+  <para>
+   The optional <literal>RECURSIVE</> modifier changes <literal>WITH</>
+   from a mere syntactic convenience into a feature that accomplishes
+   things not otherwise possible in standard SQL.  Using
+   <literal>RECURSIVE</>, a <literal>WITH</> query can refer to its own
+   output.  A very simple example is this query to sum the integers from 1
+   through 100:
+
+<programlisting>
+WITH RECURSIVE t(n) AS (
+    VALUES (1)
+  UNION ALL
+    SELECT n+1 FROM t WHERE n &lt; 100
+)
+SELECT sum(n) FROM t;
+</programlisting>
+
+   The general form of a recursive <literal>WITH</> query is always a
+   <firstterm>non-recursive term</>, then <literal>UNION</> (or
+   <literal>UNION ALL</>), then a
+   <firstterm>recursive term</>, where only the recursive term can contain
+   a reference to the query's own output.  Such a query is executed as
+   follows:
+  </para>
+
+  <procedure>
+   <title>Recursive Query Evaluation</title>
+
+   <step performance="required">
+    <para>
+     Evaluate the non-recursive term.  For <literal>UNION</> (but not
+     <literal>UNION ALL</>), discard duplicate rows.  Include all remaining
+     rows in the result of the recursive query, and also place them in a
+     temporary <firstterm>working table</>.
+    </para>
+   </step>
+
+   <step performance="required">
+    <para>
+     So long as the working table is not empty, repeat these steps:
+    </para>
+    <substeps>
+     <step performance="required">
+      <para>
+       Evaluate the recursive term, substituting the current contents of
+       the working table for the recursive self-reference.
+       For <literal>UNION</> (but not <literal>UNION ALL</>), discard
+       duplicate rows and rows that duplicate any previous result row.
+       Include all remaining rows in the result of the recursive query, and
+       also place them in a temporary <firstterm>intermediate table</>.
+      </para>
+     </step>
+
+     <step performance="required">
+      <para>
+       Replace the contents of the working table with the contents of the
+       intermediate table, then empty the intermediate table.
+      </para>
+     </step>
+    </substeps>
+   </step>
+  </procedure>
+
+  <note>
+   <para>
+    Strictly speaking, this process is iteration not recursion, but
+    <literal>RECURSIVE</> is the terminology chosen by the SQL standards
+    committee.
+   </para>
+  </note>
+
+  <para>
+   In the example above, the working table has just a single row in each step,
+   and it takes on the values from 1 through 100 in successive steps.  In
+   the 100th step, there is no output because of the <literal>WHERE</>
+   clause, and so the query terminates.
+  </para>
+
+  <para>
+   Recursive queries are typically used to deal with hierarchical or
+   tree-structured data.  A useful example is this query to find all the
+   direct and indirect sub-parts of a product, given only a table that
+   shows immediate inclusions:
+
+<programlisting>
+WITH RECURSIVE included_parts(sub_part, part, quantity) AS (
+    SELECT sub_part, part, quantity FROM parts WHERE part = 'our_product'
+  UNION ALL
+    SELECT p.sub_part, p.part, p.quantity
+    FROM included_parts pr, parts p
+    WHERE p.part = pr.sub_part
+  )
+SELECT sub_part, SUM(quantity) as total_quantity
+FROM included_parts
+GROUP BY sub_part
+</programlisting>
+  </para>
+
+  <para>
+   When working with recursive queries it is important to be sure that
+   the recursive part of the query will eventually return no tuples,
+   or else the query will loop indefinitely.  Sometimes, using
+   <literal>UNION</> instead of <literal>UNION ALL</> can accomplish this
+   by discarding rows that duplicate previous output rows.  However, often a
+   cycle does not involve output rows that are completely duplicate: it may be
+   necessary to check just one or a few fields to see if the same point has
+   been reached before.  The standard method for handling such situations is
+   to compute an array of the already-visited values.  For example, consider
+   the following query that searches a table <structname>graph</> using a
+   <structfield>link</> field:
+
+<programlisting>
+WITH RECURSIVE search_graph(id, link, data, depth) AS (
+        SELECT g.id, g.link, g.data, 1
+        FROM graph g
+      UNION ALL
+        SELECT g.id, g.link, g.data, sg.depth + 1
+        FROM graph g, search_graph sg
+        WHERE g.id = sg.link
+)
+SELECT * FROM search_graph;
+</programlisting>
+
+   This query will loop if the <structfield>link</> relationships contain
+   cycles.  Because we require a <quote>depth</> output, just changing
+   <literal>UNION ALL</> to <literal>UNION</> would not eliminate the looping.
+   Instead we need to recognize whether we have reached the same row again
+   while following a particular path of links.  We add two columns
+   <structfield>path</> and <structfield>cycle</> to the loop-prone query:
+
+<programlisting>
+WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (
+        SELECT g.id, g.link, g.data, 1,
+          ARRAY[g.id],
+          false
+        FROM graph g
+      UNION ALL
+        SELECT g.id, g.link, g.data, sg.depth + 1,
+          path || g.id,
+          g.id = ANY(path)
+        FROM graph g, search_graph sg
+        WHERE g.id = sg.link AND NOT cycle
+)
+SELECT * FROM search_graph;
+</programlisting>
+
+   Aside from preventing cycles, the array value is often useful in its own
+   right as representing the <quote>path</> taken to reach any particular row.
+  </para>
+
+  <para>
+   In the general case where more than one field needs to be checked to
+   recognize a cycle, use an array of rows.  For example, if we needed to
+   compare fields <structfield>f1</> and <structfield>f2</>:
+
+<programlisting>
+WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (
+        SELECT g.id, g.link, g.data, 1,
+          ARRAY[ROW(g.f1, g.f2)],
+          false
+        FROM graph g
+      UNION ALL
+        SELECT g.id, g.link, g.data, sg.depth + 1,
+          path || ROW(g.f1, g.f2),
+          ROW(g.f1, g.f2) = ANY(path)
+        FROM graph g, search_graph sg
+        WHERE g.id = sg.link AND NOT cycle
+)
+SELECT * FROM search_graph;
+</programlisting>
+  </para>
+
+  <tip>
+   <para>
+    Omit the <literal>ROW()</> syntax in the common case where only one field
+    needs to be checked to recognize a cycle.  This allows a simple array
+    rather than a composite-type array to be used, gaining efficiency.
+   </para>
+  </tip>
+
+  <tip>
+   <para>
+    The recursive query evaluation algorithm produces its output in
+    breadth-first search order.  You can display the results in depth-first
+    search order by making the outer query <literal>ORDER BY</> a
+    <quote>path</> column constructed in this way.
+   </para>
+  </tip>
+
+  <para>
+   A helpful trick for testing queries
+   when you are not certain if they might loop is to place a <literal>LIMIT</>
+   in the parent query.  For example, this query would loop forever without
+   the <literal>LIMIT</>:
+
+<programlisting>
+WITH RECURSIVE t(n) AS (
+    SELECT 1
+  UNION ALL
+    SELECT n+1 FROM t
+)
+SELECT n FROM t LIMIT 100;
+</programlisting>
+
+   This works because <productname>PostgreSQL</productname>'s implementation
+   evaluates only as many rows of a <literal>WITH</> query as are actually
+   fetched by the parent query.  Using this trick in production is not
+   recommended, because other systems might work differently.  Also, it
+   usually won't work if you make the outer query sort the recursive query's
+   results or join them to some other table.
+  </para>
+
+  <para>
+   A useful property of <literal>WITH</> queries is that they are evaluated
+   only once per execution of the parent query, even if they are referred to
+   more than once by the parent query or sibling <literal>WITH</> queries.
+   Thus, expensive calculations that are needed in multiple places can be
+   placed within a <literal>WITH</> query to avoid redundant work.  Another
+   possible application is to prevent unwanted multiple evaluations of
+   functions with side-effects.
+   However, the other side of this coin is that the optimizer is less able to
+   push restrictions from the parent query down into a <literal>WITH</> query
+   than an ordinary sub-query.  The <literal>WITH</> query will generally be
+   evaluated as stated, without suppression of rows that the parent query
+   might discard afterwards.  (But, as mentioned above, evaluation might stop
+   early if the reference(s) to the query demand only a limited number of
+   rows.)
+  </para>
+
+ </sect1>
+
 </chapter>

Modified: traduc/trunk/postgresql/query.xml
===================================================================
--- traduc/trunk/postgresql/query.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/query.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -625,7 +625,8 @@
 
     Comme la plupart des autres produits de bases de données
     relationnelles, <productname>PostgreSQL</productname> supporte les
-    fonctions d'agrégat.  Une fonction d'agrégat calcule un seul
+    <firstterm>fonctions d'agrégat</firstterm>. Une fonction d'agrégat
+    calcule un seul
     résultat à partir de plusieurs lignes en entrée.  Par exemple, il
     y a des agrégats pour calculer le nombre
     (<function>count</function>), la somme (<function>sum</function>),

Modified: traduc/trunk/postgresql/reference.xml
===================================================================
--- traduc/trunk/postgresql/reference.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/reference.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -43,6 +43,7 @@
   &alterConversion;
   &alterDatabase;
   &alterDomain;
+  &alterForeignDataWrapper;
   &alterFunction;
   &alterGroup;
   &alterIndex;
@@ -53,6 +54,7 @@
   &alterRole;
   &alterSchema;
   &alterSequence;
+  &alterServer;
   &alterTable;
   &alterTableSpace;
   &alterTSConfig;
@@ -62,6 +64,7 @@
   &alterTrigger;
   &alterType;
   &alterUser;
+  &alterUserMapping;
   &alterView;
   &analyze;
   &begin;
@@ -78,6 +81,7 @@
   &createConversion;
   &createDatabase;
   &createDomain;
+  &createForeignDataWrapper;
   &createFunction;
   &createGroup;
   &createIndex;
@@ -89,6 +93,7 @@
   &createRule;
   &createSchema;
   &createSequence;
+  &createServer;
   &createTable;
   &createTableAs;
   &createTableSpace;
@@ -99,6 +104,7 @@
   &createTrigger;
   &createType;
   &createUser;
+  &createUserMapping;
   &createView;
   &deallocate;
   &declare;
@@ -109,6 +115,7 @@
   &dropConversion;
   &dropDatabase;
   &dropDomain;
+  &dropForeignDataWrapper;
   &dropFunction;
   &dropGroup;
   &dropIndex;
@@ -121,6 +128,7 @@
   &dropRule;
   &dropSchema;
   &dropSequence;
+  &dropServer;
   &dropTable;
   &dropTableSpace;
   &dropTSConfig;
@@ -130,6 +138,7 @@
   &dropTrigger;
   &dropType;
   &dropUser;
+  &dropUserMapping;
   &dropView;
   &end;
   &execute;
@@ -217,7 +226,6 @@
   </partintro>
 
    &initdb;
-   &ipcclean;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;

Modified: traduc/trunk/postgresql/regress.xml
===================================================================
--- traduc/trunk/postgresql/regress.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/regress.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -64,7 +64,6 @@
     rendez le répertoire des tests de régression modifiable par un autre
     utilisateur, devenez cet utilisateur et relancez les tests. Par exemple
 <screen><prompt>root# </prompt><userinput>chmod -R a+w src/test/regress</userinput>
-<prompt>root# </prompt><userinput>chmod -R a+w contrib/spi</userinput>
 <prompt>root# </prompt><userinput>su - joeuser</userinput>
 <prompt>joeuser$ </prompt><userinput>cd <replaceable>répertoire construction haut niveau</replaceable></userinput>
 <prompt>joeuser$ </prompt><userinput>gmake check</userinput></screen>
@@ -197,12 +196,45 @@
     <title>Différences au niveau des locales</title>
 
     <para>
-     Si vous lancez des tests sur un serveur déjà installé mais initialisé avec
+     Si vous lancez des tests sur un serveur initialisé avec
      une locale autre que C, alors il pourrait y avoir des différences dans les
      ordres de tris. La suite de tests de régression est initialisée pour gérer
      ce problème en fournissant des fichiers de résultats alternatifs qui
      gèrent ensemble un grand nombre de locales.
     </para>
+    <para>
+     To run the tests in a different locale when using the
+     temporary-installation method, pass the appropriate
+     locale-related environment variables on
+     the <command>make</command> command line, for example:
+<programlisting>
+gmake check LANG=de_DE.utf8
+</programlisting>
+     (The regression test driver unsets <envar>LC_ALL</envar>, so it
+     does not work to choose the locale using that variable.)  To use
+     no locale, either unset all locale-related environment variables
+     (or set them to <literal>C</literal>) or use the following
+     special invocation:
+<programlisting>
+gmake check NO_LOCALE=1
+</programlisting>
+     When running the tests against an existing installation, the
+     locale setup is determined by the existing installation.  To
+     change it, initialize the database cluster with a different
+     locale by passing the appropriate options
+     to <command>initdb</command>.
+    </para>
+
+    <para>
+     In general, it is nevertheless advisable to try to run the
+     regression tests in the locale setup that is wanted for
+     production use, as this will exercise the locale- and
+     encoding-related code portions that will actually be used in
+     production.  Depending on the operating system environment, you
+     might get failures, but then you will at least know what
+     locale-specific behaviors to expect when running real
+     applications.
+    </para>
    </sect2>
 
    <sect2>
@@ -412,4 +444,37 @@
     
   </sect1>
   
+
+  <sect1 id="regress-coverage">
+   <title>Test Coverage Examination</title>
+
+   <para>
+    The PostgreSQL source code can be compiled with coverage testing
+    instrumentation, so that it becomes possible to examine which
+    parts of the code are covered by the regression tests or any other
+    test suite that is run with the code.  This is currently supported
+    when compiling with GCC and requires the <command>gcov</command>
+    and <command>lcov</command> programs.
+   </para>
+
+   <para>
+    A typical workflow would look like this:
+<screen>
+./configure --enable-coverage ... OTHER OPTIONS ...
+gmake
+gmake check # or other test suite
+gmake coverage-html
+</screen>
+    Then point your HTML browser
+    to <filename>coverage/index.html</filename>.
+   </para>
+
+   <para>
+    To reset the execution counts between test runs, run
+<screen>
+gmake coverage-clean
+</screen>
+   </para>
+  </sect1>
+  
 </chapter>

Modified: traduc/trunk/postgresql/release.xml
===================================================================
--- traduc/trunk/postgresql/release.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/release.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -9,12 +9,13 @@
 Typical markup:
 
 &<>                             use & escapes
+PostgreSQL                      <productname>
+postgresql.conf, pg_hba.conf    <filename>
 [A-Z][A-Z ]+[A-Z]               <command>
 [A-Za-z_][A-Za-z0-9_]+()        <function>
 [A-Za-z_]/[A-Za-z_]+            <filename>
-PostgreSQL                      <productname>
 pg_[A-Za-z0-9_]                 <application>
-[A-Z][A-Z]                      <type>, <envar>, <literal>
+[A-Z][A-Z][A-Z_ ]*              <type>, <envar>, <literal>
 
 non-ASCII characters            convert to HTML4 entity (&) escapes
 
@@ -70,6 +71,3059 @@
    élément est vraiment un travail de la communauté.
   </para>
 
+ <sect1 id="release-8-4">
+  <title>Release 8.4</title>
+
+  <note>
+   <title>Release date</title>
+   <simpara>2009-XX-XX, ITEMS CURRENT AS OF 2009-04-08</simpara>
+  </note>
+
+  <sect2>
+   <title>Overview</title>
+
+   <para>
+    After many years of development, <productname>PostgreSQL</> has
+    become feature-complete in many areas.   This release shows a
+    targeted approach to adding features (e.g. authentication,
+    monitoring, space reuse), and adds capabilities defined in the
+    later SQL standards;  the major areas of enhancement are:
+   </para>
+
+   <itemizedlist>
+
+    <!-- This list duplicates items below, but without authors or details-->
+
+    <listitem>
+     <para>
+      Windowing Functions
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Common Table Expressions and Recursive Joins
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Default and variadic parameters for functions
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Parallel Restore
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Column Permissions
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Per-database locale settings
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improved hash indexes
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improved join performance for EXISTS and NOT EXISTS queries
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Easier-to-use Warm Standby
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Automatic sizing of the Free Space Map
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Visibility Map (greatly reduces vacuum overhead for slowly-changing tables)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Version-aware psql (backslash commands work against older servers)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Support SSL certificates for authentication
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Per-function runtime statistics
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Easy editing of functions in psql
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      New contrib modules: pg_stat_statements, auto_explain, citext, btree_gin
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+   <para>
+    The above items are explained in more detail in the sections below.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Migration to Version 8.4</title>
+
+   <para>
+    A dump/restore using <application>pg_dump</application> is
+    required for those wishing to migrate data from any previous
+    release.
+   </para>
+
+   <para>
+    Observe the following incompatibilities:
+   </para>
+
+   <sect3>
+    <title>General</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Use 64-bit integer datetimes by default (Neil Conway)
+      </para>
+
+      <para>
+       This was available previously via a configure
+       --enable-integer-datetimes option.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <application>ipcclean</> utility command (Bruce)
+      </para>
+
+      <para>
+       The utility only worked on a few platforms;  users should use
+       their operating system tools instead.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+   <sect3>
+    <title>Server Settings</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Change <filename>postgresql.conf</> default for
+       <literal>log_min_messages</> to <literal>warning</> (previously
+       <literal>notice</>) to reduce log file volume (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <literal>debug_print_parse</>, <literal>debug_print_rewritten</>,
+       and <literal>debug_print_plan</>
+       output appear at <literal>LOG</> message level, not
+       <literal>DEBUG1</> as formerly (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <literal>debug_pretty_print</> default to <literal>on</> (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <varname>log_temp_files</> super-user set only, like other
+       logging options (Simon)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Disable appending of the epoch date/time when no <literal>%</>
+       escapes are present in <literal>log_filename</> (Robert Haas)
+      </para>
+
+      <para>
+       This change was made because some users wanted a fixed filename,
+       for use with an external log rotation tool.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <varname>explain_pretty_print</> parameter (no longer needed) (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <varname>log_restartpoints</> from <filename>recovery.conf</>;
+       instead use <varname>log_checkpoints</> (Simon Riggs)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove support for the (insecure) <literal>crypt</> authentication method
+       (Magnus)
+      </para>
+
+      <para>
+       This breaks compatibility with pre-<productname>PostgreSQL</> 7.2 versions.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <varname>krb_realm</> and <varname>krb_server_hostname</>, now
+       <filename>pg_hba.conf</>-only settings (Magnus)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       The <link
+       linkend="release-8-4-pg-hba-conf"><filename>pg_hba.conf</></link>
+       section below also has extensive changes related to migration.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+   <sect3>
+    <title>Queries</title>
+
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Force child tables to inherit <literal>CHECK</> constraints from parents
+       (Alex Hunsaker, Nikhil Sontakke, Tom Lane)
+      </para>
+
+      <para>
+       Formerly it was possible to delete such a constraint from a child
+       table, allowing rows that violate the constraint to be visible
+       when scanning the parent table.  This was deemed inconsistent,
+       as well as contrary to SQL standard.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change <command>TRUNCATE</> and <command>LOCK</> behavior to
+       apply to all child tables (Peter)
+      </para>
+
+      <para>
+       There is a new <literal>ONLY</> clause which disables this
+       behavior.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Disallow negative <literal>LIMIT</> or <literal>OFFSET</>
+       values, rather than treating them as zero (Simon)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Disallow <command>LOCK TABLE</> outside a transaction block
+       (Tom)
+      </para>
+
+      <para>
+       Such an operation is useless because the lock would be immediately
+       released.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+
+   <sect3>
+    <title>Functions and Operators</title>
+
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Have <literal>NUMERIC 0 ^ 4.3</> return <literal>1</>, rather
+       than an error, and have <literal>0 ^ 0.0</> return <literal>1</>,
+       rather than error (Bruce)
+      </para>
+
+      <para>
+       This was already the <type>float8</> behavior.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove code that prevented unary minus of floating-point values
+       from producing <literal>-0</> (Tom)
+      </para>
+
+      <para>
+       The changed behavior is more <acronym>IEEE</>-standard
+       compliant.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Throw an error if an escape character is the last character in
+       a <literal>LIKE</> pattern (there is nothing to escape) (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <literal>~=~</> and <literal>~&lt;&gt;~</> operators
+       formerly used for <literal>LIKE</> index comparisons (Tom)
+      </para>
+
+      <para>
+       Pattern indexes now use the regular equality operator.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <function>xpath()</> now passes its arguments to <application>libxml</>
+       without any changes (Andrew)
+      </para>
+
+      <para>
+       This means that the XML argument must be a well-formed XML document.
+       The previous coding attempted to allow XML fragments, but it did not
+       work well.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <function>xmlelement()</> format attribute values just like
+       content values (Peter)
+      </para>
+
+      <para>
+       Previously, attribute values were formatted according to the
+       normal SQL output behavior, which is sometimes at odds with
+       XML rules.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title>Temporal Functions and Operators</title>
+
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Have <function>to_char()</>'s localized month/day names depend
+        on <varname>LC_TIME</>, not <varname>LC_MESSAGES</> (Euler
+        Taveira de Oliveira)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Cause <function>to_date()</> and <function>to_timestamp()</>
+        to more consistently report errors on invalid input (Brendan
+        Jurd)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Provide consistent rounding for fractional seconds (Ron Mayer)
+        bjm:  combine with another item?
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix <function>to_timestamp()</> to not require upper/lower case
+        matching for meridian (<literal>AM</>/<literal>PM</>) and era
+        (<literal>BC</>/<literal>AD</>) format designations  (Brendan
+        Jurd)
+       </para>
+
+       <para>
+        For example, input value <literal>ad</> now matches the format
+        string <literal>AD</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Require the existence of periods in <function>to_timestamp()</>
+        meridian (<literal>AM</>/<literal>PM</>) and era
+        (<literal>BC</>/<literal>AD</>) format designations to match
+        (Brendan Jurd)
+       </para>
+
+       <para>
+        For example, input value <literal>AD</> now does not match
+        format string <literal>A.D.</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        <varname>DateStyle</> no longer controls <type>INTERVAL</>
+        output (use new variable <varname>IntervalStyle</>)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <para>
+    Below you will find a detailed account of the changes between
+    <productname>PostgreSQL</productname> 8.4 and the previous major
+    release.
+   </para>
+
+   <sect3>
+    <title>Performance</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Improve optimizer statistics calculations (Tom, Jan Urbanski)
+      </para>
+
+      <para>
+       This includes improved statistics for full text columns.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>SELECT DISTINCT</> and
+       <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> to
+       use hashing (Tom)
+      </para>
+
+      <para>
+       This means that these types of queries no longer automatically
+       produce sorted output.  The recommended response is to add an
+       <literal>ORDER BY</> clause if needed.  As a short-term workaround,
+       the previous behavior can be restored by
+       disabling <literal>enable_hashagg</>, but that is a very
+       performance-expensive fix. <literal>SELECT DISTINCT ON</> never
+       uses hashing.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New semi- and anti-joins (Tom)
+      </para>
+
+      <para>
+       While semi-joins merely replace existing <literal>IN</> joins,
+       anti-joins are a new capability for <literal>NOT EXISTS</>
+       clauses.  This improves optimization possibilities.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve <literal>IN</>/<literal>ANY</>/<literal>EXISTS</>
+       processing (Tom)
+      </para>
+
+      <para>
+       <literal>IN</> and <literal>EXISTS</> now provide similar
+       performance for equivalent clauses.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve the performance of <function>text_position()</> and
+       related functions by using Boyer-Moore-Horspool searching (David
+       Rowley)
+      </para>
+
+      <para>
+       This is particularly useful for long search patterns.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve handling of subqueries by the optimizer (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Reduce I/O frequency of writing the  backend statistics file
+       by writing the file only when requested (Martin Pihlak)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve performance for bulk inserts (Robert Haas, Simon)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Increase the default value of <varname>default_statistics_target</>
+       from <literal>10</> to <literal>100</> (Greg Sabino Mullane,
+       Tom)
+      </para>
+
+      <para>
+       The maximum value was also increased from <literal>1000</> to
+       <literal>10000</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Modify <varname>constraint_exclusion</> to check for partitioned
+       tables by default when inheritance or <literal>UNION ALL</> is
+       used (Tom)
+      </para>
+
+      <para>
+       A new <varname>constraint_exclusion</> setting,
+       <literal>partition</>, was added to match this behavior.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow I/O read-ahead for bitmap index scans (Greg Stark)
+      </para>
+
+      <para>
+       The amount of read-ahead is controlled by
+       <varname>effective_io_concurrency</>.  This requires
+       <function>posix_fadvise()</> support in the kernel.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Inline simple set-returning <acronym>SQL</> functions in
+       <literal>FROM</> clauses (Richard Rowell)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve performance of multi-batch hash joins by providing a special
+       case for join key values that are especially common in the outer
+       relation (Bryce Cutt, Ramon Lawrence)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Reduce volume of temporary data in multi-batch hash joins
+       by suppressing <quote>physical tlist</> optimization (Michael
+       Henderson, Ramon Lawrence)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Avoid waiting for idle-in-transaction sessions during
+       <command>CREATE INDEX CONCURRENTLY</> (Simon)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+   <sect3>
+    <title>Server</title>
+
+    <sect4>
+     <title>Settings</title>
+
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Convert many <filename>postgresql.conf</> settings to enumerated
+        values so <literal>pg_settings</> can easily display valid
+        values (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <varname>cursor_tuple_fraction</> parameter to control the
+        fraction of a cursor's rows expected to be requested by the
+        user (Robert Hell)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow underscores in <filename>postgresql.conf</> custom variable
+        classes (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Authentication</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Report appropriate error message for combination of <literal>MD5</>
+        authentication and <varname>db_user_namespace</> enabled (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support regular expressions in <filename>pg_ident.conf</>
+        (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <productname>Kerberos</>/<acronym>GSSAPI</> parameters
+        to be changed without restarting the postmaster (Magnus)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4 id="release-8-4-pg-hba-conf">
+     <title><filename>pg_hba.conf</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Parse <filename>pg_hba.conf</> in the postmaster so errors are
+        reported on reload (Magnus)
+       </para>
+
+       <para>
+        Previously errors in the file wouldn't be detected until clients
+        tried to connect, which could leave the system with a broken
+        file loaded.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove the <literal>sameuser</> option, making it the default
+        if no usermap is specified (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Change all authentication options to be <literal>name=value</>
+        settings (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow usermap parameter for all external authentication methods
+        (Magnus)
+       </para>
+
+       <para>
+        Previously this was only supported for <literal>ident</>
+        authentication.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <literal>ident</> authentication over Unix-domain sockets
+        on <productname>Solaris</> (Garick Hamlin)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>clientcert</> option to control requesting of a
+        client certificate (Magnus)
+       </para>
+
+       <para>
+        Previously this was controlled by the presence of a root
+        certificate file in the server's data directory.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>cert</> authentication method to allow user
+        authentication via <acronym>SSL</> certificates (Magnus)
+       </para>
+
+       <para>
+        Previously <acronym>SSL</> certificates could only verify that
+        the client had access to a certificate, not authenticate a
+        user.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <literal>krb5</>, <literal>gssapi</> and <literal>sspi</>
+        realm and <literal>krb5</> host settings to be specified in
+        <filename>pg_hba.conf</> (Magnus)
+       </para>
+
+       <para>
+        These override the settings in <filename>postgresql.conf</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>krb5</>, <literal>gssapi</>, and <literal>sspi</>
+        <varname>include_realm</> parameter (Magnus)
+       </para>
+
+       <para>
+        This allows identical usernames from different realms to be
+        authenticated as different database users using usermaps.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Show all parsing errors instead of aborting after the first
+        one (Selena Deckelmann)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Continuous Archiving</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Provide an option to <function>pg_start_backup()</> to force its
+        implied checkpoint to finish as quickly as possible (Tom)
+       </para>
+
+       <para>
+        The default behavior avoids excess I/O consumption, but that is
+        pointless if no concurrent query activity is going on.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <function>pg_stop_backup()</> wait for modified <acronym>WAL</>
+        files to be archived (Simon)
+       </para>
+
+       <para>
+        This guarantees that the backup is valid at the time
+        <function>pg_stop_backup()</> completes.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Prevent normal shutdown if a continuous archiving base backup
+        is in progress (Laurenz Albe)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Cancel a continuous archiving base backup if a fast shutdown
+        is requested (Laurenz Albe)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <filename>recovery.conf</> boolean variables to take the
+        same range of string values as <filename>postgresql.conf</>
+        (Bruce)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Monitoring</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add <function>pg_conf_load_time()</> to report when
+        the Postgres configuration files were last loaded (George
+        Gensure)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>pg_terminate_backend()</> to safely terminate a
+        backend (the <literal>SIGTERM</> signal works also) (Tom, Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add ability to track user-defined functions call counts and
+        runtimes via parameter <varname>track_functions</> (Martin
+        Pihlak)
+       </para>
+
+       <para>
+        Function statistics appear in a new system table,
+        <literal>pg_stat_user_functions</>.  However, inlined
+        <acronym>SQL</> functions are not tracked.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow specification of the maximum <literal>pg_stat_activity</>
+        query string size via <varname>track_activity_query_size</>
+        parameter (Thomas Lee)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve syslog performance by increasing the maximum line length
+        (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add read-only <filename>postgresql.conf</> variables <varname>segment_size</>,
+        <varname>wal_block_size</>, and <varname>wal_segment_size</> (Bernd Helmle)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        When reporting a deadlock, report all session queries involved
+        in the deadlock to the server log  (Itagaki Takahiro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        New <function>pg_stat_get_activity(pid)</> function to return
+        information about a specific process id (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Move the server statistics file into the subdirectory
+        <filename>pg_stat_tmp</> and allow its location to be specified
+        via <varname>stats_temp_directory</> (Magnus)
+       </para>
+
+       <para>
+        This allows the statistics file to be placed in a
+        <acronym>RAM</>-resident directory to reduce I/O requirements.
+        On startup/shutdown, the file is copied to the top-level
+        <literal>$PGDATA</> directory so it is preserved between
+        restarts.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Queries</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add support for <literal>WINDOW</> functions (Hitoshi Harada)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <literal>WITH</> clauses support, including <literal>WITH
+       RECURSIVE</> (Yoshiyuki Asaba, Tatsuo Ishii, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New <command>TABLE</> command (Peter)
+      </para>
+
+      <para>
+       <command>TABLE tablename</> is a short-hand for <command>SELECT
+       * FROM tablename</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <literal>AS</> to be optional when specifying a
+       <command>SELECT</> (or <literal>RETURNING</>) column output
+       label (assuming the label is not an <acronym>SQL</> keyword)
+       (Hiroshi Saito)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Support set-returning functions in the output of aggregation
+       and grouping queries (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>SELECT FOR UPDATE</>/<literal>SHARE</> to work
+       on inheritance trees (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add infrastructure for <acronym>SQL/MED</> (Martin Pihlak,
+       Peter)
+      </para>
+
+      <para>
+       There are no remote or external <acronym>SQL/MED</> capabilities
+       yet, but this change provides a standardized and future-proof
+       system for managing connection information for modules like
+       dblink and plproxy.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Invalidate cached plans when referenced schemas, functions, operators,
+       or operator classes are modified (Martin Pihlak, Tom)
+      </para>
+
+      <para>
+       This improves the system's ability to respond to on-the-fly
+       DDL changes.
+      </para>
+     </listitem>
+     <listitem>
+      <para>
+       Allow comparison of composite types and allow arrays of
+       anonymous composite types (Tom)
+      </para>
+
+      <para>
+       Specifically this allows <literal>array[row(1,2), row(3,4)]</>
+       and <literal>row(1,1.1) = any (array[row(7,7.7), row(1,1.0)])</>.
+       This is particularly useful for recursive queries.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add support for Unicode string and identifier specifications
+       using code points, e.g. <literal>U&amp;'d\0061t\+000061'</>
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve the parser's ability to report error locations (Tom)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title><command>TRUNCATE</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support statement-level <literal>ON TRUNCATE</> triggers (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <command>TRUNCATE TABLE</> ...
+        <literal>RESTART</>/<literal>CONTINUE IDENTITY</> clauses
+        (Zoltan Boszormenyi)
+       </para>
+
+       <para>
+        The start value of a sequence can be changed by <command>ALTER
+        SEQUENCE START WITH</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <command>TRUNCATE tab1, tab1</> to succeed (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a separate <command>TRUNCATE</> permission (Robert Haas)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><command>EXPLAIN</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Have <command>EXPLAIN VERBOSE</> show the output columns of a
+        query (Tom)
+       </para>
+
+       <para>
+        Previously <command>EXPLAIN VERBOSE</> output an internal
+        representation of the query plan.  (That behavior is now
+        available via <varname>debug_print_plan</>.)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <command>EXPLAIN</> identify subplans and initplans with
+        individual labels (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <command>EXPLAIN</> honor <varname>debug_print_plan</> (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <command>EXPLAIN</> on <command>CREATE TABLE AS</> (Peter)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><literal>LIMIT</>/<literal>OFFSET</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow <literal>LIMIT</> and <literal>OFFSET</> to use subselects
+        as arguments (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Document that <literal>LIMIT NULL</> and <literal>OFFSET NULL</>
+        have no effect (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <acronym>SQL</>-standard syntax for
+        <literal>LIMIT</>/<literal>OFFSET</> capabilities (Peter)
+       </para>
+
+       <para>
+        To wit,
+        <literal>OFFSET num {ROW|ROWS} FETCH {FIRST|NEXT} [num] {ROW|ROWS}
+        ONLY</>.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Object Manipulation</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add support for column-level privileges (Stephen Frost, KaiGai
+       Kohei)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve reporting of dependencies during <command>DROP</>
+       commands (Alex Hunsaker)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Refactor multi-object <command>DROP</> operations so conflicting
+       dependencies do not generate an error (Alex Hunsaker)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <literal>WITH [NO] DATA</> clause to <command>CREATE TABLE
+       AS</>, per the <acronym>SQL</> standard (Tom, Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add support for user-defined I/O conversion casts (Heikki)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>CREATE AGGREGATE</> to use an <type>internal</>
+       transition datatype (for super-users only)  (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <literal>LIKE</> clause to <command>CREATE TYPE</> (Tom)
+      </para>
+
+      <para>
+       This simplifies creation of data types that use the same internal
+       representation as an existing type.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>CREATE OR REPLACE VIEW</> to add columns to the
+       <emphasis>end</> of a view (Robert Haas)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title><command>ALTER</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add <command>ALTER TYPE RENAME</> (Petr Jelinek)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <command>ALTER SEQUENCE ... RESTART</> (no parameter) to
+        reset a sequence to its initial value (Zoltan Boszormenyi)
+        bjm: compatibility problem?
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Modify the <command>ALTER TABLE</> syntax to allow all reasonable
+        combinations for tables, indexes, sequences, and views (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        New syntax supported (these formerly required <command>ALTER
+        TABLE</>)
+       </para>
+
+       <para>
+        <itemizedlist>
+         <listitem>
+          <para>
+           <command>ALTER SEQUENCE OWNER TO</>
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           <command>ALTER VIEW ALTER COLUMN SET/DROP DEFAULT</>
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           <command>ALTER VIEW OWNER TO</>
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           <command>ALTER VIEW SET SCHEMA</>
+          </para>
+         </listitem>
+        </itemizedlist>
+       </para>
+
+      </listitem>
+
+      <listitem>
+       <para>
+        Add support for the syntax <command>ALTER TABLE ... ALTER COLUMN
+        ... SET DATA TYPE</> (Peter)
+       </para>
+
+       <para>
+        This is <acronym>SQL</>-standard syntax for functionality that
+        was already supported.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <command>ALTER TABLE SET WITHOUT OIDS</> rewrite the table
+        to remove <type>OID</> values (Tom)
+       </para>
+
+       <para>
+        Also, add <command>ALTER TABLE SET WITH OIDS</> to rewrite the
+        table to add <type>OID</>s.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Database Manipulation</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Improve reporting of
+        <command>CREATE</>/<command>DROP</>/<command>RENAME DATABASE</>
+        failure when uncommitted prepared transactions are the cause
+        (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <varname>LC_COLLATE</> and <varname>LC_CTYPE</> database-level
+        settings (Radek Strnad, Heikki)
+       </para>
+
+       <para>
+        This makes collation similar to encoding, which was always
+        configurable per database.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve checks that the database encoding, collation
+        (<varname>LC_COLLATE</>), and character classes
+        (<varname>LC_CTYPE</>) match (Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <command>ALTER DATABASE SET TABLESPACE</> to move a database
+        to a new tablespace (Guillaume Lelarge, Bernd Helmle)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Utility Operations</title>
+
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add verbose option to the <command>CLUSTER</> command and
+       <application>clusterdb</> (Jim Cox)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Decrease memory requirements for recording pending trigger
+       events (Tom)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title>Indexes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Dramatically improve the speed of building and accessing hash
+        indexes (Tom Raney, Shreya Bhargava, Kenneth Marshall)
+       </para>
+
+       <para>
+        This allows hash indexes to be sometimes faster than btree
+        indexes.  However, hash indexes are still not crash-safe.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have hash indexes store only the hashed value, not the full
+        indexed columns (Xiao Meng)
+       </para>
+
+       <para>
+        This greatly reduces the size of hash indexes for long indexed
+        values, and improves performance.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement fast update for GIN indexes (Teodor, Oleg)
+       </para>
+
+       <para>
+        This option greatly improves update speed at a small penalty in search
+        speed.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        <literal>xxx_pattern_ops</> indexes can now be used for simple
+        equality comparisons, not only <literal>LIKE</> (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Full Text Indexes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Remove the requirement to use <literal>@@@</> when doing
+        <acronym>GIN</> weighted lookups on full text indexes (Tom)
+       </para>
+
+       <para>
+        The normal <literal>@@</> text search operator can be used
+        instead.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add an optimizer selectivity function for <literal>@@</> text
+        search operations (Jan Urbanski)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add partial match support for <acronym>GIN</> indexes (Teodor
+        Sigaev, Oleg Bartunov)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow prefix matching in full text searches (Teodor Sigaev,
+        Oleg Bartunov)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve support for Nepali language and Devanagari alphabet (Teodor)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support multi-column <acronym>GIN</> indexes (Teodor Sigaev)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><command>VACUUM</></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow relation forks to track free space (Heikki)
+       </para>
+
+       <para>
+        This allows the recording of all free space discovered by vacuum
+        in <filename>*.fsm</> files, rather than having to limit
+        recording to a fixed-sized shared memory area;
+        <varname>max_fsm_pages</> and <varname>max_fsm_relations</>
+        settings have been removed.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        New visibility map file to track pages that do not require
+        vacuum (Heikki)
+       </para>
+
+       <para>
+        This allows <command>VACUUM</> to avoid sequentially scanning
+        a table when only a portion of the table needs vacuuming.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Track explicit transaction snapshots (Alvaro)
+       </para>
+
+       <para>
+        This improves space reuse by vacuum in the presence of long-running
+        transactions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <varname>vacuum_freeze_table_age</> parameter to control
+        when <command>VACUUM</> should ignore the visibility map and
+        do a full table scan to set frozen xids (Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add ability to specify autovacuum and <acronym>TOAST</> parameters
+        in <command>CREATE TABLE</> (Alvaro, Euler Taveira de Oliveira)
+       </para>
+
+       <para>
+        Autovacuum options used to be stored in a system table.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>--freeze</> option to <application>vacuumdb</>
+        (Bruce)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Data Types</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add a <literal>CaseSensitive</> option for text search synonym
+       dictionaries (Simon)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve the precision of <type>NUMERIC</> division (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <type>int2</> with <type>int8</> basic arithmetic operators
+       (Tom)
+      </para>
+
+      <para>
+       This simplifies casting requirements.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <type>UUID</> input to accept optional hyphens after
+       every four digits (Robert Haas)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Accept <literal>on</>/<literal>off</> as boolean data type
+       values (Itagaki Takahiro)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow spaces around <literal>NaN</> in the input string for
+       type <type>numeric</> (Sam Mason)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title>Temporal Data Types</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Reject year <literal>0 BC</> and years <literal>000</> and
+        <literal>0000</> (Tom)
+       </para>
+
+       <para>
+        Previously these were interpreted as <literal>1 BC</>;  years
+        <literal>0</> and <literal>00</> are assumed to be the year
+        2000.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Include <acronym>SGT</> (Singapore time) as a valid time zone
+        abbreviation (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support the <acronym>IS0 8601</> <type>interval</> syntax (Tom,
+        Kevin Grittner)
+       </para>
+
+       <para>
+        For example, <literal>INTERVAL 'P1Y2M3DT4H5M6.7S'</> is now
+        supported.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <type>INTERVAL</> precision to be specified after the
+        last field, for <acronym>SQL</>-standards compliance (Tom)
+       </para>
+
+       <para>
+        Formerly the precision had to be specified after the keyword
+        <type>INTERVAL</> (this syntax is still supported).  Data type
+        definitions will now be output using the new format.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support <literal>infinite</> dates (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <varname>IntervalStyle</> parameter
+        which controls how <type>INTERVAL</> values are output (Ron Mayer)
+       </para>
+
+       <para>
+        Valid value are:  <literal>postgres</>, <literal>postgres_verbose</>,
+        <literal>sql_standard</>, <literal>iso_8601</>.  This also
+        controls the handling of negative <type>INTERVAL</> input when only
+        some fields have positive/negative designations.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <type>INTERVAL</> seconds rounding more consistent across
+        output formats (Ron Mayer)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Arrays</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Have cast on <type>ARRAY</> apply to all elements, not just
+        the array result (Brendan Jurd)
+       </para>
+
+       <para>
+        This allows <literal>NULL</> <type>ARRAY</> entries as long as
+        they are properly cast.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <acronym>SQL</>-syntax <type>ARRAY</> dimensions optional
+        to match the <acronym>SQL</> standard (Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>array_ndims()</> to return the number
+        of dimensions of an array (Robert Haas)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>array_length()</> to return the length
+        of an array for the specified dimensions (Jim Nasby, Robert
+        Haas, Peter Eisentraut)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new aggregate function <function>array_agg()</>, which
+        returns all aggregated values as a single array (Robert Haas,
+        Jeff Davis, Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>unnest()</>, which converts an array to
+        individual row values (Tom)
+       </para>
+
+       <para>
+        This is the opposite of <function>array_agg()</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>array_fill()</> to create arrays initialized with
+        a value (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>generate_subscripts()</> to generate array
+        subscripts (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Generate proper error if a <type>SERIAL</> array is specified
+        (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Wide-Value Storage (<acronym>TOAST</>)</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Consider <acronym>TOAST</> compression on values as short as
+        32 bytes (previously 256 bytes) (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Require 25% of space savings before using <acronym>TOAST</>
+        compression (previously 20%) (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Be more aggressive in storing <literal>EXTERNAL</> and
+        <literal>EXTENDED</> column values in <acronym>TOAST</>(Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Functions</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Document that <function>setseed()</> allows values from
+       <literal>-1</> to <literal>1</> (not just <literal>0</> to
+       <literal>1</>), and enforce the valid range (Kris Jurka)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add server side function <function>lo_import(filename, oid)</>
+       (Tatsuo)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>quote_nullable()</>, which behaves like
+       <function>quote_literal()</> but returns <literal>NULL</> for
+       a null argument (Brendan Jurd)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve full text search <function>headline()</> generation to
+       allow several fragments (Sushant Sinha)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>suppress_redundant_updates_trigger()</> trigger
+       function to avoid non-data-changing updates (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>div(NUMERIC, NUMERIC)</> for <type>NUMERIC</>
+       division, without rounding (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <type>TIMESTAMP</> and <type>TIMESTAMPTZ</> versions of
+       <function>generate_series()</> (Hitoshi Harada)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title>Object Information Functions</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Implement <function>current_query()</> for use by functions
+        that need to know the currently running query (Tomas Doran)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>pg_get_keywords()</> to return predefined
+        parser keywords (Dave Page)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>pg_get_functiondef()</> to see a functions
+        definition (Abhijit Menon-Sen)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Modify <function>pg_relation_size()</> to handle free space
+        map (<filename>*.fsm</>) files (Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Modify <function>pg_relation_size()</> to use <literal>regclass</>
+        (Heikki)
+       </para>
+
+       <para>
+        <function>pg_relation_size(data_type_name)</> no longer works.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>boot_val</> and <literal>reset_val</> columns to
+        <literal>pg_settings</> output (Greg Smith)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add support for <varname>CURRENT_CATALOG</>,
+        <varname>CURRENT_SCHEMA</>, <varname>SET CATALOG</>, <varname>SET
+        SCHEMA</> (Peter)
+       </para>
+
+       <para>
+        These are <acronym>SQL</>-standard capabilities.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>pg_typeof()</> which returns the data type
+        of any value (Brendan Jurd)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <function>version()</> return information about whether
+        the server is a 32 or 64-bit binary (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix the behavior of information schema columns
+        <literal>is_insertable_into</> and <literal>is_updatable</> to
+        be consistent (Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Convert remaining builtin set-returning functions to use
+        <literal>OUT</> parameters (Jaime Casanova)
+       </para>
+
+       <para>
+        This makes it possible to call these functions without specifying
+        a column list:  <function>pg_show_all_settings()</>,
+        <function>pg_lock_status()</>, <function>pg_prepared_xact()</>,
+        <function>pg_prepared_statement()</>, <function>pg_cursor()</>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <function>pg_*_is_visible()</> and
+        <function>has_*_privilege()</> functions return <literal>NULL</>
+        for invalid oids, rather than generate an error (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <function>has_column_privilege()</> and
+        <function>has_any_column_privilege()</> functions (Stephen
+        Frost, Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Function Creation</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support variadic functions (functions with a variable number
+        of arguments) (Pavel Stehule)
+       </para>
+
+       <para>
+        Only trailing arguments can be optional, and they all must be
+        of the same data type.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <literal>DEFAULT</> values for function arguments (Pavel
+        Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <command>CREATE FUNCTION ... RETURNS TABLE</> clause (Pavel
+        Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <acronym>SQL</>-language functions to return the output
+        of an <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
+        <literal>RETURNING</> clause (Tom)
+       </para>
+
+       <para>
+        Formerly only <command>SELECT</> was supported.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>PL/PgSQL Server-Side Language</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support <literal>EXECUTE USING</> (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow looping over an open cursor using a <literal>FOR</>
+        loop (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support <literal>RETURN QUERY EXECUTE</> (Pavel
+        Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve the <literal>RAISE</> command: (Pavel Stehule)
+
+        <itemizedlist>
+         <listitem>
+          <para>
+           Support <literal>DETAIL</> and <literal>HINT</> fields
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           Support <literal>SQLSTATE</> error codes
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           Support an exception name parameter
+          </para>
+         </listitem>
+         <listitem>
+          <para>
+           Allow <literal>RAISE</> without parameters in an exception
+           block to rethrow the current error
+          </para>
+         </listitem>
+        </itemizedlist>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow specification of <varname>SQLSTATE</> numeric codes
+        in <literal>EXCEPTION</> lists (Pavel Stehule)
+       </para>
+
+       <para>
+        This is useful for handling custom <varname>SQLSTATE</> codes.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support the <literal>CASE</> statement (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>FOUND</> and <command>GET DIAGNOSTICS</> support
+        for the <literal>RETURN QUERY</> statement (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <command>FETCH</> and <command>MOVE</> set the
+        <command>GET DIAGNOSTICS</> <literal>ROW_COUNT</> variable
+        (Andrew Gierth)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add message translation support (Alvaro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Avoid memory leakage when the same function is called at varying
+        exception-block nesting depths (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Client Applications</title>
+
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Fix <literal>pg_ctl restart</> to preserve command-line arguments
+       (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <literal>-w</>/<literal>--no-password</> option that
+       suppresses password prompts to all utilities that have a
+       <literal>-W</>/<literal>--password</> option (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <literal>-q</> (quiet) option for create* and drop*
+       utility commands (Peter)
+      </para>
+
+      <para>
+       These options have had no effect since <productname>PostgreSQL</>
+       8.3.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+    <sect4>
+     <title><link linkend="APP-PSQL"><application>psql</></link></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Remove startup banner;  now just suggest <literal>help</>
+        (Joshua Drake)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <literal>help</> show common backslash commands (Greg
+        Sabino Mullane)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <literal>\pset format wrapped</> mode to wrap output to the
+        screen width, or file/pipe output too if <literal>\pset columns</>
+        is set (Bryce Nesbitt)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Use the pager for wide output (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Require a space between a backslash command and the first
+        argument (Bernd Helmle)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Display access control rights on multiple lines (Brendan
+        Jurd, Andreas Scherbaum)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve tab completion support for schema qualified and
+        quoted identifiers (Greg Sabino Mullane)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow the normal range of boolean values in <command>\pset</>,
+        rather than just <literal>on</> and <literal>off</> (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add optional <literal>on</>/<literal>off</> arguments for
+        <command>\timing</> (David Fetter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <command>\l</> show access privileges (Andrew Gilligan)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <command>\l+</> show database sizes, if permissions
+        allow (Andrew Gilligan)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add the <command>\ef</> command to edit function definitions
+        (Abhijit Menon-Sen)
+       </para>
+
+       <para>
+        <command>\ef</> without a function name creates an empty
+        function template for editing.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><link linkend="APP-PSQL"><application>psql</></link> \d*</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Have <command>\d</> show cases where this table is referenced
+        as a foreign-key constraint (Kenneth D'Souza)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <command>\d</> show the value of sequence columns
+        (Euler Taveira de Oliveira)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add column storage type and other relation options to the
+        <command>\d+</> display (Gregory Stark, Euler Taveira de
+        Oliveira)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Show relation size in <command>\d+</> output (Dickson S.
+        Guedes)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <command>\d*</> commands that do not have a pattern argument
+        show system objects only if the <literal>S</> modifier is specified
+        (Greg Sabino Mullane, Bruce)
+       </para>
+
+       <para>
+        The former behavior was inconsistent across different variants
+        of <command>\d</>, and provided no easy way to see just user objects.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <command>\d</> and <command>\dt</> consistent in
+        their display of system tables (Bruce)
+       </para>
+
+       <para>
+        Previously, <literal>\d pg_class</> would show <literal>pg_class</>
+        while <literal>\dt pg_class</> would not.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Show enumerated values in <command>\dT+</> (David Fetter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <command>\dC</> to accept wildcard patterns (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <command>\d*</> commands to work with versions of
+        <productname>PostgreSQL</> back to 7.4 (Guillaume Lelarge)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make <command>\df</> not hide functions that take or return
+        type <type>cstring</> (Tom)
+       </para>
+
+       <para>
+        Previously, such functions were hidden because most of them are
+        datatype I/O functions, which were deemed uninteresting.  The new
+        policy about hiding system functions by default makes this wart
+        unnecessary.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add a <literal>--no-tablespaces</> option to
+        <application>pg_dump</>/<application>pg_dumpall</>/<application>pg_restore</>
+        so dumps can be restored to clusters that have non-matching
+        tablespace layouts (Gavin Roy)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove <option>-d</> and <option>-D</> options from
+        <application>pg_dump</> and <application>pg_dumpall</> (Tom)
+       </para>
+
+       <para>
+        These options were too frequently confused with the option to
+        select a database name in other <productname>PostgreSQL</>
+        client applications.  The functionality is still available,
+        but you must spell out the long option name
+        <option>--inserts</> or <option>--column-inserts</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove <option>-i</>/<option>--ignore-version</> option from
+        <application>pg_dump</> and <application>pg_dumpall</> (Tom)
+       </para>
+
+       <para>
+        Use of this option does not throw an error, but it has no
+        effect.  This option was removed because the version checks
+        are considered necessary.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Disable <varname>statement_timeout</> during dump and restore
+        (Joshua Drake)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add <application>pg_dump</>/<application>pg_dumpall</> option
+        <option>--lock-wait-timeout</> (David Gould)
+       </para>
+
+       <para>
+        This allows dumps to fail if unable to acquire a shared lock
+        within the specified amount of time.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Reorder <application>pg_dump</> <literal>--data-only</> output
+        to dump primary-key tables referenced by foreign keys before
+        the foreign-key referencing tables (Tom)
+       </para>
+
+       <para>
+        This allows data loads when foreign keys are already present.
+        If circular references make this impossible, a <literal>NOTICE</>
+        is issued.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <application>pg_dump</>, <application>pg_dumpall</>, and
+        <application>pg_restore</> to use a specified role (Benedek
+        László)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow <application>pg_restore</> of a custom format archive to
+        use multiple concurrent connections to do the restore (Andrew)
+       </para>
+
+       <para>
+        The number of concurrent connections is controlled by the option
+        <literal>--jobs</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new <application>pg_dump</> <literal>--binary-upgrade</>
+        option for use by binary upgrade utilities (Bruce)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Programming Tools</title>
+
+    <sect4>
+     <title><link linkend="libpq"><application>libpq</></link></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow the <type>OID</> to be specified when importing large
+        objects using <function>lo_import_with_oid()</> (Tatsuo)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add events support (Andrew Chernow, Merlin Moncure)
+       </para>
+
+       <para>
+        This adds the ability to register callbacks to handle private
+        data for connection and result creation and destruction.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve error handling to allow the return of multiple
+        error messages as multi-line error reports (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Have <function>PQexecParams()</> return
+        <varname>PGRES_EMPTY_QUERY</> for an empty query (Tom)
+       </para>
+
+       <para>
+         It previously returned <varname>PGRES_COMMAND_OK</>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Document how to avoid the overhead of <function>WSACleanup()</>
+        on Windows (Andrew Chernow)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><link linkend="libpq"><application>libpq</></link>
+     <acronym>SSL</> (Secure Sockets Layer)</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Fix certificate validation for <acronym>SSL</> connections
+        (Magnus)
+       </para>
+
+       <para>
+        <application>libpq</> now verifies both the certificate and
+        the name of the server by default when making <acronym>SSL</>
+        connections. If a root certificate is not available to use for
+        verification, <acronym>SSL</> connections will fail. The
+        <literal>sslverify</> parameter can be used to disable the host
+        and certificate verification if required.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow the file locations for client certificates to be specified
+        (Mark Woodward, Alvaro, Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add connection parameter <literal>sslverify</> to control
+        the verification of the server's certificate
+        (Magnus)
+       </para>
+
+       <para>
+        The default is full verification.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a <function>PQinitOpenSSL</> function to allow greater control
+        over OpenSSL/libcrypto initialization (Andrew Chernow)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Properly unregister <application>OpenSSL</> callbacks when
+        libpq is done with all connections (Bruce, Magnus, Russell Smith)
+       </para>
+
+       <para>
+        This is required for applications that unload the libpq library,
+        otherwise invalid <application>OpenSSL</> callbacks will remain.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title><link linkend="ecpg"><application>ecpg</></link></title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add localization support for messages (Euler Taveira de
+        Oliveira)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        ecpg parser is now automatically generated from the server
+        parser (Michael)
+       </para>
+
+       <para>
+        Previously a separate ecpg parser was maintained.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+    <sect4>
+     <title>Server Programming Interface (<acronym>SPI</>)</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add support for single-use plans with out-of-line
+        parameters (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new <varname>SPI_OK_REWRITTEN</> return code to
+        <function>SPI_execute()</> (Heikki)
+       </para>
+
+       <para>
+        This is used when a command is rewritten to another type of
+        command.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect4>
+
+   </sect3>
+
+   <sect3>
+    <title>Build Options</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Support 64-bit time zone data files (Heikki)
+      </para>
+
+      <para>
+       This adds support for daylight saving time (<acronym>DST</>)
+       calculations beyond year 2038.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix bug in handling of the time zone database when cross-compiling
+       (Richard Evans)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Update build system to use <productname>Autoconf</> 2.61 (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Require <productname>GNU bison</> for source code builds (Peter)
+      </para>
+
+      <para>
+       This has been a requirement for several years but this removes
+       the infrastructure for supporting other parser tools.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <application>pg_config</> <literal>--htmldir</> option
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Pass <type>float4</> by value inside the server (Zoltan
+       Boszormenyi)
+      </para>
+
+      <para>
+       Add <application>configure</> option
+       <literal>--disable-float4-byval</> to use the old behavior.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Pass <type>float8</> and <type>int8</> by value in the server
+       where possible (Zoltan Boszormenyi)
+      </para>
+
+      <para>
+       Add <application>configure</> option
+       <literal>--disable-float8-byval</> to use the old behavior.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add configure options <literal>--with-segsize</>,
+       <literal>--with-blocksize</>, <literal>--with-wal-blocksize</>,
+       <literal>--with-wal-segsize</> (Zdenek Kotala, Tom)
+      </para>
+
+      <para>
+       This allows compile-time control over several constants that
+       affect how tables and <acronym>WAL</> files are segmented and
+       their internal block sizes.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow threaded builds on <productname>Solaris</> 2.5 (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use the system's <function>getopt_long()</> on <productname>Solaris</>
+       (Zdenek Kotala, Tom)
+      </para>
+
+      <para>
+       This makes option processing more consistent with what Solaris users
+       expect.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add support for the <productname>Sun Studio</> compiler on
+       <productname>Linux</> (Julius Stroffek)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Append the major version number to the <application>gettext</>
+       domain, and the <literal>soname</> major version number to
+       libraries (Peter)
+      </para>
+
+      <para>
+       This simplifies parallel installations.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow out-of-tree builds on <productname>Mingw</> and
+       <productname>Cygwin</> (Richard Evans)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix the use of <productname>Mingw</> as a cross-compiling source
+       platform (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix problem when setting <varname>LC_MESSAGES</> on
+       <application>MSVC</>-built systems (Hiroshi Inoue, Hiroshi
+       Saito, Magnus)  bjm: details?
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+   <sect3>
+    <title>Source Code</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Link backend object files in one step, rather than in stages
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve <application>gettext</> support to allow better translation
+       of plurals (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <application>DTrace</> probes (Robert Lor)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <application>DTrace</> support on <application>Mac OS X
+       Leopard</> (Robert Lor)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add new <type>cstring</> to <type>text</> conversion functions
+       (Brendan Jurd, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add a <structfield>relistemp</> column to <structname>pg_class</>
+       to ease identification of temporary tables (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve logic for shared cache invalidation (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <type>name</> char-aligned (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add function hook to let plug-ins control the executor (Itagaki
+       Takahiro)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add a hook to allow the planner statistics lookup behavior to
+       be overridden (Simon Riggs)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>shmem_startup_hook()</> for custom shared memory
+       requirements (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Replace <literal>pg_class</> column <literal>reltriggers</>
+       with boolean <literal>relhastriggers</> (Simon)
+      </para>
+
+      <para>
+       Also remove unused <literal>pg_class</> columns <literal>relukeys</>,
+       <literal>relfkeys</>, and <literal>relrefs</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Move <acronym>SQL</>-command manual pages from the <filename>manl</>
+       (man-el) section to <filename>man7</> (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Move platform <acronym>FAQ</>s into the main documentation
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Prevent parser input files from being built with any conflicts
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add support for the <literal>KOI8U</> (Ukrainian) encoding
+       (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add Japanese message translations (Japan PostgreSQL Users Group)
+      </para>
+
+      <para>
+       This used to be maintained as a separate project.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+
+   <sect3>
+    <title>Contrib</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add query mode option to <filename>/contrib/pgbench</>
+       (Itagaki Takahiro)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add duration option to <filename>/contrib/pgbench</> (Itagaki
+       Takahiro)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix <filename>/contrib/pgstattuple</> to handle tables and
+       indexes with over 2 billion pages (Tatsuhito Kasahara)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add Levenshtein string-distance function to
+       <filename>/contrib/fuzzystrmatch</> that allows the user to
+       specify the cost of insertion, deletion, and substitution
+       (Volkan Yazici)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <function>dblink_current_query()</> from
+       <filename>/contrib/dblink</>;  it should now use
+       <function>current_query()</> (Tomas Doran)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <filename>/contrib/ltree</> support multibyte encodings
+       (laser)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <filename>/contrib/btree_gin</> to allow GIN indexes to
+       handle more datatypes (Oleg, Teodor)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <filename>/contrib/citext</> as a case-insensitive,
+       multibyte-aware text data type (David Wheeler)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make sure <filename>/contrib/dblink</> uses a password supplied
+       by the user, and not accidentally from the server's .pgpass file
+       (Joe Conway)
+      </para>
+
+      <para>
+       This is a security enhancement.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>fsm_page_contents()</>
+       to<filename>/contrib/pageinspect</> (Heikki)
+      </para>
+
+      <para>
+       Modify <function>get_raw_page()</> to support free space map
+       (<filename>*.fsm</>) files.  Also update
+       <filename>/contrib/pg_freespacemap</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add support for multibyte encodings to <filename>/contrib/pg_trgm</>
+       (Teodor)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Rewrite <filename>/contrib/intagg</> to user new server-side
+       functions <function>array_agg()</> and <function>unnest()</>
+       (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <filename>/contrib/intarray</>'s definitions of the
+       <literal>&lt;@</> and <literal>@&gt;</> operators (Tom)
+      </para>
+
+      <para>
+       This avoids confusion with the equivalent built-in operators.
+       If necessary, the <filename>/contrib/intarray</> implementations
+       are still available under their historical names <literal>@</>
+       and <literal>~</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <filename>/contrib/auto_explain</> to automatically run
+       <command>EXPLAIN</> on queries exceeding a specified duration
+       (Itagaki Takahiro, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <filename>/contrib/pg_stat_statements</> for server-wide
+       tracking of statement execution statistics (Itagaki Takahiro)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+
+   </sect3>
+  </sect2>
+ </sect1>
+
  <sect1 id="release-8-3-7">
   <title>Version 8.3.7</title>
 
@@ -4658,6 +7712,7 @@
       traduction et conversion d'encodage. Le message d'erreur est renvoyé en
       ASCII simple si nous découvrons que nous sommes dans une situation
       susceptible d'entraîner une récursion infinie.
+      (CVE-2009-0922)
      </para>
     </listitem>
 
@@ -9572,6 +12627,7 @@
       traduction et conversion d'encodage. Le message d'erreur est renvoyé en
       ASCII simple si nous découvrons que nous sommes dans une situation
       susceptible d'entraîner une récursion infinie.
+      (CVE-2009-0922)
      </para>
     </listitem>
 
@@ -14015,6 +17071,7 @@
       traduction et conversion d'encodage. Le message d'erreur est renvoyé en
       ASCII simple si nous découvrons que nous sommes dans une situation
       susceptible d'entraîner une récursion infinie.
+      (CVE-2009-0922)
      </para>
     </listitem>
 
@@ -18674,6 +21731,7 @@
       traduction et conversion d'encodage. Le message d'erreur est renvoyé en
       ASCII simple si nous découvrons que nous sommes dans une situation
       susceptible d'entraîner une récursion infinie.
+      (CVE-2009-0922)
      </para>
     </listitem>
 

Modified: traduc/trunk/postgresql/rules.xml
===================================================================
--- traduc/trunk/postgresql/rules.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/rules.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -1851,13 +1851,9 @@
 </para>
 
 <para>
-    D'un autre côté, un déclencheur qui est lancé sur un
-    <command>insert</command> pour une vue peut faire la même chose qu'une
-    règle&nbsp;: placez les données ailleurs et supprimez les insertions dans la
-    vue. Mais, il ne pourra pas faire la même chose avec un
-    <command>update</command> ou un <command>delete</command> parce qu'il n'y a
-    pas de vraies données sur la vue qui pourraient être parcourues. Du coup, le
-    déclencheur ne serait jamais appelé. Seule une règle pourra vous aider.
+    On the other hand, a trigger cannot be created on views because
+    there is no real data in a view relation;  however INSERT, UPDATE,
+    and DELETE rules can be created on views.
 </para>
 
 <para>

Modified: traduc/trunk/postgresql/sources.xml
===================================================================
--- traduc/trunk/postgresql/sources.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/sources.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -14,17 +14,51 @@
     Le formatage du code source utilise un espacement de quatre colonnes
     pour les tabulations, avec préservation de celles-ci
     (c'est-à-dire que les tabulations ne sont pas converties en
-    espaces).  Chaque niveau logique d'indentation est une tabulation
-    supplémentaire.  Les règles de disposition (positionnement des
+    espaces). Chaque niveau logique d'indentation est une tabulation
+    supplémentaire.
+   </para>
+
+   <para>
+    Les règles de disposition (positionnement des
     parenthèses, etc) suivent les conventions BSD.
+    In
+    particular, curly braces for the controlled blocks of <literal>if</>,
+    <literal>while</>, <literal>switch</>, etc go on their own lines.
    </para>
 
    <para>
+    Do not use C++ style comments (<literal>//</> comments).  Strict ANSI C
+    compilers do not accept them.  For the same reason, do not use C++
+    extensions such as declaring new variables mid-block.
+   </para>
+
+   <para>
+    The preferred style for multi-line comment blocks is
+<programlisting>
+/*
+ * comment text begins here
+ * and continues here
+ */
+</programlisting>
+    Note that comment blocks that begin in column 1 will be preserved as-is
+    by <application>pgindent</>, but it will re-flow indented comment blocks
+    as though they were plain text.  If you want to preserve the line breaks
+    in an indented block, add dashes like this:
+<programlisting>
+    /*----------
+     * comment text begins here
+     * and continues here
+     *----------
+     */
+</programlisting>
+   </para>
+
+   <para>
     Bien que les correctifs (patchs) soumis ne soient absolument pas tenus de
     suivre ces règles de formatage, il est recommandé de le faire. Le
-    code est passé dans <application>pgindent</application>, il n'y a donc pas
-    lieu à l'enjoliver par un quelconque ensemble de
-    conventions de formatage.
+    code est passé dans <application>pgindent</application> before the next
+    release, so there's no point in
+    making it look nice under some other set of formatting conventions.
    </para>
 
    <para>
@@ -180,6 +214,17 @@
    </listitem>
    <listitem>
     <para>
+     <function>errdetail_log(const char *msg, ...)</function> is the same as
+     <function>errdetail</> except that this string goes only to the server
+     log, never to the client.  If both <function>errdetail</> and
+     <function>errdetail_log</> are used then one string goes to the client
+     and the other to the log.  This is useful for error details that are
+     too security-sensitive or too bulky to include in the report
+     sent to the client.
+    </para>
+   </listitem>
+   <listitem>
+    <para>
     <function>errhint(const char *msg, ...)</function> fournit un message
      <quote>conseil</quote> optionnel&nbsp;; cela est utilisé pour offrir des
      suggestions sur la façon de régler un problème, par opposition aux

Modified: traduc/trunk/postgresql/sql.xml
===================================================================
--- traduc/trunk/postgresql/sql.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/sql.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -848,7 +848,7 @@
      les données. La syntaxe est&nbsp;:
 
      <synopsis>SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression_distincte</replaceable> [, ...] ) ] ]
-    * | <replaceable class="PARAMETER">expression_cible</replaceable> [ AS <replaceable class="PARAMETER">nom_résultat</replaceable> ] [, ...]
+    * | <replaceable class="PARAMETER">expression_cible</replaceable> [ [ AS ] <replaceable class="PARAMETER">nom_résultat</replaceable> ] [, ...]
     [ INTO [ TEMPORARY | TEMP ] [ TABLE ] <replaceable class="PARAMETER">nouvelle_table</replaceable> ]
     [ FROM <replaceable class="PARAMETER">source</replaceable> [, ...] ]
     [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]

Modified: traduc/trunk/postgresql/start.xml
===================================================================
--- traduc/trunk/postgresql/start.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/start.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -333,14 +333,9 @@
    <para>
     Dans <command>psql</command>, vous serez accueilli avec le message
     suivant&nbsp;:
-<screen>Welcome to psql &version;, the PostgreSQL interactive terminal.
+<screen>psql (&version;)
+Type "help" for help.
  
-Type:  \copyright for distribution terms
-       \h for help with SQL commands
-       \? for help with psql commands
-       \g or terminate with semicolon to execute query
-       \q to quit
- 
 ma_base=&gt;</screen>
     <indexterm><primary>super-utilisateur</primary></indexterm>
     La dernière ligne peut aussi être&nbsp;:
@@ -368,9 +363,9 @@
     <command>psql</command>.  Essayez ces commandes&nbsp;:
     <indexterm><primary>version</primary></indexterm>
 <screen><prompt>ma_base=&gt;</prompt> <userinput>SELECT version();</userinput>
-                            version
-----------------------------------------------------------------
- PostgreSQL &version; on i586-pc-linux-gnu, compiled by GCC 2.96
+                               version
+ -----------------------------------------------------------------------
+ PostgreSQL &version; on i586-pc-linux-gnu, compiled by GCC 2.96, 32-bit
 (1 row)
 
 <prompt>ma_base=&gt;</prompt> <userinput>SELECT current_date;</userinput>

Modified: traduc/trunk/postgresql/storage.xml
===================================================================
--- traduc/trunk/postgresql/storage.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/storage.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -87,6 +87,12 @@
 </row>
 
 <row>
+ <entry><filename>pg_stat_tmp</></entry>
+ <entry>Subdirectory containing temporary files for the statistics
+  subsystem</entry>
+</row>
+
+<row>
  <entry><filename>pg_subtrans</filename></entry>
  <entry>Sous-répertoire contenant les données d'états des
   sous-transaction</entry>
@@ -136,7 +142,11 @@
 <para>
 Chaque table et index sont stockés dans un fichier séparé, nommé d'après le
 numéro <firstterm>filenode</firstterm> de la table ou de l'index, lequel se trouve dans
-<structname>pg_class</structname>.<structfield>relfilenode</structfield>.
+<structname>pg_class</structname>.<structfield>relfilenode</structfield>. In addition to the
+main file (aka. main fork), a <firstterm>free space map</> (see
+<xref linkend="storage-fsm">) that stores information about free space
+available in the relation, is stored in a file named after the filenode
+number, with the the <literal>_fsm</> suffix.
 </para>
 
 <caution>
@@ -155,7 +165,11 @@
 <firstterm>segments</firstterm> d'un&nbsp;Go. Le nom du fichier du premier segment est identique au
 filenode; les segments suivants sont nommés filenode.1, filenode.2, etc.
 Cette disposition évite des problèmes sur les plateformes qui ont des limitations
-sur les tailles des fichiers. Le contenu des tables et des index est discuté plus
+sur les tailles des fichiers.
+(Actually, 1 GB is just the default segment size.  The segment size can be
+adjusted using the configuration option <option>--with-segsize</option>
+when building <productname>PostgreSQL</>.)
+Le contenu des tables et des index est discuté plus
 en détails dans <xref linkend="storage-page-layout"/>.
 </para>
 
@@ -388,6 +402,48 @@
 
 </sect1>
 
+<sect1 id="storage-fsm">
+
+<title>Free Space Map</title>
+
+    <indexterm>
+     <primary>Free Space Map</primary>
+    </indexterm>
+    <indexterm><primary>FSM</><see>Free Space Map</></indexterm>
+
+<para>
+A Free Space Map is stored with every heap and index relation, except for
+hash indexes, to keep track of available space in the relation. It's stored
+along the main relation data, in a separate FSM relation fork, named after
+relfilenode of the relation, but with a <literal>_fsm</> suffix. For example,
+if the relfilenode of a relation is 12345, the FSM is stored in a file called
+<filename>12345_fsm</>, in the same directory as the main relation file.
+</para>
+
+<para>
+The Free Space Map is organized as a tree of <acronym>FSM</> pages. The
+bottom level <acronym>FSM</> pages stores the free space available on every
+heap (or index) page, using one byte to represent each heap page. The upper
+levels aggregate information from the lower levels.
+</para>
+
+<para>
+Within each <acronym>FSM</> page is a binary tree, stored in an array with
+one byte per node. Each leaf node represents a heap page, or a lower level
+<acronym>FSM</> page. In each non-leaf node, the higher of its children's
+values is stored. The maximum value in the leaf nodes is therefore stored
+at the root.
+</para>
+
+<para>
+See <filename>src/backend/storage/freespace/README</> for more details on
+how the <acronym>FSM</> is structured, and how it's updated and searched.
+<xref linkend="pgfreespacemap"> contrib module can be used to view the
+information stored in free space maps.
+</para>
+
+</sect1>
+
 <sect1 id="storage-page-layout">
 
 <title>Emplacement des pages de la base de données</title>

Modified: traduc/trunk/postgresql/textsearch.xml
===================================================================
--- traduc/trunk/postgresql/textsearch.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/textsearch.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -805,6 +805,20 @@
  'fat' | 'rat':AB
 </programlisting>
 
+    Also, <literal>*</> can be attached to a lexeme to specify prefix matching:
+
+<programlisting>
+SELECT to_tsquery('supern:*A &amp; star:A*B');
+        to_tsquery        
+--------------------------
+ 'supern':*A &amp; 'star':*AB
+</programlisting>
+
+    Such a lexeme will match any word in a <type>tsvector</> that begins
+    with the given string.
+   </para>
+
+   <para>
     <function>to_tsquery</function> peut aussi accepter des phrases avec des
     guillemets simples. C'est utile quand la configuration inclut un
     dictionnaire
@@ -850,7 +864,7 @@
 </programlisting>
 
     Notez que <function>plainto_tsquery</function> ne peut pas reconnaître un
-    opérateur booléen ou des labels de poids en entrée&nbsp;:
+    opérateur booléen, des labels de poids en entrée ou prefix-match labels&nbsp;:
 
 <programlisting>
 SELECT plainto_tsquery('english', 'The Fat &amp; Rats:C');
@@ -1150,6 +1164,29 @@
      </listitem>
      <listitem>
       <para>
+       <literal>MaxFragments</literal>: maximum number of text excerpts 
+       or fragments that matches the query words. It also triggers a 
+       different headline generation function than the default one. This
+       function finds text fragments with as many query words as possible and 
+       stretches  those fragments around the query words. As a result 
+       query words are close to the middle of each fragment and have words on 
+       each side. Each fragment will be of at  most MaxWords and will not 
+       have words of size less than or equal to ShortWord at the start or 
+       end of a  fragment. If all query words are not found in the document, 
+       then  a single fragment of MinWords will be displayed.
+      </para>
+     </listitem>
+     <listitem>
+      <para>
+       <literal>FragmentDelimiter</literal>: When more than one fragments are 
+       displayed, then the fragments will be separated by this delimiter. This 
+       option is effective only if MaxFragments is greater than 1 and there are
+       more than one fragments to be diplayed. This option has no effect on the
+       default headline generation function.
+      </para>
+     </listitem>
+     <listitem>
+      <para>
        <literal>HighlightAll</literal>&nbsp;: booléen&nbsp;; si
        <literal>true</literal>, le document complet sera surligné.
       </para>
@@ -1159,7 +1196,7 @@
     Toute option omise recevra une valeur par défaut&nbsp;:
 
 <programlisting>
-StartSel=&lt;b&gt;, StopSel=&lt;/b&gt;, MaxWords=35, MinWords=15, ShortWord=3, HighlightAll=FALSE
+StartSel=&lt;b&gt;, StopSel=&lt;/b&gt;, MaxFragments=0, FragmentDelimiter=" ... ", MaxWords=35, MinWords=15, ShortWord=3, HighlightAll=FALSE
 </programlisting>
    </para>
 
@@ -1973,7 +2010,7 @@
   <note>
    <para>
     La notion de l'analyseur d'une <quote>lettre</quote> est déterminée par la
-    configuration de la locale sur le serveur, spécifiquement par
+    configuration de la locale sur la base de données, spécifiquement par
     <varname>lc_ctype</varname>. Les mots contenant seulement des lettres ASCII
     basiques sont reportés comme un type de jeton séparé car il est parfois
     utile de les distinguer. Dans la plupart des langues européennes, les types
@@ -2316,7 +2353,8 @@
     linguistiques, par exemple pour empêcher un dictionnaire stemmer anglais de
     réduire le mot «&nbsp;Paris&nbsp;» en 'pari'. Il suffit d'avoir une ligne
     <literal>Paris paris</literal> dans le dictionnaire des synonymes et de le
-    placer avant le dictionnaire <literal>english_stem</literal>&nbsp;:
+    placer avant le dictionnaire <literal>english_stem</literal>. Par
+    exemple&nbsp;:
 
 <programlisting>
 SELECT * FROM ts_debug('english', 'Paris');
@@ -2353,6 +2391,15 @@
     en minuscules.
    </para>
 
+   <para>
+    The <literal>synonym</> template also has an optional parameter
+    <literal>CaseSensitive</>, which defaults to <literal>false</>.  When
+    <literal>CaseSensitive</> is <literal>false</>, words in the synonym file
+    are folded to lower case, as are input tokens.  When it is
+    <literal>true</>, words and tokens are not folded to lower case,
+    but are compared as-is.
+   </para>
+
   </sect2>
 
   <sect2 id="textsearch-thesaurus">
@@ -3262,20 +3309,7 @@
    Un index GiST est <firstterm>à perte</firstterm>, signifiant que l'index
    peut produire des faux positifs, et il est nécessaire de vérifier la
    ligne de la table pour les éliminer.
-   <productname>PostgreSQL</productname> le fait automatiquement&nbsp;; par
-   exemple, dans le plan de requête ci-dessous, la ligne
-   <literal>Filter:</literal> indique que la sortie de l'index est de nouveau
-   vérifiée&nbsp;:
-
-<programlisting>
-EXPLAIN SELECT * FROM apod WHERE textsearch @@ to_tsquery('supernovae');
-                               QUERY PLAN
--------------------------------------------------------------------------
- Index Scan using textsearch_gidx on apod  (cost=0.00..12.29 rows=2 width=1469)
-   Index Cond: (textsearch @@ '''supernova'''::tsquery)
-   Filter: (textsearch @@ '''supernova'''::tsquery)
-</programlisting>
-
+   <productname>PostgreSQL</productname> le fait automatiquement si nécessire.
    Les index GiST sont à perte car chaque document est représenté dans l'index
    par une signature à longueur fixe. La signature est générée par le hachage de
    chaque mot en un bit aléatoire dans une chaîne à n bit, tous ces bits étant
@@ -3297,62 +3331,14 @@
   </para>
 
   <para>
-   Les index GIN ne sont pas à perte mais leur performance dépendent
-   logarithmiquement du nombre de mots uniques.
+   Les index GIN ne sont pas à perte for standard queries, but their performance
+   depends logarithmically on the number of unique words.
+   (However, GIN indexes store only the words (lexemes) of <type>tsvector</>
+   values, and not their weight labels.  Thus a table row recheck is needed
+   when using a query that involves weights.)
   </para>
 
   <para>
-   En fait, les index GIN stockent seulement les mots (lexemes) des
-   valeurs <type>tsvector</type>, et non pas leur poids. Du coup, alors qu'un
-   index GIN peut être considéré sans perte pour une requête qui ne précise pas
-   de poids, il l'est pour les autres. Une deuxième vérification d'une
-   ligne de table est nécessaire lors de l'utilisation d'une requête impliquant
-   des poids. Malheureusement, dans la conception actuelle de
-   <productname>PostgreSQL</productname>, savoir si une nouvelle vérification
-   est nécessaire est une propriété statique d'un opérateur particulier et n'est
-   pas quelque chose qui peut être activé ou désactivé en ligne suivant les
-   valeurs données à l'opérateur. Pour gérer cette situation sans imposer une
-   surcharge dûe aux vérifications sur des requêtes qui n'en ont pas besoin,
-   l'approche suivant a été adoptée&nbsp;:
-  </para>
-
-  <itemizedlist  spacing="compact" mark="bullet">
-   <listitem>
-    <para>
-     L'opérateur standard de correspondance de texte <literal>@@</literal> est
-     marqué comme sans perte pour les index GIN.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Un opérateur de correspondance supplémentaire, <literal>@@@</literal>,
-     est fourni et marqué comme à perte pour les index GIN. Sinon, cet
-     opérateur se comporte exactement comme <literal>@@</literal>.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Quand une recherche par index GIN est lancée avec l'opérateur
-     <literal>@@</literal>, le code de support d'index va renvoyer une erreur
-     si la requête spécifie un poids. Ceci protège contre les mauvaises réponses
-     dûes à un échec de la vérification des poids.
-    </para>
-   </listitem>
-  </itemizedlist>
-
-  <para>
-   En bref, vous devez utiliser <literal>@@@</literal> plutôt que
-   <literal>@@</literal> pour traiter les recherches par index GIN sur des
-   requêtes qui impliquent des restrictions de poids. Pour les requêtes
-   qui n'ont pas ces restrictions, les deux opérateurs fonctionneront mais
-   <literal>@@</literal> sera plus rapide. Cette bizarreté sera certainement
-   corrigée dans une prochaine version de
-   <productname>PostgreSQL</productname>.
-  </para>
-
-  <para>
    Dans le choix du type d'index à utiliser, GiST ou GIN, pensez à ces
    différences de performances&nbsp;:
 
@@ -3371,8 +3357,10 @@
     </listitem>
     <listitem>
      <para>
-      Les index GIN sont environ dix fois plus lents à mettre à jour que les
-      index GiST.
+      Les index GIN sont un peu plus lents à mettre à jour que les
+      index GiST, but
+      about 10 times slower if fast-update support was disabled
+      (see <xref linkend="gin-fast-update"> for details)
      </para>
     </listitem>
     <listitem>
@@ -3404,7 +3392,7 @@
    Le partitionnement de gros ensembles et l'utilisation intelligente des index
    GIN et GiST autorise l'implémentation de recherches très rapides avec une
    mise à jour en ligne. Le partitionnement peut se faire au niveau de la base
-   en utilisant l'héritage et <varname>constraint_exclusion</varname>, ou
+   en utilisant l'héritage, ou
    en distribuant les documents sur des serveurs et en récupérant les résultats
    de la recherche en utilisant le module <filename>contrib/dblink</filename>.
    Ce dernier est possible car les fonctions de score utilisent les

Modified: traduc/trunk/postgresql/user-manag.xml
===================================================================
--- traduc/trunk/postgresql/user-manag.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/user-manag.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -217,8 +217,8 @@
         Un mot de passe est seulement significatif si la méthode
         d'authentification du client exige que le client fournisse
         un mot de passe quand il se connecte à la base.  Les
-        méthodes d'authentification par <option>mot de passe</option>,
-        <option>md5</option> et <option>crypt</option> utilisent des mots de
+        méthodes d'authentification par <option>mot de passe</option> et
+        <option>md5</option> utilisent des mots de
         passe.  Les mots de passe de la base de données ne sont pas
         les mêmes que ceux du système d'exploitation.  Indiquez un
         mots de passe lors de la création d'un rôle avec

Modified: traduc/trunk/postgresql/vacuumlo.xml
===================================================================
--- traduc/trunk/postgresql/vacuumlo.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/vacuumlo.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -59,6 +59,20 @@
    </varlistentry>
 
    <varlistentry>
+    <term><option>-w</></term>
+    <term><option>--no-password</></term>
+    <listitem>
+     <para>
+      Never issue a password prompt.  If the server requires password
+      authentication and a password is not available by other means
+      such as a <filename>.pgpass</filename> file, the connection
+      attempt will fail.  This option can be useful in batch jobs and
+      scripts where no user is present to enter a password.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
     <term><option>-W</option></term>
     <listitem>
      <para>

Modified: traduc/trunk/postgresql/xaggr.xml
===================================================================
--- traduc/trunk/postgresql/xaggr.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/xaggr.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -124,7 +124,10 @@
 </programlisting>
 
    Dans ce cas, le type d'état effectif pour tout appel d'agrégat est le type
-   tableau avec comme éléments le type effectif d'entrée.
+   tableau avec comme éléments le type effectif d'entrée. The behavior of the aggregate
+   is to concatenate all the inputs into an array of that type.
+   (Note: the built-in aggregate <function>array_agg</> provides similar
+   functionality, with better performance than this definition would have.)
 </para>
 
   <para>
@@ -137,12 +140,14 @@
  pg_tablespace | {spcname,spcowner,spclocation,spcacl}
 (1 row)
 
-SELECT attrelid::regclass, array_accum(atttypid)
-FROM pg_attribute WHERE attnum &gt; 0
-AND attrelid = 'pg_tablespace'::regclass GROUP BY attrelid;
-   attrelid    |   array_accum
----------------+-----------------
- pg_tablespace | {19,26,25,1034}
+SELECT attrelid::regclass, array_accum(atttypid::regtype)
+    FROM pg_attribute
+    WHERE attnum &gt; 0 AND attrelid = 'pg_tablespace'::regclass
+    GROUP BY attrelid;
+
+   attrelid    |        array_accum        
+---------------+---------------------------
+ pg_tablespace | {name,oid,text,aclitem[]}
 (1 row)
 </programlisting>
   </para>
@@ -150,10 +155,13 @@
   <!-- J'ai besoin de la VO, vraiment !!! -->
   <para>
    En fonction du <quote>contexte</quote> de l'appel, consultable
-   par le n&oelig;ud <structname>AggState</structname>, une fonction C 
+   par le n&oelig;ud <structname>AggState</structname> ou
+   <structname>WindowAggState</>, une fonction C 
    sait si elle est appelée en tant que
    transition d'agrégat ou en tant que fonction finale. Par exemple&nbsp;:
-<programlisting>        if (fcinfo->context &amp;&amp; IsA(fcinfo->context, AggState))
+<programlisting>        if (fcinfo-&gt;context &amp;&amp;
+            (IsA(fcinfo-&gt;context, AggState) ||
+             IsA(fcinfo-&gt;context, WindowAggState)))
 </programlisting>
    L'intérêt de cette vérification est que, lorsque cela est vrai, la première
    entrée doit être une valeur de transition, temporaire, et peut donc être

Modified: traduc/trunk/postgresql/xtypes.xml
===================================================================
--- traduc/trunk/postgresql/xtypes.xml	2009-04-11 22:11:01 UTC (rev 1290)
+++ traduc/trunk/postgresql/xtypes.xml	2009-04-12 20:26:49 UTC (rev 1291)
@@ -86,7 +86,7 @@
   chaîne de caractères, il faudra peut-être écrire un analyseur complet et
   robuste, comme fonction d'entrée, pour cette représentation. Par exemple&nbsp;:
 
-<programlisting>PG_FUNCTION_INFO_V1(complex_in);
+<programlisting><![CDATA[PG_FUNCTION_INFO_V1(complex_in);
 
 Datum
 complex_in(PG_FUNCTION_ARGS)
@@ -96,22 +96,22 @@
                 y;
     Complex    *result;
 
-    if (sscanf(str, " ( %lf , %lf )", &amp;x, &amp;y) != 2)
+    if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2)
         ereport(ERROR,
                 (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
                  errmsg("invalid input syntax for complex: \"%s\"",
                         str)));
 
     result = (Complex *) palloc(sizeof(Complex));
-    result-&gt;x = x;
-    result-&gt;y = y;
+    result->x = x;
+    result->y = y;
     PG_RETURN_POINTER(result);
 }
-</programlisting>
+]]></programlisting>
 
   La fonction de sortie peut s'écrire simplement&nbsp;:
 
-<programlisting>PG_FUNCTION_INFO_V1(complex_out);
+<programlisting><![CDATA[PG_FUNCTION_INFO_V1(complex_out);
 
 Datum
 complex_out(PG_FUNCTION_ARGS)
@@ -120,10 +120,10 @@
     char       *result;
 
     result = (char *) palloc(100);
-    snprintf(result, 100, "(%g,%g)", complex-&gt;x, complex-&gt;y);
+    snprintf(result, 100, "(%g,%g)", complex->x, complex->y);
     PG_RETURN_CSTRING(result);
 }
-</programlisting>
+]]></programlisting>
  </para>
 
  <para>
@@ -146,7 +146,7 @@
   des convertisseurs d'entrées/sorties binaires pour le type 
   <type>float8</type> sont utilisés&nbsp;:
 
-<programlisting>PG_FUNCTION_INFO_V1(complex_recv);
+<programlisting><![CDATA[PG_FUNCTION_INFO_V1(complex_recv);
 
 Datum
 complex_recv(PG_FUNCTION_ARGS)
@@ -155,8 +155,8 @@
     Complex    *result;
 
     result = (Complex *) palloc(sizeof(Complex));
-    result-&gt;x = pq_getmsgfloat8(buf);
-    result-&gt;y = pq_getmsgfloat8(buf);
+    result->x = pq_getmsgfloat8(buf);
+    result->y = pq_getmsgfloat8(buf);
     PG_RETURN_POINTER(result);
 }
 
@@ -168,12 +168,12 @@
     Complex    *complex = (Complex *) PG_GETARG_POINTER(0);
     StringInfoData buf;
 
-    pq_begintypsend(&amp;buf);
-    pq_sendfloat8(&amp;buf, complex-&gt;x);
-    pq_sendfloat8(&amp;buf, complex-&gt;y);
-    PG_RETURN_BYTEA_P(pq_endtypsend(&amp;buf));
+    pq_begintypsend(&buf);
+    pq_sendfloat8(&buf, complex->x);
+    pq_sendfloat8(&buf, complex->y);
+    PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
 }
-</programlisting>
+]]></programlisting>
  </para>
 
  <para>



More information about the Trad mailing list