Update release notes for security releases.
authorTom Lane <[email protected]>
Thu, 3 Jan 2008 21:36:02 +0000 (21:36 +0000)
committerTom Lane <[email protected]>
Thu, 3 Jan 2008 21:36:02 +0000 (21:36 +0000)
Security: CVE-2007-4769, CVE-2007-4772, CVE-2007-6067, CVE-2007-6600, CVE-2007-6601

doc/src/sgml/release.sgml

index 18c54a9c9c3892d1f5e9ac1c3602ff372d3d1d17..313ddc6c4a3dfaa954a292c88ac58d5bda5a08a2 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.321.4.40 2007/09/16 03:03:40 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.321.4.41 2008/01/03 21:36:02 tgl Exp $ -->
 <!--
 
 Typical markup:
@@ -26,7 +26,7 @@ non-ASCII characters            convert to HTML4 entity (&) escapes
 wrap long lines
 
 For new features, add links to the documentation sections.  Use </link>
-so that perl can remove it so HISTORY.html can be created with no
+so that Perl can remove it so HISTORY.html can be created with no
 links to the main documentation.  This was added only in 8.2, so don't
 do it for earlier branch release files.
 
@@ -35,438 +35,652 @@ do it for earlier branch release files.
 <appendix id="release">
  <title>Release Notes</title>
 
 <sect1 id="release-8-0-14">
-   <title>Release 8.0.14</title>
<sect1 id="release-8-0-15">
+  <title>Release 8.0.15</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-09-17</simpara>
-   </note>
-
-   <para>
-    This release contains a variety of fixes from 8.0.13.
-   </para>
-
-   <sect2>
-    <title>Migration to version 8.0.14</title>
-
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
 
-   </sect2>
+  <para>
+   This release contains a variety of fixes from 8.0.14,
+   including fixes for significant security issues.
+  </para>
 
-   <sect2>
-    <title>Changes</title>
+  <para>
+   This is the last 8.0.X release for which the <productname>PostgreSQL</>
+   community will produce binary packages for <productname>Windows</>.
+   Windows users are encouraged to move to 8.2.X or later,
+   since there are Windows-specific fixes in 8.2.X that
+   are impractical to back-port.  8.0.X will continue to
+   be supported on other platforms.
+  </para>
 
-    <itemizedlist>
+  <sect2>
+   <title>Migration to Version 8.0.15</title>
 
-     <listitem>
-      <para>
-       Prevent index corruption when a transaction inserts rows and
-       then aborts close to the end of a concurrent <command>VACUUM</>
-       on the same table (Tom)
-      </para>
-     </listitem>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
 
-     <listitem>
-      <para>
-       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
-      </para>
-     </listitem>
+  </sect2>
 
-     <listitem>
-      <para>
-       Fix excessive logging of <acronym>SSL</> error messages (Tom)
-      </para>
-     </listitem>
+  <sect2>
+   <title>Changes</title>
 
-     <listitem>
-      <para>
-       Fix logging so that log messages are never interleaved when using
-       the syslogger process (Andrew)
-      </para>
-     </listitem>
+   <itemizedlist>
 
-     <listitem>
-      <para>
-       Fix crash when <varname>log_min_error_statement</> logging runs out
-       of memory (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Prevent functions in indexes from executing with the privileges of
+      the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+     </para>
 
-     <listitem>
-      <para>
-       Fix incorrect handling of some foreign-key corner cases (Tom)
-      </para>
-     </listitem>
+     <para>
+      Functions used in index expressions and partial-index
+      predicates are evaluated whenever a new table entry is made.  It has
+      long been understood that this poses a risk of trojan-horse code
+      execution if one modifies a table owned by an untrustworthy user.
+      (Note that triggers, defaults, check constraints, etc. pose the
+      same type of risk.)  But functions in indexes pose extra danger
+      because they will be executed by routine maintenance operations
+      such as <command>VACUUM FULL</>, which are commonly performed
+      automatically under a superuser account.  For example, a nefarious user
+      can execute code with superuser privileges by setting up a
+      trojan-horse index definition and waiting for the next routine vacuum.
+      The fix arranges for standard maintenance operations
+      (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+      and <command>CLUSTER</>) to execute as the table owner rather than
+      the calling user, using the same privilege-switching mechanism already
+      used for <literal>SECURITY DEFINER</> functions.  To prevent bypassing
+      this security measure, execution of <command>SET SESSION
+      AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+      <literal>SECURITY DEFINER</> context.  (CVE-2007-6600)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Prevent <command>CLUSTER</> from failing
-       due to attempting to process temporary tables of other sessions (Alvaro)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+     </para>
 
-     <listitem>
-      <para>
-       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
-      </para>
-     </listitem>
+     <para>
+      Suitably crafted regular-expression patterns could cause crashes,
+      infinite or near-infinite looping, and/or massive memory consumption,
+      all of which pose denial-of-service hazards for applications that
+      accept regex search patterns from untrustworthy sources.
+      (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Windows socket improvements (Magnus)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
 
-     <listitem>
-      <para>
-       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
-       because of possible encoding mismatches (Tom)
-      </para>
-     </listitem>
+     <para>
+      The fix that appeared for this in 8.0.14 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Require non-superusers who use <filename>/contrib/dblink</> to use only
-       password authentication, as a security measure (Joe)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2007k
+      (in particular, recent Argentina changes) (Tom)
+     </para>
+    </listitem>
 
-    </itemizedlist>
+    <listitem>
+     <para>
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (Tom)
+     </para>
+    </listitem>
 
-   </sect2>
-  </sect1>
+    <listitem>
+     <para>
+      Preserve the tablespace of indexes that are
+      rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
+     </para>
+    </listitem>
 
-  <sect1 id="release-8-0-13">
-   <title>Release 8.0.13</title>
+    <listitem>
+     <para>
+      Make archive recovery always start a new WAL timeline, rather than only
+      when a recovery stop time was used (Simon)
+     </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-04-23</simpara>
-   </note>
+     <para>
+      This avoids a corner-case risk of trying to overwrite an existing
+      archived copy of the last WAL segment, and seems simpler and cleaner
+      than the original definition.
+     </para>
+    </listitem>
 
-   <para>
-    This release contains a variety of fixes from 8.0.12,
-    including a security fix.
-   </para>
+    <listitem>
+     <para>
+      Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
+      when the table is too small for it to be useful (Alvaro)
+     </para>
+    </listitem>
 
-   <sect2>
-    <title>Migration to version 8.0.13</title>
+    <listitem>
+     <para>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </para>
+    </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
+    <listitem>
+     <para>
+      Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
+      as <literal>int</> rather than <literal>char</> (Tom)
+     </para>
 
-   </sect2>
+     <para>
+      While this could theoretically happen anywhere, no standard build of
+      Perl did things this way ... until <productname>Mac OS X</> 10.5.
+     </para>
+    </listitem>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+     <para>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+     <para>
+      Fix <application>pg_dump</> to correctly handle inheritance child tables
+      that have default expressions different from their parent's (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Support explicit placement of the temporary-table schema within
-      <varname>search_path</>, and disable searching it for functions
-      and operators (Tom)
+      <application>ecpg</> parser fixes (Michael)
      </para>
+    </listitem>
+
+    <listitem>
      <para>
-      This is needed to allow a security-definer function to set a
-      truly secure value of <varname>search_path</>.  Without it,
-      an unprivileged SQL user can use temporary objects to execute code
-      with the privileges of the security-definer function (CVE-2007-2138).
-      See <command>CREATE FUNCTION</> for more information.
+      Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+      NULL rowid as a category in its own right, rather than crashing (Joe)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      <filename>/contrib/tsearch2</> crash fixes (Teodor)
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
-      <command>UPDATE</> chains (Tom, Pavan Deolasee)
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
-      (Tom)
+      Require a specific version of <productname>Autoconf</> to be used
+      when re-generating the <command>configure</> script (Peter)
      </para>
-     </listitem>
 
-     <listitem>
      <para>
-      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+      This affects developers and packagers only.  The change was made
+      to prevent accidental use of untested combinations of
+      <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+      You can remove the version check if you really want to use a
+      different <productname>Autoconf</> version, but it's
+      your responsibility whether the result works or not.
      </para>
-     </listitem>
+    </listitem>
 
-    </itemizedlist>
+   </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-12">
-   <title>Release 8.0.12</title>
<sect1 id="release-8-0-14">
+  <title>Release 8.0.14</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-07</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
 
-   <para>
-    This release contains one fix from 8.0.11.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.13.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.12</title>
+  <sect2>
+   <title>Migration to Version 8.0.14</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
 
-   </sect2>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
-    <itemizedlist>
+   <itemizedlist>
 
-     <listitem>
+    <listitem>
      <para>
-      Remove overly-restrictive check for type length in constraints and
-      functional indexes(Tom)
+      Prevent index corruption when a transaction inserts rows and
+      then aborts close to the end of a concurrent <command>VACUUM</>
+      on the same table (Tom)
      </para>
-     </listitem>
-
-    </itemizedlist>
-
-   </sect2>
-  </sect1>
-
-  <sect1 id="release-8-0-11">
-   <title>Release 8.0.11</title>
-
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-05</simpara>
-   </note>
-
-   <para>
-    This release contains a variety of fixes from 8.0.10, including
-    a security fix.
-   </para>
+    </listitem>
 
-   <sect2>
-    <title>Migration to version 8.0.11</title>
+    <listitem>
+     <para>
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+     </para>
+    </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
+    <listitem>
+     <para>
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
+     </para>
+    </listitem>
 
-   </sect2>
+    <listitem>
+     <para>
+      Fix logging so that log messages are never interleaved when using
+      the syslogger process (Andrew)
+     </para>
+    </listitem>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+     <para>
+      Fix crash when <varname>log_min_error_statement</> logging runs out
+      of memory (Tom)
+     </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+     <para>
+      Fix incorrect handling of some foreign-key corner cases (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Remove security vulnerabilities that allowed connected users
-      to read backend memory (Tom)
+      Prevent <command>CLUSTER</> from failing
+      due to attempting to process temporary tables of other sessions (Alvaro)
      </para>
+    </listitem>
+
+    <listitem>
      <para>
-      The vulnerabilities involve suppressing the normal check that a SQL
-      function returns the data type it's declared to, and changing the
-      data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
-      errors can easily be exploited to cause a backend crash, and in
-      principle might be used to read database content that the user
-      should not be able to access.
+      Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix rare bug wherein btree index page splits could fail
-      due to choosing an infeasible split point (Heikki Linnakangas)
+      Windows socket improvements (Magnus)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+      Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+      because of possible encoding mismatches (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Tighten security of multi-byte character processing for UTF8 sequences
-      over three bytes long (Tom)
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
      </para>
-     </listitem>
+    </listitem>
 
-    </itemizedlist>
+   </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-10">
-   <title>Release 8.0.10</title>
<sect1 id="release-8-0-13">
+  <title>Release 8.0.13</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-01-08</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-04-23</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.12,
+   including a security fix.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.13</title>
 
    <para>
-    This release contains a variety of fixes from 8.0.9.
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.0.10</title>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
 
+    <listitem>
+    <para>
+     Support explicit placement of the temporary-table schema within
+     <varname>search_path</>, and disable searching it for functions
+     and operators (Tom)
+    </para>
     <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
+     This is needed to allow a security-definer function to set a
+     truly secure value of <varname>search_path</>.  Without it,
+     an unprivileged SQL user can use temporary objects to execute code
+     with the privileges of the security-definer function (CVE-2007-2138).
+     See <command>CREATE FUNCTION</> for more information.
     </para>
+    </listitem>
 
-   </sect2>
+    <listitem>
+    <para>
+     <filename>/contrib/tsearch2</> crash fixes (Teodor)
+    </para>
+    </listitem>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+    <para>
+     Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+     <command>UPDATE</> chains (Tom, Pavan Deolasee)
+    </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+    <para>
+     Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
+     (Tom)
+    </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
-      </para>
+    <listitem>
+    <para>
+     Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+    </para>
+    </listitem>
 
-      <para>
-       This fixes a problem with starting the statistics collector,
-       among other things.
-      </para>
-     </listitem>
+   </itemizedlist>
 
-      <listitem>
-       <para>
-        Fix <quote>failed to re-find parent key</> errors in
-        <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Fix race condition for truncation of a large relation across a
-        gigabyte boundary by <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+ <sect1 id="release-8-0-12">
+  <title>Release 8.0.12</title>
 
-      <listitem>
-       <para>
-        Fix bugs affecting multi-gigabyte hash indexes (Tom)
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-07</simpara>
+  </note>
+
+  <para>
+   This release contains one fix from 8.0.11.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.12</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     Remove overly-restrictive check for type length in constraints and
+     functional indexes(Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-11">
+  <title>Release 8.0.11</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.10, including
+   a security fix.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.11</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     Remove security vulnerabilities that allowed connected users
+     to read backend memory (Tom)
+    </para>
+    <para>
+     The vulnerabilities involve suppressing the normal check that a SQL
+     function returns the data type it's declared to, and changing the
+     data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
+     errors can easily be exploited to cause a backend crash, and in
+     principle might be used to read database content that the user
+     should not be able to access.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix rare bug wherein btree index page splits could fail
+     due to choosing an infeasible split point (Heikki Linnakangas)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Tighten security of multi-byte character processing for UTF8 sequences
+     over three bytes long (Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-10">
+  <title>Release 8.0.10</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.9.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.10</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+     </para>
+
+     <para>
+      This fixes a problem with starting the statistics collector,
+      among other things.
+     </para>
+    </listitem>
 
      <listitem>
       <para>
-       Fix possible deadlock in Windows signal handling (Teodor)
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
-       empty elements (Tom)
+       Fix race condition for truncation of a large relation across a
+       gigabyte boundary by <command>VACUUM</> (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix ecpg memory leak during connection (Michael)
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
       </para>
      </listitem>
 
-     <listitem>
-      <para>
-       <function>to_number()</> and <function>to_char(numeric)</>
-       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
-       new <application>initdb</> installs (Tom)
-      </para>
+    <listitem>
+     <para>
+      Fix possible deadlock in Windows signal handling (Teodor)
+     </para>
+    </listitem>
 
-      <para>
-       This is because <varname>lc_numeric</> can potentially
-       change the output of these functions.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+      empty elements (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve index usage of regular expressions that use parentheses (Tom)
-      </para>
+    <listitem>
+     <para>
+      Fix ecpg memory leak during connection (Michael)
+     </para>
+    </listitem>
 
-      <para>
-       This improves <application>psql</> <literal>\d</> performance also.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      <function>to_number()</> and <function>to_char(numeric)</>
+      are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+      new <application>initdb</> installs (Tom)
+     </para>
 
-     <listitem>
-      <para>
-       Update timezone database
-      </para>
+     <para>
+      This is because <varname>lc_numeric</> can potentially
+      change the output of these functions.
+     </para>
+    </listitem>
 
-      <para>
-       This affects Australian and Canadian daylight-savings rules in
-       particular.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
 
-    </itemizedlist>
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
 
-   </sect2>
-  </sect1>
+    <listitem>
+     <para>
+      Update timezone database
+     </para>
 
-  <sect1 id="release-8-0-9">
-   <title>Release 8.0.9</title>
+     <para>
+      This affects Australian and Canadian daylight-savings rules in
+      particular.
+     </para>
+    </listitem>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-10-16</simpara>
-   </note>
+   </itemizedlist>
 
-   <para>
-    This release contains a variety of fixes from 8.0.8.
-   </para>
+  </sect2>
+ </sect1>
 
  <sect2>
-    <title>Migration to version 8.0.9</title>
<sect1 id="release-8-0-9">
+  <title>Release 8.0.9</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-10-16</simpara>
+  </note>
 
-   </sect2>
+  <para>
+   This release contains a variety of fixes from 8.0.8.
+  </para>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Migration to Version 8.0.9</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fix crash when referencing <literal>NEW</> row
@@ -478,13 +692,13 @@ function returning multiple rows (Tom)</para></listitem>
 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
 matches for the separator string</para>
+ matches for the separator string</para>
 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
 </para></listitem>
 <listitem><para>Fix corner cases in pattern matching for
 <application>psql</>'s <literal>\d</> commands</para></listitem>
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
 (Teodor)</para></listitem>
+ (Teodor)</para></listitem>
 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
 Wieland)</para></listitem>
 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
@@ -493,46 +707,46 @@ Wieland)</para></listitem>
 <productname>Intel</> compilers (Tom)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-8">
-   <title>Release 8.0.8</title>
+ <sect1 id="release-8-0-8">
+  <title>Release 8.0.8</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-05-23</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-05-23</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.7,
+   including patches for extremely serious security issues.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.8</title>
 
    <para>
-    This release contains a variety of fixes from 8.0.7,
-    including patches for extremely serious security issues.
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.0.8</title>
+   <para>
+    Full security against the SQL-injection attacks described in
+    CVE-2006-2313 and CVE-2006-2314 might require changes in application
+    code.  If you have applications that embed untrustworthy strings
+    into SQL commands, you should examine them as soon as possible to
+    ensure that they are using recommended escaping techniques.  In
+    most cases, applications should be using subroutines provided by
+    libraries or drivers (such as <application>libpq</>'s
+    <function>PQescapeStringConn()</>) to perform string escaping,
+    rather than relying on <foreignphrase>ad hoc</> code to do it.
+   </para>
+  </sect2>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
-
-    <para>
-     Full security against the SQL-injection attacks described in
-     CVE-2006-2313 and CVE-2006-2314 might require changes in application
-     code.  If you have applications that embed untrustworthy strings
-     into SQL commands, you should examine them as soon as possible to
-     ensure that they are using recommended escaping techniques.  In
-     most cases, applications should be using subroutines provided by
-     libraries or drivers (such as <application>libpq</>'s
-     <function>PQescapeStringConn()</>) to perform string escaping,
-     rather than relying on <foreignphrase>ad hoc</> code to do it.
-    </para>
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Change the server to reject invalidly-encoded multibyte
@@ -605,33 +819,33 @@ Fuhr)</para></listitem>
 (Robert Kinberg)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-7">
-   <title>Release 8.0.7</title>
+ <sect1 id="release-8-0-7">
+  <title>Release 8.0.7</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-02-14</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-02-14</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.6.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.6.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.7</title>
+  <sect2>
+   <title>Migration to Version 8.0.7</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.6, see the release
-     notes for 8.0.6.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -702,36 +916,36 @@ and <function>isinf</> during configure (Tom)</para></listitem>
 
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-6">
-   <title>Release 8.0.6</title>
+ <sect1 id="release-8-0-6">
+  <title>Release 8.0.6</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-01-09</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-01-09</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.5.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.5.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.6</title>
+  <sect2>
+   <title>Migration to Version 8.0.6</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.3, see the release
-     notes for 8.0.3.
-     Also, you might need to <command>REINDEX</> indexes on textual
-     columns after updating, if you are affected by the locale or
-     <application>plperl</> issues described below.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+    Also, you might need to <command>REINDEX</> indexes on textual
+    columns after updating, if you are affected by the locale or
+    <application>plperl</> issues described below.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -785,33 +999,33 @@ what's actually returned by the query (Joe)</para></listitem>
 
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-5">
-   <title>Release 8.0.5</title>
+ <sect1 id="release-8-0-5">
+  <title>Release 8.0.5</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-12-12</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-12-12</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.4.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.4.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.5</title>
+  <sect2>
+   <title>Migration to Version 8.0.5</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.3, see the release
-     notes for 8.0.3.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -865,33 +1079,33 @@ table has been dropped</para></listitem>
 to subquery results</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-4">
-   <title>Release 8.0.4</title>
+ <sect1 id="release-8-0-4">
+  <title>Release 8.0.4</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-10-04</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-10-04</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.3.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.3.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.4</title>
+  <sect2>
+   <title>Migration to Version 8.0.4</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     if you are upgrading from a version earlier than 8.0.3, see the release
-     notes for 8.0.3.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
@@ -960,68 +1174,68 @@ intervals over 2000 sec</para></listitem>
 code</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-3">
-   <title>Release 8.0.3</title>
+ <sect1 id="release-8-0-3">
+  <title>Release 8.0.3</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-05-09</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-05-09</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.2, including several
-    security-related issues.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.2, including several
+   security-related issues.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.3</title>
+  <sect2>
+   <title>Migration to Version 8.0.3</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.X.  However,
-     it is one possible way of handling two significant security problems
-     that have been found in the initial contents of 8.0.X system
-     catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
-     automatically correct these problems.
-    </para>
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    it is one possible way of handling two significant security problems
+    that have been found in the initial contents of 8.0.X system
+    catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
+    automatically correct these problems.
+   </para>
 
-    <para>
-     The larger security problem is that the built-in character set encoding
-     conversion functions can be invoked from SQL commands by unprivileged
-     users, but the functions were not designed for such use and are not
-     secure against malicious choices of arguments.  The fix involves changing
-     the declared parameter list of these functions so that they can no longer
-     be invoked from SQL commands.  (This does not affect their normal use
-     by the encoding conversion machinery.)
-    </para>
+   <para>
+    The larger security problem is that the built-in character set encoding
+    conversion functions can be invoked from SQL commands by unprivileged
+    users, but the functions were not designed for such use and are not
+    secure against malicious choices of arguments.  The fix involves changing
+    the declared parameter list of these functions so that they can no longer
+    be invoked from SQL commands.  (This does not affect their normal use
+    by the encoding conversion machinery.)
+   </para>
 
-    <para>
-     The lesser problem is that the <filename>contrib/tsearch2</> module
-     creates several functions that are improperly declared to return
-     <type>internal</> when they do not accept <type>internal</> arguments.
-     This breaks type safety for all functions using <type>internal</>
-     arguments.
-    </para>
+   <para>
+    The lesser problem is that the <filename>contrib/tsearch2</> module
+    creates several functions that are improperly declared to return
+    <type>internal</> when they do not accept <type>internal</> arguments.
+    This breaks type safety for all functions using <type>internal</>
+    arguments.
+   </para>
 
-    <para>
-     It is strongly recommended that all installations repair these errors,
-     either by initdb or by following the manual repair procedure given
-     below.  The errors at least allow unprivileged database users to crash
-     their server process, and might allow unprivileged users to gain the
-     privileges of a database superuser.
-    </para>
+   <para>
+    It is strongly recommended that all installations repair these errors,
+    either by initdb or by following the manual repair procedure given
+    below.  The errors at least allow unprivileged database users to crash
+    their server process, and might allow unprivileged users to gain the
+    privileges of a database superuser.
+   </para>
 
-    <para>
-     If you wish not to do an initdb, perform the same manual repair
-     procedures shown in the <link linkend="release-7-4-8">7.4.8 release
-     notes</link>.
-    </para>
-   </sect2>
+   <para>
+    If you wish not to do an initdb, perform the same manual repair
+    procedures shown in the <link linkend="release-7-4-8">7.4.8 release
+    notes</link>.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Change encoding function signature to prevent
@@ -1078,187 +1292,187 @@ firing deferred triggers during transaction commit</para></listitem>
 data types</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-2">
-   <title>Release 8.0.2</title>
+ <sect1 id="release-8-0-2">
+  <title>Release 8.0.2</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-04-07</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-04-07</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.1.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.1.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.2</title>
+  <sect2>
+   <title>Migration to Version 8.0.2</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.*.
-     This release updates the major version number of the
-     <productname>PostgreSQL</productname> libraries, so it might be
-     necessary to re-link some user applications if they cannot
-     find the properly-numbered shared library.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.*.
+    This release updates the major version number of the
+    <productname>PostgreSQL</productname> libraries, so it might be
+    necessary to re-link some user applications if they cannot
+    find the properly-numbered shared library.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Increment the major version number of all interface
- libraries (Bruce)</para>
+libraries (Bruce)</para>
 <para>
- This should have been done in 8.0.0.  It is required so 7.4.X versions
- of PostgreSQL client applications, like <application>psql</>,
- can be used on the same machine as 8.0.X applications.  This might require
- re-linking user applications that use these libraries.
+This should have been done in 8.0.0.  It is required so 7.4.X versions
+of PostgreSQL client applications, like <application>psql</>,
+can be used on the same machine as 8.0.X applications.  This might require
+re-linking user applications that use these libraries.
 </para></listitem>
 <listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
- <option>fsync_writethrough</> (Magnus, Bruce)</para>
+<option>fsync_writethrough</> (Magnus, Bruce)</para>
 <para>
- This setting causes <productname>PostgreSQL</productname> to write through
- any disk-drive write cache when writing to WAL.
- This behavior was formerly called <option>fsync</>, but was
- renamed because it acts quite differently from <option>fsync</> on other
- platforms.
+This setting causes <productname>PostgreSQL</productname> to write through
+any disk-drive write cache when writing to WAL.
+This behavior was formerly called <option>fsync</>, but was
+renamed because it acts quite differently from <option>fsync</> on other
+platforms.
 </para>
 </listitem>
 <listitem><para>Enable the <varname>wal_sync_method</> setting of
- <option>open_datasync</> on Windows, and make it the default for that
 platform (Magnus, Bruce)</para>
-<para>
- Because the default is no longer <option>fsync_writethrough</>,
- data loss is possible during a power failure if the disk drive has
- write caching enabled. To turn off the write cache on Windows,
- from the <application>Device Manager</>, choose the drive properties,
- then <literal>Policies</>.
+<option>open_datasync</> on Windows, and make it the default for that
+ platform (Magnus, Bruce)</para>
+<para>
+Because the default is no longer <option>fsync_writethrough</>,
+data loss is possible during a power failure if the disk drive has
+write caching enabled. To turn off the write cache on Windows,
+from the <application>Device Manager</>, choose the drive properties,
+then <literal>Policies</>.
 </para>
 </listitem>
 <listitem><para>New cache management algorithm <acronym>2Q</> replaces
- <acronym>ARC</> (Tom)</para>
+<acronym>ARC</> (Tom)</para>
 <para>
- This was done to avoid a pending US patent on <acronym>ARC</>.  The
- <acronym>2Q</> code might be a few percentage points slower than
- <acronym>ARC</> for some work loads.  A better cache management algorithm
- will appear in 8.1.
+This was done to avoid a pending US patent on <acronym>ARC</>.  The
+<acronym>2Q</> code might be a few percentage points slower than
+<acronym>ARC</> for some work loads.  A better cache management algorithm
+will appear in 8.1.
 </para></listitem>
 <listitem><para>Planner adjustments to improve behavior on freshly-created
 tables (Tom)</para></listitem>
 <listitem><para>Allow plpgsql to assign to an element of an array that is
 initially <literal>NULL</> (Tom)</para>
 <para>
- Formerly the array would remain <literal>NULL</>, but now it becomes a
- single-element array.  The main SQL engine was changed to handle
- <command>UPDATE</> of a null array value this way in 8.0, but the similar
- case in plpgsql was overlooked.
+Formerly the array would remain <literal>NULL</>, but now it becomes a
+single-element array.  The main SQL engine was changed to handle
+<command>UPDATE</> of a null array value this way in 8.0, but the similar
+case in plpgsql was overlooked.
 </para>
 </listitem>
 <listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
 in plpython function bodies (Michael Fuhr)</para>
 <para>
 This prevents syntax errors when plpython code is written on a Windows or
 Mac client.
+ This prevents syntax errors when plpython code is written on a Windows or
+ Mac client.
 </para>
 </listitem>
 <listitem><para>Allow SPI cursors to handle utility commands that return rows,
 such as <command>EXPLAIN</> (Tom)</para></listitem>
 <listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
- SET WITHOUT OIDS</> (Tom)</para></listitem>
+SET WITHOUT OIDS</> (Tom)</para></listitem>
 <listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
- (Neil)</para></listitem>
+(Neil)</para></listitem>
 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
 <listitem><para>Document the Windows-only <literal>register</> and
 <literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
 <listitem><para>Ensure operations done during backend shutdown are counted by
 statistics collector</para>
 <para>
- This is expected to resolve reports of <application>pg_autovacuum</>
- not vacuuming the system catalogs often enough &mdash; it was not being
- told about catalog deletions caused by temporary table removal during
- backend exit.
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough &mdash; it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
 </para></listitem>
 <listitem><para>Change the Windows default for configuration parameter
- <varname>log_destination</> to <option>eventlog</> (Magnus)</para>
+<varname>log_destination</> to <option>eventlog</> (Magnus)</para>
 <para>
- By default, a server running on Windows will now send log output to the
- Windows event logger rather than standard error.
+By default, a server running on Windows will now send log output to the
+Windows event logger rather than standard error.
 </para></listitem>
 <listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
 <listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
- who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
+who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
 <listitem><para>Modify WAL log entries for <command>CREATE</> and
 <command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
- <para>This allows point-in-time recovery on a different machine with possibly
- different database location.  Note that <command>CREATE TABLESPACE</> still
- poses a hazard in such situations.
+<para>This allows point-in-time recovery on a different machine with possibly
+different database location.  Note that <command>CREATE TABLESPACE</> still
+poses a hazard in such situations.
 </para></listitem>
 <listitem><para>Fix crash from a backend exiting with an open transaction
- that created a table and opened a cursor on it (Tom)</para></listitem>
+that created a table and opened a cursor on it (Tom)</para></listitem>
 <listitem><para>Fix <function>array_map()</> so it can call PL functions
- (Tom)</para></listitem>
+(Tom)</para></listitem>
 <listitem><para>Several <filename>contrib/tsearch2</> and
 <filename>contrib/btree_gist</> fixes (Teodor)
- </para></listitem>
+</para></listitem>
 <listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
- functions on some platforms (Marko Kreen)</para></listitem>
+functions on some platforms (Marko Kreen)</para></listitem>
 <listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
- (Tom)</para></listitem>
+(Tom)</para></listitem>
 <listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
- (Michael)</para></listitem>
+(Michael)</para></listitem>
 <listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
- ecpg (Christof Petig)</para></listitem>
+ecpg (Christof Petig)</para></listitem>
 <listitem><para>Do not use locale-aware versions of <function>upper()</>,
- <function>lower()</>, and <function>initcap()</> when the locale is
- <literal>C</> (Bruce)</para>
+<function>lower()</>, and <function>initcap()</> when the locale is
+<literal>C</> (Bruce)</para>
 <para>
 This allows these functions to work on platforms that generate errors
 for non-7-bit data when the locale is <literal>C</>.
+ This allows these functions to work on platforms that generate errors
+ for non-7-bit data when the locale is <literal>C</>.
 </para></listitem>
 <listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
 <listitem><para>Fix <function>to_date()</> to behave reasonably when
- <literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
+<literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
 <listitem><para>Prevent <function>to_char(interval)</> from failing
- when given a zero-month interval (Tom)</para></listitem>
+when given a zero-month interval (Tom)</para></listitem>
 <listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
 (Bruce)</para>
 <para>
- <function>date_trunc('week')</>
- returned the wrong year for the first few days of January in some years.
+<function>date_trunc('week')</>
+returned the wrong year for the first few days of January in some years.
 </para></listitem>
 <listitem><para>Use the correct default mask length for class <literal>D</>
- addresses in <type>INET</> data types (Tom)</para></listitem>
+addresses in <type>INET</> data types (Tom)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0-1">
-   <title>Release 8.0.1</title>
+ <sect1 id="release-8-0-1">
+  <title>Release 8.0.1</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-01-31</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-01-31</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 8.0.0, including several
-    security-related issues.
-   </para>
+  <para>
+   This release contains a variety of fixes from 8.0.0, including several
+   security-related issues.
+  </para>
 
-   <sect2>
-    <title>Migration to version 8.0.1</title>
+  <sect2>
+   <title>Migration to Version 8.0.1</title>
 
-    <para>
-     A dump/restore is not required for those running 8.0.0.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.0.0.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
@@ -1300,2735 +1514,2887 @@ pg_dump/pg_restore</para></listitem>
 typedefs (Michael)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-8-0">
-   <title>Release 8.0</title>
+ <sect1 id="release-8-0">
+  <title>Release 8.0</title>
 
-   <note>
-    <title>Release date</title>
-    <simpara>2005-01-19</simpara>
-   </note>
+  <note>
+   <title>Release date</title>
+   <simpara>2005-01-19</simpara>
+  </note>
 
-   <sect2>
-    <title>Overview</title>
+  <sect2>
+   <title>Overview</title>
 
-    <para>
-     Major changes in this release:
-    </para>
+   <para>
+    Major changes in this release:
+   </para>
 
-    <variablelist>
-     <varlistentry>
-      <term>
-       Microsoft Windows Native Server
-      </term>
+   <variablelist>
+    <varlistentry>
+     <term>
+      Microsoft Windows Native Server
+     </term>
 
-      <listitem>
-       <para>
-        This is the first <productname>PostgreSQL</productname> release
-        to run natively on <trademark class=registered>Microsoft Windows</> as
-        a server. It can run as a <productname>Windows</> service. This
-        release supports NT-based Windows releases like
-        <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
-        <productname>Windows 2003</>. Older releases like
-        <productname>Windows 95</>, <productname>Windows 98</>, and
-        <productname>Windows ME</> are not supported because these operating
-        systems do not have the infrastructure to support
-        <productname>PostgreSQL</productname>. A separate installer
-        project has been created to ease installation on
-        <productname>Windows</> &mdash; see <ulink
-        url="http://www.postgresql.org/ftp/win32/"></ulink>.
-       </para>
+     <listitem>
+      <para>
+       This is the first <productname>PostgreSQL</productname> release
+       to run natively on <trademark class="registered">Microsoft Windows</> as
+       a server. It can run as a <productname>Windows</> service. This
+       release supports NT-based Windows releases like
+       <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
+       <productname>Windows 2003</>. Older releases like
+       <productname>Windows 95</>, <productname>Windows 98</>, and
+       <productname>Windows ME</> are not supported because these operating
+       systems do not have the infrastructure to support
+       <productname>PostgreSQL</productname>. A separate installer
+       project has been created to ease installation on
+       <productname>Windows</> &mdash; see <ulink
+       url="http://www.postgresql.org/ftp/win32/"></ulink>.
+      </para>
 
-       <para>
-        Although tested throughout our release cycle, the Windows port
-        does not have the benefit of years of use in production
-        environments that <productname>PostgreSQL</productname> has on
-        Unix platforms.  Therefore it should be treated with the same
-        level of caution as you would a new product.
-       </para>
+      <para>
+       Although tested throughout our release cycle, the Windows port
+       does not have the benefit of years of use in production
+       environments that <productname>PostgreSQL</productname> has on
+       Unix platforms.  Therefore it should be treated with the same
+       level of caution as you would a new product.
+      </para>
 
-       <para>
-        Previous releases required the Unix emulation toolkit
-        <productname>Cygwin</> in order to run the server on Windows
-        operating systems.  <productname>PostgreSQL</productname> has
-        supported native clients on Windows for many years.
-       </para>
-      </listitem>
-     </varlistentry>
+      <para>
+       Previous releases required the Unix emulation toolkit
+       <productname>Cygwin</> in order to run the server on Windows
+       operating systems.  <productname>PostgreSQL</productname> has
+       supported native clients on Windows for many years.
+      </para>
+     </listitem>
+    </varlistentry>
 
-     <varlistentry>
-      <term>
-       Savepoints
-      </term>
+    <varlistentry>
+     <term>
+      Savepoints
+     </term>
 
-      <listitem>
-       <para>
-        Savepoints allow specific parts of a transaction to be aborted
-        without affecting the remainder of the transaction. Prior
-        releases had no such capability; there was no way to recover
-        from a statement failure within a transaction except by
-        aborting the whole transaction. This feature is valuable for
-        application writers who require error recovery within a
-        complex transaction.
-       </para>
-      </listitem>
-     </varlistentry>
+     <listitem>
+      <para>
+       Savepoints allow specific parts of a transaction to be aborted
+       without affecting the remainder of the transaction. Prior
+       releases had no such capability; there was no way to recover
+       from a statement failure within a transaction except by
+       aborting the whole transaction. This feature is valuable for
+       application writers who require error recovery within a
+       complex transaction.
+      </para>
+     </listitem>
+    </varlistentry>
 
-     <varlistentry>
-      <term>
-       Point-In-Time Recovery
-      </term>
+    <varlistentry>
+     <term>
+      Point-In-Time Recovery
+     </term>
 
-      <listitem>
-       <para>
-        In previous releases there was no way to recover from disk
-        drive failure except to restore from a previous backup or use
-        a standby replication server.  Point-in-time recovery allows
-        continuous backup of the server.  You can recover either to
-        the point of failure or to some transaction in the past.
-       </para>
-      </listitem>
-     </varlistentry>
+     <listitem>
+      <para>
+       In previous releases there was no way to recover from disk
+       drive failure except to restore from a previous backup or use
+       a standby replication server.  Point-in-time recovery allows
+       continuous backup of the server.  You can recover either to
+       the point of failure or to some transaction in the past.
+      </para>
+     </listitem>
+    </varlistentry>
 
-     <varlistentry>
-      <term>
-       Tablespaces
-      </term>
-
-      <listitem>
-       <para>
-        Tablespaces allow administrators to select different file systems
-        for storage of individual tables, indexes, and databases.
-        This improves performance and control over disk space
-        usage. Prior releases used <application>initlocation</> and
-        manual symlink management for such tasks.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Improved Buffer Management, <command>CHECKPOINT</command>,
-       <command>VACUUM</command>
-      </term>
-
-      <listitem>
-       <para>
-        This release has a more intelligent buffer replacement strategy,
-        which will make better use of available shared buffers and
-        improve performance. The performance impact of vacuum and
-        checkpoints is also lessened.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Change Column Types
-      </term>
-
-      <listitem>
-       <para>
-        A column's data type can now be changed with <command>ALTER
-        TABLE</command>.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       New Perl Server-Side Language
-      </term>
-
-      <listitem>
-       <para>
-        A new version of the <application>plperl</> server-side language now
-        supports a persistent shared storage area, triggers, returning records
-        and arrays of records, and SPI calls to access the database.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-        Comma-separated-value (CSV) support in <command>COPY</command>
-      </term>
-
-      <listitem>
-       <para>
-        <command>COPY</command> can now read and write
-        comma-separated-value files. It has the flexibility to
-        interpret nonstandard quoting and separation characters too.
-       </para>
-      </listitem>
-     </varlistentry>
-
-    </variablelist>
-   </sect2>
-
-   <sect2>
-    <title>Migration to version 8.0</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>
-
-    <itemizedlist>
+    <varlistentry>
+     <term>
+      Tablespaces
+     </term>
 
      <listitem>
       <para>
-       In <option>READ COMMITTED</> serialization mode, volatile functions
-       now see the results of concurrent transactions committed up to the
-       beginning of each statement within the function, rather than up to the
-       beginning of the interactive command that called the function.
+       Tablespaces allow administrators to select different file systems
+       for storage of individual tables, indexes, and databases.
+       This improves performance and control over disk space
+       usage. Prior releases used <application>initlocation</> and
+       manual symlink management for such tasks.
       </para>
      </listitem>
+    </varlistentry>
 
-     <listitem>
-      <para>
-       Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
-       use the snapshot of the calling query, and therefore do not see the
-       effects of actions taken after the calling query starts, whether in
-       their own transaction or other transactions.  Such a function must be
-       read-only, too, meaning that it cannot use any SQL commands other than
-       <command>SELECT</>.
-      </para>
-     </listitem>
+    <varlistentry>
+     <term>
+      Improved Buffer Management, <command>CHECKPOINT</command>,
+      <command>VACUUM</command>
+     </term>
 
      <listitem>
       <para>
-       Nondeferred <option>AFTER</> triggers are now fired immediately
-       after completion of the triggering query, rather than upon
-       finishing the current interactive command. This makes a
-       difference when the triggering query occurred within a function:
-       the trigger is invoked before the function proceeds to its next
-       operation.
+       This release has a more intelligent buffer replacement strategy,
+       which will make better use of available shared buffers and
+       improve performance. The performance impact of vacuum and
+       checkpoints is also lessened.
       </para>
      </listitem>
+    </varlistentry>
 
-     <listitem>
-      <para>
-       Server configuration parameters <varname>virtual_host</> and
-       <varname>tcpip_socket</> have been replaced with a more general
-       parameter <varname>listen_addresses</>. Also, the server now listens on
-       <literal>localhost</> by default, which eliminates the need for the
-       <literal>-i</> postmaster switch in many scenarios.
-      </para>
-     </listitem>
+    <varlistentry>
+     <term>
+      Change Column Types
+     </term>
 
      <listitem>
       <para>
-       Server configuration parameters <varname>SortMem</> and
-       <varname>VacuumMem</> have been renamed to <varname>work_mem</>
-       and <varname>maintenance_work_mem</> to better reflect their
-       use. The original names are still supported in
-       <command>SET</command> and <command>SHOW</command>.
+       A column's data type can now be changed with <command>ALTER
+       TABLE</command>.
       </para>
      </listitem>
+    </varlistentry>
 
-     <listitem>
-      <para>
-       Server configuration parameters <varname>log_pid</>,
-       <varname>log_timestamp</>, and <varname>log_source_port</> have been
-       replaced with a more general parameter <varname>log_line_prefix</>.
-      </para>
-     </listitem>
+    <varlistentry>
+     <term>
+      New Perl Server-Side Language
+     </term>
 
      <listitem>
       <para>
-       Server configuration parameter <varname>syslog</> has been
-       replaced with a more logical <varname>log_destination</> variable to
-       control the log output destination.
+       A new version of the <application>plperl</> server-side language now
+       supports a persistent shared storage area, triggers, returning records
+       and arrays of records, and SPI calls to access the database.
       </para>
      </listitem>
+    </varlistentry>
 
-     <listitem>
-      <para>
-       Server configuration parameter <varname>log_statement</> has been
-       changed so it can selectively log just database modification or
-       data definition statements.  Server configuration parameter
-       <varname>log_duration</> now prints only when <varname>log_statement</>
-       prints the query.
-      </para>
-     </listitem>
+    <varlistentry>
+     <term>
+       Comma-separated-value (CSV) support in <command>COPY</command>
+     </term>
 
      <listitem>
       <para>
-       Server configuration parameter <varname>max_expr_depth</> parameter has
-       been replaced with <varname>max_stack_depth</> which measures the
-       physical stack size rather than the expression nesting depth. This
-       helps prevent session termination due to stack overflow caused by
-       recursive functions.
+       <command>COPY</command> can now read and write
+       comma-separated-value files. It has the flexibility to
+       interpret nonstandard quoting and separation characters too.
       </para>
      </listitem>
+    </varlistentry>
 
-     <listitem>
-      <para>
-       The <function>length()</> function no longer counts trailing spaces in
-       <type>CHAR(n)</> values.
-      </para>
-     </listitem>
+   </variablelist>
+  </sect2>
+
+  <sect2>
+   <title>Migration to Version 8.0</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>
+
+   <itemizedlist>
 
     <listitem>
      <para>
-      Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
-      integer, not the leftmost N bits as before.
+      In <option>READ COMMITTED</> serialization mode, volatile functions
+      now see the results of concurrent transactions committed up to the
+      beginning of each statement within the function, rather than up to the
+      beginning of the interactive command that called the function.
      </para>
     </listitem>
 
     <listitem>
      <para>
-      Updating an element or slice of a NULL array value now produces
-      a nonnull array result, namely an array containing
-      just the assigned-to positions.
+      Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
+      use the snapshot of the calling query, and therefore do not see the
+      effects of actions taken after the calling query starts, whether in
+      their own transaction or other transactions.  Such a function must be
+      read-only, too, meaning that it cannot use any SQL commands other than
+      <command>SELECT</>.
      </para>
     </listitem>
 
-     <listitem>
-      <para>
-       Syntax checking of array input values has been tightened up
-       considerably. Junk that was previously allowed in odd places with
-       odd results now causes an error. Empty-string element values
-       must now be written as <literal>""</>, rather than writing nothing.
-       Also changed behavior with respect to whitespace surrounding
-       array elements: trailing whitespace is now ignored, for symmetry
-       with leading whitespace (which has always been ignored).
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Nondeferred <option>AFTER</> triggers are now fired immediately
+      after completion of the triggering query, rather than upon
+      finishing the current interactive command. This makes a
+      difference when the triggering query occurred within a function:
+      the trigger is invoked before the function proceeds to its next
+      operation.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Overflow in integer arithmetic operations is now detected and
-       reported as an error.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Server configuration parameters <varname>virtual_host</> and
+      <varname>tcpip_socket</> have been replaced with a more general
+      parameter <varname>listen_addresses</>. Also, the server now listens on
+      <literal>localhost</> by default, which eliminates the need for the
+      <literal>-i</> postmaster switch in many scenarios.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       The arithmetic operators associated with the single-byte
-       <type>"char"</> data type have been removed.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Server configuration parameters <varname>SortMem</> and
+      <varname>VacuumMem</> have been renamed to <varname>work_mem</>
+      and <varname>maintenance_work_mem</> to better reflect their
+      use. The original names are still supported in
+      <command>SET</command> and <command>SHOW</command>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameters <varname>log_pid</>,
+      <varname>log_timestamp</>, and <varname>log_source_port</> have been
+      replaced with a more general parameter <varname>log_line_prefix</>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>syslog</> has been
+      replaced with a more logical <varname>log_destination</> variable to
+      control the log output destination.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>log_statement</> has been
+      changed so it can selectively log just database modification or
+      data definition statements.  Server configuration parameter
+      <varname>log_duration</> now prints only when <varname>log_statement</>
+      prints the query.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>max_expr_depth</> parameter has
+      been replaced with <varname>max_stack_depth</> which measures the
+      physical stack size rather than the expression nesting depth. This
+      helps prevent session termination due to stack overflow caused by
+      recursive functions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The <function>length()</> function no longer counts trailing spaces in
+      <type>CHAR(n)</> values.
+     </para>
+    </listitem>
+
+   <listitem>
+    <para>
+     Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
+     integer, not the leftmost N bits as before.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Updating an element or slice of a NULL array value now produces
+     a nonnull array result, namely an array containing
+     just the assigned-to positions.
+    </para>
+   </listitem>
+
+    <listitem>
+     <para>
+      Syntax checking of array input values has been tightened up
+      considerably. Junk that was previously allowed in odd places with
+      odd results now causes an error. Empty-string element values
+      must now be written as <literal>""</>, rather than writing nothing.
+      Also changed behavior with respect to whitespace surrounding
+      array elements: trailing whitespace is now ignored, for symmetry
+      with leading whitespace (which has always been ignored).
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Overflow in integer arithmetic operations is now detected and
+      reported as an error.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The arithmetic operators associated with the single-byte
+      <type>"char"</> data type have been removed.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The <function>extract()</> function (also called
+      <function>date_part</>) now returns the proper year for BC dates.
+      It previously returned one less than the correct year. The
+      function now also returns the proper values for millennium and
+      century.
+     </para>
+    </listitem>
+
+   <listitem>
+    <para>
+     <type>CIDR</> values now must have their nonmasked bits be zero.
+     For example, we no longer allow
+     <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
+     values should never have been accepted by
+     <productname>PostgreSQL</productname> and will now be rejected.
+    </para>
+   </listitem>
+
+    <listitem>
+     <para>
+      <command>EXECUTE</command> now returns a completion tag that
+      matches the executed statement.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>psql</>'s <command>\copy</> command now reads or
+      writes to the query's <literal>stdin/stdout</>, rather than
+      <application>psql</>'s <literal>stdin/stdout</>. The previous
+      behavior can be accessed via new
+      <option>pstdin</>/<option>pstdout</> parameters.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+     The JDBC client interface has been removed from the core
+     distribution, and is now hosted at <ulink url=
+     "http://jdbc.postgresql.org"></ulink>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+     The Tcl client interface has also been removed. There are several
+     Tcl interfaces now hosted at <ulink url=
+     "http://gborg.postgresql.org"></ulink>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The server now uses its own time zone database, rather than the
+      one supplied by the operating system. This will provide consistent
+      behavior across all platforms.  In most cases, there should be
+      little noticeable difference in time zone behavior, except that
+      the time zone names used by <command>SET</>/<command>SHOW</>
+      <varname>TimeZone</> might be different from what your platform provides.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>Configure</>'s threading option no longer requires
+      users to run tests or edit configuration files; threading options
+      are now detected automatically.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Now that tablespaces have been implemented,
+      <application>initlocation</> has been removed.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The API for user-defined GiST indexes has been changed. The
+      Union and PickSplit methods are now passed a pointer to a
+      special <structname>GistEntryVector</structname> structure,
+      rather than a <type>bytea</type>.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+  </sect2>
+
+ <sect2>
+  <title>Deprecated Features</title>
+
+  <para>
+    Some aspects of <productname>PostgreSQL</productname>'s behavior
+    have been determined to be suboptimal. For the sake of backward
+    compatibility these have not been removed in 8.0, but they are
+    considered deprecated and will be removed in the next major
+    release.
+    </para>
+
+   <itemizedlist>
+    <listitem>
+     <para>
+      The 8.1 release will remove the <function>to_char()</> function
+      for intervals.
+     </para>
+    </listitem>
 
      <listitem>
       <para>
-       The <function>extract()</> function (also called
-       <function>date_part</>) now returns the proper year for BC dates.
-       It previously returned one less than the correct year. The
-       function now also returns the proper values for millennium and
-       century.
+       The server now warns of empty strings passed to
+       <type>oid</type>/<type>float4</type>/<type>float8</type> data
+       types, but continues to interpret them as zeroes as before.
+       In the next major release, empty strings will be considered
+       invalid input for these data types.
       </para>
      </listitem>
 
     <listitem>
      <para>
-      <type>CIDR</> values now must have their nonmasked bits be zero.
-      For example, we no longer allow
-      <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
-      values should never have been accepted by
-      <productname>PostgreSQL</productname> and will now be rejected.
+      By default, tables in <productname>PostgreSQL</productname> 8.0
+      and earlier are created with <type>OID</>s. In the next release,
+      this will <emphasis>not</emphasis> be the case: to create a table
+      that contains <type>OID</>s, the <option>WITH OIDS</> clause must
+      be specified or the <varname>default_with_oids</varname>
+      configuration parameter must be set. Users are encouraged to
+      explicitly specify <option>WITH OIDS</> if their tables
+      require OIDs for compatibility with future releases of
+      <productname>PostgreSQL</productname>.
      </para>
     </listitem>
 
+   </itemizedlist>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <para>
+    Below you will find a detailed account of the changes between
+    release 8.0 and the previous major release.
+   </para>
+
+   <sect3>
+    <title>Performance Improvements</title>
+    <itemizedlist>
+
      <listitem>
       <para>
-       <command>EXECUTE</command> now returns a completion tag that
-       matches the executed statement.
+       Support cross-data-type index usage (Tom)
       </para>
-     </listitem>
-
-     <listitem>
       <para>
-       <application>psql</>'s <command>\copy</> command now reads or
-       writes to the query's <literal>stdin/stdout</>, rather than
-       <application>psql</>'s <literal>stdin/stdout</>. The previous
-       behavior can be accessed via new
-       <option>pstdin</>/<option>pstdout</> parameters.
+       Before this change, many queries would not use an index if the data
+       types did not match exactly. This improvement makes index usage more
+       intuitive and consistent.
       </para>
      </listitem>
 
      <listitem>
       <para>
-      The JDBC client interface has been removed from the core
-      distribution, and is now hosted at <ulink url=
-      "http://jdbc.postgresql.org"></ulink>.
+       New buffer replacement strategy that improves caching (Jan)
+      </para>
+      <para>
+       Prior releases used a least-recently-used (LRU) cache to keep
+       recently referenced pages in memory. The LRU algorithm
+       did not consider the number of times a specific cache entry was
+       accessed, so large table scans could force out useful cache pages.
+       The new cache algorithm uses four separate lists to track most
+       recently used and most frequently used cache pages and dynamically
+       optimize their replacement based on the work load. This should
+       lead to much more efficient use of the shared buffer cache.
+       Administrators who have tested shared buffer sizes in the past
+       should retest with this new cache replacement policy.
       </para>
      </listitem>
 
      <listitem>
       <para>
-      The Tcl client interface has also been removed. There are several
-      Tcl interfaces now hosted at <ulink url=
-      "http://gborg.postgresql.org"></ulink>.
+       Add subprocess to write dirty buffers periodically to reduce
+       checkpoint writes (Jan)
+      </para>
+      <para>
+       In previous releases, the checkpoint process, which runs every few
+       minutes, would write all dirty buffers to the operating system's
+       buffer cache then flush all dirty operating system buffers to
+       disk. This resulted in a periodic spike in disk usage that often
+       hurt performance. The new code uses a background writer to trickle
+       disk writes at a steady pace so checkpoints have far fewer dirty
+       pages to write to disk. Also, the new code does not issue a global
+       <function>sync()</> call, but instead <function>fsync()</>s just
+       the files written since the last checkpoint. This should improve
+       performance and minimize degradation during checkpoints.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       The server now uses its own time zone database, rather than the
-       one supplied by the operating system. This will provide consistent
-       behavior across all platforms.  In most cases, there should be
-       little noticeable difference in time zone behavior, except that
-       the time zone names used by <command>SET</>/<command>SHOW</>
-       <varname>TimeZone</> might be different from what your platform provides.
+       Add ability to prolong vacuum to reduce performance impact (Jan)
+      </para>
+      <para>
+       On busy systems, <command>VACUUM</command> performs many I/O
+       requests which can hurt performance for other users. This
+       release allows you to slow down <command>VACUUM</command> to
+       reduce its impact on other users, though this increases the
+       total duration of <command>VACUUM</command>.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       <application>Configure</>'s threading option no longer requires
-       users to run tests or edit configuration files; threading options
-       are now detected automatically.
+       Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
+      </para>
+      <para>
+       This improves the way indexes are scanned when many duplicate
+       values exist in the index.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Now that tablespaces have been implemented,
-       <application>initlocation</> has been removed.
+       Use dynamically-generated table size estimates while planning (Tom)
+      </para>
+      <para>
+       Formerly the planner estimated table sizes using the values seen
+       by the last <command>VACUUM</command> or <command>ANALYZE</command>,
+       both as to physical table size (number of pages) and number of rows.
+       Now, the current physical table size is obtained from the kernel,
+       and the number of rows is estimated by multiplying the table size
+       by the row density (rows per page) seen by the last
+       <command>VACUUM</command> or <command>ANALYZE</command>.  This should
+       produce more reliable estimates in cases where the table size has
+       changed significantly since the last housekeeping command.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       The API for user-defined GiST indexes has been changed. The
-       Union and PickSplit methods are now passed a pointer to a
-       special <structname>GistEntryVector</structname> structure,
-       rather than a <type>bytea</type>.
+       Improved index usage with <literal>OR</> clauses (Tom)
+      </para>
+      <para>
+       This allows the optimizer to use indexes in statements with many OR
+       clauses that would not have been indexed in the past.  It can also use
+       multi-column indexes where the first column is specified and the second
+       column is part of an <literal>OR</> clause.
       </para>
      </listitem>
 
-    </itemizedlist>
-   </sect2>
+     <listitem>
+      <para>
+       Improve matching of partial index clauses (Tom)
+      </para>
+      <para>
+       The server is now smarter about using partial indexes in queries
+       involving complex <option>WHERE</> clauses.
+      </para>
+     </listitem>
 
-  <sect2>
-   <title>Deprecated Features</title>
+     <listitem>
+      <para>
+       Improve performance of the GEQO optimizer (Tom)
+      </para>
+      <para>
+       The GEQO optimizer is used to plan queries involving many tables (by
+       default, twelve or more). This release speeds up the way queries are
+       analyzed to decrease time spent in optimization.
+      </para>
+     </listitem>
 
-   <para>
-     Some aspects of <productname>PostgreSQL</productname>'s behavior
-     have been determined to be suboptimal. For the sake of backward
-     compatibility these have not been removed in 8.0, but they are
-     considered deprecated and will be removed in the next major
-     release.
-     </para>
+     <listitem>
+      <para>
+       Miscellaneous optimizer improvements
+      </para>
+      <para>
+       There is not room here to list all the minor improvements made, but
+       numerous special cases work better than in prior releases.
+      </para>
+     </listitem>
 
-    <itemizedlist>
      <listitem>
       <para>
-       The 8.1 release will remove the <function>to_char()</> function
-       for intervals.
+       Improve lookup speed for C functions (Tom)
+      </para>
+      <para>
+       This release uses a hash table to lookup information for dynamically
+       loaded C functions. This improves their speed so they perform nearly as
+       quickly as functions that are built into the server executable.
       </para>
      </listitem>
 
-      <listitem>
-       <para>
-        The server now warns of empty strings passed to
-        <type>oid</type>/<type>float4</type>/<type>float8</type> data
-        types, but continues to interpret them as zeroes as before.
-        In the next major release, empty strings will be considered
-        invalid input for these data types.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add type-specific <command>ANALYZE</command> statistics
+       capability (Mark Cave-Ayland)
+      </para>
+      <para>
+       This feature allows more flexibility in generating statistics
+       for nonstandard data types.
+      </para>
+     </listitem>
 
      <listitem>
       <para>
-       By default, tables in <productname>PostgreSQL</productname> 8.0
-       and earlier are created with <type>OID</>s. In the next release,
-       this will <emphasis>not</emphasis> be the case: to create a table
-       that contains <type>OID</>s, the <option>WITH OIDS</> clause must
-       be specified or the <varname>default_with_oids</varname>
-       configuration parameter must be set. Users are encouraged to
-       explicitly specify <option>WITH OIDS</> if their tables
-       require OIDs for compatibility with future releases of
-       <productname>PostgreSQL</productname>.
+       <command>ANALYZE</command> now collects statistics for
+       expression indexes (Tom)
+      </para>
+      <para>
+       Expression indexes (also called functional indexes) allow users to
+       index not just columns but the results of expressions and function
+       calls. With this release, the optimizer can gather and use statistics
+       about the contents of expression indexes.  This will greatly improve
+       the quality of planning for queries in which an expression index is
+       relevant.
       </para>
      </listitem>
 
-    </itemizedlist>
-   </sect2>
+     <listitem>
+      <para>
+       New two-stage sampling method for <command>ANALYZE</command>
+       (Manfred Koizar)
+      </para>
+      <para>
+       This gives better statistics when the density of valid rows is very
+       different in different regions of a table.
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Changes</title>
+     <listitem>
+      <para>
+       Speed up <command>TRUNCATE</command> (Tom)
+      </para>
+      <para>
+       This buys back some of the performance loss observed in 7.4, while still
+       keeping <command>TRUNCATE</command> transaction-safe.
+      </para>
+     </listitem>
 
-    <para>
-     Below you will find a detailed account of the changes between
-     release 8.0 and the previous major release.
-    </para>
+    </itemizedlist>
+   </sect3>
 
-    <sect3>
-     <title>Performance Improvements</title>
-     <itemizedlist>
 
-      <listitem>
-       <para>
-        Support cross-data-type index usage (Tom)
-       </para>
-       <para>
-        Before this change, many queries would not use an index if the data
-        types did not match exactly. This improvement makes index usage more
-        intuitive and consistent.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Server Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        New buffer replacement strategy that improves caching (Jan)
-       </para>
-       <para>
-        Prior releases used a least-recently-used (LRU) cache to keep
-        recently referenced pages in memory. The LRU algorithm
-        did not consider the number of times a specific cache entry was
-        accessed, so large table scans could force out useful cache pages.
-        The new cache algorithm uses four separate lists to track most
-        recently used and most frequently used cache pages and dynamically
-        optimize their replacement based on the work load. This should
-        lead to much more efficient use of the shared buffer cache.
-        Administrators who have tested shared buffer sizes in the past
-        should retest with this new cache replacement policy.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add WAL file archiving and point-in-time recovery (Simon Riggs)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add subprocess to write dirty buffers periodically to reduce
-        checkpoint writes (Jan)
-       </para>
-       <para>
-        In previous releases, the checkpoint process, which runs every few
-        minutes, would write all dirty buffers to the operating system's
-        buffer cache then flush all dirty operating system buffers to
-        disk. This resulted in a periodic spike in disk usage that often
-        hurt performance. The new code uses a background writer to trickle
-        disk writes at a steady pace so checkpoints have far fewer dirty
-        pages to write to disk. Also, the new code does not issue a global
-        <function>sync()</> call, but instead <function>fsync()</>s just
-        the files written since the last checkpoint. This should improve
-        performance and minimize degradation during checkpoints.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add tablespaces so admins can control disk layout (Gavin)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add ability to prolong vacuum to reduce performance impact (Jan)
-       </para>
-       <para>
-        On busy systems, <command>VACUUM</command> performs many I/O
-        requests which can hurt performance for other users. This
-        release allows you to slow down <command>VACUUM</command> to
-        reduce its impact on other users, though this increases the
-        total duration of <command>VACUUM</command>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add a built-in log rotation program (Andreas Pflug)
+      </para>
+      <para>
+       It is now possible to log server messages conveniently without
+       relying on either <application>syslog</> or an external log
+       rotation program.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
-       </para>
-       <para>
-        This improves the way indexes are scanned when many duplicate
-        values exist in the index.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add new read-only server configuration parameters to show server
+       compile-time settings: <varname>block_size</>,
+       <varname>integer_datetimes</>, <varname>max_function_args</>,
+       <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Use dynamically-generated table size estimates while planning (Tom)
-       </para>
-       <para>
-        Formerly the planner estimated table sizes using the values seen
-        by the last <command>VACUUM</command> or <command>ANALYZE</command>,
-        both as to physical table size (number of pages) and number of rows.
-        Now, the current physical table size is obtained from the kernel,
-        and the number of rows is estimated by multiplying the table size
-        by the row density (rows per page) seen by the last
-        <command>VACUUM</command> or <command>ANALYZE</command>.  This should
-        produce more reliable estimates in cases where the table size has
-        changed significantly since the last housekeeping command.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
+       <literal>all</> remove special meaning of these terms in
+       <filename>pg_hba.conf</> (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improved index usage with <literal>OR</> clauses (Tom)
-       </para>
-       <para>
-        This allows the optimizer to use indexes in statements with many OR
-        clauses that would not have been indexed in the past.  It can also use
-        multi-column indexes where the first column is specified and the second
-        column is part of an <literal>OR</> clause.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Use clearer IPv6 name <literal>::1/128</> for
+       <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve matching of partial index clauses (Tom)
-       </para>
-       <para>
-        The server is now smarter about using partial indexes in queries
-        involving complex <option>WHERE</> clauses.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve performance of the GEQO optimizer (Tom)
-       </para>
-       <para>
-        The GEQO optimizer is used to plan queries involving many tables (by
-        default, twelve or more). This release speeds up the way queries are
-        analyzed to decrease time spent in optimization.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Rename server configuration parameters <varname>SortMem</> and
+       <varname>VacuumMem</> to <varname>work_mem</> and
+       <varname>maintenance_work_mem</> (Old names still supported) (Tom)
+      </para>
+      <para>
+       This change was made to clarify that bulk operations such as index and
+       foreign key creation use <varname>maintenance_work_mem</>, while
+       <varname>work_mem</> is for workspaces used during query execution.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Miscellaneous optimizer improvements
-       </para>
-       <para>
-        There is not room here to list all the minor improvements made, but
-        numerous special cases work better than in prior releases.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow logging of session disconnections using server configuration
+       <varname>log_disconnections</> (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve lookup speed for C functions (Tom)
-       </para>
-       <para>
-        This release uses a hash table to lookup information for dynamically
-        loaded C functions. This improves their speed so they perform nearly as
-        quickly as functions that are built into the server executable.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add new server configuration parameter <varname>log_line_prefix</> to
+       allow control of information emitted in each log line (Andrew)
+      </para>
+      <para>
+       Available information includes user name, database name, remote IP
+       address, and session start time.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add type-specific <command>ANALYZE</command> statistics
-        capability (Mark Cave-Ayland)
-       </para>
-       <para>
-        This feature allows more flexibility in generating statistics
-        for nonstandard data types.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove server configuration parameters <varname>log_pid</>,
+       <varname>log_timestamp</>, <varname>log_source_port</>; functionality
+       superseded by <varname>log_line_prefix</> (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <command>ANALYZE</command> now collects statistics for
-        expression indexes (Tom)
-       </para>
-       <para>
-        Expression indexes (also called functional indexes) allow users to
-        index not just columns but the results of expressions and function
-        calls. With this release, the optimizer can gather and use statistics
-        about the contents of expression indexes.  This will greatly improve
-        the quality of planning for queries in which an expression index is
-        relevant.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
+       parameters with a unified <varname>listen_addresses</> parameter
+       (Andrew, Tom)
+      </para>
+      <para>
+       <varname>virtual_host</> could only specify a single IP address to
+       listen on.  <varname>listen_addresses</> allows multiple addresses
+       to be specified.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New two-stage sampling method for <command>ANALYZE</command>
-        (Manfred Koizar)
-       </para>
-       <para>
-        This gives better statistics when the density of valid rows is very
-        different in different regions of a table.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Listen on localhost by default, which eliminates the need for the
+       <option>-i</> postmaster switch in many scenarios (Andrew)
+      </para>
+      <para>
+       Listening on localhost (<literal>127.0.0.1</>) opens no new
+       security holes but allows configurations like Windows and JDBC,
+       which do not support local sockets, to work without special
+       adjustments.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Speed up <command>TRUNCATE</command> (Tom)
-       </para>
-       <para>
-        This buys back some of the performance loss observed in 7.4, while still
-        keeping <command>TRUNCATE</command> transaction-safe.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <varname>syslog</> server configuration parameter, and add more
+       logical <varname>log_destination</> variable to control log output
+       location (Magnus)
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Change server configuration parameter <varname>log_statement</> to take
+       values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
+       <varname>none</> to select which queries are logged (Bruce)
+      </para>
+      <para>
+       This allows administrators to log only data definition changes or
+       only data modification statements.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Some logging-related configuration parameters could formerly be adjusted
+       by ordinary users, but only in the <quote>more verbose</> direction.
+       They are now treated more strictly: only superusers can set them.
+       However, a superuser can use <command>ALTER USER</> to provide per-user
+       settings of these values for non-superusers.  Also, it is now possible
+       for superusers to set values of superuser-only configuration parameters
+       via <literal>PGOPTIONS</>.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Server Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Allow configuration files to be placed outside the data directory (mlw)
+      </para>
+      <para>
+       By default, configuration files are kept in the cluster's top directory.
+       With this addition, configuration files can be placed outside the
+       data directory, easing administration.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add WAL file archiving and point-in-time recovery (Simon Riggs)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Plan prepared queries only when first executed so constants can be
+       used for statistics (Oliver Jowett)
+      </para>
+      <para>
+       Prepared statements plan queries once and execute them many
+       times. While prepared queries avoid the overhead of re-planning
+       on each use, the quality of the plan suffers from not knowing the exact
+       parameters to be used in the query.  In this release, planning of
+       unnamed prepared statements is delayed until the first execution,
+       and the actual parameter values of that execution are used as
+       optimization hints.  This allows use of out-of-line parameter passing
+       without incurring a performance penalty.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add tablespaces so admins can control disk layout (Gavin)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <command>DECLARE CURSOR</command> to take parameters
+       (Oliver Jowett)
+      </para>
+      <para>
+       It is now useful to issue <command>DECLARE CURSOR</command> in a
+       <function>Parse</> message with parameters. The parameter values
+       sent at <function>Bind</> time will be substituted into the
+       execution of the cursor's query.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add a built-in log rotation program (Andreas Pflug)
-       </para>
-       <para>
-        It is now possible to log server messages conveniently without
-        relying on either <application>syslog</> or an external log
-        rotation program.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add new read-only server configuration parameters to show server
-        compile-time settings: <varname>block_size</>,
-        <varname>integer_datetimes</>, <varname>max_function_args</>,
-        <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
-        <literal>all</> remove special meaning of these terms in
-        <filename>pg_hba.conf</> (Andrew)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Use clearer IPv6 name <literal>::1/128</> for
-        <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Rename server configuration parameters <varname>SortMem</> and
-        <varname>VacuumMem</> to <varname>work_mem</> and
-        <varname>maintenance_work_mem</> (Old names still supported) (Tom)
-       </para>
-       <para>
-        This change was made to clarify that bulk operations such as index and
-        foreign key creation use <varname>maintenance_work_mem</>, while
-        <varname>work_mem</> is for workspaces used during query execution.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow logging of session disconnections using server configuration
-        <varname>log_disconnections</> (Andrew)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add new server configuration parameter <varname>log_line_prefix</> to
-        allow control of information emitted in each log line (Andrew)
-       </para>
-       <para>
-        Available information includes user name, database name, remote IP
-        address, and session start time.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Remove server configuration parameters <varname>log_pid</>,
-        <varname>log_timestamp</>, <varname>log_source_port</>; functionality
-        superseded by <varname>log_line_prefix</> (Andrew)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
-        parameters with a unified <varname>listen_addresses</> parameter
-        (Andrew, Tom)
-       </para>
-       <para>
-        <varname>virtual_host</> could only specify a single IP address to
-        listen on.  <varname>listen_addresses</> allows multiple addresses
-        to be specified.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Listen on localhost by default, which eliminates the need for the
-        <option>-i</> postmaster switch in many scenarios (Andrew)
-       </para>
-       <para>
-        Listening on localhost (<literal>127.0.0.1</>) opens no new
-        security holes but allows configurations like Windows and JDBC,
-        which do not support local sockets, to work without special
-        adjustments.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Remove <varname>syslog</> server configuration parameter, and add more
-        logical <varname>log_destination</> variable to control log output
-        location (Magnus)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Change server configuration parameter <varname>log_statement</> to take
-        values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
-        <varname>none</> to select which queries are logged (Bruce)
-       </para>
-       <para>
-        This allows administrators to log only data definition changes or
-        only data modification statements.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Some logging-related configuration parameters could formerly be adjusted
-        by ordinary users, but only in the <quote>more verbose</> direction.
-        They are now treated more strictly: only superusers can set them.
-        However, a superuser can use <command>ALTER USER</> to provide per-user
-        settings of these values for non-superusers.  Also, it is now possible
-        for superusers to set values of superuser-only configuration parameters
-        via <literal>PGOPTIONS</>.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow configuration files to be placed outside the data directory (mlw)
-       </para>
-       <para>
-        By default, configuration files are kept in the cluster's top directory.
-        With this addition, configuration files can be placed outside the
-        data directory, easing administration.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Plan prepared queries only when first executed so constants can be
-        used for statistics (Oliver Jowett)
-       </para>
-       <para>
-        Prepared statements plan queries once and execute them many
-        times. While prepared queries avoid the overhead of re-planning
-        on each use, the quality of the plan suffers from not knowing the exact
-        parameters to be used in the query.  In this release, planning of
-        unnamed prepared statements is delayed until the first execution,
-        and the actual parameter values of that execution are used as
-        optimization hints.  This allows use of out-of-line parameter passing
-        without incurring a performance penalty.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow <command>DECLARE CURSOR</command> to take parameters
-        (Oliver Jowett)
-       </para>
-       <para>
-        It is now useful to issue <command>DECLARE CURSOR</command> in a
-        <function>Parse</> message with parameters. The parameter values
-        sent at <function>Bind</> time will be substituted into the
-        execution of the cursor's query.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Fix hash joins and aggregates of <type>inet</type> and
-        <type>cidr</type> data types (Tom)
-       </para>
-       <para>
-        Release 7.4 handled hashing of mixed <type>inet</type> and
-        <type>cidr</type> values incorrectly.  (This bug did not exist
-        in prior releases because they wouldn't try to hash either
-        data type.)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Make <varname>log_duration</> print only when <varname>log_statement</>
-        prints the query (Ed L.)
-       </para>
-      </listitem>
-
-     </itemizedlist>
-    </sect3>
-
-
-    <sect3>
-     <title>Query Changes</title>
-     <itemizedlist>
-
-      <listitem>
-       <para>
-        Add savepoints (nested transactions) (Alvaro)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Unsupported isolation levels are now accepted and promoted to the
-        nearest supported level (Peter)
-       </para>
-       <para>
-        The SQL specification states that if a database doesn't support a
-        specific isolation level, it should use the next more restrictive level.
-        This change complies with that recommendation.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow <command>BEGIN WORK</command> to specify transaction
-        isolation levels like <command>START TRANSACTION</command> does
-        (Bruce)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Fix table permission checking for cases in which rules generate
-        a query type different from the originally submitted query (Tom)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
-        David Fetter)
-       </para>
-       <para>
-        In previous releases, because single quotes had to be used to
-        quote a function's body, the use of single quotes inside the
-        function text required use of two single quotes or other error-prone
-        notations. With this release we add the ability to use "dollar
-        quoting" to quote a block of text.  The ability to use different
-        quoting delimiters at different nesting levels greatly simplifies
-        the task of quoting correctly, especially in complex functions.
-        Dollar quoting can be used anywhere quoted text is needed.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
-       </para>
-       <para>
-        <option>CASE</> no longer evaluates the tested expression multiple
-        times. This has benefits when the expression is complex or is
-        volatile.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Test <option>HAVING</> before computing target list of an
-        aggregate query (Tom)
-       </para>
-       <para>
-        Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
-        ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
-        could fail with divide-by-zero.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Replace <varname>max_expr_depth</> parameter with
-        <varname>max_stack_depth</> parameter, measured in kilobytes of stack
-        size (Tom)
-       </para>
-       <para>
-       This gives us a fairly bulletproof defense against crashing due to
-       runaway recursive functions. Instead of measuring the depth of expression
-       nesting, we now directly measure the size of the execution stack.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow arbitrary row expressions (Tom)
-       </para>
-       <para>
-        This release allows SQL expressions to contain arbitrary composite
-        types, that is, row values. It also allows functions to more easily
-        take rows as arguments and return row values.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
-        in row and subselect comparisons (Fabien Coelho)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix hash joins and aggregates of <type>inet</type> and
+       <type>cidr</type> data types (Tom)
+      </para>
+      <para>
+       Release 7.4 handled hashing of mixed <type>inet</type> and
+       <type>cidr</type> values incorrectly.  (This bug did not exist
+       in prior releases because they wouldn't try to hash either
+       data type.)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Avoid locale-specific case conversion of basic ASCII letters in
-        identifiers and keywords (Tom)
-       </para>
-       <para>
-        This solves the <quote>Turkish problem</> with mangling of words
-        containing <literal>I</> and  <literal>i</>.  Folding of characters
-        outside the 7-bit-ASCII set is still locale-aware.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <varname>log_duration</> print only when <varname>log_statement</>
+       prints the query (Ed L.)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve syntax error reporting (Fabien, Tom)
-       </para>
-       <para>
-        Syntax error reports are more useful than before.
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Change <command>EXECUTE</command> to return a completion tag
-        matching the executed statement (Kris Jurka)
-       </para>
-       <para>
-        Previous releases return an <command>EXECUTE</command> tag for
-        any <command>EXECUTE</command> call. In this release, the tag
-        returned will reflect the command executed.
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
-       </para>
-       <para>
-        Such a clause makes no logical sense, but in some cases the rule
-        decompiler formerly produced this syntax.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Query Changes</title>
+    <itemizedlist>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Add savepoints (nested transactions) (Alvaro)
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Unsupported isolation levels are now accepted and promoted to the
+       nearest supported level (Peter)
+      </para>
+      <para>
+       The SQL specification states that if a database doesn't support a
+       specific isolation level, it should use the next more restrictive level.
+       This change complies with that recommendation.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Object Manipulation Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Allow <command>BEGIN WORK</command> to specify transaction
+       isolation levels like <command>START TRANSACTION</command> does
+       (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <command>COMMENT ON</> for casts, conversions, languages,
-        operator classes, and large objects (Christopher)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix table permission checking for cases in which rules generate
+       a query type different from the originally submitted query (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add new server configuration parameter <varname>default_with_oids</> to
-        control whether tables are created with <type>OID</>s by default (Neil)
-       </para>
-       <para>
-        This allows administrators to control whether <command>CREATE
-        TABLE</command> commands create tables with or without <type>OID</>
-        columns by default.  (Note: the current factory default setting for
-        <varname>default_with_oids</> is <literal>TRUE</>, but the default
-        will become <literal>FALSE</> in future releases.)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
+       David Fetter)
+      </para>
+      <para>
+       In previous releases, because single quotes had to be used to
+       quote a function's body, the use of single quotes inside the
+       function text required use of two single quotes or other error-prone
+       notations. With this release we add the ability to use "dollar
+       quoting" to quote a block of text.  The ability to use different
+       quoting delimiters at different nesting levels greatly simplifies
+       the task of quoting correctly, especially in complex functions.
+       Dollar quoting can be used anywhere quoted text is needed.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
-        <command>CREATE TABLE AS</command> (Neil)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
+      </para>
+      <para>
+       <option>CASE</> no longer evaluates the tested expression multiple
+       times. This has benefits when the expression is complex or is
+       volatile.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
-        column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
-        (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Test <option>HAVING</> before computing target list of an
+       aggregate query (Tom)
+      </para>
+      <para>
+       Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
+       ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
+       could fail with divide-by-zero.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow composite types as table columns (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Replace <varname>max_expr_depth</> parameter with
+       <varname>max_stack_depth</> parameter, measured in kilobytes of stack
+       size (Tom)
+      </para>
+      <para>
+      This gives us a fairly bulletproof defense against crashing due to
+      runaway recursive functions. Instead of measuring the depth of expression
+      nesting, we now directly measure the size of the execution stack.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <command>ALTER ... ADD COLUMN</> with defaults and
-        <option>NOT NULL</> constraints; works per SQL spec (Rod)
-       </para>
-       <para>
-        It is now possible for <option>ADD COLUMN</> to create a column
-        that is not initially filled with NULLs, but with a specified
-        default value.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow arbitrary row expressions (Tom)
+      </para>
+      <para>
+       This release allows SQL expressions to contain arbitrary composite
+       types, that is, row values. It also allows functions to more easily
+       take rows as arguments and return row values.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
-       </para>
-       <para>
-        It is now possible to alter a column's data type without dropping
-        and re-adding the column.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
+       in row and subselect comparisons (Fabien Coelho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow multiple <command>ALTER</> actions in a single <command>ALTER
-        TABLE</command> command (Rod)
-       </para>
-       <para>
-        This is particularly useful for <command>ALTER</> commands that
-        rewrite the table (which include <option>ALTER COLUMN TYPE</> and
-        <option>ADD COLUMN</> with a default). By grouping
-        <command>ALTER</> commands together, the table need be rewritten
-        only once.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Avoid locale-specific case conversion of basic ASCII letters in
+       identifiers and keywords (Tom)
+      </para>
+      <para>
+       This solves the <quote>Turkish problem</> with mangling of words
+       containing <literal>I</> and  <literal>i</>.  Folding of characters
+       outside the 7-bit-ASCII set is still locale-aware.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
-        columns (Tom)
-       </para>
-       <para>
-        This falls out from the new capability of specifying defaults for new
-        columns.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve syntax error reporting (Fabien, Tom)
+      </para>
+      <para>
+       Syntax error reports are more useful than before.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow changing the owners of aggregates, conversions, databases,
-        functions, operators, operator classes, schemas, types, and tablespaces
-        (Christopher, Euler Taveira de Oliveira)
-       </para>
-       <para>
-        Previously this required modifying the system tables directly.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change <command>EXECUTE</command> to return a completion tag
+       matching the executed statement (Kris Jurka)
+      </para>
+      <para>
+       Previous releases return an <command>EXECUTE</command> tag for
+       any <command>EXECUTE</command> call. In this release, the tag
+       returned will reflect the command executed.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow temporary object creation to be limited to <option>SECURITY
-        DEFINER</> functions (Sean Chittenden)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
+      </para>
+      <para>
+       Such a clause makes no logical sense, but in some cases the rule
+       decompiler formerly produced this syntax.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
-       </para>
-       <para>
-        Prior to this release, there was no way to clear an auto-cluster
-        specification except to modify the system tables.
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Constraint/Index/<type>SERIAL</> names are now
-        <replaceable>table_column_type</>
-        with numbers appended to guarantee uniqueness within the schema
-        (Tom)
-       </para>
-       <para>
-        The SQL specification states that such names should be unique
-        within a schema.
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Add <function>pg_get_serial_sequence()</> to return a
-        <type>SERIAL</> column's sequence name (Christopher)
-       </para>
-       <para>
-        This allows automated scripts to reliably find the <type>SERIAL</>
-        sequence name.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Object Manipulation Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Warn when primary/foreign key data type mismatch requires costly lookup
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <command>COMMENT ON</> for casts, conversions, languages,
+       operator classes, and large objects (Christopher)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <command>ALTER INDEX</> command to allow moving of indexes
-        between tablespaces (Gavin)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add new server configuration parameter <varname>default_with_oids</> to
+       control whether tables are created with <type>OID</>s by default (Neil)
+      </para>
+      <para>
+       This allows administrators to control whether <command>CREATE
+       TABLE</command> commands create tables with or without <type>OID</>
+       columns by default.  (Note: the current factory default setting for
+       <varname>default_with_oids</> is <literal>TRUE</>, but the default
+       will become <literal>FALSE</> in future releases.)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make <command>ALTER TABLE OWNER</> change dependent sequence
-        ownership too (Alvaro)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
+       <command>CREATE TABLE AS</command> (Neil)
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
+       column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
+       (Tom)
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Allow composite types as table columns (Tom)
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Allow <command>ALTER ... ADD COLUMN</> with defaults and
+       <option>NOT NULL</> constraints; works per SQL spec (Rod)
+      </para>
+      <para>
+       It is now possible for <option>ADD COLUMN</> to create a column
+       that is not initially filled with NULLs, but with a specified
+       default value.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Utility Command Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
+      </para>
+      <para>
+       It is now possible to alter a column's data type without dropping
+       and re-adding the column.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <command>CREATE SCHEMA</command> to create triggers,
-        indexes, and sequences (Neil)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow multiple <command>ALTER</> actions in a single <command>ALTER
+       TABLE</command> command (Rod)
+      </para>
+      <para>
+       This is particularly useful for <command>ALTER</> commands that
+       rewrite the table (which include <option>ALTER COLUMN TYPE</> and
+       <option>ADD COLUMN</> with a default). By grouping
+       <command>ALTER</> commands together, the table need be rewritten
+       only once.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
-        Coelho)
-       </para>
-       <para>
-        This allows <option>ALSO</> to be added to rule creation to contrast it with
-        <option>INSTEAD</> rules.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
+       columns (Tom)
+      </para>
+      <para>
+       This falls out from the new capability of specifying defaults for new
+       columns.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
-       </para>
-       <para>
-        This allows the <command>LOCK</command> command to fail if it
-        would have to wait for the requested lock.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow changing the owners of aggregates, conversions, databases,
+       functions, operators, operator classes, schemas, types, and tablespaces
+       (Christopher, Euler Taveira de Oliveira)
+      </para>
+      <para>
+       Previously this required modifying the system tables directly.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <command>COPY</command> to read and write
-        comma-separated-value (CSV) files (Andrew, Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow temporary object creation to be limited to <option>SECURITY
+       DEFINER</> functions (Sean Chittenden)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Generate error if the <command>COPY</command> delimiter and NULL
-        string conflict (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
+      </para>
+      <para>
+       Prior to this release, there was no way to clear an auto-cluster
+       specification except to modify the system tables.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <command>GRANT</command>/<command>REVOKE</command> behavior
-        follows the SQL spec more closely
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Constraint/Index/<type>SERIAL</> names are now
+       <replaceable>table_column_type</>
+       with numbers appended to guarantee uniqueness within the schema
+       (Tom)
+      </para>
+      <para>
+       The SQL specification states that such names should be unique
+       within a schema.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Avoid locking conflict between <command>CREATE INDEX</command>
-        and <command>CHECKPOINT</command> (Tom)
-       </para>
-       <para>
-        In 7.3 and 7.4, a long-running B-tree index build could block concurrent
-        <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
-        WAL log could not be recycled.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>pg_get_serial_sequence()</> to return a
+       <type>SERIAL</> column's sequence name (Christopher)
+      </para>
+      <para>
+       This allows automated scripts to reliably find the <type>SERIAL</>
+       sequence name.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Database-wide <command>ANALYZE</command> does not hold locks
-        across tables (Tom)
-       </para>
-       <para>
-        This reduces the potential for deadlocks against other backends
-        that want exclusive locks on tables.  To get the benefit of this
-        change, do not execute database-wide <command>ANALYZE</command>
-        inside a transaction block (<command>BEGIN</command> block); it
-        must be able to commit and start a new transaction for each
-        table.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Warn when primary/foreign key data type mismatch requires costly lookup
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <command>REINDEX</command> does not exclusively lock the index's
-        parent table anymore
-       </para>
-       <para>
-        The index itself is still exclusively locked, but readers of the
-        table can continue if they are not using the particular index
-        being rebuilt.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New <command>ALTER INDEX</> command to allow moving of indexes
+       between tablespaces (Gavin)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Erase MD5 user passwords when a user is renamed (Bruce)
-       </para>
-       <para>
-        <productname>PostgreSQL</productname> uses the user name as salt
-        when encrypting passwords via MD5. When a user's name is changed,
-        the salt will no longer match the stored MD5 password, so the
-        stored password becomes useless.  In this release a notice is
-        generated and the password is cleared.  A new password must then
-        be assigned if the user is to be able to log in with a password.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <command>ALTER TABLE OWNER</> change dependent sequence
+       ownership too (Alvaro)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
-       </para>
-       <para>
-        Windows does not have a <literal>kill</> command to send signals to
-        backends so this capability was added to <application>pg_ctl</>.
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Information schema improvements
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add <option>--pwfile</> option to
-        <application>initdb</application> so the initial password can be
-        set by GUI tools (Magnus)
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Detect locale/encoding mismatch in
-        <application>initdb</application> (Peter)
-       </para>
-      </listitem>
+   <sect3>
+    <title>Utility Command Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Allow <command>CREATE SCHEMA</command> to create triggers,
+       indexes, and sequences (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>register</> command to <application>pg_ctl</> to
-        register Windows operating system service (Dave Page)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
+       Coelho)
+      </para>
+      <para>
+       This allows <option>ALSO</> to be added to rule creation to contrast it with
+       <option>INSTEAD</> rules.
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
+      </para>
+      <para>
+       This allows the <command>LOCK</command> command to fail if it
+       would have to wait for the requested lock.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Allow <command>COPY</command> to read and write
+       comma-separated-value (CSV) files (Andrew, Bruce)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Data Type and Function Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Generate error if the <command>COPY</command> delimiter and NULL
+       string conflict (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        More complete support for composite types (row types)  (Tom)
-       </para>
-       <para>
-        Composite values can be used in many places where only scalar values
-        worked before.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       <command>GRANT</command>/<command>REVOKE</command> behavior
+       follows the SQL spec more closely
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Reject nonrectangular array values as erroneous (Joe)
-       </para>
-       <para>
-        Formerly, <function>array_in</> would silently build a
-        surprising result.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Avoid locking conflict between <command>CREATE INDEX</command>
+       and <command>CHECKPOINT</command> (Tom)
+      </para>
+      <para>
+       In 7.3 and 7.4, a long-running B-tree index build could block concurrent
+       <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
+       WAL log could not be recycled.
+      </para>
+     </listitem>
 
-       <listitem>
-        <para>
-         Overflow in integer arithmetic operations is now detected (Tom)
-        </para>
-       </listitem>
-
-       <listitem>
-        <para>
-         The arithmetic operators associated with the single-byte
-         <type>"char"</> data type have been removed.
-        </para>
-        <para>
-         Formerly, the parser would select these operators in many situations
-         where an <quote>unable to select an operator</> error would be more
-         appropriate, such as <literal>null * null</>.  If you actually want
-         to do arithmetic on a <type>"char"</> column, you can cast it to
-         integer explicitly.
-        </para>
-       </listitem>
+     <listitem>
+      <para>
+       Database-wide <command>ANALYZE</command> does not hold locks
+       across tables (Tom)
+      </para>
+      <para>
+       This reduces the potential for deadlocks against other backends
+       that want exclusive locks on tables.  To get the benefit of this
+       change, do not execute database-wide <command>ANALYZE</command>
+       inside a transaction block (<command>BEGIN</command> block); it
+       must be able to commit and start a new transaction for each
+       table.
+      </para>
+     </listitem>
 
-      <listitem>
-        <para>
-         Syntax checking of array input values considerably tightened up (Joe)
-        </para>
-       <para>
-         Junk that was previously allowed in odd places with odd results
-         now causes an <literal>ERROR</>, for example, non-whitespace
-         after the closing right brace.
-        </para>
-      </listitem>
+     <listitem>
+      <para>
+       <command>REINDEX</command> does not exclusively lock the index's
+       parent table anymore
+      </para>
+      <para>
+       The index itself is still exclusively locked, but readers of the
+       table can continue if they are not using the particular index
+       being rebuilt.
+      </para>
+     </listitem>
 
-      <listitem>
-        <para>
-         Empty-string array element values must now be written as
-         <literal>""</>, rather than writing nothing (Joe)
-        </para>
-       <para>
-         Formerly, both ways of writing an empty-string element value were
-         allowed, but now a quoted empty string is required.  The case where
-         nothing at all appears will probably be considered to be a NULL
-         element value in some future release.
-        </para>
-      </listitem>
+     <listitem>
+      <para>
+       Erase MD5 user passwords when a user is renamed (Bruce)
+      </para>
+      <para>
+       <productname>PostgreSQL</productname> uses the user name as salt
+       when encrypting passwords via MD5. When a user's name is changed,
+       the salt will no longer match the stored MD5 password, so the
+       stored password becomes useless.  In this release a notice is
+       generated and the password is cleared.  A new password must then
+       be assigned if the user is to be able to log in with a password.
+      </para>
+     </listitem>
 
-      <listitem>
-        <para>
-         Array element trailing whitespace is now ignored (Joe)
-        </para>
-       <para>
-         Formerly leading whitespace was ignored, but trailing whitespace
-         between an element value and the delimiter or right brace was
-         significant.  Now trailing whitespace is also ignored.
-        </para>
-      </listitem>
+     <listitem>
+      <para>
+       New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
+      </para>
+      <para>
+       Windows does not have a <literal>kill</> command to send signals to
+       backends so this capability was added to <application>pg_ctl</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Emit array values with explicit array bounds when lower bound is not one
-        (Joe)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Information schema improvements
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>--pwfile</> option to
+       <application>initdb</application> so the initial password can be
+       set by GUI tools (Magnus)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make <function>netmask</> and <function>hostmask</> functions
-        return maximum-length mask length (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Detect locale/encoding mismatch in
+       <application>initdb</application> (Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Change factorial function to return <type>numeric</type> (Gavin)
-       </para>
-       <para>
-        Returning <type>numeric</type> allows the factorial function to
-        work for a wider range of input values.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>register</> command to <application>pg_ctl</> to
+       register Windows operating system service (Dave Page)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <function>to_char</>/<function>to_date()</> date conversion
-        improvements (Kurt Roeckx, Fabien Coelho)
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Make <function>length()</> disregard trailing spaces in
-        <type>CHAR(n)</> (Gavin)
-       </para>
-       <para>
-        This change was made to improve consistency: trailing spaces are
-        semantically insignificant in <type>CHAR(n)</> data, so they
-        should not be counted by <function>length()</>.
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Warn about empty string being passed to
-        <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
-       </para>
-       <para>
-        8.1 will throw an error instead.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Data Type and Function Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Allow leading or trailing whitespace in
-        <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
-        input routines
-        (Neil)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       More complete support for composite types (row types)  (Tom)
+      </para>
+      <para>
+       Composite values can be used in many places where only scalar values
+       worked before.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Better support for IEEE <literal>Infinity</> and <literal>NaN</>
-        values in <type>float4</type>/<type>float8</type> (Neil)
-       </para>
-       <para>
-        These should now work on all platforms that support IEEE-compliant
-        floating point arithmetic.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Reject nonrectangular array values as erroneous (Joe)
+      </para>
+      <para>
+       Formerly, <function>array_in</> would silently build a
+       surprising result.
+      </para>
+     </listitem>
 
       <listitem>
        <para>
-        Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
+        Overflow in integer arithmetic operations is now detected (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Fix <function>to_char</function> for <literal>1 BC</>
-        (previously it returned <literal>1 AD</>) (Bruce)
+        The arithmetic operators associated with the single-byte
+        <type>"char"</> data type have been removed.
        </para>
-      </listitem>
-
-      <listitem>
        <para>
-        Fix <function>date_part(year)</> for BC dates (previously it
-        returned one less than the correct year) (Bruce)
+        Formerly, the parser would select these operators in many situations
+        where an <quote>unable to select an operator</> error would be more
+        appropriate, such as <literal>null * null</>.  If you actually want
+        to do arithmetic on a <type>"char"</> column, you can cast it to
+        integer explicitly.
        </para>
       </listitem>
 
-      <listitem>
+     <listitem>
        <para>
-        Fix <function>date_part()</> to return the proper millennium and
-        century (Fabien Coelho)
+        Syntax checking of array input values considerably tightened up (Joe)
        </para>
-       <para>
-        In previous versions, the century and millennium results had a wrong
-        number and started in the wrong year, as compared to standard
-        reckoning of such things.
+      <para>
+        Junk that was previously allowed in odd places with odd results
+        now causes an <literal>ERROR</>, for example, non-whitespace
+        after the closing right brace.
        </para>
-      </listitem>
+     </listitem>
 
-      <listitem>
+     <listitem>
        <para>
-        Add <function>ceiling()</> as an alias for <function>ceil()</>,
-        and <function>power()</> as an alias for <function>pow()</> for
-        standards compliance (Neil)
+        Empty-string array element values must now be written as
+        <literal>""</>, rather than writing nothing (Joe)
        </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Change <function>ln()</>, <function>log()</>,
-        <function>power()</>, and <function>sqrt()</> to emit the correct
-        <literal>SQLSTATE</> error codes for certain error conditions, as
-        specified by SQL:2003 (Neil)
+      <para>
+        Formerly, both ways of writing an empty-string element value were
+        allowed, but now a quoted empty string is required.  The case where
+        nothing at all appears will probably be considered to be a NULL
+        element value in some future release.
        </para>
-      </listitem>
+     </listitem>
 
-      <listitem>
+     <listitem>
        <para>
-        Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
+        Array element trailing whitespace is now ignored (Joe)
        </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add <function>generate_series()</> functions to simplify working
-        with numeric sets (Joe)
+      <para>
+        Formerly leading whitespace was ignored, but trailing whitespace
+        between an element value and the delimiter or right brace was
+        significant.  Now trailing whitespace is also ignored.
        </para>
-      </listitem>
+     </listitem>
 
-      <listitem>
-       <para>
-        Fix <function>upper/lower/initcap()</> functions to work with
-        multibyte encodings (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Emit array values with explicit array bounds when lower bound is not one
+       (Joe)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add boolean and bitwise integer <option>AND</>/<option>OR</>
-        aggregates (Fabien Coelho)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New session information functions to return network addresses for client
-        and server (Sean Chittenden)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <function>netmask</> and <function>hostmask</> functions
+       return maximum-length mask length (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add function to determine the area of a closed path (Sean Chittenden)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change factorial function to return <type>numeric</type> (Gavin)
+      </para>
+      <para>
+       Returning <type>numeric</type> allows the factorial function to
+       work for a wider range of input values.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add function to send cancel request to other backends (Magnus)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       <function>to_char</>/<function>to_date()</> date conversion
+       improvements (Kurt Roeckx, Fabien Coelho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <type>interval</> plus <type>datetime</> operators (Tom)
-       </para>
-       <para>
-        The reverse ordering, <type>datetime</> plus <type>interval</>,
-        was already supported, but both are required by the SQL standard.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <function>length()</> disregard trailing spaces in
+       <type>CHAR(n)</> (Gavin)
+      </para>
+      <para>
+       This change was made to improve consistency: trailing spaces are
+       semantically insignificant in <type>CHAR(n)</> data, so they
+       should not be counted by <function>length()</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Casting an integer to <type>BIT(N)</> selects the rightmost N bits
-        of the integer
-        (Tom)
-       </para>
-       <para>
-        In prior releases, the leftmost N bits were selected, but this was
-        deemed unhelpful, not to mention inconsistent with casting from bit
-        to int.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Warn about empty string being passed to
+       <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
+      </para>
+      <para>
+       8.1 will throw an error instead.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Require <type>CIDR</> values to have all nonmasked bits be zero
-        (Kevin Brintnall)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow leading or trailing whitespace in
+       <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
+       input routines
+       (Neil)
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Better support for IEEE <literal>Infinity</> and <literal>NaN</>
+       values in <type>float4</type>/<type>float8</type> (Neil)
+      </para>
+      <para>
+       These should now work on all platforms that support IEEE-compliant
+       floating point arithmetic.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Server-Side Language Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Fix <function>to_char</function> for <literal>1 BC</>
+       (previously it returned <literal>1 AD</>) (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        In <literal>READ COMMITTED</> serialization mode, volatile functions
-        now see the results of concurrent transactions committed up to the
-        beginning of each statement within the function, rather than up to the
-        beginning of the interactive command that called the function.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix <function>date_part(year)</> for BC dates (previously it
+       returned one less than the correct year) (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
-        use the snapshot of the calling query, and therefore do not see the
-        effects of actions taken after the calling query starts, whether in
-        their own transaction or other transactions.  Such a function must be
-        read-only, too, meaning that it cannot use any SQL commands other than
-        <command>SELECT</>.  There is a considerable performance gain from
-        declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
-        rather than <literal>VOLATILE</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix <function>date_part()</> to return the proper millennium and
+       century (Fabien Coelho)
+      </para>
+      <para>
+       In previous versions, the century and millennium results had a wrong
+       number and started in the wrong year, as compared to standard
+       reckoning of such things.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Nondeferred <option>AFTER</> triggers are now fired immediately
-        after completion of the triggering query, rather than upon
-        finishing the current interactive command. This makes a difference
-        when the triggering query occurred within a function: the trigger
-        is invoked before the function proceeds to its next operation. For
-        example, if a function inserts a new row into a table, any
-        nondeferred foreign key checks occur before proceeding with the
-        function.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>ceiling()</> as an alias for <function>ceil()</>,
+       and <function>power()</> as an alias for <function>pow()</> for
+       standards compliance (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
-       </para>
-       <para>
-        This allows better documentation of functions.  Whether the names
-        actually do anything depends on the specific function language
-        being used.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change <function>ln()</>, <function>log()</>,
+       <function>power()</>, and <function>sqrt()</> to emit the correct
+       <literal>SQLSTATE</> error codes for certain error conditions, as
+       specified by SQL:2003 (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
-       </para>
-       <para>
-        This basically creates an automatic alias for each named parameter.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
-       </para>
-       <para>
-        This allows us to catch simple syntax errors sooner.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>generate_series()</> functions to simplify working
+       with numeric sets (Joe)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        More support for composite types (row and record variables) in PL/pgSQL
-       </para>
-       <para>
-        For example, it now works to pass a rowtype variable to another function
-        as a single variable.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix <function>upper/lower/initcap()</> functions to work with
+       multibyte encodings (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Default values for PL/pgSQL variables can now reference previously
-        declared variables
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add boolean and bitwise integer <option>AND</>/<option>OR</>
+       aggregates (Fabien Coelho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve parsing of PL/pgSQL FOR loops (Tom)
-       </para>
-       <para>
-        Parsing is now driven by presence of <literal>".."</> rather than
-        data type of <option>FOR</> variable. This makes no difference for
-        correct functions, but should result in more understandable error
-        messages when a mistake is made.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New session information functions to return network addresses for client
+       and server (Sean Chittenden)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add function to determine the area of a closed path (Sean Chittenden)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        In PL/Tcl, SPI commands are now run in subtransactions.  If an error
-        occurs, the subtransaction is cleaned up and the error is reported
-        as an ordinary Tcl error, which can be trapped with <literal>catch</>.
-        Formerly, it was not possible to catch such errors.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add function to send cancel request to other backends (Magnus)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Accept <command>ELSEIF</> in PL/pgSQL (Neil)
-       </para>
-       <para>
-        Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
-        are accustomed to spelling this keyword <command>ELSEIF</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <type>interval</> plus <type>datetime</> operators (Tom)
+      </para>
+      <para>
+       The reverse ordering, <type>datetime</> plus <type>interval</>,
+       was already supported, but both are required by the SQL standard.
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Casting an integer to <type>BIT(N)</> selects the rightmost N bits
+       of the integer
+       (Tom)
+      </para>
+      <para>
+       In prior releases, the leftmost N bits were selected, but this was
+       deemed unhelpful, not to mention inconsistent with casting from bit
+       to int.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Require <type>CIDR</> values to have all nonmasked bits be zero
+       (Kevin Brintnall)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title><application>psql</> Changes</title>
-     <itemizedlist>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Improve <application>psql</> information display about database
-        objects (Christopher)
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Allow <application>psql</> to display group membership in
-        <command>\du</> and <command>\dg</> (Markus Bertheau)
-       </para>
-      </listitem>
+   <sect3>
+    <title>Server-Side Language Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Prevent <application>psql</> <command>\dn</command> from showing
-        temporary schemas (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       In <literal>READ COMMITTED</> serialization mode, volatile functions
+       now see the results of concurrent transactions committed up to the
+       beginning of each statement within the function, rather than up to the
+       beginning of the interactive command that called the function.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <application>psql</> to handle tilde user expansion for file
-        names (Zach Irmen)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
+       use the snapshot of the calling query, and therefore do not see the
+       effects of actions taken after the calling query starts, whether in
+       their own transaction or other transactions.  Such a function must be
+       read-only, too, meaning that it cannot use any SQL commands other than
+       <command>SELECT</>.  There is a considerable performance gain from
+       declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
+       rather than <literal>VOLATILE</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <application>psql</> to display fancy prompts, including
-        color, via <application>readline</> (Reece Hart, Chet Ramey)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Nondeferred <option>AFTER</> triggers are now fired immediately
+       after completion of the triggering query, rather than upon
+       finishing the current interactive command. This makes a difference
+       when the triggering query occurred within a function: the trigger
+       is invoked before the function proceeds to its next operation. For
+       example, if a function inserts a new row into a table, any
+       nondeferred foreign key checks occur before proceeding with the
+       function.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
-        fully (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
+      </para>
+      <para>
+       This allows better documentation of functions.  Whether the names
+       actually do anything depends on the specific function language
+       being used.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Show the location of syntax errors (Fabien Coelho, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
+      </para>
+      <para>
+       This basically creates an automatic alias for each named parameter.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <command>CLUSTER</command> information to <application>psql</>
-        <command>\d</> display
-        (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
+      </para>
+      <para>
+       This allows us to catch simple syntax errors sooner.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Change <application>psql</> <command>\copy stdin/stdout</> to read
-        from command input/output (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       More support for composite types (row and record variables) in PL/pgSQL
+      </para>
+      <para>
+       For example, it now works to pass a rowtype variable to another function
+       as a single variable.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <option>pstdin</>/<option>pstdout</> to read from
-        <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
-        Feit)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Default values for PL/pgSQL variables can now reference previously
+       declared variables
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
-        (Bruce)
-       </para>
-       <para>
-        This allows a central file where global <application>psql</> startup commands can
-        be stored.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve parsing of PL/pgSQL FOR loops (Tom)
+      </para>
+      <para>
+       Parsing is now driven by presence of <literal>".."</> rather than
+       data type of <option>FOR</> variable. This makes no difference for
+       correct functions, but should result in more understandable error
+       messages when a mistake is made.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Have <application>psql</> <command>\d+</> indicate if the table
-        has an <type>OID</> column (Neil)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        On Windows, use binary mode in <application>psql</> when reading files so control-Z
-        is not seen as end-of-file
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       In PL/Tcl, SPI commands are now run in subtransactions.  If an error
+       occurs, the subtransaction is cleaned up and the error is reported
+       as an ordinary Tcl error, which can be trapped with <literal>catch</>.
+       Formerly, it was not possible to catch such errors.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Have <command>\dn+</> show permissions and description for schemas (Dennis
-        Bj&ouml;rklund)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Accept <command>ELSEIF</> in PL/pgSQL (Neil)
+      </para>
+      <para>
+       Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
+       are accustomed to spelling this keyword <command>ELSEIF</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Allow boolean settings to be set using upper or lower case (Michael Paesold)
-       </para>
-      </listitem>
 
-     </itemizedlist>
-    </sect3>
+   <sect3>
+    <title><application>psql</> Changes</title>
+    <itemizedlist>
 
+     <listitem>
+      <para>
+       Improve <application>psql</> information display about database
+       objects (Christopher)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title><application>pg_dump</> Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Allow <application>psql</> to display group membership in
+       <command>\du</> and <command>\dg</> (Markus Bertheau)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Use dependency information to improve the reliability of
-        <application>pg_dump</> (Tom)
-       </para>
-       <para>
-        This should solve the longstanding problems with related objects
-        sometimes being dumped in the wrong order.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Prevent <application>psql</> <command>\dn</command> from showing
+       temporary schemas (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
-       </para>
-       <para>
-        This should make it easier to identify changes between
-        dump files.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <application>psql</> to handle tilde user expansion for file
+       names (Zach Irmen)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
-       </para>
-       <para>
-        This makes <application>pg_restore</>'s behavior similar to the
-        results of feeding a <application>pg_dump</> output script to
-        <application>psql</>. In most cases, ignoring errors and plowing
-        ahead is the most useful thing to do. Also added was a pg_restore
-        option to give the old behavior of exiting on an error.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <application>psql</> to display fancy prompts, including
+       color, via <application>readline</> (Reece Hart, Chet Ramey)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <application>pg_restore</> <option>-l</> display now includes
-        objects' schema names
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
+       fully (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New begin/end markers in <application>pg_dump</> text output (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Show the location of syntax errors (Fabien Coelho, Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add start/stop times for
-        <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
-        (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <command>CLUSTER</command> information to <application>psql</>
+       <command>\d</> display
+       (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow most <application>pg_dump</> options in
-        <application>pg_dumpall</> (Christopher)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change <application>psql</> <command>\copy stdin/stdout</> to read
+       from command input/output (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Have <application>pg_dump</> use <command>ALTER OWNER</> rather
-        than <command>SET SESSION AUTHORIZATION</> by default
-        (Christopher)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>pstdin</>/<option>pstdout</> to read from
+       <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
+       Feit)
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
+       (Bruce)
+      </para>
+      <para>
+       This allows a central file where global <application>psql</> startup commands can
+       be stored.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Have <application>psql</> <command>\d+</> indicate if the table
+       has an <type>OID</> column (Neil)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>libpq Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       On Windows, use binary mode in <application>psql</> when reading files so control-Z
+       is not seen as end-of-file
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Have <command>\dn+</> show permissions and description for schemas (Dennis
+       Bj&ouml;rklund)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <function>PQmbdsplen()</> which returns the display length
-        of a character (Tatsuo)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add thread locking to <application>SSL</> and
-        <application>Kerberos</> connections (Manfred Spraul)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow boolean settings to be set using upper or lower case (Michael Paesold)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
-        <function>PQoidStatus()</> to work on <command>EXECUTE</command>
-        commands (Neil)
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add <function>PQserverVersion()</> to provide more convenient
-        access to the server version number (Greg Sabino Mullane)
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Add <function>PQprepare/PQsendPrepared()</> functions to support
-        preparing statements without necessarily specifying the data types
-        of their parameters (Abhijit Menon-Sen)
-       </para>
-      </listitem>
+   <sect3>
+    <title><application>pg_dump</> Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Use dependency information to improve the reliability of
+       <application>pg_dump</> (Tom)
+      </para>
+      <para>
+       This should solve the longstanding problems with related objects
+       sometimes being dumped in the wrong order.
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
+      </para>
+      <para>
+       This should make it easier to identify changes between
+       dump files.
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
+      </para>
+      <para>
+       This makes <application>pg_restore</>'s behavior similar to the
+       results of feeding a <application>pg_dump</> output script to
+       <application>psql</>. In most cases, ignoring errors and plowing
+       ahead is the most useful thing to do. Also added was a pg_restore
+       option to give the old behavior of exiting on an error.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Source Code Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       <application>pg_restore</> <option>-l</> display now includes
+       objects' schema names
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New begin/end markers in <application>pg_dump</> text output (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Shell script commands converted to C versions for Windows support (Andrew)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add start/stop times for
+       <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
+       (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Create an extension makefile framework (Fabien Coelho, Peter)
-       </para>
-       <para>
-        This simplifies the task of building extensions outside the original
-        source tree.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow most <application>pg_dump</> options in
+       <application>pg_dumpall</> (Christopher)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Support relocatable installations (Bruce)
-       </para>
-       <para>
-        Directory paths for installed files (such as the
-        <filename>/share</> directory) are now computed relative to the
-        actual location of the executables, so that an installation tree
-        can be moved to another place without reconfiguring and
-        rebuilding.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Have <application>pg_dump</> use <command>ALTER OWNER</> rather
+       than <command>SET SESSION AUTHORIZATION</> by default
+       (Christopher)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Use <option>--with-docdir</> to choose installation location of documentation; also
-        allow <option>--infodir</> (Peter)
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add <option>--without-docdir</> to prevent installation of documentation (Peter)
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Upgrade to <application>DocBook</> V4.2 SGML (Peter)
-       </para>
-      </listitem>
+   <sect3>
+    <title>libpq Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
-       </para>
-       <para>
-        This was done to make it easier for organizations to manage their
-        own copies of the <productname>PostgreSQL</productname>
-        <application>CVS</> repository. File version stamps from the master
-        repository will not get munged by checking into or out of a copied
-        repository.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Clarify locking code (Manfred Koizar)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>PQmbdsplen()</> which returns the display length
+       of a character (Tatsuo)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add thread locking to <application>SSL</> and
+       <application>Kerberos</> connections (Manfred Spraul)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Buffer manager cleanup (Neil)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
+       <function>PQoidStatus()</> to work on <command>EXECUTE</command>
+       commands (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Decouple platform tests from CPU spinlock code (Bruce, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>PQserverVersion()</> to provide more convenient
+       access to the server version number (Greg Sabino Mullane)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add inlined test-and-set code on PA-RISC for <application>gcc</>
-        (ViSolve, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <function>PQprepare/PQsendPrepared()</> functions to support
+       preparing statements without necessarily specifying the data types
+       of their parameters (Abhijit Menon-Sen)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve i386 spinlock code (Manfred Spraul)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Clean up spinlock assembly code to avoid warnings from newer
-        <application>gcc</> releases (Tom)
-       </para>
-      </listitem>
+    </itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Remove JDBC from source tree; now a separate project
-       </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Remove the libpgtcl client interface; now a separate project
-       </para>
-      </listitem>
+   <sect3>
+    <title>Source Code Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        More accurately estimate memory and file descriptor usage (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improvements to the Mac OS X startup scripts (Ray A.)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Shell script commands converted to C versions for Windows support (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <function>fsync()</> test program (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Create an extension makefile framework (Fabien Coelho, Peter)
+      </para>
+      <para>
+       This simplifies the task of building extensions outside the original
+       source tree.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Major documentation improvements (Neil, Peter)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Support relocatable installations (Bruce)
+      </para>
+      <para>
+       Directory paths for installed files (such as the
+       <filename>/share</> directory) are now computed relative to the
+       actual location of the executables, so that an installation tree
+       can be moved to another place without reconfiguring and
+       rebuilding.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Remove <application>pg_encoding</application>; not needed
-        anymore
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Use <option>--with-docdir</> to choose installation location of documentation; also
+       allow <option>--infodir</> (Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Remove <application>pg_id</application>; not needed anymore
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <option>--without-docdir</> to prevent installation of documentation (Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Remove <application>initlocation</application>; not needed
-        anymore
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Upgrade to <application>DocBook</> V4.2 SGML (Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Auto-detect thread flags (no more manual testing) (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
+      </para>
+      <para>
+       This was done to make it easier for organizations to manage their
+       own copies of the <productname>PostgreSQL</productname>
+       <application>CVS</> repository. File version stamps from the master
+       repository will not get munged by checking into or out of a copied
+       repository.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Use Olson's public domain <application>timezone</> library (Magnus)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Clarify locking code (Manfred Koizar)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        With threading enabled, use thread flags on Unixware for
-        backend executables too (Bruce)
-       </para>
-       <para>
-        Unixware cannot mix threaded and nonthreaded object files in the
-        same executable, so everything must be compiled as threaded.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Buffer manager cleanup (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <application>psql</> now uses a <application>flex</>-generated
-        lexical analyzer to process command strings
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Decouple platform tests from CPU spinlock code (Bruce, Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Reimplement the linked list data structure used throughout the
-        backend (Neil)
-       </para>
-       <para>
-        This improves performance by allowing list append and length
-        operations to be more efficient.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add inlined test-and-set code on PA-RISC for <application>gcc</>
+       (ViSolve, Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow dynamically loaded modules to create their own server configuration
-        parameters (Thomas Hallgren)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve i386 spinlock code (Manfred Spraul)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New Brazilian version of FAQ (Euler Taveira de Oliveira)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Clean up spinlock assembly code to avoid warnings from newer
+       <application>gcc</> releases (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add French FAQ (Guillaume Lelarge)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove JDBC from source tree; now a separate project
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <application>pgevent</> for Windows logging
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove the libpgtcl client interface; now a separate project
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make libpq and ECPG build as proper shared libraries on OS X (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       More accurately estimate memory and file descriptor usage (Tom)
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Improvements to the Mac OS X startup scripts (Ray A.)
+      </para>
+     </listitem>
 
+     <listitem>
+      <para>
+       New <function>fsync()</> test program (Bruce)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Contrib Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Major documentation improvements (Neil, Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Overhaul of <filename>contrib/dblink</> (Joe)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <application>pg_encoding</application>; not needed
+       anymore
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <filename>contrib/dbmirror</> improvements (Steven Singer)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <application>pg_id</application>; not needed anymore
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <filename>contrib/xml2</> (John Gray, Torchbox)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <application>initlocation</application>; not needed
+       anymore
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Updated <filename>contrib/mysql</filename>
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Auto-detect thread flags (no more manual testing) (Bruce)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New version of <filename>contrib/btree_gist</> (Teodor)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Use Olson's public domain <application>timezone</> library (Magnus)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        New <filename>contrib/trgm</>, trigram matching for
-        <productname>PostgreSQL</productname> (Teodor)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       With threading enabled, use thread flags on Unixware for
+       backend executables too (Bruce)
+      </para>
+      <para>
+       Unixware cannot mix threaded and nonthreaded object files in the
+       same executable, so everything must be compiled as threaded.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Many <filename>contrib/tsearch2</> improvements (Teodor)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       <application>psql</> now uses a <application>flex</>-generated
+       lexical analyzer to process command strings
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Reimplement the linked list data structure used throughout the
+       backend (Neil)
+      </para>
+      <para>
+       This improves performance by allowing list append and length
+       operations to be more efficient.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow dynamically loaded modules to create their own server configuration
+       parameters (Thomas Hallgren)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New Brazilian version of FAQ (Euler Taveira de Oliveira)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
-        subprocess
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add French FAQ (Guillaume Lelarge)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Removed <filename>contrib/rserv</>: obsoleted by various separate projects
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       New <application>pgevent</> for Windows logging
+      </para>
+     </listitem>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Make libpq and ECPG build as proper shared libraries on OS X (Tom)
+      </para>
+     </listitem>
 
-   </sect2>
-  </sect1>
+    </itemizedlist>
+   </sect3>
 
-  <sect1 id="release-7-4-18">
-   <title>Release 7.4.18</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-09-17</simpara>
-   </note>
+   <sect3>
+    <title>Contrib Changes</title>
+    <itemizedlist>
 
-   <para>
-    This release contains fixes from 7.4.17.
-   </para>
+     <listitem>
+      <para>
+       Overhaul of <filename>contrib/dblink</> (Joe)
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Migration to version 7.4.18</title>
+     <listitem>
+      <para>
+       <filename>contrib/dbmirror</> improvements (Steven Singer)
+      </para>
+     </listitem>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
+     <listitem>
+      <para>
+       New <filename>contrib/xml2</> (John Gray, Torchbox)
+      </para>
+     </listitem>
 
-   </sect2>
+     <listitem>
+      <para>
+       Updated <filename>contrib/mysql</filename>
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Changes</title>
+     <listitem>
+      <para>
+       New version of <filename>contrib/btree_gist</> (Teodor)
+      </para>
+     </listitem>
 
-    <itemizedlist>
+     <listitem>
+      <para>
+       New <filename>contrib/trgm</>, trigram matching for
+       <productname>PostgreSQL</productname> (Teodor)
+      </para>
+     </listitem>
 
      <listitem>
       <para>
-       Prevent index corruption when a transaction inserts rows and
-       then aborts close to the end of a concurrent <command>VACUUM</>
-       on the same table (Tom)
+       Many <filename>contrib/tsearch2</> improvements (Teodor)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+       Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix excessive logging of <acronym>SSL</> error messages (Tom)
+       Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix crash when <varname>log_min_error_statement</> logging runs out
-       of memory (Tom)
+       Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Prevent <command>CLUSTER</> from failing
-       due to attempting to process temporary tables of other sessions (Alvaro)
+       Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
+       subprocess
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Require non-superusers who use <filename>/contrib/dblink</> to use only
-       password authentication, as a security measure (Joe)
+       Removed <filename>contrib/rserv</>: obsoleted by various separate projects
       </para>
      </listitem>
 
     </itemizedlist>
+   </sect3>
 
-   </sect2>
-  </sect1>
-  <sect1 id="release-7-4-17">
-   <title>Release 7.4.17</title>
+  </sect2>
+ </sect1>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-04-23</simpara>
-   </note>
+ <sect1 id="release-7-4-19">
+  <title>Release 7.4.19</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.18,
+   including fixes for significant security issues.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.19</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent functions in indexes from executing with the privileges of
+      the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+     </para>
+
+     <para>
+      Functions used in index expressions and partial-index
+      predicates are evaluated whenever a new table entry is made.  It has
+      long been understood that this poses a risk of trojan-horse code
+      execution if one modifies a table owned by an untrustworthy user.
+      (Note that triggers, defaults, check constraints, etc. pose the
+      same type of risk.)  But functions in indexes pose extra danger
+      because they will be executed by routine maintenance operations
+      such as <command>VACUUM FULL</>, which are commonly performed
+      automatically under a superuser account.  For example, a nefarious user
+      can execute code with superuser privileges by setting up a
+      trojan-horse index definition and waiting for the next routine vacuum.
+      The fix arranges for standard maintenance operations
+      (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+      and <command>CLUSTER</>) to execute as the table owner rather than
+      the calling user, using the same privilege-switching mechanism already
+      used for <literal>SECURITY DEFINER</> functions.  To prevent bypassing
+      this security measure, execution of <command>SET SESSION
+      AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+      <literal>SECURITY DEFINER</> context.  (CVE-2007-6600)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+     </para>
+
+     <para>
+      Suitably crafted regular-expression patterns could cause crashes,
+      infinite or near-infinite looping, and/or massive memory consumption,
+      all of which pose denial-of-service hazards for applications that
+      accept regex search patterns from untrustworthy sources.
+      (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
+
+     <para>
+      The fix that appeared for this in 7.4.18 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>ecpg</> parser fixes (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+      NULL rowid as a category in its own right, rather than crashing (Joe)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require a specific version of <productname>Autoconf</> to be used
+      when re-generating the <command>configure</> script (Peter)
+     </para>
+
+     <para>
+      This affects developers and packagers only.  The change was made
+      to prevent accidental use of untested combinations of
+      <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+      You can remove the version check if you really want to use a
+      different <productname>Autoconf</> version, but it's
+      your responsibility whether the result works or not.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-18">
+  <title>Release 7.4.18</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
+
+  <para>
+   This release contains fixes from 7.4.17.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.18</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent index corruption when a transaction inserts rows and
+      then aborts close to the end of a concurrent <command>VACUUM</>
+      on the same table (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix crash when <varname>log_min_error_statement</> logging runs out
+      of memory (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Prevent <command>CLUSTER</> from failing
+      due to attempting to process temporary tables of other sessions (Alvaro)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-17">
+  <title>Release 7.4.17</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-04-23</simpara>
+  </note>
+
+  <para>
+   This release contains fixes from 7.4.16,
+   including a security fix.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.17</title>
 
    <para>
-    This release contains fixes from 7.4.16,
-    including a security fix.
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
    </para>
 
-   <sect2>
-    <title>Migration to version 7.4.17</title>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
 
+    <listitem>
     <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
+     Support explicit placement of the temporary-table schema within
+     <varname>search_path</>, and disable searching it for functions
+     and operators (Tom)
     </para>
+    <para>
+     This is needed to allow a security-definer function to set a
+     truly secure value of <varname>search_path</>.  Without it,
+     an unprivileged SQL user can use temporary objects to execute code
+     with the privileges of the security-definer function (CVE-2007-2138).
+     See <command>CREATE FUNCTION</> for more information.
+    </para>
+    </listitem>
 
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+    <para>
+     <filename>/contrib/tsearch2</> crash fixes (Teodor)
+    </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+    <para>
+     Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+     <command>UPDATE</> chains (Tom, Pavan Deolasee)
+    </para>
+    </listitem>
 
-     <listitem>
-     <para>
-      Support explicit placement of the temporary-table schema within
-      <varname>search_path</>, and disable searching it for functions
-      and operators (Tom)
-     </para>
-     <para>
-      This is needed to allow a security-definer function to set a
-      truly secure value of <varname>search_path</>.  Without it,
-      an unprivileged SQL user can use temporary objects to execute code
-      with the privileges of the security-definer function (CVE-2007-2138).
-      See <command>CREATE FUNCTION</> for more information.
-     </para>
-     </listitem>
+    <listitem>
+    <para>
+     Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
+     (Tom)
+    </para>
+    </listitem>
 
-     <listitem>
-     <para>
-      <filename>/contrib/tsearch2</> crash fixes (Teodor)
-     </para>
-     </listitem>
+   </itemizedlist>
 
-     <listitem>
-     <para>
-      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
-      <command>UPDATE</> chains (Tom, Pavan Deolasee)
-     </para>
-     </listitem>
+  </sect2>
+ </sect1>
 
-     <listitem>
-     <para>
-      Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
-      (Tom)
-     </para>
-     </listitem>
+ <sect1 id="release-7-4-16">
+  <title>Release 7.4.16</title>
 
-    </itemizedlist>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
 
-   </sect2>
-  </sect1>
-  <sect1 id="release-7-4-16">
-   <title>Release 7.4.16</title>
+  <para>
+   This release contains a variety of fixes from 7.4.15, including
+   a security fix.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-05</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 7.4.16</title>
 
    <para>
-    This release contains a variety of fixes from 7.4.15, including
-    a security fix.
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
    </para>
 
-   <sect2>
-    <title>Migration to version 7.4.16</title>
+  </sect2>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
+  <sect2>
+   <title>Changes</title>
 
-   </sect2>
+   <itemizedlist>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+    <para>
+     Remove security vulnerability that allowed connected users
+     to read backend memory (Tom)
+    </para>
+    <para>
+     The vulnerability involves suppressing the normal check that a SQL
+     function returns the data type it's declared to, or changing the
+     data type of a table column used in a SQL function (CVE-2007-0555).
+     This error can easily be exploited to cause a backend crash, and in
+     principle might be used to read database content that the user
+     should not be able to access.
+    </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+    <para>
+     Fix rare bug wherein btree index page splits could fail
+     due to choosing an infeasible split point (Heikki Linnakangas)
+    </para>
+    </listitem>
 
-     <listitem>
-     <para>
-      Remove security vulnerability that allowed connected users
-      to read backend memory (Tom)
-     </para>
-     <para>
-      The vulnerability involves suppressing the normal check that a SQL
-      function returns the data type it's declared to, or changing the
-      data type of a table column used in a SQL function (CVE-2007-0555).
-      This error can easily be exploited to cause a backend crash, and in
-      principle might be used to read database content that the user
-      should not be able to access.
-     </para>
-     </listitem>
+    <listitem>
+    <para>
+     Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+    </para>
+    </listitem>
 
-     <listitem>
-     <para>
-      Fix rare bug wherein btree index page splits could fail
-      due to choosing an infeasible split point (Heikki Linnakangas)
-     </para>
-     </listitem>
+    <listitem>
+    <para>
+     Tighten security of multi-byte character processing for UTF8 sequences
+     over three bytes long (Tom)
+    </para>
+    </listitem>
 
-     <listitem>
-     <para>
-      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
-     </para>
-     </listitem>
+   </itemizedlist>
 
-     <listitem>
-     <para>
-      Tighten security of multi-byte character processing for UTF8 sequences
-      over three bytes long (Tom)
-     </para>
-     </listitem>
+  </sect2>
+ </sect1>
 
-    </itemizedlist>
+ <sect1 id="release-7-4-15">
+  <title>Release 7.4.15</title>
 
-   </sect2>
-  </sect1>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
 
-  <sect1 id="release-7-4-15">
-   <title>Release 7.4.15</title>
+  <para>
+   This release contains a variety of fixes from 7.4.14.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-01-08</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 7.4.15</title>
 
    <para>
-    This release contains a variety of fixes from 7.4.14.
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
    </para>
 
-   <sect2>
-    <title>Migration to version 7.4.15</title>
+  </sect2>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
+  <sect2>
+   <title>Changes</title>
 
-   </sect2>
+   <itemizedlist>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+     <para>
+      Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+     </para>
 
-    <itemizedlist>
+     <para>
+      This fixes a problem with starting the statistics collector,
+      among other things.
+     </para>
+    </listitem>
 
      <listitem>
       <para>
-       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
       </para>
+     </listitem>
 
+     <listitem>
       <para>
-       This fixes a problem with starting the statistics collector,
-       among other things.
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
       </para>
      </listitem>
 
-      <listitem>
-       <para>
-        Fix <quote>failed to re-find parent key</> errors in
-        <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+      empty elements (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Fix bugs affecting multi-gigabyte hash indexes (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <function>to_number()</> and <function>to_char(numeric)</>
+      are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+      new <application>initdb</> installs (Tom)
+     </para>
 
-     <listitem>
-      <para>
-       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
-       empty elements (Tom)
-      </para>
-     </listitem>
+     <para>
+      This is because <varname>lc_numeric</> can potentially
+      change the output of these functions.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       <function>to_number()</> and <function>to_char(numeric)</>
-       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
-       new <application>initdb</> installs (Tom)
-      </para>
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
 
-      <para>
-       This is because <varname>lc_numeric</> can potentially
-       change the output of these functions.
-      </para>
-     </listitem>
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve index usage of regular expressions that use parentheses (Tom)
-      </para>
+   </itemizedlist>
 
-      <para>
-       This improves <application>psql</> <literal>\d</> performance also.
-      </para>
-     </listitem>
+  </sect2>
+ </sect1>
 
-    </itemizedlist>
+ <sect1 id="release-7-4-14">
+  <title>Release 7.4.14</title>
 
-   </sect2>
-  </sect1>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-10-16</simpara>
+  </note>
 
-  <sect1 id="release-7-4-14">
-   <title>Release 7.4.14</title>
+  <para>
+   This release contains a variety of fixes from 7.4.13.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-10-16</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 7.4.14</title>
 
    <para>
-    This release contains a variety of fixes from 7.4.13.
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
    </para>
 
-   <sect2>
-    <title>Migration to version 7.4.14</title>
-
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
-
-   </sect2>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fix core dump when an untyped literal is taken as
 ANYARRAY</para></listitem>
 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
 matches for the separator string</para>
+ matches for the separator string</para>
 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
 </para></listitem>
 <listitem><para>Fix corner cases in pattern matching for
 <application>psql</>'s <literal>\d</> commands</para></listitem>
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
 (Teodor)</para></listitem>
+ (Teodor)</para></listitem>
 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
 <listitem><para>Adjust regression tests for recent changes in US DST laws
 </para> </listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-13">
-   <title>Release 7.4.13</title>
+ <sect1 id="release-7-4-13">
+  <title>Release 7.4.13</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-05-23</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-05-23</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.12,
-    including patches for extremely serious security issues.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.12,
+   including patches for extremely serious security issues.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.13</title>
+  <sect2>
+   <title>Migration to Version 7.4.13</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
 
-    <para>
-     Full security against the SQL-injection attacks described in
-     CVE-2006-2313 and CVE-2006-2314 might require changes in application
-     code.  If you have applications that embed untrustworthy strings
-     into SQL commands, you should examine them as soon as possible to
-     ensure that they are using recommended escaping techniques.  In
-     most cases, applications should be using subroutines provided by
-     libraries or drivers (such as <application>libpq</>'s
-     <function>PQescapeStringConn()</>) to perform string escaping,
-     rather than relying on <foreignphrase>ad hoc</> code to do it.
-    </para>
-   </sect2>
+   <para>
+    Full security against the SQL-injection attacks described in
+    CVE-2006-2313 and CVE-2006-2314 might require changes in application
+    code.  If you have applications that embed untrustworthy strings
+    into SQL commands, you should examine them as soon as possible to
+    ensure that they are using recommended escaping techniques.  In
+    most cases, applications should be using subroutines provided by
+    libraries or drivers (such as <application>libpq</>'s
+    <function>PQescapeStringConn()</>) to perform string escaping,
+    rather than relying on <foreignphrase>ad hoc</> code to do it.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Change the server to reject invalidly-encoded multibyte
@@ -4094,33 +4460,33 @@ Fuhr)</para></listitem>
 <listitem><para>Fix various minor memory leaks</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-12">
-   <title>Release 7.4.12</title>
+ <sect1 id="release-7-4-12">
+  <title>Release 7.4.12</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-02-14</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-02-14</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.11.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.11.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.12</title>
+  <sect2>
+   <title>Migration to Version 7.4.12</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.11, see the release
-     notes for 7.4.11.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -4155,36 +4521,36 @@ and <function>isinf</> during configure (Tom)</para></listitem>
 
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-11">
-   <title>Release 7.4.11</title>
+ <sect1 id="release-7-4-11">
+  <title>Release 7.4.11</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-01-09</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-01-09</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.10.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.11</title>
 
    <para>
-    This release contains a variety of fixes from 7.4.10.
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+    Also, you might need to <command>REINDEX</> indexes on textual
+    columns after updating, if you are affected by the locale or
+    <application>plperl</> issues described below.
    </para>
+  </sect2>
 
-   <sect2>
-    <title>Migration to version 7.4.11</title>
-
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.8, see the release
-     notes for 7.4.8.
-     Also, you might need to <command>REINDEX</> indexes on textual
-     columns after updating, if you are affected by the locale or
-     <application>plperl</> issues described below.
-    </para>
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -4220,33 +4586,33 @@ what's actually returned by the query (Joe)</para></listitem>
 
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-10">
-   <title>Release 7.4.10</title>
+ <sect1 id="release-7-4-10">
+  <title>Release 7.4.10</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-12-12</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-12-12</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.9.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.9.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.10</title>
+  <sect2>
+   <title>Migration to Version 7.4.10</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.8, see the release
-     notes for 7.4.8.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 
@@ -4271,33 +4637,33 @@ only supported with merge-joinable join conditions</>.</para></listitem>
 table has been dropped</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-9">
-   <title>Release 7.4.9</title>
+ <sect1 id="release-7-4-9">
+  <title>Release 7.4.9</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-10-04</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-10-04</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.8.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.8.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.9</title>
+  <sect2>
+   <title>Migration to Version 7.4.9</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     if you are upgrading from a version earlier than 7.4.8, see the release
-     notes for 7.4.8.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
@@ -4338,119 +4704,119 @@ the variable is of pass-by-reference type</para></listitem>
 code</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-8">
-   <title>Release 7.4.8</title>
+ <sect1 id="release-7-4-8">
+  <title>Release 7.4.8</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-05-09</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-05-09</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.7, including several
-    security-related issues.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.7, including several
+   security-related issues.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.8</title>
+  <sect2>
+   <title>Migration to Version 7.4.8</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     it is one possible way of handling two significant security problems
-     that have been found in the initial contents of 7.4.X system
-     catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
-     automatically correct these problems.
-    </para>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    it is one possible way of handling two significant security problems
+    that have been found in the initial contents of 7.4.X system
+    catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
+    automatically correct these problems.
+   </para>
 
-    <para>
-     The larger security problem is that the built-in character set encoding
-     conversion functions can be invoked from SQL commands by unprivileged
-     users, but the functions were not designed for such use and are not
-     secure against malicious choices of arguments.  The fix involves changing
-     the declared parameter list of these functions so that they can no longer
-     be invoked from SQL commands.  (This does not affect their normal use
-     by the encoding conversion machinery.)
-    </para>
+   <para>
+    The larger security problem is that the built-in character set encoding
+    conversion functions can be invoked from SQL commands by unprivileged
+    users, but the functions were not designed for such use and are not
+    secure against malicious choices of arguments.  The fix involves changing
+    the declared parameter list of these functions so that they can no longer
+    be invoked from SQL commands.  (This does not affect their normal use
+    by the encoding conversion machinery.)
+   </para>
 
-    <para>
-     The lesser problem is that the <filename>contrib/tsearch2</> module
-     creates several functions that are misdeclared to return
-     <type>internal</> when they do not accept <type>internal</> arguments.
-     This breaks type safety for all functions using <type>internal</>
-     arguments.
-    </para>
+   <para>
+    The lesser problem is that the <filename>contrib/tsearch2</> module
+    creates several functions that are misdeclared to return
+    <type>internal</> when they do not accept <type>internal</> arguments.
+    This breaks type safety for all functions using <type>internal</>
+    arguments.
+   </para>
 
-    <para>
-     It is strongly recommended that all installations repair these errors,
-     either by initdb or by following the manual repair procedures given
-     below.  The errors at least allow unprivileged database users to crash
-     their server process, and might allow unprivileged users to gain the
-     privileges of a database superuser.
-    </para>
+   <para>
+    It is strongly recommended that all installations repair these errors,
+    either by initdb or by following the manual repair procedures given
+    below.  The errors at least allow unprivileged database users to crash
+    their server process, and might allow unprivileged users to gain the
+    privileges of a database superuser.
+   </para>
 
-    <para>
-     If you wish not to do an initdb, perform the following procedures instead.
-     As the database superuser, do:
+   <para>
+    If you wish not to do an initdb, perform the following procedures instead.
+    As the database superuser, do:
 
 <programlisting>
 BEGIN;
 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
 WHERE pronamespace = 11 AND pronargs = 5
-      AND proargtypes[2] = 'cstring'::regtype;
+     AND proargtypes[2] = 'cstring'::regtype;
 -- The command should report having updated 90 rows;
 -- if not, rollback and investigate instead of committing!
 COMMIT;
 </programlisting>
 
-     Next, if you have installed <filename>contrib/tsearch2</>, do:
+    Next, if you have installed <filename>contrib/tsearch2</>, do:
 
 <programlisting>
 BEGIN;
 UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
 WHERE oid IN (
-    'dex_init(text)'::regprocedure,
-    'snb_en_init(text)'::regprocedure,
-    'snb_ru_init(text)'::regprocedure,
-    'spell_init(text)'::regprocedure,
-    'syn_init(text)'::regprocedure
+   'dex_init(text)'::regprocedure,
+   'snb_en_init(text)'::regprocedure,
+   'snb_ru_init(text)'::regprocedure,
+   'spell_init(text)'::regprocedure,
+   'syn_init(text)'::regprocedure
 );
 -- The command should report having updated 5 rows;
 -- if not, rollback and investigate instead of committing!
 COMMIT;
 </programlisting>
 
-     If this command fails with a message like <quote>function
-     "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
-     is not installed in this database, or you already did the update.
-    </para>
+    If this command fails with a message like <quote>function
+    "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
+    is not installed in this database, or you already did the update.
+   </para>
 
-    <para>
-     The above procedures must be carried out in <emphasis>each</> database
-     of an installation, including <literal>template1</>, and ideally
-     including <literal>template0</> as well.  If you do not fix the
-     template databases then any subsequently created databases will contain
-     the same errors.  <literal>template1</> can be fixed in the same way
-     as any other database, but fixing <literal>template0</> requires
-     additional steps.  First, from any database issue:
+   <para>
+    The above procedures must be carried out in <emphasis>each</> database
+    of an installation, including <literal>template1</>, and ideally
+    including <literal>template0</> as well.  If you do not fix the
+    template databases then any subsequently created databases will contain
+    the same errors.  <literal>template1</> can be fixed in the same way
+    as any other database, but fixing <literal>template0</> requires
+    additional steps.  First, from any database issue:
 <programlisting>
 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
 </programlisting>
-      Next connect to <literal>template0</> and perform the above repair
-      procedures.  Finally, do:
+     Next connect to <literal>template0</> and perform the above repair
+     procedures.  Finally, do:
 <programlisting>
 -- re-freeze template0:
 VACUUM FREEZE;
 -- and protect it against future alterations:
 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
 </programlisting>
-    </para>
-   </sect2>
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Change encoding function signature to prevent
@@ -4487,10 +4853,10 @@ This error only occurred when the
 <listitem><para>Ensure operations done during backend shutdown are counted by
 statistics collector</para>
 <para>
- This is expected to resolve reports of <application>pg_autovacuum</>
- not vacuuming the system catalogs often enough &mdash; it was not being
- told about catalog deletions caused by temporary table removal during
- backend exit.
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough &mdash; it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
 </para></listitem>
 <listitem><para>Additional buffer overrun checks in plpgsql
 (Neil)</para></listitem>
@@ -4520,32 +4886,32 @@ holder of the lock released it within a very narrow window.
 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-7">
-   <title>Release 7.4.7</title>
+ <sect1 id="release-7-4-7">
+  <title>Release 7.4.7</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-01-31</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-01-31</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.6, including several
-    security-related issues.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.6, including several
+   security-related issues.
+  </para>
 
-   <sect2>
-    <title>Migration to version 7.4.7</title>
+  <sect2>
+   <title>Migration to Version 7.4.7</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
@@ -4578,32 +4944,32 @@ datestyles</para></listitem>
 GMT</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-6">
-   <title>Release 7.4.6</title>
+ <sect1 id="release-7-4-6">
+  <title>Release 7.4.6</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2004-10-22</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2004-10-22</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.5.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.5.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.6</title>
+  <sect2>
+   <title>Migration to Version 7.4.6</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Repair possible failure to update hint bits on disk</para>
@@ -4648,32 +5014,32 @@ This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
 ECPG prepare statement</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-5">
-   <title>Release 7.4.5</title>
+ <sect1 id="release-7-4-5">
+  <title>Release 7.4.5</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2004-08-18</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2004-08-18</simpara>
+  </note>
 
-   <para>
-    This release contains one serious bug fix over 7.4.4.
-   </para>
+  <para>
+   This release contains one serious bug fix over 7.4.4.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.5</title>
+  <sect2>
+   <title>Migration to Version 7.4.5</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
@@ -4684,32 +5050,32 @@ still worth a re-release.  The bug does not exist in pre-7.4 releases.
 </para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-4">
-   <title>Release 7.4.4</title>
+ <sect1 id="release-7-4-4">
+  <title>Release 7.4.4</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2004-08-16</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2004-08-16</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.3.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.3.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.4</title>
+  <sect2>
+   <title>Migration to Version 7.4.4</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Prevent possible loss of committed transactions during crash</para>
@@ -4734,32 +5100,32 @@ aggregate plan</para></listitem>
 <listitem><para>Translation updates (various contributors)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-3">
-   <title>Release 7.4.3</title>
+ <sect1 id="release-7-4-3">
+  <title>Release 7.4.3</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2004-06-14</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2004-06-14</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.2.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.2.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.3</title>
+  <sect2>
+   <title>Migration to Version 7.4.3</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.
-    </para>
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
@@ -4784,64 +5150,64 @@ names from outer query levels.
 <listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
 <listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
 <para>
 This fixes a difficult-to-exploit security hole.
+ This fixes a difficult-to-exploit security hole.
 </para></listitem>
 <listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-2">
-   <title>Release 7.4.2</title>
+ <sect1 id="release-7-4-2">
+  <title>Release 7.4.2</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2004-03-08</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2004-03-08</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.1.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.1.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.2</title>
+  <sect2>
+   <title>Migration to Version 7.4.2</title>
 
-    <para>
-     A dump/restore is not required for those running 7.4.X.  However,
-     it might be advisable as the easiest method of incorporating fixes for
-     two errors that have been found in the initial contents of 7.4.X system
-     catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
-     automatically correct these problems.
-    </para>
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    it might be advisable as the easiest method of incorporating fixes for
+    two errors that have been found in the initial contents of 7.4.X system
+    catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
+    automatically correct these problems.
+   </para>
 
-    <para>
-     The more severe of the two errors is that data type <type>anyarray</>
-     has the wrong alignment label; this is a problem because the
-     <structname>pg_statistic</> system catalog uses <type>anyarray</>
-     columns.  The mislabeling can cause planner misestimations and even
-     crashes when planning queries that involve <literal>WHERE</> clauses on
-     double-aligned columns (such as <type>float8</> and <type>timestamp</>).
-     It is strongly recommended that all installations repair this error,
-     either by initdb or by following the manual repair procedure given
-     below.
-    </para>
+   <para>
+    The more severe of the two errors is that data type <type>anyarray</>
+    has the wrong alignment label; this is a problem because the
+    <structname>pg_statistic</> system catalog uses <type>anyarray</>
+    columns.  The mislabeling can cause planner misestimations and even
+    crashes when planning queries that involve <literal>WHERE</> clauses on
+    double-aligned columns (such as <type>float8</> and <type>timestamp</>).
+    It is strongly recommended that all installations repair this error,
+    either by initdb or by following the manual repair procedure given
+    below.
+   </para>
 
-    <para>
-     The lesser error is that the system view <structname>pg_settings</>
-     ought to be marked as having public update access, to allow
-     <literal>UPDATE pg_settings</> to be used as a substitute for
-     <command>SET</>.  This can also be fixed either by initdb or manually,
-     but it is not necessary to fix unless you want to use <literal>UPDATE
-     pg_settings</>.
-    </para>
+   <para>
+    The lesser error is that the system view <structname>pg_settings</>
+    ought to be marked as having public update access, to allow
+    <literal>UPDATE pg_settings</> to be used as a substitute for
+    <command>SET</>.  This can also be fixed either by initdb or manually,
+    but it is not necessary to fix unless you want to use <literal>UPDATE
+    pg_settings</>.
+   </para>
 
-    <para>
-     If you wish not to do an initdb, the following procedure will work
-     for fixing <structname>pg_statistic</>.  As the database superuser,
-     do:
+   <para>
+    If you wish not to do an initdb, the following procedure will work
+    for fixing <structname>pg_statistic</>.  As the database superuser,
+    do:
 
 <programlisting>
 -- clear out old data in pg_statistic:
@@ -4858,46 +5224,46 @@ UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
 ANALYZE;
 </programlisting>
 
-     This can be done in a live database, but beware that all backends
-     running in the altered database must be restarted before it is safe to
-     repopulate <structname>pg_statistic</>.
-    </para>
+    This can be done in a live database, but beware that all backends
+    running in the altered database must be restarted before it is safe to
+    repopulate <structname>pg_statistic</>.
+   </para>
 
-    <para>
-     To repair the <structname>pg_settings</> error, simply do:
+   <para>
+    To repair the <structname>pg_settings</> error, simply do:
 <programlisting>
 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
 </programlisting>
-    </para>
+   </para>
 
-    <para>
-     The above procedures must be carried out in <emphasis>each</> database
-     of an installation, including <literal>template1</>, and ideally
-     including <literal>template0</> as well.  If you do not fix the
-     template databases then any subsequently created databases will contain
-     the same errors.  <literal>template1</> can be fixed in the same way
-     as any other database, but fixing <literal>template0</> requires
-     additional steps.  First, from any database issue:
+   <para>
+    The above procedures must be carried out in <emphasis>each</> database
+    of an installation, including <literal>template1</>, and ideally
+    including <literal>template0</> as well.  If you do not fix the
+    template databases then any subsequently created databases will contain
+    the same errors.  <literal>template1</> can be fixed in the same way
+    as any other database, but fixing <literal>template0</> requires
+    additional steps.  First, from any database issue:
 <programlisting>
 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
 </programlisting>
-      Next connect to <literal>template0</> and perform the above repair
-      procedures.  Finally, do:
+     Next connect to <literal>template0</> and perform the above repair
+     procedures.  Finally, do:
 <programlisting>
 -- re-freeze template0:
 VACUUM FREEZE;
 -- and protect it against future alterations:
 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
 </programlisting>
-    </para>
-   </sect2>
+   </para>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <para>
-    Release 7.4.2 incorporates all the fixes included in release 7.3.6,
-    plus the following fixes:
+   Release 7.4.2 incorporates all the fixes included in release 7.3.6,
+   plus the following fixes:
 </para>
 
 <itemizedlist>
@@ -4931,82 +5297,82 @@ inconveniences associated with the <literal>i/I</> problem.</para></listitem>
 <listitem><para>Various JDBC fixes</para></listitem>
 </itemizedlist>
 
-   </sect2>
 </sect1>
+  </sect2>
+ </sect1>
 
 <sect1 id="release-7-4-1">
-   <title>Release 7.4.1</title>
+ <sect1 id="release-7-4-1">
+  <title>Release 7.4.1</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2003-12-22</simpara>
-   </note>
+  <note>
+  <title>Release date</title>
+  <simpara>2003-12-22</simpara>
+  </note>
 
-   <para>
-    This release contains a variety of fixes from 7.4.
-   </para>
+  <para>
+   This release contains a variety of fixes from 7.4.
+  </para>
 
 
-   <sect2>
-    <title>Migration to version 7.4.1</title>
+  <sect2>
+   <title>Migration to Version 7.4.1</title>
 
-    <para>
-     A dump/restore is <emphasis>not</emphasis> required for those
-     running 7.4.
-    </para>
+   <para>
+    A dump/restore is <emphasis>not</emphasis> required for those
+    running 7.4.
+   </para>
 
-    <para>
-     If you want to install the fixes in the information schema
-     you need to reload it into the database.
-     This is either accomplished by initializing a new cluster
-     by running <command>initdb</command>, or by running the following
-     sequence of SQL commands in each database (ideally including
-     <literal>template1</literal>) as a superuser in
-     <application>psql</application>, after installing the new release:
+   <para>
+    If you want to install the fixes in the information schema
+    you need to reload it into the database.
+    This is either accomplished by initializing a new cluster
+    by running <command>initdb</command>, or by running the following
+    sequence of SQL commands in each database (ideally including
+    <literal>template1</literal>) as a superuser in
+    <application>psql</application>, after installing the new release:
 <programlisting>
 DROP SCHEMA information_schema CASCADE;
 \i /usr/local/pgsql/share/information_schema.sql
 </programlisting>
-     Substitute your installation path in the second command.
-    </para>
+    Substitute your installation path in the second command.
+   </para>
 
-   </sect2>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
 <itemizedlist>
 <listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
 <listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
 <listitem><para>Fix for subqueries that used hash joins (Tom)</para>
 <para>
-    Certain subqueries that used hash joins would crash because of
-    improperly shared structures.
+   Certain subqueries that used hash joins would crash because of
+   improperly shared structures.
 </para></listitem>
 <listitem><para>Fix free space map compaction bug (Tom)</para>
 <para>
-    This fixes a bug where compaction of the free space map could lead
-    to a database server shutdown.
+   This fixes a bug where compaction of the free space map could lead
+   to a database server shutdown.
 </para>
 </listitem>
 <listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
 <listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
 <para>
-    Fix these functions to return values consistent with pre-7.4
-    releases.
+   Fix these functions to return values consistent with pre-7.4
+   releases.
 </para>
 </listitem>
 <listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
 <para>
-    Fixes include improper variable initialization, missing vacuum after
-    <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
+   Fixes include improper variable initialization, missing vacuum after
+   <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
 </para>
 </listitem>
 <listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
 <listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
 <para>
-    Fix crash on Solaris caused by use of any type of password
-    authentication when no passwords were defined.
+   Fix crash on Solaris caused by use of any type of password
+   authentication when no passwords were defined.
 </para>
 </listitem>
 <listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
@@ -5017,9 +5383,9 @@ DROP SCHEMA information_schema CASCADE;
 <listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
 <listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
 <para>
 If different client encodings are used for <type>bytea</type> output and input, it
 is possible for <type>bytea</type> values to be corrupted by the differing
 encodings.  This fix escapes all bytes that might be affected.
+ If different client encodings are used for <type>bytea</type> output and input, it
+ is possible for <type>bytea</type> values to be corrupted by the differing
+ encodings.  This fix escapes all bytes that might be affected.
 </para>
 </listitem>
 <listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
@@ -5030,2148 +5396,2260 @@ DROP SCHEMA information_schema CASCADE;
 <listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
 <listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
 <para>
 Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
 By installing them in their own directory, name conflicts have been reduced.
+ Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
+ By installing them in their own directory, name conflicts have been reduced.
 </para>
 </listitem>
 <listitem><para>Fix SSL memory leak (Neil)</para>
 <para>
 This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
+ This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
 </para>
 </listitem>
 <listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
 <listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
-
- <sect1 id="release-7-4">
-  <title>Release 7.4</title>
-
-  <note>
-   <title>Release date</title>
-   <simpara>2003-11-17</simpara>
-  </note>
-
-  <sect2>
-   <title>Overview</title>
-
-   <para>
-    Major changes in this release:
-   </para>
-
-   <variablelist>
-    <varlistentry>
-     <term>
-      <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
-      now much more efficient
-     </term>
-
-     <listitem>
-      <para>
-       In previous releases, <literal>IN</literal>/<literal>NOT
-       IN</literal> subqueries were joined to the upper query by
-       sequentially scanning the subquery looking for a match.  The
-       7.4 code uses the same sophisticated techniques used by
-       ordinary joins and so is much faster.  An
-       <literal>IN</literal> will now usually be as fast as or faster
-       than an equivalent <literal>EXISTS</literal> subquery; this
-       reverses the conventional wisdom that applied to previous
-       releases.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Improved <literal>GROUP BY</literal> processing by using hash buckets
-     </term>
-
-     <listitem>
-      <para>
-       In previous releases, rows to be grouped had to be sorted
-       first.  The 7.4 code can do <literal>GROUP BY</literal>
-       without sorting, by accumulating results into a hash table
-       with one entry per group.  It will still use the sort
-       technique, however, if the hash table is estimated to be too
-       large to fit in <varname>sort_mem</>.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      New multikey hash join capability
-     </term>
-
-     <listitem>
-      <para>
-       In previous releases, hash joins could only occur on single
-       keys.  This release allows multicolumn hash joins.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Queries using the explicit <literal>JOIN</literal> syntax are
-      now better optimized
-     </term>
-
-     <listitem>
-      <para>
-       Prior releases evaluated queries using the explicit
-       <literal>JOIN</literal> syntax only in the order implied by
-       the syntax. 7.4 allows full optimization of these queries,
-       meaning the optimizer considers all possible join orderings
-       and chooses the most efficient.  Outer joins, however, must
-       still follow the declared ordering.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Faster and more powerful regular expression code
-     </term>
-
-     <listitem>
-      <para>
-       The entire regular expression module has been replaced with a
-       new version by Henry Spencer, originally written for Tcl.  The
-       code greatly improves performance and supports several flavors
-       of regular expressions.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Function-inlining for simple SQL functions
-     </term>
-
-     <listitem>
-      <para>
-       Simple SQL functions can now be inlined by including their SQL
-       in the main query.  This improves performance by eliminating
-       per-call overhead.  That means simple SQL functions now
-       behave like macros.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Full support for IPv6 connections and IPv6 address data types
-     </term>
-
-     <listitem>
-      <para>
-       Previous releases allowed only IPv4 connections, and the IP
-       data types only supported IPv4 addresses. This release adds
-       full IPv6 support in both of these areas.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Major improvements in SSL performance and reliability
-     </term>
-
-     <listitem>
-      <para>
-       Several people very familiar with the SSL API have overhauled
-       our SSL code to improve SSL key negotiation and error
-       recovery.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Make free space map efficiently reuse empty index pages,
-      and other free space management improvements
-     </term>
-
-     <listitem>
-      <para>
-       In previous releases, B-tree index pages that were left empty
-       because of deleted rows could only be reused by rows with
-       index values similar to the rows originally indexed on that
-       page. In 7.4, <command>VACUUM</command> records empty index
-       pages and allows them to be reused for any future index rows.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      SQL-standard information schema
-     </term>
-
-     <listitem>
-      <para>
-       The information schema provides a standardized and stable way
-       to access information about the schema objects defined in a
-       database.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Cursors conform more closely to the SQL standard
-     </term>
-
-     <listitem>
-      <para>
-       The commands <command>FETCH</command> and
-       <command>MOVE</command> have been overhauled to conform more
-       closely to the SQL standard.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Cursors can exist outside transactions
-     </term>
-
-     <listitem>
-      <para>
-       These cursors are also called holdable cursors.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      New client-to-server protocol
-     </term>
-
-     <listitem>
-      <para>
-       The new protocol adds error codes, more status information,
-       faster startup, better support for binary data transmission,
-       parameter values separated from SQL commands, prepared
-       statements available at the protocol level, and cleaner
-       recovery from <command>COPY</command> failures.  The older
-       protocol is still supported by both server and clients.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      <application>libpq</application> and
-      <application>ECPG</application> applications are now fully
-      thread-safe
-     </term>
-
-     <listitem>
-      <para>
-       While previous <application>libpq</application> releases
-       already supported threads, this release improves thread safety
-       by fixing some non-thread-safe code that was used during
-       database connection startup.  The <command>configure</command>
-       option <option>--enable-thread-safety</option> must be used to
-       enable this feature.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      New version of full-text indexing
-     </term>
-
-     <listitem>
-      <para>
-       A new full-text indexing suite is available in
-       <filename>contrib/tsearch2</filename>.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      New autovacuum tool
-     </term>
-
-     <listitem>
-      <para>
-       The new autovacuum tool in
-       <filename>contrib/autovacuum</filename> monitors the database
-       statistics tables for
-       <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
-       activity and automatically vacuums tables when needed.
-      </para>
-     </listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>
-      Array handling has been improved and moved into the server core
-     </term>
-
-     <listitem>
-      <para>
-       Many array limitations have been removed, and arrays behave
-       more like fully-supported data types.
-      </para>
-     </listitem>
-    </varlistentry>
-
-   </variablelist>
-  </sect2>
-
-  <sect2>
-   <title>Migration to version 7.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>
+ </sect2>
+</sect1>
 
-   <itemizedlist>
-    <listitem>
-     <para>
-      The server-side autocommit setting was removed and
-      reimplemented in client applications and languages.
-      Server-side autocommit was causing too many problems with
-      languages and applications that wanted to control their own
-      autocommit behavior, so autocommit was removed from the server
-      and added to individual client APIs as appropriate.
-     </para>
-    </listitem>
+<sect1 id="release-7-4">
+ <title>Release 7.4</title>
 
-    <listitem>
-     <para>
-      Error message wording has changed substantially in this
-      release.  Significant effort was invested to make the messages
-      more consistent and user-oriented.  If your applications try to
-      detect different error conditions by parsing the error message,
-      you are strongly encouraged to use the new error code facility instead.
-     </para>
-    </listitem>
+ <note>
+  <title>Release date</title>
+  <simpara>2003-11-17</simpara>
+ </note>
 
-    <listitem>
-     <para>
-      Inner joins using the explicit <literal>JOIN</literal> syntax
-      might behave differently because they are now better
-      optimized.
-     </para>
-    </listitem>
+ <sect2>
+  <title>Overview</title>
 
-    <listitem>
-     <para>
-      A number of server configuration parameters have been renamed
-      for clarity, primarily those related to
-      logging.
-     </para>
-    </listitem>
+  <para>
+   Major changes in this release:
+  </para>
 
-    <listitem>
-     <para>
-      <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
-      does nothing.  In prior releases, <literal>FETCH 0</literal>
-      would fetch all remaining rows, and <literal>MOVE 0</literal>
-      would move to the end of the cursor.
-     </para>
-    </listitem>
+  <variablelist>
+   <varlistentry>
+    <term>
+     <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
+     now much more efficient
+    </term>
 
     <listitem>
      <para>
-      <command>FETCH</command> and <command>MOVE</command> now return
-      the actual number of rows fetched/moved, or zero if at the
-      beginning/end of the cursor.  Prior releases would return the
-      row count passed to the command, not the number of rows
-      actually fetched or moved.
+      In previous releases, <literal>IN</literal>/<literal>NOT
+      IN</literal> subqueries were joined to the upper query by
+      sequentially scanning the subquery looking for a match.  The
+      7.4 code uses the same sophisticated techniques used by
+      ordinary joins and so is much faster.  An
+      <literal>IN</literal> will now usually be as fast as or faster
+      than an equivalent <literal>EXISTS</literal> subquery; this
+      reverses the conventional wisdom that applied to previous
+      releases.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Improved <literal>GROUP BY</literal> processing by using hash buckets
+    </term>
 
     <listitem>
      <para>
-      <command>COPY</command> now can process files that use
-      carriage-return or carriage-return/line-feed end-of-line
-      sequences. Literal carriage-returns and line-feeds are no
-      longer accepted in data values; use <literal>\r</literal> and
-      <literal>\n</literal> instead.
+      In previous releases, rows to be grouped had to be sorted
+      first.  The 7.4 code can do <literal>GROUP BY</literal>
+      without sorting, by accumulating results into a hash table
+      with one entry per group.  It will still use the sort
+      technique, however, if the hash table is estimated to be too
+      large to fit in <varname>sort_mem</>.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New multikey hash join capability
+    </term>
 
     <listitem>
      <para>
-      Trailing spaces are now trimmed when converting from type
-      <type>char(<replaceable>n</>)</type> to
-      <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
-      This is what most people always expected to happen anyway.
+      In previous releases, hash joins could only occur on single
+      keys.  This release allows multicolumn hash joins.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Queries using the explicit <literal>JOIN</literal> syntax are
+     now better optimized
+    </term>
 
     <listitem>
      <para>
-      The data type <type>float(<replaceable>p</>)</type> now
-      measures <replaceable>p</> in binary digits, not decimal
-      digits.  The new behavior follows the SQL standard.
+      Prior releases evaluated queries using the explicit
+      <literal>JOIN</literal> syntax only in the order implied by
+      the syntax. 7.4 allows full optimization of these queries,
+      meaning the optimizer considers all possible join orderings
+      and chooses the most efficient.  Outer joins, however, must
+      still follow the declared ordering.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Faster and more powerful regular expression code
+    </term>
 
     <listitem>
      <para>
-      Ambiguous date values now must match the ordering specified by
-      the <varname>datestyle</varname> setting.  In prior releases, a
-      date specification of <literal>10/20/03</> was interpreted as a
-      date in October even if <varname>datestyle</> specified that
-      the day should be first.  7.4 will throw an error if a date
-      specification is invalid for the current setting of
-      <varname>datestyle</>.
+      The entire regular expression module has been replaced with a
+      new version by Henry Spencer, originally written for Tcl.  The
+      code greatly improves performance and supports several flavors
+      of regular expressions.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Function-inlining for simple SQL functions
+    </term>
 
     <listitem>
      <para>
-      The functions <function>oidrand</function>,
-      <function>oidsrand</function>, and
-      <function>userfntest</function> have been removed.  These
-      functions were determined to be no longer useful.
+      Simple SQL functions can now be inlined by including their SQL
+      in the main query.  This improves performance by eliminating
+      per-call overhead.  That means simple SQL functions now
+      behave like macros.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Full support for IPv6 connections and IPv6 address data types
+    </term>
 
     <listitem>
      <para>
-      String literals specifying time-varying date/time values, such
-      as <literal>'now'</literal> or <literal>'today'</literal> will
-      no longer work as expected in column default expressions; they
-      now cause the time of the table creation to be the default, not
-      the time of the insertion.  Functions such as
-      <function>now()</>, <function>current_timestamp</>, or
-      <function>current_date</function> should be used instead.
+      Previous releases allowed only IPv4 connections, and the IP
+      data types only supported IPv4 addresses. This release adds
+      full IPv6 support in both of these areas.
      </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Major improvements in SSL performance and reliability
+    </term>
 
+    <listitem>
      <para>
-      In previous releases, there was special code so that strings
-      such as <literal>'now'</literal> were interpreted at
-      <command>INSERT</> time and not at table creation time, but
-      this work around didn't cover all cases.  Release 7.4 now
-      requires that defaults be defined properly using functions such
-      as <function>now()</> or <function>current_timestamp</>. These
-      will work in all situations.
+      Several people very familiar with the SSL API have overhauled
+      our SSL code to improve SSL key negotiation and error
+      recovery.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Make free space map efficiently reuse empty index pages,
+     and other free space management improvements
+    </term>
 
     <listitem>
      <para>
-      The dollar sign (<literal>$</>) is no longer allowed in
-      operator names.  It can instead be a non-first character in
-      identifiers.  This was done to improve compatibility with other
-      database systems, and to avoid syntax problems when parameter
-      placeholders (<literal>$<replaceable>n</></>) are written
-      adjacent to operators.
+      In previous releases, B-tree index pages that were left empty
+      because of deleted rows could only be reused by rows with
+      index values similar to the rows originally indexed on that
+      page. In 7.4, <command>VACUUM</command> records empty index
+      pages and allows them to be reused for any future index rows.
      </para>
     </listitem>
+   </varlistentry>
 
-   </itemizedlist>
-  </sect2>
-
-  <sect2>
-   <title>Changes</title>
-
-   <para>
-    Below you will find a detailed account of the changes between
-    release 7.4 and the previous major release.
-   </para>
-
-  <sect3>
-   <title>Server Operation Changes</title>
+   <varlistentry>
+    <term>
+     SQL-standard information schema
+    </term>
 
-   <itemizedlist>
     <listitem>
      <para>
-      Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
-      Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
+      The information schema provides a standardized and stable way
+      to access information about the schema objects defined in a
+      database.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Cursors conform more closely to the SQL standard
+    </term>
 
     <listitem>
      <para>
-      Fix SSL to handle errors cleanly (Nathan Mueller)
-     </para>
-     <para>
-      In prior releases, certain SSL API error reports were not
-      handled correctly.  This release fixes those problems.
+      The commands <command>FETCH</command> and
+      <command>MOVE</command> have been overhauled to conform more
+      closely to the SQL standard.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Cursors can exist outside transactions
+    </term>
 
     <listitem>
      <para>
-      SSL protocol security and performance improvements (Sean Chittenden)
-     </para>
-     <para>
-      SSL key renegotiation was happening too frequently, causing poor
-      SSL performance.  Also, initial key handling was improved.
+      These cursors are also called holdable cursors.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New client-to-server protocol
+    </term>
 
     <listitem>
      <para>
-      Print lock information when a deadlock is detected (Tom)
-     </para>
-     <para>
-      This allows easier debugging of deadlock situations.
+      The new protocol adds error codes, more status information,
+      faster startup, better support for binary data transmission,
+      parameter values separated from SQL commands, prepared
+      statements available at the protocol level, and cleaner
+      recovery from <command>COPY</command> failures.  The older
+      protocol is still supported by both server and clients.
      </para>
     </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <application>libpq</application> and
+     <application>ECPG</application> applications are now fully
+     thread-safe
+    </term>
 
     <listitem>
      <para>
-      Update <filename>/tmp</filename> socket modification times
-      regularly to avoid their removal (Tom)
-     </para>
-     <para>
-      This should help prevent <filename>/tmp</filename> directory
-      cleaner administration scripts from removing server socket
-      files.
+      While previous <application>libpq</application> releases
+      already supported threads, this release improves thread safety
+      by fixing some non-thread-safe code that was used during
+      database connection startup.  The <command>configure</command>
+      option <option>--enable-thread-safety</option> must be used to
+      enable this feature.
      </para>
     </listitem>
+   </varlistentry>
 
-    <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
+   <varlistentry>
+    <term>
+     New version of full-text indexing
+    </term>
 
     <listitem>
-     <para>Make B-tree indexes fully WAL-safe (Tom)</para>
      <para>
-      In prior releases, under certain rare cases, a server crash
-      could cause B-tree indexes to become corrupt. This release
-      removes those last few rare cases.
+      A new full-text indexing suite is available in
+      <filename>contrib/tsearch2</filename>.
      </para>
     </listitem>
+   </varlistentry>
 
-    <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
+   <varlistentry>
+    <term>
+     New autovacuum tool
+    </term>
 
     <listitem>
      <para>
-      Fix inconsistent index lookups during split of first root page (Tom)
-     </para>
-     <para>
-      In prior releases, when a single-page index split into two
-      pages, there was a brief period when another database session
-      could miss seeing an index entry.  This release fixes that rare
-      failure case.
+      The new autovacuum tool in
+      <filename>contrib/autovacuum</filename> monitors the database
+      statistics tables for
+      <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
+      activity and automatically vacuums tables when needed.
      </para>
     </listitem>
+   </varlistentry>
 
-    <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
+   <varlistentry>
+    <term>
+     Array handling has been improved and moved into the server core
+    </term>
 
     <listitem>
-     <para>Preserve free space information between server restarts (Tom)</para>
      <para>
-      In prior releases, the free space map was not saved when the
-      postmaster was stopped, so newly started servers had no free
-      space information. This release saves the free space map, and
-      reloads it when the server is restarted.
+      Many array limitations have been removed, and arrays behave
+      more like fully-supported data types.
      </para>
     </listitem>
+   </varlistentry>
 
-    <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
-    <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
-    <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
-    <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
-    <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
-    <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
-    <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
-   </itemizedlist>
-  </sect3>
+  </variablelist>
+ </sect2>
 
 <sect3>
-   <title>Performance Improvements</title>
<sect2>
+  <title>Migration to Version 7.4</title>
 
-   <itemizedlist>
-    <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
-    <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
-    <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
-    <listitem><para>Improve constant folding (Tom)</para></listitem>
-    <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
+  <para>
+   A dump/restore using <application>pg_dump</application> is
+   required for those wishing to migrate data from any previous
+   release.
+  </para>
 
-    <listitem>
-     <para>Reduce memory usage for queries using complex functions (Tom)</para>
-     <para>
-      In prior releases, functions returning allocated memory would
-      not free it until the query completed. This release allows the
-      freeing of function-allocated memory when the function call
-      completes, reducing the total memory used by functions.
-     </para>
-    </listitem>
+  <para>
+   Observe the following incompatibilities:
+  </para>
 
-    <listitem>
-     <para>Improve GEQO optimizer performance (Tom)</para>
-     <para>
-      This release fixes several inefficiencies in the way the GEQO optimizer
-      manages potential query paths.
-     </para>
-    </listitem>
+  <itemizedlist>
+   <listitem>
+    <para>
+     The server-side autocommit setting was removed and
+     reimplemented in client applications and languages.
+     Server-side autocommit was causing too many problems with
+     languages and applications that wanted to control their own
+     autocommit behavior, so autocommit was removed from the server
+     and added to individual client APIs as appropriate.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
-      tables (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Error message wording has changed substantially in this
+     release.  Significant effort was invested to make the messages
+     more consistent and user-oriented.  If your applications try to
+     detect different error conditions by parsing the error message,
+     you are strongly encouraged to use the new error code facility instead.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
-      performance (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Inner joins using the explicit <literal>JOIN</literal> syntax
+     might behave differently because they are now better
+     optimized.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Allow most <literal>IN</literal> subqueries to be processed as
-      joins (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     A number of server configuration parameters have been renamed
+     for clarity, primarily those related to
+     logging.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Pattern matching operations can use indexes regardless of
-      locale (Peter)
-     </para>
-     <para>
-      There is no way for non-ASCII locales to use the standard
-      indexes for <literal>LIKE</literal> comparisons. This release
-      adds a way to create a special index for
-      <literal>LIKE</literal>.
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
+     does nothing.  In prior releases, <literal>FETCH 0</literal>
+     would fetch all remaining rows, and <literal>MOVE 0</literal>
+     would move to the end of the cursor.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
-     <para>
-      For shared libraries that require a long time to load, this
-      option is available so the library can be preloaded in the
-      postmaster and inherited by all database sessions.
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     <command>FETCH</command> and <command>MOVE</command> now return
+     the actual number of rows fetched/moved, or zero if at the
+     beginning/end of the cursor.  Prior releases would return the
+     row count passed to the command, not the number of rows
+     actually fetched or moved.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Improve optimizer cost computations, particularly for subqueries (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     <command>COPY</command> now can process files that use
+     carriage-return or carriage-return/line-feed end-of-line
+     sequences. Literal carriage-returns and line-feeds are no
+     longer accepted in data values; use <literal>\r</literal> and
+     <literal>\n</literal> instead.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Trailing spaces are now trimmed when converting from type
+     <type>char(<replaceable>n</>)</type> to
+     <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
+     This is what most people always expected to happen anyway.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
-      means <literal>a.x = 42</literal> (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     The data type <type>float(<replaceable>p</>)</type> now
+     measures <replaceable>p</> in binary digits, not decimal
+     digits.  The new behavior follows the SQL standard.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Allow hash/merge joins on complex joins (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Ambiguous date values now must match the ordering specified by
+     the <varname>datestyle</varname> setting.  In prior releases, a
+     date specification of <literal>10/20/03</> was interpreted as a
+     date in October even if <varname>datestyle</> specified that
+     the day should be first.  7.4 will throw an error if a date
+     specification is invalid for the current setting of
+     <varname>datestyle</>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     The functions <function>oidrand</function>,
+     <function>oidsrand</function>, and
+     <function>userfntest</function> have been removed.  These
+     functions were determined to be no longer useful.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     String literals specifying time-varying date/time values, such
+     as <literal>'now'</literal> or <literal>'today'</literal> will
+     no longer work as expected in column default expressions; they
+     now cause the time of the table creation to be the default, not
+     the time of the insertion.  Functions such as
+     <function>now()</>, <function>current_timestamp</>, or
+     <function>current_date</function> should be used instead.
+    </para>
+
+    <para>
+     In previous releases, there was special code so that strings
+     such as <literal>'now'</literal> were interpreted at
+     <command>INSERT</> time and not at table creation time, but
+     this work around didn't cover all cases.  Release 7.4 now
+     requires that defaults be defined properly using functions such
+     as <function>now()</> or <function>current_timestamp</>. These
+     will work in all situations.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     The dollar sign (<literal>$</>) is no longer allowed in
+     operator names.  It can instead be a non-first character in
+     identifiers.  This was done to improve compatibility with other
+     database systems, and to avoid syntax problems when parameter
+     placeholders (<literal>$<replaceable>n</></>) are written
+     adjacent to operators.
+    </para>
+   </listitem>
+
+  </itemizedlist>
+ </sect2>
+
+ <sect2>
+  <title>Changes</title>
+
+  <para>
+   Below you will find a detailed account of the changes between
+   release 7.4 and the previous major release.
+  </para>
+
+ <sect3>
+  <title>Server Operation Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
+     Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Fix SSL to handle errors cleanly (Nathan Mueller)
+    </para>
+    <para>
+     In prior releases, certain SSL API error reports were not
+     handled correctly.  This release fixes those problems.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     SSL protocol security and performance improvements (Sean Chittenden)
+    </para>
+    <para>
+     SSL key renegotiation was happening too frequently, causing poor
+     SSL performance.  Also, initial key handling was improved.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Print lock information when a deadlock is detected (Tom)
+    </para>
+    <para>
+     This allows easier debugging of deadlock situations.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Update <filename>/tmp</filename> socket modification times
+     regularly to avoid their removal (Tom)
+    </para>
+    <para>
+     This should help prevent <filename>/tmp</filename> directory
+     cleaner administration scripts from removing server socket
+     files.
+    </para>
+   </listitem>
+
+   <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
+
+   <listitem>
+    <para>Make B-tree indexes fully WAL-safe (Tom)</para>
+    <para>
+     In prior releases, under certain rare cases, a server crash
+     could cause B-tree indexes to become corrupt. This release
+     removes those last few rare cases.
+    </para>
+   </listitem>
+
+   <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Fix inconsistent index lookups during split of first root page (Tom)
+    </para>
+    <para>
+     In prior releases, when a single-page index split into two
+     pages, there was a brief period when another database session
+     could miss seeing an index entry.  This release fixes that rare
+     failure case.
+    </para>
+   </listitem>
+
+   <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
+
+   <listitem>
+    <para>Preserve free space information between server restarts (Tom)</para>
+    <para>
+     In prior releases, the free space map was not saved when the
+     postmaster was stopped, so newly started servers had no free
+     space information. This release saves the free space map, and
+     reloads it when the server is restarted.
+    </para>
+   </listitem>
+
+   <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
+   <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
+   <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
+   <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
+   <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
+   <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
+   <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Performance Improvements</title>
+
+  <itemizedlist>
+   <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
+   <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
+   <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
+   <listitem><para>Improve constant folding (Tom)</para></listitem>
+   <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
+
+   <listitem>
+    <para>Reduce memory usage for queries using complex functions (Tom)</para>
+    <para>
+     In prior releases, functions returning allocated memory would
+     not free it until the query completed. This release allows the
+     freeing of function-allocated memory when the function call
+     completes, reducing the total memory used by functions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Improve GEQO optimizer performance (Tom)</para>
+    <para>
+     This release fixes several inefficiencies in the way the GEQO optimizer
+     manages potential query paths.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
+     tables (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
+     performance (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow most <literal>IN</literal> subqueries to be processed as
+     joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Pattern matching operations can use indexes regardless of
+     locale (Peter)
+    </para>
+    <para>
+     There is no way for non-ASCII locales to use the standard
+     indexes for <literal>LIKE</literal> comparisons. This release
+     adds a way to create a special index for
+     <literal>LIKE</literal>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
+    <para>
+     For shared libraries that require a long time to load, this
+     option is available so the library can be preloaded in the
+     postmaster and inherited by all database sessions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve optimizer cost computations, particularly for subqueries (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
+     means <literal>a.x = 42</literal> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow hash/merge joins on complex joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow hash joins for more data types (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow join optimization of explicit inner joins, disable with
+     <varname>join_collapse_limit</varname> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add parameter <varname>from_collapse_limit</varname> to control
+     conversion of subqueries to joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Use faster and more powerful regular expression code from Tcl
+     (Henry Spencer, Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Use bit-mapped relation sets in the optimizer (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Improve connection startup time (Tom)</para>
+    <para>
+     The new client/server protocol requires fewer network packets to
+     start a database session.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve trigger/constraint performance (Stephan)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Fix hash indexes which were broken in rare cases (Tom)
+    </para>
+   </listitem>
+
+   <listitem><para>Improve hash index concurrency and speed (Tom)</para>
+    <para>
+     Prior releases suffered from poor hash index performance,
+     particularly for high concurrency situations. This release fixes
+     that, and the development group is interested in reports
+     comparing B-tree and hash index performance.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
+    <para>
+     Certain CPU's perform faster data copies when addresses are
+     32-byte aligned.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
+    <para>
+     <type>numeric</type> used to be stored in base 100. The new code
+     uses base 10000, for significantly better performance.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Server Configuration Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
+    <para>
+     This was done so most parameters that control the server logs
+     begin with <literal>log_</>.
+    </para>
+   </listitem>
+
+   <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
+   <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
+   <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
+
+   <listitem>
+    <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
+    <para>
+     In prior releases, it was difficult to determine if checkpoint
+     was happening too frequently. This feature adds a warning to the
+     server logs when excessive checkpointing happens.
+    </para>
+   </listitem>
+
+   <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Change debug server log messages to output as <literal>DEBUG</>
+     rather than <literal>LOG</> (Bruce)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
+    <para>
+     This is a security feature so non-superusers cannot disable
+     logging that was enabled by the administrator.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <varname>log_min_messages</>/<varname>client_min_messages</> now
+     controls <varname>debug_*</> output (Bruce)
+    </para>
+    <para>
+     This centralizes client debug information so all debug output
+     can be sent to either the client or server logs.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
+    <para>
+     This allows Mac OS X hosts to query the network for available
+     <productname>PostgreSQL</productname> servers.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Allow hash joins for more data types (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Add ability to print only slow statements using
+     <varname>log_min_duration_statement</varname>
+     (Christopher)
+    </para>
+    <para>
+     This is an often requested debugging feature that allows
+     administrators to see only slow queries in their server logs.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Allow join optimization of explicit inner joins, disable with
-      <varname>join_collapse_limit</varname> (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
+    <para>
+     This allows administrators to merge the host IP address and
+     netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Add parameter <varname>from_collapse_limit</varname> to control
-      conversion of subqueries to joins (Tom)
-     </para>
-    </listitem>
+   <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
 
-    <listitem>
-     <para>
-      Use faster and more powerful regular expression code from Tcl
-      (Henry Spencer, Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
+    <para>
+     This works with the new error reporting feature to supply
+     additional error information like hints, file names and line
+     numbers.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Use bit-mapped relation sets in the optimizer (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
+    <para>
+     This option is useful for administration tools that need to know
+     the configuration variable names and their minimums, maximums,
+     defaults, and descriptions.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>Improve connection startup time (Tom)</para>
-     <para>
-      The new client/server protocol requires fewer network packets to
-      start a database session.
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Add new columns in <literal>pg_settings</literal>:
+     <literal>context</>, <literal>type</>, <literal>source</>,
+     <literal>min_val</>, <literal>max_val</> (Joe)
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Improve trigger/constraint performance (Stephan)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Make default <varname>shared_buffers</> 1000 and
+     <varname>max_connections</> 100, if possible (Tom)
+    </para>
+    <para>
+     Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
+     would start on even very old systems. This release tests the
+     amount of shared memory allowed by the platform and selects more
+     reasonable default values if possible.  Of course, users are
+     still encouraged to evaluate their resource load and size
+     <varname>shared_buffers</varname> accordingly.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     New <filename>pg_hba.conf</filename> record type
+     <literal>hostnossl</> to prevent SSL connections (Jon
+     Jensen)
+    </para>
+    <para>
+     In prior releases, there was no way to prevent SSL connections
+     if both the client and server supported SSL. This option allows
+     that capability.
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>
-      Fix hash indexes which were broken in rare cases (Tom)
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Remove parameter <varname>geqo_random_seed</varname>
+     (Tom)
+    </para>
+   </listitem>
 
-    <listitem><para>Improve hash index concurrency and speed (Tom)</para>
-     <para>
-      Prior releases suffered from poor hash index performance,
-      particularly for high concurrency situations. This release fixes
-      that, and the development group is interested in reports
-      comparing B-tree and hash index performance.
-     </para>
-    </listitem>
+   <listitem>
+    <para>
+     Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
+    </para>
+   </listitem>
 
-    <listitem>
-     <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
-     <para>
-      Certain CPU's perform faster data copies when addresses are
-      32-byte aligned.
-     </para>
   </listitem>
+   <listitem>
+    <para>
+     Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
+    </para>
+   </listitem>
+  </itemizedlist>
</sect3>
 
-    <listitem>
-     <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
-     <para>
-      <type>numeric</type> used to be stored in base 100. The new code
-      uses base 10000, for significantly better performance.
-     </para>
-    </listitem>
-   </itemizedlist>
-  </sect3>
+ <sect3>
+  <title>Query Changes</title>
 
-  <sect3>
-   <title>Server Configuration Changes</title>
+  <itemizedlist>
+   <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
+   <listitem><para>Add read-only transactions (Peter)</para></listitem>
+   <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
 
-   <itemizedlist>
-    <listitem>
-     <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
-     <para>
-      This was done so most parameters that control the server logs
-      begin with <literal>log_</>.
-     </para>
-    </listitem>
+   <listitem>
+    <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
+    <para>
+     In prior releases, only the superuser could see query strings
+     using <literal>pg_stat_activity</literal>. Now ordinary users
+     can see their own query strings.
+    </para>
+   </listitem>
 
-    <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
-    <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
-    <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
+   <listitem>
+    <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
+    <para>
+     The SQL standard says that an aggregate function appearing