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

doc/src/sgml/release.sgml

index d70c3acd44b1a86ca2110f5eb8caf0fa4be08836..33dd4f687ed383036142757307851a21d0f7728f 100644 (file)
@@ -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,13504 +35,14524 @@ do it for earlier branch release files.
 <appendix id="release">
  <title>Release Notes</title>
 
 <sect1 id="release-8-2-5">
-   <title>Release 8.2.5</title>
<sect1 id="release-8-2-6">
+  <title>Release 8.2.6</title>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-09-17</simpara>
-   </note>
-
-   <para>
-    This release contains a variety of fixes from 8.2.4.
-   </para>
-
-   <sect2>
-    <title>Migration to version 8.2.5</title>
-
-    <para>
-     A dump/restore is not required for those running 8.2.X.
-    </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>
-       Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
-       domains over domains (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix some planner problems with outer joins, notably poor
-       size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
-       (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Allow the <type>interval</> data type to accept input consisting only of
-       milliseconds or microseconds (Neil)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Speed up rtree index insertion (Teodor)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix excessive logging of <acronym>SSL</> error messages (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix logging so that log messages are never interleaved when using
-       the syslogger process (Andrew)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix crash when <varname>log_min_error_statement</> logging runs out
-       of memory (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix incorrect handling of some foreign-key corner cases (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
-       due to attempting to process temporary tables of other sessions (Alvaro)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Windows socket and semaphore improvements (Magnus)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
-       because of possible encoding mismatches (Tom)
-      </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>
-       Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Do not let <filename>/contrib/intarray</> try to make its GIN opclass
-       the default (this caused problems at dump/restore) (Tom)
-      </para>
-     </listitem>
-
-    </itemizedlist>
-
-   </sect2>
-  </sect1>
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
 
-  <sect1 id="release-8-2-4">
-   <title>Release 8.2.4</title>
+  <para>
+   This release contains a variety of fixes from 8.2.5,
+   including fixes for significant security issues.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-04-23</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 8.2.6</title>
 
    <para>
-    This release contains a variety of fixes from 8.2.3,
-    including a security fix.
+    A dump/restore is not required for those running 8.2.X.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.2.4</title>
-
-    <para>
-     A dump/restore is not required for those running 8.2.X.
-    </para>
-
-   </sect2>
+  </sect2>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
-    <itemizedlist>
+   <itemizedlist>
 
-     <listitem>
+    <listitem>
      <para>
-      Support explicit placement of the temporary-table schema within
-      <varname>search_path</>, and disable searching it for functions
-      and operators (Tom)
+      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>
-      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.
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
      </para>
-     </listitem>
 
-     <listitem>
      <para>
-      Fix <varname>shared_preload_libraries</> for Windows
-      by forcing reload in each backend (Korry Douglas)
+      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>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix <function>to_char()</> so it properly upper/lower cases localized day or month
-      names (Pavel Stehule)
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
      </para>
-     </listitem>
 
-     <listitem>
      <para>
-      <filename>/contrib/tsearch2</> crash fixes (Teodor)
+      The fix that appeared for this in 8.2.5 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Require <command>COMMIT PREPARED</> to be executed in the same
-      database as the transaction was prepared in (Heikki)
+      Fix bugs in WAL replay for GIN indexes (Teodor)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Allow <command>pg_dump</> to do binary backups larger than two gigabytes
-      on Windows (Magnus)
+      Fix GIN index build to work properly when
+      <varname>maintenance_work_mem</> is 4GB or more (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
+      Update time zone data files to <application>tzdata</> release 2007k
+      (in particular, recent Argentina changes) (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Prevent the statistics collector from writing to disk too frequently (Tom)
+      Improve planner's handling of LIKE/regex estimation in non-C locales
+      (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
-      <command>UPDATE</> chains (Tom, Pavan Deolasee)
+      Fix planning-speed problem for deep outer-join nests, as well as
+      possible poor choice of join order (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix bug in domains that use array types (Tom)
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix <command>pg_dump</> so it can dump a serial column's sequence
-      using <option>-t</> when not also dumping the owning table
-      (Tom)
+      Make <command>CREATE TABLE ... SERIAL</> and
+      <command>ALTER SEQUENCE ... OWNED BY</> not change the
+      <function>currval()</> state of the sequence (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Planner fixes, including improving outer join and bitmap scan
-      selection logic (Tom)
+      Preserve the tablespace and storage parameters of indexes that are
+      rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix possible wrong answers or crash when a PL/pgSQL function tries
-      to <literal>RETURN</> from within an <literal>EXCEPTION</> block
-      (Tom)
+      Make archive recovery always start a new WAL timeline, rather than only
+      when a recovery stop time was used (Simon)
      </para>
-     </listitem>
 
-     <listitem>
      <para>
-      Fix PANIC during enlargement of a hash index (Tom)
+      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>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+      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>
+    </listitem>
 
-    </itemizedlist>
+    <listitem>
+     <para>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </para>
+    </listitem>
 
-   </sect2>
-  </sect1>
+    <listitem>
+     <para>
+      Make <function>corr()</> return the correct result for negative
+      correlation values (Neil)
+     </para>
+    </listitem>
 
-  <sect1 id="release-8-2-3">
-   <title>Release 8.2.3</title>
+    <listitem>
+     <para>
+      Fix overflow in <literal>extract(epoch from interval)</> for intervals
+      exceeding 68 years (Tom)
+     </para>
+    </listitem>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-07</simpara>
-   </note>
+    <listitem>
+     <para>
+      Fix PL/Perl to not fail when a UTF-8 regular expression is used
+      in a trusted function (Andrew)
+     </para>
+    </listitem>
 
-   <para>
-    This release contains two fixes from 8.2.2.
-   </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>
-    <title>Migration to version 8.2.3</title>
+     <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>
 
-    <para>
-     A dump/restore is not required for those running 8.2.X.
-    </para>
+    <listitem>
+     <para>
+      Fix PL/Python to work correctly with Python 2.5 on 64-bit machines
+      (Marko Kreen)
+     </para>
+    </listitem>
 
-   </sect2>
+    <listitem>
+     <para>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </para>
+    </listitem>
 
-   <sect2>
-    <title>Changes</title>
+    <listitem>
+     <para>
+      Fix <application>pg_dump</> to correctly handle inheritance child tables
+      that have default expressions different from their parent's (Tom)
+     </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+     <para>
+      Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
+      to a file that is not a plain file (Martin Pitt)
+     </para>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Remove overly-restrictive check for type length in constraints and
-      functional indexes(Tom)
+      <application>ecpg</> parser fixes (Michael)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
+      Make <filename>contrib/pgcrypto</> defend against
+      <application>OpenSSL</> libraries that fail on keys longer than 128
+      bits; which is the case at least on some Solaris versions (Marko Kreen)
      </para>
-     </listitem>
+    </listitem>
 
-    </itemizedlist>
+    <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>
 
-   </sect2>
-  </sect1>
+    <listitem>
+     <para>
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
+     </para>
+    </listitem>
 
-  <sect1 id="release-8-2-2">
-   <title>Release 8.2.2</title>
+    <listitem>
+     <para>
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+     </para>
+    </listitem>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-05</simpara>
-   </note>
+    <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>
+
+    <listitem>
+     <para>
+      Update <function>gettimeofday</> configuration check so that
+      <productname>PostgreSQL</> can be built on newer versions of
+      <productname>MinGW</> (Magnus)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-2-5">
+  <title>Release 8.2.5</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.2.4.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.2.5</title>
 
    <para>
-    This release contains a variety of fixes from 8.2.1, including
-    a security fix.
+    A dump/restore is not required for those running 8.2.X.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.2.2</title>
+  </sect2>
 
-    <para>
-     A dump/restore is not required for those running 8.2.X.
-    </para>
+  <sect2>
+   <title>Changes</title>
 
-   </sect2>
+   <itemizedlist>
 
-   <sect2>
-    <title>Changes</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>
 
-    <itemizedlist>
+    <listitem>
+     <para>
+      Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
+      domains over domains (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Remove security vulnerabilities that allowed connected users
-      to read backend memory (Tom)
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
      </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.
+      Fix some planner problems with outer joins, notably poor
+      size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
+      (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix not-so-rare-anymore bug wherein btree index page splits could fail
-      due to choosing an infeasible split point (Heikki Linnakangas)
+      Allow the <type>interval</> data type to accept input consisting only of
+      milliseconds or microseconds (Neil)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix Borland C compile scripts (L Bayuk)
+      Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Properly handle <function>to_char('CC')</> for years ending in
-      <literal>00</> (Tom)
+      Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
      </para>
+    </listitem>
+
+    <listitem>
      <para>
-      Year 2000 is in the twentieth century, not the twenty-first.
+      Speed up rtree index insertion (Teodor)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix incorrect permission check in
-      <literal>information_schema.key_column_usage</> view (Tom)
+      Fix logging so that log messages are never interleaved when using
+      the syslogger process (Andrew)
      </para>
+    </listitem>
+
+    <listitem>
      <para>
-      The symptom is <quote>relation with OID nnnnn does not exist</> errors.
-      To get this fix without using <command>initdb</>, use <command>CREATE OR
-      REPLACE VIEW</> to install the corrected definition found in
-      <filename>share/information_schema.sql</>.  Note you will need to do
-      this in each database.
+      Fix crash when <varname>log_min_error_statement</> logging runs out
+      of memory (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Improve <command>VACUUM</> performance for databases with many tables (Tom)
+      Fix incorrect handling of some foreign-key corner cases (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+      Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix potentially incorrect results from index searches using
-      <literal>ROW</> inequality conditions (Tom)
+      Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
+      due to attempting to process temporary tables of other sessions (Alvaro)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Tighten security of multi-byte character processing for UTF8 sequences
-      over three bytes long (Tom)
+      Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix bogus <quote>permission denied</> failures occurring on Windows
-      due to attempts to fsync already-deleted files (Magnus, Tom)
+      Windows socket and semaphore improvements (Magnus)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix bug that could cause the statistics collector
-      to hang on Windows (Magnus)
+      Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
      </para>
+    </listitem>
 
+    <listitem>
      <para>
-      This would in turn lead to autovacuum not working.
+      Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix possible crashes when an already-in-use PL/pgSQL function is
-      updated (Tom)
+      Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+      because of possible encoding mismatches (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
      </para>
-     </listitem>
+    </listitem>
 
-     <listitem>
+    <listitem>
      <para>
-      Fix possible errors in processing PL/pgSQL exception blocks (Tom)
+      Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
      </para>
-     </listitem>
+    </listitem>
 
-    </itemizedlist>
+    <listitem>
+     <para>
+      Do not let <filename>/contrib/intarray</> try to make its GIN opclass
+      the default (this caused problems at dump/restore) (Tom)
+     </para>
+    </listitem>
 
-   </sect2>
-  </sect1>
+   </itemizedlist>
 
-  <sect1 id="release-8-2-1">
  <title>Release 8.2.1</title>
+  </sect2>
</sect1>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-01-08</simpara>
-   </note>
+ <sect1 id="release-8-2-4">
+  <title>Release 8.2.4</title>
 
-   <para>
-    This release contains a variety of fixes from 8.2.
-   </para>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-04-23</simpara>
+  </note>
 
-   <sect2>
-    <title>Migration to version 8.2.1</title>
+  <para>
+   This release contains a variety of fixes from 8.2.3,
+   including a security fix.
+  </para>
 
-    <para>
-     A dump/restore is not required for those running 8.2.
-    </para>
+  <sect2>
+   <title>Migration to Version 8.2.4</title>
 
-   </sect2>
+   <para>
+    A dump/restore is not required for those running 8.2.X.
+   </para>
 
-   <sect2>
-    <title>Changes</title>
+  </sect2>
 
-    <itemizedlist>
+  <sect2>
+   <title>Changes</title>
 
-     <listitem>
-      <para>
-       Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
-       <literal>LIMIT NULL</>) (Tom)
-      </para>
-     </listitem>
+   <itemizedlist>
 
-     <listitem>
-      <para>
-       <filename>Several /contrib/tsearch2</> fixes (Teodor)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       On Windows, make log messages coming from the operating system use
-       <acronym>ASCII</> encoding (Hiroshi Saito)
-      </para>
+    <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 fixes a conversion problem when there is a mismatch between
-       the encoding of the operating system and database server.
-      </para>
-     </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.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Fix Windows linking of <application>pg_dump</> using
-       <filename>win32.mak</>
-       (Hiroshi Saito)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix <varname>shared_preload_libraries</> for Windows
+      by forcing reload in each backend (Korry Douglas)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Fix planner mistakes for outer join queries (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix <function>to_char()</> so it properly upper/lower cases localized day or month
+      names (Pavel Stehule)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Fix several problems in queries involving sub-SELECTs (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      <filename>/contrib/tsearch2</> crash fixes (Teodor)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Fix potential crash in SPI during subtransaction abort (Tom)
-      </para>
+    <listitem>
+     <para>
+      Require <command>COMMIT PREPARED</> to be executed in the same
+      database as the transaction was prepared in (Heikki)
+     </para>
+    </listitem>
 
-      <para>
-       This affects all PL functions since they all use SPI.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Allow <command>pg_dump</> to do binary backups larger than two gigabytes
+      on Windows (Magnus)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve build speed of <acronym>PDF</> documentation (Peter)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Prevent the statistics collector from writing to disk too frequently (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve optimization decisions related to index scans (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+      <command>UPDATE</> chains (Tom, Pavan Deolasee)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Have <application>psql</> print multi-byte combining characters as
-       before, rather than output as <literal>\u</> (Tom)
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix bug in domains that use array types (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Improve index usage of regular expressions that use parentheses (Tom)
-      </para>
+    <listitem>
+     <para>
+      Fix <command>pg_dump</> so it can dump a serial column's sequence
+      using <option>-t</> when not also dumping the owning table
+      (Tom)
+     </para>
+    </listitem>
 
-      <para>
-       This improves <application>psql</> <literal>\d</> performance also.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Planner fixes, including improving outer join and bitmap scan
+      selection logic (Tom)
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Make <application>pg_dumpall</> assume that databases have public
-       <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
-      </para>
+    <listitem>
+     <para>
+      Fix possible wrong answers or crash when a PL/pgSQL function tries
+      to <literal>RETURN</> from within an <literal>EXCEPTION</> block
+      (Tom)
+     </para>
+    </listitem>
 
-      <para>
-       This preserves the previous behavior that anyone can connect to a
-       database if allowed by <filename>pg_hba.conf</>.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix PANIC during enlargement of a hash index (Tom)
+     </para>
+    </listitem>
 
-    </itemizedlist>
+    <listitem>
+     <para>
+      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+     </para>
+    </listitem>
 
-   </sect2>
-  </sect1>
+   </itemizedlist>
 
-  <sect1 id="release-8-2">
  <title>Release 8.2</title>
+  </sect2>
</sect1>
 
-   <note>
-    <title>Release date</title>
-    <simpara>2006-12-05</simpara>
-   </note>
+ <sect1 id="release-8-2-3">
+  <title>Release 8.2.3</title>
 
-   <sect2>
-    <title>Overview</title>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-07</simpara>
+  </note>
 
-    <para>
-     This release adds many functionality and performance improvements that
-     were requested by users, including:
+  <para>
+   This release contains two fixes from 8.2.2.
+  </para>
 
-    <itemizedlist>
+  <sect2>
+   <title>Migration to Version 8.2.3</title>
 
-      <listitem>
-       <para>
-        Query language enhancements including <command>INSERT/UPDATE/DELETE
-        RETURNING</command>, multirow <literal>VALUES</literal> lists, and
-        optional target-table alias in
-        <command>UPDATE</>/<command>DELETE</command>
-       </para>
-      </listitem>
+   <para>
+    A dump/restore is not required for those running 8.2.X.
+   </para>
 
-      <listitem>
-       <para>
-        Index creation without blocking concurrent
-        <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
-        operations
-       </para>
-      </listitem>
+  </sect2>
 
-      <listitem>
-       <para>
-        Many query optimization improvements, including support for
-        reordering outer joins
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Improved sorting performance with lower memory usage
-       </para>
-      </listitem>
+   <itemizedlist>
 
-      <listitem>
-       <para>
-        More efficient locking with better concurrency
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Remove overly-restrictive check for type length in constraints and
+      functional indexes(Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        More efficient vacuuming
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Easier administration of warm standby servers
-       </para>
-      </listitem>
+   </itemizedlist>
 
-      <listitem>
-       <para>
-        New <literal>FILLFACTOR</literal> support for tables and indexes
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Monitoring, logging, and performance tuning additions
-       </para>
-      </listitem>
+ <sect1 id="release-8-2-2">
+  <title>Release 8.2.2</title>
 
-      <listitem>
-       <para>
-        More control over creating and dropping objects
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Table inheritance relationships can be defined
-        for and removed from pre-existing tables
-       </para>
-      </listitem>
+  <para>
+   This release contains a variety of fixes from 8.2.1, including
+   a security fix.
+  </para>
 
-      <listitem>
-       <para>
-        <command>COPY TO</command> can copy the output of an arbitrary
-        <command>SELECT</command> statement
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.2.2</title>
 
-      <listitem>
-       <para>
-        Array improvements, including nulls in arrays
-       </para>
-      </listitem>
+   <para>
+    A dump/restore is not required for those running 8.2.X.
+   </para>
 
-      <listitem>
-       <para>
-        Aggregate-function improvements, including multiple-input
-        aggregates and SQL:2003 statistical functions
-       </para>
-      </listitem>
+  </sect2>
 
-      <listitem>
-       <para>
-        Many <filename>contrib/</filename> improvements
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-     </itemizedlist>
+   <itemizedlist>
 
-    </para>
-
-   </sect2>
+    <listitem>
+     <para>
+      Remove security vulnerabilities that allowed connected users
+      to read backend memory (Tom)
+     </para>
 
-   <sect2>
-    <title>Migration to version 8.2</title>
+     <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>
 
-    <para>
-     A dump/restore using <application>pg_dump</application> is
-     required for those wishing to migrate data from any previous
-     release.
-    </para>
+    <listitem>
+     <para>
+      Fix not-so-rare-anymore bug wherein btree index page splits could fail
+      due to choosing an infeasible split point (Heikki Linnakangas)
+     </para>
+    </listitem>
 
-    <para>
-     Observe the following incompatibilities:
-    </para>
+    <listitem>
+     <para>
+      Fix Borland C compile scripts (L Bayuk)
+     </para>
+    </listitem>
 
-    <itemizedlist>
+    <listitem>
+     <para>
+      Properly handle <function>to_char('CC')</> for years ending in
+      <literal>00</> (Tom)
+     </para>
 
-      <listitem>
-       <para>
-        Set <link
-        linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
-        to <literal>on</> by default (Bruce)
-       </para>
+     <para>
+      Year 2000 is in the twentieth century, not the twenty-first.
+     </para>
+    </listitem>
 
-       <para>
-        This issues a warning if backslash escapes are used in
-        <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
-        strings</link>.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Change the <link linkend="sql-syntax-row-constructors">row
-        constructor syntax</link> (<literal>ROW(...)</>) so that
-        list elements <literal>foo.*</> will be expanded to a list
-        of their member fields, rather than creating a nested
-        row type field as formerly (Tom)
-       </para>
+    <listitem>
+     <para>
+      Fix incorrect permission check in
+      <literal>information_schema.key_column_usage</> view (Tom)
+     </para>
 
-       <para>
-        The new behavior is substantially more useful since it
-        allows, for example, triggers to check for data changes
-        with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
-        The old behavior is still available by omitting <literal>.*</>.
-       </para>
-      </listitem>
+     <para>
+      The symptom is <quote>relation with OID nnnnn does not exist</> errors.
+      To get this fix without using <command>initdb</>, use <command>CREATE OR
+      REPLACE VIEW</> to install the corrected definition found in
+      <filename>share/information_schema.sql</>.  Note you will need to do
+      this in each database.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Make <link linkend="row-wise-comparison">row comparisons</link>
-        follow <acronym>SQL</> standard semantics and allow them
-        to be used in index scans (Tom)
-       </para>
+    <listitem>
+     <para>
+      Improve <command>VACUUM</> performance for databases with many tables (Tom)
+     </para>
+    </listitem>
 
-       <para>
-        Previously, row = and &lt;&gt; comparisons followed the
-        standard but &lt; &lt;= &gt; &gt;= did not.  A row comparison
-        can now be used as an index constraint for a multicolumn
-        index matching the row value.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
-        tests follow <acronym>SQL</> standard semantics (Tom)
-       </para>
+    <listitem>
+     <para>
+      Fix potentially incorrect results from index searches using
+      <literal>ROW</> inequality conditions (Tom)
+     </para>
+    </listitem>
 
-       <para>
-        The former behavior conformed to the standard for simple cases
-        with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
-        true if any row field was non-null, whereas the standard says it
-        should return true only when all fields are non-null.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Tighten security of multi-byte character processing for UTF8 sequences
+      over three bytes long (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
-        CONSTRAINT</></link> affect only one constraint (Kris Jurka)
-       </para>
+    <listitem>
+     <para>
+      Fix bogus <quote>permission denied</> failures occurring on Windows
+      due to attempts to fsync already-deleted files (Magnus, Tom)
+     </para>
+    </listitem>
 
-       <para>
-        In previous releases, <command>SET CONSTRAINT</> modified
-        all constraints with a matching name.  In this release,
-        the schema search path is used to modify only the first
-        matching constraint.  A schema specification is also
-        supported.  This more nearly conforms to the SQL standard.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix bug that could cause the statistics collector
+      to hang on Windows (Magnus)
+     </para>
 
-      <listitem>
-       <para>
-        Remove <literal>RULE</> permission for tables, for security reasons
-        (Tom)
-       </para>
+     <para>
+      This would in turn lead to autovacuum not working.
+     </para>
+    </listitem>
 
-       <para>
-        As of this release, only a table's owner can create or modify
-        rules for the table.  For backwards compatibility,
-        <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
-        but it does nothing.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix possible crashes when an already-in-use PL/pgSQL function is
+      updated (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Array comparison improvements (Tom)
-       </para>
+    <listitem>
+     <para>
+      Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
+     </para>
+    </listitem>
 
-       <para>
-        Now array dimensions are also compared.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix possible errors in processing PL/pgSQL exception blocks (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Change <link linkend="functions-array">array concatenation</link>
-        to match documented behavior (Tom)
-       </para>
+   </itemizedlist>
 
-       <para>
-        This changes the previous behavior where concatenation
-        would modify the array lower bound.
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Make command-line options of <application>postmaster</>
-        and <link linkend="app-postgres"><application>postgres</></link>
-        identical (Peter)
-       </para>
+ <sect1 id="release-8-2-1">
+  <title>Release 8.2.1</title>
 
-       <para>
-        This allows the postmaster to pass arguments to each backend
-        without using <literal>-o</>.  Note that some options are now
-        only available as long-form options, because there were conflicting
-        single-letter options.
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Deprecate use of <application>postmaster</> symbolic link (Peter)
-       </para>
+  <para>
+   This release contains a variety of fixes from 8.2.
+  </para>
 
-       <para>
-        <application>postmaster</> and <application>postgres</>
-        commands now act identically, with the behavior determined
-        by command-line options.  The <application>postmaster</> symbolic link is
-        kept for compatibility, but is not really needed.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.2.1</title>
 
-      <listitem>
-       <para>
-        Change <link
-        linkend="guc-log-duration"><varname>log_duration</></link>
-        to output even if the query is not output (Tom)
-       </para>
+   <para>
+    A dump/restore is not required for those running 8.2.
+   </para>
 
-       <para>
-        In prior releases, <varname>log_duration</> only printed if
-        the query appeared earlier in the log.
-       </para>
-      </listitem>
+  </sect2>
 
-      <listitem>
-       <para>
-        Make <link
-        linkend="functions-formatting"><function>to_char(time)</></link>
-        and <link
-        linkend="functions-formatting"><function>to_char(interval)</></link>
-        treat <literal>HH</> and <literal>HH12</> as 12-hour
-        intervals
-       </para>
+  <sect2>
+   <title>Changes</title>
 
-       <para>
-        Most applications should use <literal>HH24</> unless they
-        want a 12-hour display.
-       </para>
-      </listitem>
+   <itemizedlist>
 
-      <listitem>
-       <para>
-        Zero unmasked bits in conversion from <link
-        linkend="datatype-inet"><type>INET</></link> to <link
-        linkend="datatype-inet"><type>CIDR</></link> (Tom)
-       </para>
+    <listitem>
+     <para>
+      Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
+      <literal>LIMIT NULL</>) (Tom)
+     </para>
+    </listitem>
 
-       <para>
-        This ensures that the converted value is actually valid for
-        <type>CIDR</>.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <filename>Several /contrib/tsearch2</> fixes (Teodor)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Remove <varname>australian_timezones</> configuration variable
-        (Joachim Wieland)
-       </para>
+    <listitem>
+     <para>
+      On Windows, make log messages coming from the operating system use
+      <acronym>ASCII</> encoding (Hiroshi Saito)
+     </para>
 
-       <para>
-        This variable has been superseded by a more general facility
-        for configuring timezone abbreviations.
-       </para>
-      </listitem>
+     <para>
+      This fixes a conversion problem when there is a mismatch between
+      the encoding of the operating system and database server.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Improve cost estimation for nested-loop index scans (Tom)
-       </para>
+    <listitem>
+     <para>
+      Fix Windows linking of <application>pg_dump</> using
+      <filename>win32.mak</>
+      (Hiroshi Saito)
+     </para>
+    </listitem>
 
-       <para>
-        This might eliminate the need to set unrealistically small
-        values of <link
-        linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
-        If you have been using a very small <varname>random_page_cost</>,
-        please recheck your test cases.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix planner mistakes for outer join queries (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Change behavior of <command>pg_dump</> <literal>-n</> and
-        <literal>-t</> options.  (Greg Sabino Mullane)
-       </para>
-       <para>
-        See the <command>pg_dump</> manual page for details.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix several problems in queries involving sub-SELECTs (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Change <link linkend="libpq"><application>libpq</></link>
-        <function>PQdsplen()</> to return a useful value (Martijn
-        van Oosterhout)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Fix potential crash in SPI during subtransaction abort (Tom)
+     </para>
 
-      <listitem>
-       <para>
-        Declare <link linkend="libpq"><application>libpq</></link>
-        <function>PQgetssl()</> as returning <literal>void *</>,
-        rather than <literal>SSL *</> (Martijn van Oosterhout)
-       </para>
+     <para>
+      This affects all PL functions since they all use SPI.
+     </para>
+    </listitem>
 
-       <para>
-        This allows applications to use the function without including
-        the OpenSSL headers.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Improve build speed of <acronym>PDF</> documentation (Peter)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        C-language loadable modules must now include a
-        <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
-        macro call for version compatibility checking
-        (Martijn van Oosterhout)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        For security's sake, modules used by a PL/PerlU function are no
-        longer available to PL/Perl functions (Andrew)
-       </para>
-       <note>
-        <para>
-         This also implies that data can no longer be shared between a PL/Perl
-         function and a PL/PerlU function.
-         Some Perl installations have not been compiled with the correct flags
-         to allow multiple interpreters to exist within a single process.
-         In this situation PL/Perl and PL/PerlU cannot both be used in a
-         single backend. The solution is to get a Perl installation which
-         supports multiple interpreters.
-        </para>
-       </note>
-      </listitem>
+    <listitem>
+     <para>
+      Improve optimization decisions related to index scans (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
-        <function>xml_is_well_formed()</> (Tom)
-       </para>
+    <listitem>
+     <para>
+      Have <application>psql</> print multi-byte combining characters as
+      before, rather than output as <literal>\u</> (Tom)
+     </para>
+    </listitem>
 
-       <para>
-        <function>xml_valid()</> will remain for backward compatibility,
-        but its behavior will change to do schema checking in a future
-        release.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
 
-      <listitem>
-       <para>
-        Remove <filename>contrib/ora2pg/</>, now at <ulink
-        url="http://www.samse.fr/GPL/ora2pg"></ulink>
-       </para>
-      </listitem>
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Remove contrib modules that have been migrated to PgFoundry:
-        <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
-        <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Make <application>pg_dumpall</> assume that databases have public
+      <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
+     </para>
 
-      <listitem>
-       <para>
-        Remove abandoned contrib modules:
-        <filename>mSQL-interface</>, <filename>tips</>
-       </para>
-      </listitem>
+     <para>
+      This preserves the previous behavior that anyone can connect to a
+      database if allowed by <filename>pg_hba.conf</>.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
-       </para>
+   </itemizedlist>
 
-       <para>
-        These ports no longer had active maintainers.
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
   </itemizedlist>
-   </sect2>
<sect1 id="release-8-2">
+  <title>Release 8.2</title>
 
-   <sect2>
-    <title>Changes</title>
+  <note>
+   <title>Release date</title>
+   <simpara>2006-12-05</simpara>
+  </note>
 
-    <para>
-     Below you will find a detailed account of the
-     changes between <productname>PostgreSQL</productname> 8.2 and
-     the previous major release.
-    </para>
+  <sect2>
+   <title>Overview</title>
 
-    <sect3>
-     <title>Performance Improvements</title>
-     <itemizedlist>
+   <para>
+    This release adds many functionality and performance improvements that
+    were requested by users, including:
 
-      <listitem>
-       <para>
-        Allow the planner to reorder <link linkend="queries-join">outer
-        joins</link> in some circumstances (Tom)
-       </para>
+   <itemizedlist>
 
-       <para>
-        In previous releases, outer joins would always be evaluated in
-        the order written in the query. This change allows the
-        query optimizer to consider reordering outer joins, in cases where
-        it can determine that the join order can be changed without
-        altering the meaning of the query.  This can make a
-        considerable performance difference for queries involving
-        multiple outer joins or mixed inner and outer joins.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Query language enhancements including <command>INSERT/UPDATE/DELETE
+       RETURNING</command>, multirow <literal>VALUES</literal> lists, and
+       optional target-table alias in
+       <command>UPDATE</>/<command>DELETE</command>
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve efficiency of <link
-        linkend="functions-comparisons"><literal>IN</>
-        (list-of-expressions)</link> clauses (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Index creation without blocking concurrent
+       <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
+       operations
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve sorting speed and reduce memory usage (Simon, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Many query optimization improvements, including support for
+       reordering outer joins
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve subtransaction performance (Alvaro, Itagaki Takahiro,
-        Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improved sorting performance with lower memory usage
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>FILLFACTOR</> to <link
-        linkend="SQL-CREATETABLE">table</link> and <link
-        linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
-        Takahiro)
-       </para>
+     <listitem>
+      <para>
+       More efficient locking with better concurrency
+      </para>
+     </listitem>
 
-       <para>
-        This leaves extra free space in each table or index page,
-        allowing improved performance as the database grows.  This
-        is particularly valuable to maintain clustering.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       More efficient vacuuming
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Increase default values for <link
-        linkend="guc-shared-buffers"><varname>shared_buffers</></link>
-        and <link
-        linkend="guc-max-fsm-pages"><varname>max_fsm_pages</></link>
-        (Andrew)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Easier administration of warm standby servers
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve locking performance by breaking the lock manager tables into
-        sections
-        (Tom)
-       </para>
+     <listitem>
+      <para>
+       New <literal>FILLFACTOR</literal> support for tables and indexes
+      </para>
+     </listitem>
 
-       <para>
-        This allows locking to be more fine-grained, reducing
-        contention.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Monitoring, logging, and performance tuning additions
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Reduce locking requirements of sequential scans (Qingqing
-        Zhou)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       More control over creating and dropping objects
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Reduce locking required for database creation and destruction
-        (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Table inheritance relationships can be defined
+       for and removed from pre-existing tables
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve the optimizer's selectivity estimates for <link
-        linkend="functions-like"><literal>LIKE</></link>, <link
-        linkend="functions-like"><literal>ILIKE</></link>, and
-        <link linkend="functions-posix-regexp">regular expression</link>
-        operations (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       <command>COPY TO</command> can copy the output of an arbitrary
+       <command>SELECT</command> statement
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve planning of joins to <link linkend="ddl-inherit">inherited
-        tables</link> and <link linkend="queries-union"><literal>UNION
-        ALL</></link> views (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Array improvements, including nulls in arrays
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="guc-constraint-exclusion">constraint
-        exclusion</link> to be applied to <link
-        linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
-        <command>DELETE</> queries (Tom)
-       </para>
+     <listitem>
+      <para>
+       Aggregate-function improvements, including multiple-input
+       aggregates and SQL:2003 statistical functions
+      </para>
+     </listitem>
 
-       <para>
-        <command>SELECT</> already honored constraint exclusion.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Many <filename>contrib/</filename> improvements
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve planning of constant <literal>WHERE</> clauses, such as
-        a condition that depends only on variables inherited from an
-        outer query level (Tom)
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Protocol-level unnamed prepared statements are re-planned
-        for each set of <literal>BIND</> values (Tom)
-       </para>
+   </para>
 
-       <para>
-        This improves performance because the exact parameter values
-        can be used in the plan.
-       </para>
-      </listitem>
+  </sect2>
 
-      <listitem>
-       <para>
-        Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
-        Tom)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.2</title>
 
-      <listitem>
-       <para>
-        Avoid extra scan of tables without indexes during <link
-        linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
-       </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>
-        Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
-        indexing (Oleg, Teodor)
-       </para>
-      </listitem>
+   <para>
+    Observe the following incompatibilities:
+   </para>
 
-      <listitem>
-       <para>
-        Remove dead index entries before B-Tree page split (Junji
-        Teramoto)
-       </para>
-      </listitem>
+   <itemizedlist>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Set <link
+       linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
+       to <literal>on</> by default (Bruce)
+      </para>
 
-    </sect3>
+      <para>
+       This issues a warning if backslash escapes are used in
+       <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
+       strings</link>.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Server Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Change the <link linkend="sql-syntax-row-constructors">row
+       constructor syntax</link> (<literal>ROW(...)</>) so that
+       list elements <literal>foo.*</> will be expanded to a list
+       of their member fields, rather than creating a nested
+       row type field as formerly (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Allow a forced switch to a new transaction log file (Simon, Tom)
-       </para>
+      <para>
+       The new behavior is substantially more useful since it
+       allows, for example, triggers to check for data changes
+       with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
+       The old behavior is still available by omitting <literal>.*</>.
+      </para>
+     </listitem>
 
-       <para>
-        This is valuable for keeping warm standby slave servers
-        in sync with the master.  Transaction log file switching now also happens
-        automatically during <link
-        linkend="functions-admin"><function>pg_stop_backup()</></link>.
-        This ensures that all
-        transaction log files needed for recovery can be archived immediately.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <link linkend="row-wise-comparison">row comparisons</link>
+       follow <acronym>SQL</> standard semantics and allow them
+       to be used in index scans (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <acronym>WAL</> informational functions (Simon)
-       </para>
+      <para>
+       Previously, row = and &lt;&gt; comparisons followed the
+       standard but &lt; &lt;= &gt; &gt;= did not.  A row comparison
+       can now be used as an index constraint for a multicolumn
+       index matching the row value.
+      </para>
+     </listitem>
 
-       <para>
-        Add functions for interrogating the current transaction log insertion
-        point and determining <acronym>WAL</> filenames from the
-        hex <acronym>WAL</> locations displayed by <link
-        linkend="functions-admin"><function>pg_stop_backup()</></link>
-        and related functions.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
+       tests follow <acronym>SQL</> standard semantics (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Improve recovery from a crash during <acronym>WAL</> replay (Simon)
-       </para>
+      <para>
+       The former behavior conformed to the standard for simple cases
+       with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
+       true if any row field was non-null, whereas the standard says it
+       should return true only when all fields are non-null.
+      </para>
+     </listitem>
 
-       <para>
-        The server now does periodic checkpoints during <acronym>WAL</>
-        recovery, so if there is a crash, future <acronym>WAL</>
-        recovery is shortened.  This also eliminates the need for
-        warm standby servers to replay the entire log since the
-        base backup if they crash.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
+       CONSTRAINT</></link> affect only one constraint (Kris Jurka)
+      </para>
 
-      <listitem>
-       <para>
-        Improve reliability of long-term <acronym>WAL</> replay
-        (Heikki, Simon, Tom)
-       </para>
+      <para>
+       In previous releases, <command>SET CONSTRAINT</> modified
+       all constraints with a matching name.  In this release,
+       the schema search path is used to modify only the first
+       matching constraint.  A schema specification is also
+       supported.  This more nearly conforms to the SQL standard.
+      </para>
+     </listitem>
 
-       <para>
-        Formerly, trying to roll forward through more than 2 billion
-        transactions would not work due to XID wraparound.  This meant
-        warm standby servers had to be reloaded
-        from fresh base backups periodically.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <literal>RULE</> permission for tables, for security reasons
+       (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="guc-archive-timeout"><varname>archive_timeout</></link>
-        to force transaction log file switches at a given interval (Simon)
-       </para>
+      <para>
+       As of this release, only a table's owner can create or modify
+       rules for the table.  For backwards compatibility,
+       <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
+       but it does nothing.
+      </para>
+     </listitem>
 
-       <para>
-        This enforces a maximum replication delay for warm standby servers.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Array comparison improvements (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
-        authentication (Magnus Hagander)
-       </para>
+      <para>
+       Now array dimensions are also compared.
+      </para>
+     </listitem>
 
-       <para>
-        This is particularly useful for platforms that do not
-        support <acronym>PAM</>, such as Windows.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change <link linkend="functions-array">array concatenation</link>
+       to match documented behavior (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="sql-grant-description-objects"><literal>GRANT
-        CONNECT ON DATABASE</></link> (Gevik Babakhani)
-       </para>
+      <para>
+       This changes the previous behavior where concatenation
+       would modify the array lower bound.
+      </para>
+     </listitem>
 
-       <para>
-        This gives SQL-level control over database access.  It works as
-        an additional filter on top of the existing
-        <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
-        controls.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make command-line options of <application>postmaster</>
+       and <link linkend="app-postgres"><application>postgres</></link>
+       identical (Peter)
+      </para>
 
-      <listitem>
-       <para>
-        Add support for <link linkend="ssl-tcp"><acronym>SSL</>
-        Certificate Revocation List</link> (<acronym>CRL</>) files
-        (Libor Hoho&scaron;)
-       </para>
+      <para>
+       This allows the postmaster to pass arguments to each backend
+       without using <literal>-o</>.  Note that some options are now
+       only available as long-form options, because there were conflicting
+       single-letter options.
+      </para>
+     </listitem>
 
-       <para>
-        The server and <application>libpq</> both recognize <acronym>CRL</>
-        files now.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Deprecate use of <application>postmaster</> symbolic link (Peter)
+      </para>
 
-      <listitem>
-       <para>
-        <link linkend="GiST"><acronym>GiST</></link> indexes are
-        now clusterable (Teodor)
-       </para>
-      </listitem>
+      <para>
+       <application>postmaster</> and <application>postgres</>
+       commands now act identically, with the behavior determined
+       by command-line options.  The <application>postmaster</> symbolic link is
+       kept for compatibility, but is not really needed.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Remove routine autovacuum server log entries (Bruce)
-       </para>
+     <listitem>
+      <para>
+       Change <link
+       linkend="guc-log-duration"><varname>log_duration</></link>
+       to output even if the query is not output (Tom)
+      </para>
 
-       <para>
-        <link
-        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
-        now shows autovacuum activity.
-       </para>
-      </listitem>
+      <para>
+       In prior releases, <varname>log_duration</> only printed if
+       the query appeared earlier in the log.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Track maximum XID age within individual tables, instead of whole databases (Alvaro)
-       </para>
+     <listitem>
+      <para>
+       Make <link
+       linkend="functions-formatting"><function>to_char(time)</></link>
+       and <link
+       linkend="functions-formatting"><function>to_char(interval)</></link>
+       treat <literal>HH</> and <literal>HH12</> as 12-hour
+       intervals
+      </para>
 
-       <para>
-        This reduces the overhead involved in preventing transaction
-        ID wraparound, by avoiding unnecessary VACUUMs.
-       </para>
-      </listitem>
+      <para>
+       Most applications should use <literal>HH24</> unless they
+       want a 12-hour display.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add last vacuum and analyze timestamp columns to the stats
-        collector (Larry Rosenman)
-       </para>
+     <listitem>
+      <para>
+       Zero unmasked bits in conversion from <link
+       linkend="datatype-inet"><type>INET</></link> to <link
+       linkend="datatype-inet"><type>CIDR</></link> (Tom)
+      </para>
 
-       <para>
-        These values now appear in the <link
-        linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
-        system views.
-       </para>
-      </listitem>
+      <para>
+       This ensures that the converted value is actually valid for
+       <type>CIDR</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve performance of statistics monitoring, especially
-        <link
-        linkend="guc-stats-command-string"><varname>stats_command_string</></link>
-        (Tom, Bruce)
-       </para>
+     <listitem>
+      <para>
+       Remove <varname>australian_timezones</> configuration variable
+       (Joachim Wieland)
+      </para>
 
-       <para>
-        This release enables <varname>stats_command_string</> by
-        default, now that its overhead is minimal.  This means
-        <link
-        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
-        will now show all active queries by default.
-       </para>
-      </listitem>
+      <para>
+       This variable has been superseded by a more general facility
+       for configuring timezone abbreviations.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add a <literal>waiting</> column to <link
-        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
-        (Tom)
-       </para>
+     <listitem>
+      <para>
+       Improve cost estimation for nested-loop index scans (Tom)
+      </para>
 
-       <para>
-        This allows <structname>pg_stat_activity</> to show all the
-        information included in the <application>ps</> display.
-       </para>
-      </listitem>
+      <para>
+       This might eliminate the need to set unrealistically small
+       values of <link
+       linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
+       If you have been using a very small <varname>random_page_cost</>,
+       please recheck your test cases.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add configuration parameter <link
-        linkend="guc-update-process-title"><varname>update_process_title</></link>
-        to control whether the <application>ps</> display is updated
-        for every command (Bruce)
-       </para>
+     <listitem>
+      <para>
+       Change behavior of <command>pg_dump</> <literal>-n</> and
+       <literal>-t</> options.  (Greg Sabino Mullane)
+      </para>
+      <para>
+       See the <command>pg_dump</> manual page for details.
+      </para>
+     </listitem>
 
-       <para>
-        On platforms where it is expensive to update the <application>ps</>
-        display, it might be worthwhile to turn this off and rely solely on
-        <structname>pg_stat_activity</> for status information.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Change <link linkend="libpq"><application>libpq</></link>
+       <function>PQdsplen()</> to return a useful value (Martijn
+       van Oosterhout)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow units to be specified in configuration settings
-        (Peter)
-       </para>
+     <listitem>
+      <para>
+       Declare <link linkend="libpq"><application>libpq</></link>
+       <function>PQgetssl()</> as returning <literal>void *</>,
+       rather than <literal>SSL *</> (Martijn van Oosterhout)
+      </para>
 
-       <para>
-        For example, you can now set <link
-        linkend="guc-shared-buffers"><varname>shared_buffers</></link>
-        to <literal>32MB</> rather than mentally converting sizes.
-       </para>
-      </listitem>
+      <para>
+       This allows applications to use the function without including
+       the OpenSSL headers.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add support for <link linkend="config-setting">include
-        directives</link> in <filename>postgresql.conf</> (Joachim
-        Wieland)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       C-language loadable modules must now include a
+       <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
+       macro call for version compatibility checking
+       (Martijn van Oosterhout)
+      </para>
+     </listitem>
 
-      <listitem>
+     <listitem>
+      <para>
+       For security's sake, modules used by a PL/PerlU function are no
+       longer available to PL/Perl functions (Andrew)
+      </para>
+      <note>
        <para>
-        Improve logging of protocol-level prepare/bind/execute
-        messages (Bruce, Tom)
+        This also implies that data can no longer be shared between a PL/Perl
+        function and a PL/PerlU function.
+        Some Perl installations have not been compiled with the correct flags
+        to allow multiple interpreters to exist within a single process.
+        In this situation PL/Perl and PL/PerlU cannot both be used in a
+        single backend. The solution is to get a Perl installation which
+        supports multiple interpreters.
        </para>
+      </note>
+     </listitem>
 
-       <para>
-        Such logging now shows statement names, bind parameter
-        values, and the text of the query being executed.  Also,
-        the query text is properly included in logged error messages
-        when enabled by <varname>log_min_error_statement</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
+       <function>xml_is_well_formed()</> (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Prevent <link
-        linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
-        from being set to unsafe values
-       </para>
+      <para>
+       <function>xml_valid()</> will remain for backward compatibility,
+       but its behavior will change to do schema checking in a future
+       release.
+      </para>
+     </listitem>
 
-       <para>
-        On platforms where we can determine the actual kernel stack depth
-        limit (which is most), make sure that the initial default value of
-        <varname>max_stack_depth</> is safe, and reject attempts to set it
-        to unsafely large values.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <filename>contrib/ora2pg/</>, now at <ulink
+       url="http://www.samse.fr/GPL/ora2pg"></ulink>
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Enable highlighting of error location in query in more
-        cases (Tom)
-       </para>
+     <listitem>
+      <para>
+       Remove contrib modules that have been migrated to PgFoundry:
+       <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
+       <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
+      </para>
+     </listitem>
 
-       <para>
-        The server is now able to report a specific error location for
-        some semantic errors (such as unrecognized column name), rather
-        than just for basic syntax errors as before.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove abandoned contrib modules:
+       <filename>mSQL-interface</>, <filename>tips</>
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Fix <quote>failed to re-find parent key</> errors in
-        <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
+      </para>
 
-      <listitem>
-       <para>
-        Clean out <filename>pg_internal.init</> cache files during server
-        restart (Simon)
-       </para>
+      <para>
+       These ports no longer had active maintainers.
+      </para>
+     </listitem>
 
-       <para>
-        This avoids a hazard that the cache files might contain stale
-        data after PITR recovery.
-       </para>
-      </listitem>
+   </itemizedlist>
+  </sect2>
 
-      <listitem>
-       <para>
-        Fix race condition for truncation of a large relation across a
-        gigabyte boundary by <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Fix bug causing needless deadlock errors on row-level locks (Tom)
-       </para>
-      </listitem>
+   <para>
+    Below you will find a detailed account of the
+    changes between <productname>PostgreSQL</productname> 8.2 and
+    the previous major release.
+   </para>
 
-      <listitem>
-       <para>
-        Fix bugs affecting multi-gigabyte hash indexes (Tom)
-       </para>
-      </listitem>
+   <sect3>
+    <title>Performance Improvements</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Each backend process is now its own process group leader (Tom)
-       </para>
+     <listitem>
+      <para>
+       Allow the planner to reorder <link linkend="queries-join">outer
+       joins</link> in some circumstances (Tom)
+      </para>
 
-       <para>
-        This allows query cancel to abort subprocesses invoked from a
-        backend or archive/recovery process.
-       </para>
-      </listitem>
+      <para>
+       In previous releases, outer joins would always be evaluated in
+       the order written in the query. This change allows the
+       query optimizer to consider reordering outer joins, in cases where
+       it can determine that the join order can be changed without
+       altering the meaning of the query.  This can make a
+       considerable performance difference for queries involving
+       multiple outer joins or mixed inner and outer joins.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Improve efficiency of <link
+       linkend="functions-comparisons"><literal>IN</>
+       (list-of-expressions)</link> clauses (Tom)
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Improve sorting speed and reduce memory usage (Simon, Tom)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Query Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Improve subtransaction performance (Alvaro, Itagaki Takahiro,
+       Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
-        linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
-        linkend="SQL-DELETE"><command>DELETE</></link>
-        <literal>RETURNING</> (Jonah Harris, Tom)
-       </para>
+     <listitem>
+      <para>
+       Add <literal>FILLFACTOR</> to <link
+       linkend="SQL-CREATETABLE">table</link> and <link
+       linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
+       Takahiro)
+      </para>
 
-       <para>
-        This allows these commands to return values, such as the
-        computed serial key for a new row.  In the <command>UPDATE</>
-        case, values from the updated version of the row are returned.
-       </para>
-      </listitem>
+      <para>
+       This leaves extra free space in each table or index page,
+       allowing improved performance as the database grows.  This
+       is particularly valuable to maintain clustering.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add support for multiple-row <link
-        linkend="queries-values"><literal>VALUES</></link> clauses,
-        per SQL standard (Joe, Tom)
-       </para>
+     <listitem>
+      <para>
+       Increase default values for <link
+       linkend="guc-shared-buffers"><varname>shared_buffers</></link>
+       and <link
+       linkend="guc-max-fsm-pages"><varname>max_fsm_pages</></link>
+       (Andrew)
+      </para>
+     </listitem>
 
-       <para>
-        This allows <command>INSERT</> to insert multiple rows of
-        constants, or queries to generate result sets using constants.
-        For example, <literal>INSERT ...  VALUES (...), (...),
-        ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
-        ....) AS alias(f1, ...)</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve locking performance by breaking the lock manager tables into
+       sections
+       (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
-        and <link linkend="SQL-DELETE"><command>DELETE</></link>
-        to use an alias for the target table (Atsushi Ogawa)
-       </para>
+      <para>
+       This allows locking to be more fine-grained, reducing
+       contention.
+      </para>
+     </listitem>
 
-       <para>
-        The SQL standard does not permit an alias in these commands, but
-        many database systems allow one anyway for notational convenience.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Reduce locking requirements of sequential scans (Qingqing
+       Zhou)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
-        to set multiple columns with a list of values (Susanne
-        Ebrecht)
-       </para>
+     <listitem>
+      <para>
+       Reduce locking required for database creation and destruction
+       (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        This is basically a short-hand for assigning the columns
-        and values in pairs.  The syntax is <literal>UPDATE tab
-        SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve the optimizer's selectivity estimates for <link
+       linkend="functions-like"><literal>LIKE</></link>, <link
+       linkend="functions-like"><literal>ILIKE</></link>, and
+       <link linkend="functions-posix-regexp">regular expression</link>
+       operations (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make row comparisons work per standard (Tom)
-       </para>
+     <listitem>
+      <para>
+       Improve planning of joins to <link linkend="ddl-inherit">inherited
+       tables</link> and <link linkend="queries-union"><literal>UNION
+       ALL</></link> views (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
-        that is, compare the first elements, if equal compare the second
-        elements, and so on.  Formerly they expanded to an AND condition
-        across all the elements, which was neither standard nor very useful.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <link linkend="guc-constraint-exclusion">constraint
+       exclusion</link> to be applied to <link
+       linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
+       <command>DELETE</> queries (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
-        option to <command>TRUNCATE</> (Joachim Wieland)
-       </para>
+      <para>
+       <command>SELECT</> already honored constraint exclusion.
+      </para>
+     </listitem>
 
-       <para>
-        This causes <command>TRUNCATE</> to automatically include all tables
-        that reference the specified table(s) via foreign keys.  While
-        convenient, this is a dangerous tool &mdash; use with caution!
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve planning of constant <literal>WHERE</> clauses, such as
+       a condition that depends only on variables inherited from an
+       outer query level (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
-        in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
-        command (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Protocol-level unnamed prepared statements are re-planned
+       for each set of <literal>BIND</> values (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="functions-comparisons"><literal>IS NOT
-        DISTINCT FROM</></link> (Pavel Stehule)
-       </para>
+      <para>
+       This improves performance because the exact parameter values
+       can be used in the plan.
+      </para>
+     </listitem>
 
-       <para>
-        This operator is similar to equality (<literal>=</>), but
-        evaluates to true when both left and right operands are
-        <literal>NULL</>, and to false when just one is, rather than
-        yielding <literal>NULL</> in these cases.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
+       Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Improve the length output used by <link
-        linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
-        (Tom)
-       </para>
+     <listitem>
+      <para>
+       Avoid extra scan of tables without indexes during <link
+       linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
+      </para>
+     </listitem>
 
-       <para>
-        When all corresponding columns are of the same defined length, that
-        length is used for the result, rather than a generic length.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
+       indexing (Oleg, Teodor)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="functions-like"><literal>ILIKE</></link>
-        to work for multi-byte encodings (Tom)
-       </para>
+     <listitem>
+      <para>
+       Remove dead index entries before B-Tree page split (Junji
+       Teramoto)
+      </para>
+     </listitem>
 
-       <para>
-        Internally, <literal>ILIKE</> now calls <function>lower()</>
-        and then uses <literal>LIKE</>.  Locale-specific regular
-        expression patterns still do not work in these encodings.
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Enable <link
-        linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
-        to be turned <literal>on</> (Kevin Grittner)
-       </para>
+   </sect3>
 
-       <para>
-        This allows backslash escaping in strings to be disabled,
-        making <productname>PostgreSQL</> more
-        standards-compliant.  The default is <literal>off</> for backwards
-        compatibility, but future releases will default this to <literal>on</>.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Server Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Do not flatten subqueries that contain <literal>volatile</>
-        functions in their target lists (Jaime Casanova)
-       </para>
+     <listitem>
+      <para>
+       Allow a forced switch to a new transaction log file (Simon, Tom)
+      </para>
 
-       <para>
-        This prevents surprising behavior due to multiple evaluation
-        of a <literal>volatile</> function (such as <function>random()</>
-        or <function>nextval()</>).  It might cause performance
-        degradation in the presence of functions that are unnecessarily
-        marked as <literal>volatile</>.
-       </para>
-      </listitem>
+      <para>
+       This is valuable for keeping warm standby slave servers
+       in sync with the master.  Transaction log file switching now also happens
+       automatically during <link
+       linkend="functions-admin"><function>pg_stop_backup()</></link>.
+       This ensures that all
+       transaction log files needed for recovery can be archived immediately.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add system views <link
-        linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
-        and <link
-        linkend="view-pg-cursors"><literal>pg_cursors</></link>
-        to show prepared statements and open cursors (Joachim Wieland, Neil)
-       </para>
+     <listitem>
+      <para>
+       Add <acronym>WAL</> informational functions (Simon)
+      </para>
 
-       <para>
-        These are very useful in pooled connection setups.
-       </para>
-      </listitem>
+      <para>
+       Add functions for interrogating the current transaction log insertion
+       point and determining <acronym>WAL</> filenames from the
+       hex <acronym>WAL</> locations displayed by <link
+       linkend="functions-admin"><function>pg_stop_backup()</></link>
+       and related functions.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Support portal parameters in <link
-        linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
-        linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
-       </para>
+     <listitem>
+      <para>
+       Improve recovery from a crash during <acronym>WAL</> replay (Simon)
+      </para>
 
-       <para>
-        This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
-        work in these commands.
-       </para>
-      </listitem>
+      <para>
+       The server now does periodic checkpoints during <acronym>WAL</>
+       recovery, so if there is a crash, future <acronym>WAL</>
+       recovery is shortened.  This also eliminates the need for
+       warm standby servers to replay the entire log since the
+       base backup if they crash.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        If <acronym>SQL</>-level <link
-        linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
-        are unspecified, infer their types from the content of the
-        query (Neil)
-       </para>
+     <listitem>
+      <para>
+       Improve reliability of long-term <acronym>WAL</> replay
+       (Heikki, Simon, Tom)
+      </para>
 
-       <para>
-        Protocol-level <command>PREPARE</> already did this.
-       </para>
-      </listitem>
+      <para>
+       Formerly, trying to roll forward through more than 2 billion
+       transactions would not work due to XID wraparound.  This meant
+       warm standby servers had to be reloaded
+       from fresh base backups periodically.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
-        two billion (Dhanaraj M)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link
+       linkend="guc-archive-timeout"><varname>archive_timeout</></link>
+       to force transaction log file switches at a given interval (Simon)
+      </para>
 
-     </itemizedlist>
+      <para>
+       This enforces a maximum replication delay for warm standby servers.
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
+       authentication (Magnus Hagander)
+      </para>
 
-    <sect3>
-     <title>Object Manipulation Changes</title>
-     <itemizedlist>
+      <para>
+       This is particularly useful for platforms that do not
+       support <acronym>PAM</>, such as Windows.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>TABLESPACE</> clause to <link
-        linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
-        (Neil)
-       </para>
+     <listitem>
+      <para>
+       Add <link linkend="sql-grant-description-objects"><literal>GRANT
+       CONNECT ON DATABASE</></link> (Gevik Babakhani)
+      </para>
 
-       <para>
-        This allows a tablespace to be specified for the new table.
-       </para>
-      </listitem>
+      <para>
+       This gives SQL-level control over database access.  It works as
+       an additional filter on top of the existing
+       <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
+       controls.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>ON COMMIT</> clause to <link
-        linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
-        (Neil)
-       </para>
-
-       <para>
-        This allows temporary tables to be truncated or dropped on
-        transaction commit.  The default behavior is for the table
-        to remain until the session ends.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add support for <link linkend="ssl-tcp"><acronym>SSL</>
+       Certificate Revocation List</link> (<acronym>CRL</>) files
+       (Libor Hoho&scaron;)
+      </para>
 
-      <listitem>
-       <para>
-        Add <literal>INCLUDING CONSTRAINTS</> to <link
-        linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
-        (Greg Stark)
-       </para>
+      <para>
+       The server and <application>libpq</> both recognize <acronym>CRL</>
+       files now.
+      </para>
+     </listitem>
 
-       <para>
-        This allows easy copying of <literal>CHECK</> constraints to a new
-        table.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       <link linkend="GiST"><acronym>GiST</></link> indexes are
+       now clusterable (Teodor)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow the creation of placeholder (shell) <link
-        linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
-       </para>
+     <listitem>
+      <para>
+       Remove routine autovacuum server log entries (Bruce)
+      </para>
 
-       <para>
-        A shell type declaration creates a type name, without specifying
-        any of the details of the type.  Making a shell type is useful
-        because it allows cleaner declaration of the type's input/output
-        functions, which must exist before the type can be defined <quote>for
-        real</>.  The syntax is <command>CREATE TYPE <replaceable
-        class="parameter">typename</replaceable></>.
-       </para>
-      </listitem>
+      <para>
+       <link
+       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+       now shows autovacuum activity.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
-        now support multiple input parameters (Sergey Koposov, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Track maximum XID age within individual tables, instead of whole databases (Alvaro)
+      </para>
 
-      <listitem>
-       <para>
-        Add new aggregate creation <link
-        linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
-       </para>
+      <para>
+       This reduces the overhead involved in preventing transaction
+       ID wraparound, by avoiding unnecessary VACUUMs.
+      </para>
+     </listitem>
 
-       <para>
-        The new syntax is <command>CREATE AGGREGATE
-        <replaceable>aggname</> (<replaceable>input_type</>)
-        (<replaceable>parameter_list</>)</command>.  This more
-        naturally supports the new multi-parameter aggregate
-        functionality.  The previous syntax is still supported.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add last vacuum and analyze timestamp columns to the stats
+       collector (Larry Rosenman)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
-        to remove a previously set role password (Peter)
-       </para>
-      </listitem>
+      <para>
+       These values now appear in the <link
+       linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
+       system views.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <command>DROP</> object <literal>IF EXISTS</> for many
-        object types (Andrew)
-       </para>
+     <listitem>
+      <para>
+       Improve performance of statistics monitoring, especially
+       <varname>stats_command_string</>
+       (Tom, Bruce)
+      </para>
 
-       <para>
-        This allows <command>DROP</> operations on non-existent
-        objects without generating an error.
-       </para>
-      </listitem>
+      <para>
+       This release enables <varname>stats_command_string</> by
+       default, now that its overhead is minimal.  This means
+       <link
+       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+       will now show all active queries by default.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
-        to drop all objects owned by a role (Alvaro)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add a <literal>waiting</> column to <link
+       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
+       (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
-        OWNED</></link> to reassign ownership of all objects owned
-        by a role (Alvaro)
-       </para>
+      <para>
+       This allows <structname>pg_stat_activity</> to show all the
+       information included in the <application>ps</> display.
+      </para>
+     </listitem>
 
-       <para>
-        This, and <literal>DROP OWNED</> above, facilitate dropping
-        roles.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add configuration parameter <link
+       linkend="guc-update-process-title"><varname>update_process_title</></link>
+       to control whether the <application>ps</> display is updated
+       for every command (Bruce)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
-        syntax (Bruce)
-       </para>
+      <para>
+       On platforms where it is expensive to update the <application>ps</>
+       display, it might be worthwhile to turn this off and rely solely on
+       <structname>pg_stat_activity</> for status information.
+      </para>
+     </listitem>
 
-       <para>
-        This was added for setting sequence-specific permissions.
-        <literal>GRANT ON TABLE</> for sequences is still supported
-        for backward compatibility.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow units to be specified in configuration settings
+       (Peter)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
-        permission for sequences that allows only <function>currval()</>
-        and <function>nextval()</>, not <function>setval()</>
-        (Bruce)
-       </para>
+      <para>
+       For example, you can now set <link
+       linkend="guc-shared-buffers"><varname>shared_buffers</></link>
+       to <literal>32MB</> rather than mentally converting sizes.
+      </para>
+     </listitem>
 
-       <para>
-        <literal>USAGE</> permission allows more fine-grained
-        control over sequence access.  Granting <literal>USAGE</>
-        allows users to increment
-        a sequence, but prevents them from setting the sequence to
-        an arbitrary value using <function>setval()</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add support for <link linkend="config-setting">include
+       directives</link> in <filename>postgresql.conf</> (Joachim
+       Wieland)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
-        [ NO ] INHERIT</></link> (Greg Stark)
-       </para>
+     <listitem>
+      <para>
+       Improve logging of protocol-level prepare/bind/execute
+       messages (Bruce, Tom)
+      </para>
 
-       <para>
-        This allows inheritance to be adjusted dynamically, rather than
-        just at table creation and destruction.  This is very valuable
-        when using inheritance to implement table partitioning.
-       </para>
-      </listitem>
+      <para>
+       Such logging now shows statement names, bind parameter
+       values, and the text of the query being executed.  Also,
+       the query text is properly included in logged error messages
+       when enabled by <varname>log_min_error_statement</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-COMMENT">comments</link> on global
-        objects to be stored globally (Kris Jurka)
-       </para>
+     <listitem>
+      <para>
+       Prevent <link
+       linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
+       from being set to unsafe values
+      </para>
 
-       <para>
-        Previously, comments attached to databases were stored in individual
-        databases, making them ineffective, and there was no provision
-        at all for comments on roles or tablespaces.  This change adds a new
-        shared catalog <link
-        linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
-        and stores comments on databases, roles, and tablespaces therein.
-       </para>
-      </listitem>
+      <para>
+       On platforms where we can determine the actual kernel stack depth
+       limit (which is most), make sure that the initial default value of
+       <varname>max_stack_depth</> is safe, and reject attempts to set it
+       to unsafely large values.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Enable highlighting of error location in query in more
+       cases (Tom)
+      </para>
 
-    </sect3>
+      <para>
+       The server is now able to report a specific error location for
+       some semantic errors (such as unrecognized column name), rather
+       than just for basic syntax errors as before.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>Utility Command Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add option to allow indexes to be created without blocking
-        concurrent writes to the table (Greg Stark, Tom)
-       </para>
+     <listitem>
+      <para>
+       Clean out <filename>pg_internal.init</> cache files during server
+       restart (Simon)
+      </para>
 
-       <para>
-        The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
-        INDEX CONCURRENTLY</></link>.  The default behavior is
-        still to block table modification while a index is being
-        created.
-       </para>
-      </listitem>
+      <para>
+       This avoids a hazard that the cache files might contain stale
+       data after PITR recovery.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Provide <link linkend="functions-advisory-locks">advisory
-        locking</link> functionality (Abhijit Menon-Sen, Tom)
-       </para>
+     <listitem>
+      <para>
+       Fix race condition for truncation of a large relation across a
+       gigabyte boundary by <command>VACUUM</> (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        This is a new locking API designed to replace what used to be
-        in /contrib/userlock.  The userlock code is now on pgfoundry.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix bug causing needless deadlock errors on row-level locks (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-COPY"><command>COPY</></link> to
-        dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
-        Zak)
-       </para>
+     <listitem>
+      <para>
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
-        queries. The syntax is <literal>COPY (SELECT ...) TO</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Each backend process is now its own process group leader (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Make the <link linkend="SQL-COPY"><command>COPY</></link>
-        command return a command tag that includes the number of
-        rows copied (Volkan YAZICI)
-       </para>
-      </listitem>
+      <para>
+       This allows query cancel to abort subprocesses invoked from a
+       backend or archive/recovery process.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
-        to expire rows without being affected by other concurrent
-        <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Make <link linkend="APP-INITDB"><application>initdb</></link>
-        detect the operating system locale and set the default
-        <varname>DateStyle</> accordingly (Peter)
-       </para>
+   </sect3>
 
-       <para>
-        This makes it more likely that the installed
-        <filename>postgresql.conf</> <varname>DateStyle</> value will
-        be as desired.
-       </para>
-      </listitem>
+   <sect3>
+    <title>Query Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Reduce number of progress messages displayed by <application>initdb</> (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
+       linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
+       linkend="SQL-DELETE"><command>DELETE</></link>
+       <literal>RETURNING</> (Jonah Harris, Tom)
+      </para>
 
-     </itemizedlist>
+      <para>
+       This allows these commands to return values, such as the
+       computed serial key for a new row.  In the <command>UPDATE</>
+       case, values from the updated version of the row are returned.
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Add support for multiple-row <link
+       linkend="queries-values"><literal>VALUES</></link> clauses,
+       per SQL standard (Joe, Tom)
+      </para>
 
-    <sect3>
-     <title>Date/Time Changes</title>
-     <itemizedlist>
+      <para>
+       This allows <command>INSERT</> to insert multiple rows of
+       constants, or queries to generate result sets using constants.
+       For example, <literal>INSERT ...  VALUES (...), (...),
+       ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
+       ....) AS alias(f1, ...)</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow full timezone names in <link
-        linkend="datatype-datetime"><type>timestamp</></link> input values
-        (Joachim Wieland)
-       </para>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
+       and <link linkend="SQL-DELETE"><command>DELETE</></link>
+       to use an alias for the target table (Atsushi Ogawa)
+      </para>
 
-       <para>
-        For example, <literal>'2006-05-24 21:11
-        America/New_York'::timestamptz</>.
-       </para>
-      </listitem>
+      <para>
+       The SQL standard does not permit an alias in these commands, but
+       many database systems allow one anyway for notational convenience.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Support configurable timezone abbreviations (Joachim Wieland)
-       </para>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
+       to set multiple columns with a list of values (Susanne
+       Ebrecht)
+      </para>
 
-       <para>
-        A desired set of timezone abbreviations can be chosen via the
-        configuration parameter <link
-        linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
-       </para>
-      </listitem>
+      <para>
+       This is basically a short-hand for assigning the columns
+       and values in pairs.  The syntax is <literal>UPDATE tab
+       SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
-        and <link
-        linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
-        views to show supported timezones (Magnus Hagander)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make row comparisons work per standard (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
-        <link
-        linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
-        and <link
-        linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
-        (Bruce)
-       </para>
+      <para>
+       The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
+       that is, compare the first elements, if equal compare the second
+       elements, and so on.  Formerly they expanded to an AND condition
+       across all the elements, which was neither standard nor very useful.
+      </para>
+     </listitem>
 
-       <para>
-        <function>clock_timestamp()</> is the current wall-clock time,
-        <function>statement_timestamp()</> is the time the current
-        statement arrived at the server, and
-        <function>transaction_timestamp()</> is an alias for
-        <function>now()</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
+       option to <command>TRUNCATE</> (Joachim Wieland)
+      </para>
 
-      <listitem>
-       <para>
-        Allow <link
-        linkend="functions-formatting"><function>to_char()</></link>
-        to print localized month and day names (Euler Taveira de
-        Oliveira)
-       </para>
-      </listitem>
+      <para>
+       This causes <command>TRUNCATE</> to automatically include all tables
+       that reference the specified table(s) via foreign keys.  While
+       convenient, this is a dangerous tool &mdash; use with caution!
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link
-        linkend="functions-formatting"><function>to_char(time)</></link>
-        and <link
-        linkend="functions-formatting"><function>to_char(interval)</></link>
-        to output <acronym>AM</>/<acronym>PM</> specifications
-        (Bruce)
-       </para>
+     <listitem>
+      <para>
+       Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
+       in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
+       command (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        Intervals and times are treated as 24-hour periods, e.g.
-        <literal>25 hours</> is considered <acronym>AM</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link linkend="functions-comparisons"><literal>IS NOT
+       DISTINCT FROM</></link> (Pavel Stehule)
+      </para>
 
-      <listitem>
-       <para>
-        Add new function <link
-        linkend="functions-datetime-table"><function>justify_interval()</></link>
-        to adjust interval units (Mark Dilger)
-       </para>
-      </listitem>
+      <para>
+       This operator is similar to equality (<literal>=</>), but
+       evaluates to true when both left and right operands are
+       <literal>NULL</>, and to false when just one is, rather than
+       yielding <literal>NULL</> in these cases.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow timezone offsets up to 14:59 away from GMT
-       </para>
+     <listitem>
+      <para>
+       Improve the length output used by <link
+       linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
+       (Tom)
+      </para>
 
-       <para>
-        Kiribati uses GMT+14, so we'd better accept that.
-       </para>
-      </listitem>
+      <para>
+       When all corresponding columns are of the same defined length, that
+       length is used for the result, rather than a generic length.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Interval computation improvements (Michael Glaesemann, Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <link linkend="functions-like"><literal>ILIKE</></link>
+       to work for multi-byte encodings (Tom)
+      </para>
 
-     </itemizedlist>
+      <para>
+       Internally, <literal>ILIKE</> now calls <function>lower()</>
+       and then uses <literal>LIKE</>.  Locale-specific regular
+       expression patterns still do not work in these encodings.
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Enable <link
+       linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
+       to be turned <literal>on</> (Kevin Grittner)
+      </para>
 
-    <sect3>
-     <title>Other Data Type and Function Changes</title>
-     <itemizedlist>
+      <para>
+       This allows backslash escaping in strings to be disabled,
+       making <productname>PostgreSQL</> more
+       standards-compliant.  The default is <literal>off</> for backwards
+       compatibility, but future releases will default this to <literal>on</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow arrays to contain <literal>NULL</> elements (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Do not flatten subqueries that contain <literal>volatile</>
+       functions in their target lists (Jaime Casanova)
+      </para>
 
-      <listitem>
-       <para>
-        Allow assignment to array elements not contiguous with the existing
-        entries (Tom)
-       </para>
+      <para>
+       This prevents surprising behavior due to multiple evaluation
+       of a <literal>volatile</> function (such as <function>random()</>
+       or <function>nextval()</>).  It might cause performance
+       degradation in the presence of functions that are unnecessarily
+       marked as <literal>volatile</>.
+      </para>
+     </listitem>
 
-       <para>
-        The intervening array positions will be filled with nulls.
-        This is per SQL standard.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add system views <link
+       linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
+       and <link
+       linkend="view-pg-cursors"><literal>pg_cursors</></link>
+       to show prepared statements and open cursors (Joachim Wieland, Neil)
+      </para>
 
-      <listitem>
-       <para>
-        New built-in <link linkend="functions-array">operators</link>
-        for array-subset comparisons (<literal>@&gt;</>,
-        <literal>&lt;@</>, <literal>&amp;&amp;</>) (Teodor, Tom)
-       </para>
+      <para>
+       These are very useful in pooled connection setups.
+      </para>
+     </listitem>
 
-       <para>
-        These operators can be indexed for many data types using
-        <acronym>GiST</> or <acronym>GIN</> indexes.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Support portal parameters in <link
+       linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
+       linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add convenient arithmetic <link
-        linkend="cidr-inet-operators-table">operations</link> on
-        <type>INET</>/<type>CIDR</> values (Stephen R. van den
-        Berg)
-       </para>
+      <para>
+       This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
+       work in these commands.
+      </para>
+     </listitem>
 
-       <para>
-        The new operators are <literal>&</> (and), <literal>|</>
-        (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
-        <type>inet</> <literal>-</> <type>int8</>, and
-        <type>inet</> <literal>-</> <type>inet</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       If <acronym>SQL</>-level <link
+       linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
+       are unspecified, infer their types from the content of the
+       query (Neil)
+      </para>
 
-      <listitem>
-       <para>
-        Add new <link
-        linkend="functions-aggregate-statistics-table">aggregate functions</link>
-        from SQL:2003 (Neil)
-       </para>
+      <para>
+       Protocol-level <command>PREPARE</> already did this.
+      </para>
+     </listitem>
 
-       <para>
-        The new functions are <function>var_pop()</>,
-        <function>var_samp()</>, <function>stddev_pop()</>, and
-        <function>stddev_samp()</>.  <function>var_samp()</> and
-        <function>stddev_samp()</> are merely renamings of the
-        existing aggregates <function>variance()</> and
-        <function>stddev()</>.  The latter names remain available
-        for backward compatibility.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
+       two billion (Dhanaraj M)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add SQL:2003 statistical <link
-        linkend="functions-aggregate-statistics-table">aggregates</link>
-        (Sergey Koposov)
-       </para>
+    </itemizedlist>
 
-       <para>
-        New functions:  <function>regr_intercept()</>,
-        <function>regr_slope()</>, <function>regr_r2()</>,
-        <function>corr()</>, <function>covar_samp()</>,
-        <function>covar_pop()</>, <function>regr_avgx()</>,
-        <function>regr_avgy()</>, <function>regr_sxy()</>,
-        <function>regr_sxx()</>, <function>regr_syy()</>,
-        <function>regr_count()</>.
-       </para>
-      </listitem>
+   </sect3>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
-        based on other domains (Tom)
-       </para>
-      </listitem>
+   <sect3>
+    <title>Object Manipulation Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Properly enforce domain <link
-        linkend="ddl-constraints"><literal>CHECK</></link> constraints
-        everywhere (Neil, Tom)
-       </para>
+     <listitem>
+      <para>
+       Add <literal>TABLESPACE</> clause to <link
+       linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
+       (Neil)
+      </para>
 
-       <para>
-        For example, the result of a user-defined function that is
-        declared to return a domain type is now checked against the
-        domain's constraints. This closes a significant hole in the domain
-        implementation.
-       </para>
-      </listitem>
+      <para>
+       This allows a tablespace to be specified for the new table.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Fix problems with dumping renamed <link
-        linkend="datatype-serial"><type>SERIAL</></link> columns
-        (Tom)
-       </para>
+     <listitem>
+      <para>
+       Add <literal>ON COMMIT</> clause to <link
+       linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
+       (Neil)
+      </para>
 
-       <para>
-        The fix is to dump a <type>SERIAL</> column by explicitly
-        specifying its <literal>DEFAULT</> and sequence elements,
-        and reconstructing the <type>SERIAL</> column on reload
-        using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
-        SEQUENCE OWNED BY</></link> command.  This also allows
-        dropping a <type>SERIAL</> column specification.
-       </para>
-      </listitem>
+      <para>
+       This allows temporary tables to be truncated or dropped on
+       transaction commit.  The default behavior is for the table
+       to remain until the session ends.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add a server-side sleep function <link
-        linkend="functions-datetime-delay"><function>pg_sleep()</></link>
-        (Joachim Wieland)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <literal>INCLUDING CONSTRAINTS</> to <link
+       linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
+       (Greg Stark)
+      </para>
 
-      <listitem>
-       <para>
-        Add all comparison operators for the <link
-        linkend="datatype-oid"><type>tid</></link> (tuple id) data
-        type (Mark Kirkwood, Greg Stark, Tom)
-       </para>
-      </listitem>
+      <para>
+       This allows easy copying of <literal>CHECK</> constraints to a new
+       table.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Allow the creation of placeholder (shell) <link
+       linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
+      </para>
 
-    </sect3>
+      <para>
+       A shell type declaration creates a type name, without specifying
+       any of the details of the type.  Making a shell type is useful
+       because it allows cleaner declaration of the type's input/output
+       functions, which must exist before the type can be defined <quote>for
+       real</>.  The syntax is <command>CREATE TYPE <replaceable
+       class="parameter">typename</replaceable></>.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>PL/PgSQL Server-Side Language Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
+       now support multiple input parameters (Sergey Koposov, Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
-        trigger parameters (Andrew)
-       </para>
+     <listitem>
+      <para>
+       Add new aggregate creation <link
+       linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
+      </para>
 
-       <para>
-        <literal>TG_relname</> is now deprecated.  Comparable
-        changes have been made in the trigger parameters for the other
-        PLs as well.
-       </para>
-      </listitem>
+      <para>
+       The new syntax is <command>CREATE AGGREGATE
+       <replaceable>aggname</> (<replaceable>input_type</>)
+       (<replaceable>parameter_list</>)</command>.  This more
+       naturally supports the new multi-parameter aggregate
+       functionality.  The previous syntax is still supported.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <literal>FOR</> statements to return values to scalars
-        as well as records and row types (Pavel Stehule)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link
+       linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
+       to remove a previously set role password (Peter)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add a <literal>BY</> clause to the <literal>FOR</> loop,
-        to control the iteration increment (Jaime Casanova)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <command>DROP</> object <literal>IF EXISTS</> for many
+       object types (Andrew)
+      </para>
 
-      <listitem>
-       <para>
-        Add <literal>STRICT</> to <link
-        linkend="plpgsql-statements-sql-onerow"><command>SELECT
-        INTO</></link> (Matt Miller)
-       </para>
+      <para>
+       This allows <command>DROP</> operations on non-existent
+       objects without generating an error.
+      </para>
+     </listitem>
 
-       <para>
-        <literal>STRICT</> mode throws an exception if more or less
-        than one row is returned by the <command>SELECT</>, for
-        <productname>Oracle PL/SQL</> compatibility.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
+       to drop all objects owned by a role (Alvaro)
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
+       OWNED</></link> to reassign ownership of all objects owned
+       by a role (Alvaro)
+      </para>
 
-    </sect3>
+      <para>
+       This, and <literal>DROP OWNED</> above, facilitate dropping
+       roles.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title>PL/Perl Server-Side Language Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
+       syntax (Bruce)
+      </para>
 
-      <listitem>
-       <para>
-        Add <literal>table_name</> and <literal>table_schema</> to
-        trigger parameters (Adam Sj&oslash;gren)
-       </para>
-      </listitem>
+      <para>
+       This was added for setting sequence-specific permissions.
+       <literal>GRANT ON TABLE</> for sequences is still supported
+       for backward compatibility.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add prepared queries (Dmitry Karasik)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Make <literal>$_TD</> trigger data a global variable (Andrew)
-       </para>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
+       permission for sequences that allows only <function>currval()</>
+       and <function>nextval()</>, not <function>setval()</>
+       (Bruce)
+      </para>
 
-       <para>
-        Previously, it was lexical, which caused unexpected sharing
-        violations.
-       </para>
-      </listitem>
+      <para>
+       <literal>USAGE</> permission allows more fine-grained
+       control over sequence access.  Granting <literal>USAGE</>
+       allows users to increment
+       a sequence, but prevents them from setting the sequence to
+       an arbitrary value using <function>setval()</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Run PL/Perl and PL/PerlU in separate interpreters, for security
-        reasons (Andrew)
-       </para>
-       <para>
-        In consequence, they can no longer share data nor loaded modules.
-        Also, if Perl has not been compiled with the requisite flags to
-        allow multiple interpreters, only one of these languages can be used
-        in any given backend process.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
+       [ NO ] INHERIT</></link> (Greg Stark)
+      </para>
 
-     </itemizedlist>
+      <para>
+       This allows inheritance to be adjusted dynamically, rather than
+       just at table creation and destruction.  This is very valuable
+       when using inheritance to implement table partitioning.
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-COMMENT">comments</link> on global
+       objects to be stored globally (Kris Jurka)
+      </para>
 
-    <sect3>
-     <title>PL/Python Server-Side Language Changes</title>
-     <itemizedlist>
+      <para>
+       Previously, comments attached to databases were stored in individual
+       databases, making them ineffective, and there was no provision
+       at all for comments on roles or tablespaces.  This change adds a new
+       shared catalog <link
+       linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
+       and stores comments on databases, roles, and tablespaces therein.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Named parameters are passed as ordinary variables, as well as in the
-        <literal>args[]</> array (Sven Suursoho)
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Add <literal>table_name</> and <literal>table_schema</> to
-        trigger parameters (Andrew)
-       </para>
-      </listitem>
+   </sect3>
 
-      <listitem>
-       <para>
-        Allow returning of composite types and result sets (Sven Suursoho)
-       </para>
-      </listitem>
+   <sect3>
+    <title>Utility Command Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Return result-set as <literal>list</>, <literal>iterator</>,
-        or <literal>generator </>(Sven Suursoho)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add option to allow indexes to be created without blocking
+       concurrent writes to the table (Greg Stark, Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Allow functions to return <literal>void</> (Neil)
-       </para>
-      </listitem>
+      <para>
+       The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
+       INDEX CONCURRENTLY</></link>.  The default behavior is
+       still to block table modification while a index is being
+       created.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Python 2.5 is now supported (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Provide <link linkend="functions-advisory-locks">advisory
+       locking</link> functionality (Abhijit Menon-Sen, Tom)
+      </para>
 
-     </itemizedlist>
+      <para>
+       This is a new locking API designed to replace what used to be
+       in /contrib/userlock.  The userlock code is now on pgfoundry.
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-COPY"><command>COPY</></link> to
+       dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
+       Zak)
+      </para>
 
-    <sect3>
-     <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
-     <itemizedlist>
+      <para>
+       This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
+       queries. The syntax is <literal>COPY (SELECT ...) TO</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add new command <literal>\password</> for changing role
-        password with client-side password encryption (Peter)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make the <link linkend="SQL-COPY"><command>COPY</></link>
+       command return a command tag that includes the number of
+       rows copied (Volkan YAZICI)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <literal>\c</> to connect to a new host and port
-        number (David, Volkan YAZICI)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
+       to expire rows without being affected by other concurrent
+       <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add tablespace display to <literal>\l+</> (Philip Yarra)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <link linkend="APP-INITDB"><application>initdb</></link>
+       detect the operating system locale and set the default
+       <varname>DateStyle</> accordingly (Peter)
+      </para>
 
-      <listitem>
-       <para>
-        Improve <literal>\df</> slash command to include the argument
-        names and modes (<literal>OUT</> or <literal>INOUT</>) of
-        the function (David Fetter)
-       </para>
-      </listitem>
+      <para>
+       This makes it more likely that the installed
+       <filename>postgresql.conf</> <varname>DateStyle</> value will
+       be as desired.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Support binary <command>COPY</> (Andreas Pflug)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Reduce number of progress messages displayed by <application>initdb</> (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add option to run the entire session in a single transaction
-        (Simon)
-       </para>
+    </itemizedlist>
 
-       <para>
-        Use option <literal>-1</> or <literal>--single-transaction</>.
-       </para>
-      </listitem>
+   </sect3>
 
-      <listitem>
-       <para>
-        Support for automatically retrieving <command>SELECT</>
-        results in batches using a cursor (Chris Mair)
-       </para>
+   <sect3>
+    <title>Date/Time Changes</title>
+    <itemizedlist>
 
-       <para>
-        This is enabled using <command>\set FETCH_COUNT
-        <replaceable>n</></command>. This
-        feature allows large result sets to be retrieved in
-        <application>psql</> without attempting to buffer the entire
-        result set in memory.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow full timezone names in <link
+       linkend="datatype-datetime"><type>timestamp</></link> input values
+       (Joachim Wieland)
+      </para>
 
-      <listitem>
-       <para>
-        Make multi-line values align in the proper column
-        (Martijn van Oosterhout)
-       </para>
+      <para>
+       For example, <literal>'2006-05-24 21:11
+       America/New_York'::timestamptz</>.
+      </para>
+     </listitem>
 
-       <para>
-        Field values containing newlines are now displayed in a more
-        readable fashion.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Support configurable timezone abbreviations (Joachim Wieland)
+      </para>
 
-      <listitem>
-       <para>
-        Save multi-line statements as a single entry, rather than
-        one line at a time (Sergey E. Koposov)
-       </para>
+      <para>
+       A desired set of timezone abbreviations can be chosen via the
+       configuration parameter <link
+       linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
+      </para>
+     </listitem>
 
-       <para>
-        This makes up-arrow recall of queries easier.  (This is
-        not available on Windows, because that platform uses the native
-        command-line editing present in the operating system.)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link
+       linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
+       and <link
+       linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
+       views to show supported timezones (Magnus Hagander)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Make the line counter 64-bit so it can handle files with more
-        than two billion lines (David Fetter)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <link
+       linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
+       <link
+       linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
+       and <link
+       linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
+       (Bruce)
+      </para>
 
-      <listitem>
-       <para>
-        Report both the returned data and the command status tag
-        for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
-        RETURNING</> (Tom)
-       </para>
-      </listitem>
+      <para>
+       <function>clock_timestamp()</> is the current wall-clock time,
+       <function>statement_timestamp()</> is the time the current
+       statement arrived at the server, and
+       <function>transaction_timestamp()</> is an alias for
+       <function>now()</>.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Allow <link
+       linkend="functions-formatting"><function>to_char()</></link>
+       to print localized month and day names (Euler Taveira de
+       Oliveira)
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Allow <link
+       linkend="functions-formatting"><function>to_char(time)</></link>
+       and <link
+       linkend="functions-formatting"><function>to_char(interval)</></link>
+       to output <acronym>AM</>/<acronym>PM</> specifications
+       (Bruce)
+      </para>
 
-    <sect3>
-     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
-     <itemizedlist>
+      <para>
+       Intervals and times are treated as 24-hour periods, e.g.
+       <literal>25 hours</> is considered <acronym>AM</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow complex selection of objects to be included or excluded
-        by <application>pg_dump</> (Greg Sabino Mullane)
-       </para>
+     <listitem>
+      <para>
+       Add new function <link
+       linkend="functions-datetime-table"><function>justify_interval()</></link>
+       to adjust interval units (Mark Dilger)
+      </para>
+     </listitem>
 
-       <para>
-        <application>pg_dump</> now supports multiple <literal>-n</>
-        (schema) and <literal>-t</> (table) options, and adds
-        <literal>-N</> and <literal>-T</> options to exclude objects.
-        Also, the arguments of these switches can now be wild-card expressions
-        rather than single object names, for example
-        <literal>-t 'foo*'</>, and a schema can be part of
-        a <literal>-t</> or <literal>-T</> switch, for example
-        <literal>-t schema1.table1</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow timezone offsets up to 14:59 away from GMT
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
-        <literal>--no-data-for-failed-tables</> option to suppress
-        loading data if table creation failed (i.e., the table already
-        exists) (Martin Pitt)
-       </para>
-      </listitem>
+      <para>
+       Kiribati uses GMT+14, so we'd better accept that.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
-        option to run the entire session in a single transaction
-        (Simon)
-       </para>
+     <listitem>
+      <para>
+       Interval computation improvements (Michael Glaesemann, Bruce)
+      </para>
+     </listitem>
 
-       <para>
-        Use option <literal>-1</> or <literal>--single-transaction</>.
-       </para>
-      </listitem>
+    </itemizedlist>
 
-     </itemizedlist>
+   </sect3>
 
-    </sect3>
+   <sect3>
+    <title>Other Data Type and Function Changes</title>
+    <itemizedlist>
 
-    <sect3>
-     <title><link linkend="libpq"><application>libpq</></link> Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Allow arrays to contain <literal>NULL</> elements (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="libpq-misc"><function>PQencryptPassword()</></link>
-        to encrypt passwords (Tom)
-       </para>
+     <listitem>
+      <para>
+       Allow assignment to array elements not contiguous with the existing
+       entries (Tom)
+      </para>
 
-       <para>
-        This allows passwords to be sent pre-encrypted for commands
-        like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
-        PASSWORD</></link>.
-       </para>
-      </listitem>
+      <para>
+       The intervening array positions will be filled with nulls.
+       This is per SQL standard.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add function <link
-        linkend="libpq-threading"><function>PQisthreadsafe()</></link>
-        (Bruce)
-       </para>
+     <listitem>
+      <para>
+       New built-in <link linkend="functions-array">operators</link>
+       for array-subset comparisons (<literal>@&gt;</>,
+       <literal>&lt;@</>, <literal>&amp;&amp;</>) (Teodor, Tom)
+      </para>
 
-       <para>
-        This allows applications to query the thread-safety status
-        of the library.
-       </para>
-      </listitem>
+      <para>
+       These operators can be indexed for many data types using
+       <acronym>GiST</> or <acronym>GIN</> indexes.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <link
-        linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
-        <link
-        linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
-        and related functions to return information about previously
-        prepared statements and open cursors (Volkan YAZICI)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add convenient arithmetic <link
+       linkend="cidr-inet-operators-table">operations</link> on
+       <type>INET</>/<type>CIDR</> values (Stephen R. van den
+       Berg)
+      </para>
 
-      <listitem>
-       <para>
-        Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
-        from <link
-        linkend="libpq-pgservice"><filename>pg_service.conf</></link>
-        (Laurenz Albe)
-       </para>
-      </listitem>
+      <para>
+       The new operators are <literal>&amp;</> (and), <literal>|</>
+       (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
+       <type>inet</> <literal>-</> <type>int8</>, and
+       <type>inet</> <literal>-</> <type>inet</>.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow a hostname in <link
-        linkend="libpq-pgpass"><filename>~/.pgpass</></link>
-        to match the default socket directory (Bruce)
-       </para>
+     <listitem>
+      <para>
+       Add new <link
+       linkend="functions-aggregate-statistics-table">aggregate functions</link>
+       from SQL:2003 (Neil)
+      </para>
 
-       <para>
-        A blank hostname continues to match any Unix-socket connection,
-        but this addition allows entries that are specific to one of
-        several postmasters on the machine.
-       </para>
-      </listitem>
+      <para>
+       The new functions are <function>var_pop()</>,
+       <function>var_samp()</>, <function>stddev_pop()</>, and
+       <function>stddev_samp()</>.  <function>var_samp()</> and
+       <function>stddev_samp()</> are merely renamings of the
+       existing aggregates <function>variance()</> and
+       <function>stddev()</>.  The latter names remain available
+       for backward compatibility.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Add SQL:2003 statistical <link
+       linkend="functions-aggregate-statistics-table">aggregates</link>
+       (Sergey Koposov)
+      </para>
 
-    </sect3>
+      <para>
+       New functions:  <function>regr_intercept()</>,
+       <function>regr_slope()</>, <function>regr_r2()</>,
+       <function>corr()</>, <function>covar_samp()</>,
+       <function>covar_pop()</>, <function>regr_avgx()</>,
+       <function>regr_avgy()</>, <function>regr_sxy()</>,
+       <function>regr_sxx()</>, <function>regr_syy()</>,
+       <function>regr_count()</>.
+      </para>
+     </listitem>
 
-    <sect3>
-     <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
+       based on other domains (Tom)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
-        put its result into a variable (Joachim Wieland)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Properly enforce domain <link
+       linkend="ddl-constraints"><literal>CHECK</></link> constraints
+       everywhere (Neil, Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
-        (Joachim Wieland)
-       </para>
-      </listitem>
+      <para>
+       For example, the result of a user-defined function that is
+       declared to return a domain type is now checked against the
+       domain's constraints. This closes a significant hole in the domain
+       implementation.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add regression tests (Joachim Wieland, Michael)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Fix problems with dumping renamed <link
+       linkend="datatype-serial"><type>SERIAL</></link> columns
+       (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Major source code cleanups (Joachim Wieland, Michael)
-       </para>
-      </listitem>
+      <para>
+       The fix is to dump a <type>SERIAL</> column by explicitly
+       specifying its <literal>DEFAULT</> and sequence elements,
+       and reconstructing the <type>SERIAL</> column on reload
+       using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
+       SEQUENCE OWNED BY</></link> command.  This also allows
+       dropping a <type>SERIAL</> column specification.
+      </para>
+     </listitem>
 
-     </itemizedlist>
+     <listitem>
+      <para>
+       Add a server-side sleep function <link
+       linkend="functions-datetime-delay"><function>pg_sleep()</></link>
+       (Joachim Wieland)
+      </para>
+     </listitem>
 
-    </sect3>
+     <listitem>
+      <para>
+       Add all comparison operators for the <link
+       linkend="datatype-oid"><type>tid</></link> (tuple id) data
+       type (Mark Kirkwood, Greg Stark, Tom)
+      </para>
+     </listitem>
 
-    <sect3>
-     <title><application>Windows</> Port</title>
-     <itemizedlist>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
-        server (Magnus, Hiroshi Saito)
-       </para>
-      </listitem>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add <acronym>MSVC</> support for utility commands and <link
-        linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
-        Saito)
-       </para>
-      </listitem>
+   <sect3>
+    <title>PL/PgSQL Server-Side Language Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Add support for Windows code pages <literal>1253</>,
-        <literal>1254</>, <literal>1255</>, and <literal>1257</>
-        (Kris Jurka)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
+       trigger parameters (Andrew)
+      </para>
 
-      <listitem>
-       <para>
-        Drop privileges on startup, so that the server can be started from
-        an administrative account (Magnus)
-       </para>
-      </listitem>
+      <para>
+       <literal>TG_relname</> is now deprecated.  Comparable
+       changes have been made in the trigger parameters for the other
+       PLs as well.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Stability fixes (Qingqing Zhou, Magnus)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow <literal>FOR</> statements to return values to scalars
+       as well as records and row types (Pavel Stehule)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add native semaphore implementation (Qingqing Zhou)
-       </para>
+     <listitem>
+      <para>
+       Add a <literal>BY</> clause to the <literal>FOR</> loop,
+       to control the iteration increment (Jaime Casanova)
+      </para>
+     </listitem>
 
-       <para>
-        The previous code mimicked SysV semaphores.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <literal>STRICT</> to <link
+       linkend="plpgsql-statements-sql-onerow"><command>SELECT
+       INTO</></link> (Matt Miller)
+      </para>
 
-     </itemizedlist>
+      <para>
+       <literal>STRICT</> mode throws an exception if more or less
+       than one row is returned by the <command>SELECT</>, for
+       <productname>Oracle PL/SQL</> compatibility.
+      </para>
+     </listitem>
 
-    </sect3>
+    </itemizedlist>
 
-    <sect3>
-     <title>Source Code Changes</title>
-     <itemizedlist>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
-        Inverted iNdex) index access method (Teodor, Oleg)
-       </para>
-      </listitem>
+   <sect3>
+    <title>PL/Perl Server-Side Language Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Remove R-tree indexing (Tom)
-       </para>
+     <listitem>
+      <para>
+       Add <literal>table_name</> and <literal>table_schema</> to
+       trigger parameters (Adam Sj&oslash;gren)
+      </para>
+     </listitem>
 
-       <para>
-        Rtree has been re-implemented using <link
-        linkend="GiST"><acronym>GiST</></link>. Among other
-        differences, this means that rtree indexes now have support
-        for crash recovery via write-ahead logging (WAL).
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add prepared queries (Dmitry Karasik)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Reduce libraries needlessly linked into the backend (Martijn
-        van Oosterhout, Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Make <literal>$_TD</> trigger data a global variable (Andrew)
+      </para>
 
-      <listitem>
-       <para>
-        Add a configure flag to allow libedit to be preferred over
-        <acronym>GNU</> readline (Bruce)
-       </para>
+      <para>
+       Previously, it was lexical, which caused unexpected sharing
+       violations.
+      </para>
+     </listitem>
 
-       <para>
-        Use configure <link
-        linkend="configure"><literal>--with-libedit-preferred</></link>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Run PL/Perl and PL/PerlU in separate interpreters, for security
+       reasons (Andrew)
+      </para>
+      <para>
+       In consequence, they can no longer share data nor loaded modules.
+       Also, if Perl has not been compiled with the requisite flags to
+       allow multiple interpreters, only one of these languages can be used
+       in any given backend process.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Allow installation into directories containing spaces
-        (Peter)
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Improve ability to relocate installation directories (Tom)
-       </para>
-      </listitem>
+   </sect3>
 
-      <listitem>
-       <para>
-        Add support for <productname>Solaris x86_64</> using the
-        <productname>Solaris</> compiler (Pierre Girard, Theo
-        Schlossnagle, Bruce)
-       </para>
-      </listitem>
+   <sect3>
+    <title>PL/Python Server-Side Language Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Add <application>DTrace</> support (Robert Lor)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Named parameters are passed as ordinary variables, as well as in the
+       <literal>args[]</> array (Sven Suursoho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>PG_VERSION_NUM</> for use by third-party
-        applications wanting to test the backend version in C using &gt;
-        and &lt; comparisons (Bruce)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add <literal>table_name</> and <literal>table_schema</> to
+       trigger parameters (Andrew)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
-        (Mark Wong)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow returning of composite types and result sets (Sven Suursoho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add <literal>LWLOCK_STATS</> define to report locking
-        activity (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Return result-set as <literal>list</>, <literal>iterator</>,
+       or <literal>generator </>(Sven Suursoho)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Emit warnings for unknown <application>configure</> options
-        (Martijn van Oosterhout)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Allow functions to return <literal>void</> (Neil)
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Add server support for <quote>plugin</> libraries
-        that can be used for add-on tasks such as debugging and performance
-        measurement (Korry Douglas)
-       </para>
+     <listitem>
+      <para>
+       Python 2.5 is now supported (Tom)
+      </para>
+     </listitem>
 
-       <para>
-        This consists of two features: a table of <quote>rendezvous
-        variables</> that allows separately-loaded shared libraries to
-        communicate, and a new configuration parameter <link
-        linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
-        that allows libraries to be loaded into specific sessions without
-        explicit cooperation from the client application.  This allows
-        external add-ons to implement features such as a PL/PgSQL debugger.
-       </para>
-      </listitem>
+    </itemizedlist>
 
-      <listitem>
-       <para>
-        Rename existing configuration parameter
-        <varname>preload_libraries</> to <link
-        linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
-        (Tom)
-       </para>
+   </sect3>
 
-       <para>
-        This was done for clarity in comparison to
-        <varname>local_preload_libraries</>.
-       </para>
-      </listitem>
+   <sect3>
+    <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
+    <itemizedlist>
 
-      <listitem>
-       <para>
-        Add new configuration parameter <link
-        linkend="guc-server-version-num"><varname>server_version_num</></link>
-        (Greg Sabino Mullane)
-       </para>
-
-       <para>
-        This is like <varname>server_version</varname>, but is an
-        integer, e.g.  <literal>80200</>. This allows applications to
-        make version checks more easily.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add a configuration parameter <link
-        linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
-        (Tom)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Re-implement the <link linkend="regress">regression test</link> script as a C program
-        (Magnus, Tom)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Allow loadable modules to allocate shared memory and
-        lightweight locks (Marc Munro)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add automatic initialization and finalization of dynamically
-        loaded libraries (Ralf Engelschall, Tom)
-       </para>
-
-       <para>
-        New <link linkend="xfunc-c-dynload">functions</link>
-        <function>_PG_init()</> and <function>_PG_fini()</> are
-        called if the library defines such symbols.  Hence we no
-        longer need to specify an initialization function in
-        <varname>shared_preload_libraries</>; we can assume that
-        the library used the <function>_PG_init()</> convention
-        instead.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add <link
-        linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
-        header block to all shared object files (Martijn van
-        Oosterhout)
-       </para>
-
-       <para>
-        The magic block prevents version mismatches between loadable object
-        files and servers.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-         Add shared library support for AIX (Laurenz Albe)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        New <link linkend="datatype-xml"><acronym>XML</></link>
-        documentation section (Bruce)
-       </para>
-      </listitem>
-
-     </itemizedlist>
-
-    </sect3>
-
-    <sect3>
-     <title>Contrib Changes</title>
-     <itemizedlist>
-
-      <listitem>
-       <para>
-        Major tsearch2 improvements (Oleg, Teodor)
-       </para>
-
-       <itemizedlist>
-
-        <listitem>
-         <para>
-          multibyte encoding support, including <acronym>UTF8</>
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          query rewriting support
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          improved ranking functions
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          thesaurus dictionary support
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          Ispell dictionaries now recognize <application>MySpell</>
-          format, used by <application>OpenOffice</>
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          <acronym>GIN</> support
-         </para>
-        </listitem>
-
-       </itemizedlist>
-
-      </listitem>
-
-      <listitem>
-       <para>
-        Add adminpack module containing <application>Pgadmin</> administration
-        functions (Dave)
-       </para>
-
-       <para>
-        These functions provide additional file system access
-        routines not present in the default <productname>PostgreSQL</>
-        server.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add sslinfo module (Victor Wagner)
-       </para>
-
-       <para>
-        Reports information about the current connection's <acronym>SSL</>
-        certificate.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add pgrowlocks module (Tatsuo)
-       </para>
-
-       <para>
-        This shows row locking information for a specified table.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add hstore module (Oleg, Teodor)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add isn module, replacing isbn_issn (Jeremy Kronuz)
-       </para>
-
-       <para>
-        This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
-        <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
-        <acronym>ISSN</> (serials).
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add index information functions to pgstattuple (ITAGAKI Takahiro,
-        Satoshi Nagayasu)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add pg_freespacemap module to display free space map information
-        (Mark Kirkwood)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        pgcrypto now has all planned functionality (Marko Kreen)
-       </para>
-       <itemizedlist>
-        <listitem>
-         <para>
-          Include iMath library in pgcrypto to have the public-key encryption
-          functions always available.
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          Add SHA224 algorithm that was missing in OpenBSD code.
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          Activate builtin code for SHA224/256/384/512 hashes on older
-          OpenSSL to have those algorithms always available.
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          New function gen_random_bytes() that returns cryptographically strong
-          randomness.  Useful for generating encryption keys.
-         </para>
-        </listitem>
-        <listitem>
-         <para>
-          Remove digest_exists(), hmac_exists() and cipher_exists() functions.
-         </para>
-        </listitem>
-       </itemizedlist>
-      </listitem>
-
-      <listitem>
-       <para>
-        Improvements to cube module (Joshua Reich)
-       </para>
-
-       <para>
-        New functions are <function>cube(float[])</>,
-        <function>cube(float[], float[])</>, and
-        <function>cube_subset(cube, int4[])</>.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add async query capability to dblink (Kai Londenberg,
-        Joe Conway)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        New operators for array-subset comparisons (<literal>@&gt;</>,
-        <literal>&lt;@</>, <literal>&amp;&amp;</>) (Tom)
-       </para>
-
-       <para>
-        Various contrib packages already had these operators for their
-        datatypes, but the naming wasn't consistent.  We have now added
-        consistently named array-subset comparison operators to the core code
-        and all the contrib packages that have such functionality.
-        (The old names remain available, but are deprecated.)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add uninstall scripts for all contrib packages that have install
-        scripts (David, Josh Drake)
-       </para>
-      </listitem>
-
-     </itemizedlist>
-
-    </sect3>
-
-   </sect2>
-  </sect1>
-
-  <sect1 id="release-8-1-10">
-   <title>Release 8.1.10</title>
-
-   <note>
-   <title>Release date</title>
-   <simpara>2007-09-17</simpara>
-   </note>
-
-   <para>
-    This release contains a variety of fixes from 8.1.9.
-   </para>
-
-   <sect2>
-    <title>Migration to version 8.1.10</title>
-
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
-
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
-
-    <itemizedlist>
+     <listitem>
+      <para>
+       Add new command <literal>\password</> for changing role
+       password with client-side password encryption (Peter)
+      </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)
+       Allow <literal>\c</> to connect to a new host and port
+       number (David, Volkan YAZICI)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+       Add tablespace display to <literal>\l+</> (Philip Yarra)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Allow the <type>interval</> data type to accept input consisting only of
-       milliseconds or microseconds (Neil)
+       Improve <literal>\df</> slash command to include the argument
+       names and modes (<literal>OUT</> or <literal>INOUT</>) of
+       the function (David Fetter)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Speed up rtree index insertion (Teodor)
+       Support binary <command>COPY</> (Andreas Pflug)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix excessive logging of <acronym>SSL</> error messages (Tom)
+       Add option to run the entire session in a single transaction
+       (Simon)
       </para>
-     </listitem>
 
-     <listitem>
       <para>
-       Fix logging so that log messages are never interleaved when using
-       the syslogger process (Andrew)
+       Use option <literal>-1</> or <literal>--single-transaction</>.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix crash when <varname>log_min_error_statement</> logging runs out
-       of memory (Tom)
+       Support for automatically retrieving <command>SELECT</>
+       results in batches using a cursor (Chris Mair)
       </para>
-     </listitem>
 
-     <listitem>
       <para>
-       Fix incorrect handling of some foreign-key corner cases (Tom)
+       This is enabled using <command>\set FETCH_COUNT
+       <replaceable>n</></command>. This
+       feature allows large result sets to be retrieved in
+       <application>psql</> without attempting to buffer the entire
+       result set in memory.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
-       due to attempting to process temporary tables of other sessions (Alvaro)
+       Make multi-line values align in the proper column
+       (Martijn van Oosterhout)
       </para>
-     </listitem>
 
-     <listitem>
       <para>
-       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+       Field values containing newlines are now displayed in a more
+       readable fashion.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Windows socket improvements (Magnus)
+       Save multi-line statements as a single entry, rather than
+       one line at a time (Sergey E. Koposov)
+      </para>
+
+      <para>
+       This makes up-arrow recall of queries easier.  (This is
+       not available on Windows, because that platform uses the native
+       command-line editing present in the operating system.)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
-       because of possible encoding mismatches (Tom)
+       Make the line counter 64-bit so it can handle files with more
+       than two billion lines (David Fetter)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Require non-superusers who use <filename>/contrib/dblink</> to use only
-       password authentication, as a security measure (Joe)
+       Report both the returned data and the command status tag
+       for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
+       RETURNING</> (Tom)
       </para>
      </listitem>
 
     </itemizedlist>
 
-   </sect2>
-  </sect1>
+   </sect3>
 
-  <sect1 id="release-8-1-9">
-   <title>Release 8.1.9</title>
+   <sect3>
+    <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
+    <itemizedlist>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-04-23</simpara>
-   </note>
+     <listitem>
+      <para>
+       Allow complex selection of objects to be included or excluded
+       by <application>pg_dump</> (Greg Sabino Mullane)
+      </para>
 
-   <para>
-    This release contains a variety of fixes from 8.1.8,
-    including a security fix.
-   </para>
+      <para>
+       <application>pg_dump</> now supports multiple <literal>-n</>
+       (schema) and <literal>-t</> (table) options, and adds
+       <literal>-N</> and <literal>-T</> options to exclude objects.
+       Also, the arguments of these switches can now be wild-card expressions
+       rather than single object names, for example
+       <literal>-t 'foo*'</>, and a schema can be part of
+       a <literal>-t</> or <literal>-T</> switch, for example
+       <literal>-t schema1.table1</>.
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Migration to version 8.1.9</title>
+     <listitem>
+      <para>
+       Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
+       <literal>--no-data-for-failed-tables</> option to suppress
+       loading data if table creation failed (i.e., the table already
+       exists) (Martin Pitt)
+      </para>
+     </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
+     <listitem>
+      <para>
+       Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
+       option to run the entire session in a single transaction
+       (Simon)
+      </para>
 
-   </sect2>
+      <para>
+       Use option <literal>-1</> or <literal>--single-transaction</>.
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Changes</title>
+    </itemizedlist>
 
+   </sect3>
+
+   <sect3>
+    <title><link linkend="libpq"><application>libpq</></link> 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>
-      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>
+      <para>
+       Add <link
+       linkend="libpq-misc"><function>PQencryptPassword()</></link>
+       to encrypt passwords (Tom)
+      </para>
 
-     <listitem>
-     <para>
-      <filename>/contrib/tsearch2</> crash fixes (Teodor)
-     </para>
+      <para>
+       This allows passwords to be sent pre-encrypted for commands
+       like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
+       PASSWORD</></link>.
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Require <command>COMMIT PREPARED</> to be executed in the same
-      database as the transaction was prepared in (Heikki)
-     </para>
-     </listitem>
+      <para>
+       Add function <link
+       linkend="libpq-threading"><function>PQisthreadsafe()</></link>
+       (Bruce)
+      </para>
 
-     <listitem>
-     <para>
-      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
-      <command>UPDATE</> chains (Tom, Pavan Deolasee)
-     </para>
+      <para>
+       This allows applications to query the thread-safety status
+       of the library.
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Planner fixes, including improving outer join and bitmap scan
-      selection logic (Tom)
-     </para>
+      <para>
+       Add <link
+       linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
+       <link
+       linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
+       and related functions to return information about previously
+       prepared statements and open cursors (Volkan YAZICI)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
-      (Tom)
-     </para>
+      <para>
+       Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
+       from <link
+       linkend="libpq-pgservice"><filename>pg_service.conf</></link>
+       (Laurenz Albe)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
-     </para>
+      <para>
+       Allow a hostname in <link
+       linkend="libpq-pgpass"><filename>~/.pgpass</></link>
+       to match the default socket directory (Bruce)
+      </para>
+
+      <para>
+       A blank hostname continues to match any Unix-socket connection,
+       but this addition allows entries that are specific to one of
+       several postmasters on the machine.
+      </para>
      </listitem>
 
     </itemizedlist>
 
-   </sect2>
-  </sect1>
+   </sect3>
 
-  <sect1 id="release-8-1-8">
-   <title>Release 8.1.8</title>
+   <sect3>
+    <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
+    <itemizedlist>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-07</simpara>
-   </note>
+     <listitem>
+      <para>
+       Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
+       put its result into a variable (Joachim Wieland)
+      </para>
+     </listitem>
 
-   <para>
-    This release contains one fix from 8.1.7.
-   </para>
+     <listitem>
+      <para>
+       Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
+       (Joachim Wieland)
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Migration to version 8.1.8</title>
+     <listitem>
+      <para>
+       Add regression tests (Joachim Wieland, Michael)
+      </para>
+     </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
+     <listitem>
+      <para>
+       Major source code cleanups (Joachim Wieland, Michael)
+      </para>
+     </listitem>
 
-   </sect2>
+    </itemizedlist>
 
-   <sect2>
-    <title>Changes</title>
+   </sect3>
 
+   <sect3>
+    <title><application>Windows</> Port</title>
     <itemizedlist>
 
      <listitem>
-     <para>
-      Remove overly-restrictive check for type length in constraints and
-      functional indexes(Tom)
-     </para>
+      <para>
+       Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
+       server (Magnus, Hiroshi Saito)
+      </para>
      </listitem>
 
-    </itemizedlist>
-
-   </sect2>
-  </sect1>
+     <listitem>
+      <para>
+       Add <acronym>MSVC</> support for utility commands and <link
+       linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
+       Saito)
+      </para>
+     </listitem>
 
-  <sect1 id="release-8-1-7">
-   <title>Release 8.1.7</title>
+     <listitem>
+      <para>
+       Add support for Windows code pages <literal>1253</>,
+       <literal>1254</>, <literal>1255</>, and <literal>1257</>
+       (Kris Jurka)
+      </para>
+     </listitem>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2007-02-05</simpara>
-   </note>
+     <listitem>
+      <para>
+       Drop privileges on startup, so that the server can be started from
+       an administrative account (Magnus)
+      </para>
+     </listitem>
 
-   <para>
-    This release contains a variety of fixes from 8.1.6, including
-    a security fix.
-   </para>
+     <listitem>
+      <para>
+       Stability fixes (Qingqing Zhou, Magnus)
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Migration to version 8.1.7</title>
+     <listitem>
+      <para>
+       Add native semaphore implementation (Qingqing Zhou)
+      </para>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
+      <para>
+       The previous code mimicked SysV semaphores.
+      </para>
+     </listitem>
 
-   </sect2>
+    </itemizedlist>
 
-   <sect2>
-    <title>Changes</title>
+   </sect3>
 
+   <sect3>
+    <title>Source Code 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>
+      <para>
+       Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
+       Inverted iNdex) index access method (Teodor, Oleg)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix rare bug wherein btree index page splits could fail
-      due to choosing an infeasible split point (Heikki Linnakangas)
-     </para>
+      <para>
+       Remove R-tree indexing (Tom)
+      </para>
+
+      <para>
+       Rtree has been re-implemented using <link
+       linkend="GiST"><acronym>GiST</></link>. Among other
+       differences, this means that rtree indexes now have support
+       for crash recovery via write-ahead logging (WAL).
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Improve <command>VACUUM</> performance for databases with many tables (Tom)
-     </para>
+      <para>
+       Reduce libraries needlessly linked into the backend (Martijn
+       van Oosterhout, Tom)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix autovacuum to avoid leaving non-permanent transaction IDs in
-      non-connectable databases (Alvaro)
-     </para>
+      <para>
+       Add a configure flag to allow libedit to be preferred over
+       <acronym>GNU</> readline (Bruce)
+      </para>
 
-     <para>
-      This bug affects the 8.1 branch only.
-     </para>
+      <para>
+       Use configure <link
+       linkend="configure"><literal>--with-libedit-preferred</></link>.
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
-     </para>
+      <para>
+       Allow installation into directories containing spaces
+       (Peter)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Tighten security of multi-byte character processing for UTF8 sequences
-      over three bytes long (Tom)
-     </para>
+      <para>
+       Improve ability to relocate installation directories (Tom)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix bogus <quote>permission denied</> failures occurring on Windows
-      due to attempts to fsync already-deleted files (Magnus, Tom)
-     </para>
+      <para>
+       Add support for <productname>Solaris x86_64</> using the
+       <productname>Solaris</> compiler (Pierre Girard, Theo
+       Schlossnagle, Bruce)
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix possible crashes when an already-in-use PL/pgSQL function is
-      updated (Tom)
-     </para>
+      <para>
+       Add <application>DTrace</> support (Robert Lor)
+      </para>
      </listitem>
 
-    </itemizedlist>
-
-   </sect2>
-  </sect1>
-
-  <sect1 id="release-8-1-6">
-   <title>Release 8.1.6</title>
-
-   <note>
-   <title>Release date</title>
-   <simpara>2007-01-08</simpara>
-   </note>
-
-   <para>
-    This release contains a variety of fixes from 8.1.5.
-   </para>
-
-   <sect2>
-    <title>Migration to version 8.1.6</title>
-
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
-
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
-
-    <itemizedlist>
-
      <listitem>
       <para>
-       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+       Add <literal>PG_VERSION_NUM</> for use by third-party
+       applications wanting to test the backend version in C using &gt;
+       and &lt; comparisons (Bruce)
       </para>
+     </listitem>
 
+     <listitem>
       <para>
-       This fixes a problem with starting the statistics collector,
-       among other things.
+       Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
+       (Mark Wong)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix <application>pg_restore</> to handle a tar-format backup
-       that contains large objects (blobs) with comments (Tom)
+       Add <literal>LWLOCK_STATS</> define to report locking
+       activity (Tom)
       </para>
      </listitem>
 
-      <listitem>
-       <para>
-        Fix <quote>failed to re-find parent key</> errors in
-        <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Clean out <filename>pg_internal.init</> cache files during server
-        restart (Simon)
-       </para>
+     <listitem>
+      <para>
+       Emit warnings for unknown <application>configure</> options
+       (Martijn van Oosterhout)
+      </para>
+     </listitem>
 
-       <para>
-        This avoids a hazard that the cache files might contain stale
-        data after PITR recovery.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Add server support for <quote>plugin</> libraries
+       that can be used for add-on tasks such as debugging and performance
+       measurement (Korry Douglas)
+      </para>
 
-      <listitem>
-       <para>
-        Fix race condition for truncation of a large relation across a
-        gigabyte boundary by <command>VACUUM</> (Tom)
-       </para>
-      </listitem>
+      <para>
+       This consists of two features: a table of <quote>rendezvous
+       variables</> that allows separately-loaded shared libraries to
+       communicate, and a new configuration parameter <link
+       linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
+       that allows libraries to be loaded into specific sessions without
+       explicit cooperation from the client application.  This allows
+       external add-ons to implement features such as a PL/PgSQL debugger.
+      </para>
+     </listitem>
 
-      <listitem>
-       <para>
-        Fix bug causing needless deadlock errors on row-level locks (Tom)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Rename existing configuration parameter
+       <varname>preload_libraries</> to <link
+       linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
+       (Tom)
+      </para>
 
-      <listitem>
-       <para>
-        Fix bugs affecting multi-gigabyte hash indexes (Tom)
-       </para>
-      </listitem>
+      <para>
+       This was done for clarity in comparison to
+       <varname>local_preload_libraries</>.
+      </para>
+     </listitem>
 
      <listitem>
       <para>
-       Fix possible deadlock in Windows signal handling (Teodor)
+       Add new configuration parameter <link
+       linkend="guc-server-version-num"><varname>server_version_num</></link>
+       (Greg Sabino Mullane)
+      </para>
+
+      <para>
+       This is like <varname>server_version</varname>, but is an
+       integer, e.g.  <literal>80200</>. This allows applications to
+       make version checks more easily.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
-       empty elements (Tom)
+       Add a configuration parameter <link
+       linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
+       (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix ecpg memory leak during connection (Michael)
+       Re-implement the <link linkend="regress">regression test</link> script as a C program
+       (Magnus, Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix for Darwin (OS X) compilation (Tom)
+       Allow loadable modules to allocate shared memory and
+       lightweight locks (Marc Munro)
       </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)
+       Add automatic initialization and finalization of dynamically
+       loaded libraries (Ralf Engelschall, Tom)
       </para>
 
       <para>
-       This is because <varname>lc_numeric</> can potentially
-       change the output of these functions.
+       New <link linkend="xfunc-c-dynload">functions</link>
+       <function>_PG_init()</> and <function>_PG_fini()</> are
+       called if the library defines such symbols.  Hence we no
+       longer need to specify an initialization function in
+       <varname>shared_preload_libraries</>; we can assume that
+       the library used the <function>_PG_init()</> convention
+       instead.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Improve index usage of regular expressions that use parentheses (Tom)
+       Add <link
+       linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
+       header block to all shared object files (Martijn van
+       Oosterhout)
       </para>
 
       <para>
-       This improves <application>psql</> <literal>\d</> performance also.
+       The magic block prevents version mismatches between loadable object
+       files and servers.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Update timezone database
+        Add shared library support for AIX (Laurenz Albe)
       </para>
+     </listitem>
 
+     <listitem>
       <para>
-       This affects Australian and Canadian daylight-savings rules in
-       particular.
+       New <link linkend="datatype-xml"><acronym>XML</></link>
+       documentation section (Bruce)
       </para>
      </listitem>
 
     </itemizedlist>
 
-   </sect2>
-  </sect1>
+   </sect3>
 
-  <sect1 id="release-8-1-5">
-   <title>Release 8.1.5</title>
+   <sect3>
+    <title>Contrib Changes</title>
+    <itemizedlist>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-10-16</simpara>
-   </note>
+     <listitem>
+      <para>
+       Major tsearch2 improvements (Oleg, Teodor)
+      </para>
 
-   <para>
-    This release contains a variety of fixes from 8.1.4.
-   </para>
+      <itemizedlist>
 
-   <sect2>
-    <title>Migration to version 8.1.5</title>
+       <listitem>
+        <para>
+         multibyte encoding support, including <acronym>UTF8</>
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         query rewriting support
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         improved ranking functions
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         thesaurus dictionary support
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         Ispell dictionaries now recognize <application>MySpell</>
+         format, used by <application>OpenOffice</>
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         <acronym>GIN</> support
+        </para>
+       </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
+      </itemizedlist>
 
-   </sect2>
+     </listitem>
 
-   <sect2>
-    <title>Changes</title>
+     <listitem>
+      <para>
+       Add adminpack module containing <application>Pgadmin</> administration
+       functions (Dave)
+      </para>
 
-<itemizedlist>
-<listitem><para>Disallow aggregate functions in <command>UPDATE</>
-commands, except within sub-SELECTs (Tom)</para>
-<para>The behavior of such an aggregate was unpredictable, and in 8.1.X
-could cause a crash, so it has been disabled.  The SQL standard does not allow
-this either.</para></listitem>
-<listitem><para>Fix core dump when an untyped literal is taken as
-ANYARRAY</para></listitem>
-<listitem><para>Fix core dump in duration logging for extended query protocol
-when a <command>COMMIT</> or <command>ROLLBACK</> is
-executed</para></listitem>
-<listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
-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>
-<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
-</para></listitem>
-<listitem><para>Fix <function>to_timestamp()</> for
-<literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
-<listitem><para>Fix autovacuum's calculation that decides whether
-  <command>ANALYZE</> is needed (Alvaro)</para></listitem>
-<listitem><para>Fix corner cases in pattern matching for
-  <application>psql</>'s <literal>\d</> commands</para></listitem>
-<listitem><para>Fix index-corrupting bugs in /contrib/ltree
-  (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>
-<listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
-</listitem>
-<listitem><para>Efficiency improvements in hash tables and bitmap index scans
-(Tom)</para></listitem>
-<listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
-<listitem><para>Fix <varname>statement_timeout</> to use the proper
-units on Win32 (Bruce)</para>
-<para>In previous Win32 8.1.X versions, the delay was off by a factor of
-100.</para></listitem>
-<listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
-compilers (Hiroshi Saito)</para></listitem>
-<listitem><para>Fixes for <systemitem class="osname">AIX</> and
-<productname>Intel</> compilers (Tom)</para></listitem>
-<listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
-</itemizedlist>
+      <para>
+       These functions provide additional file system access
+       routines not present in the default <productname>PostgreSQL</>
+       server.
+      </para>
+     </listitem>
 
-   </sect2>
-  </sect1>
+     <listitem>
+      <para>
+       Add sslinfo module (Victor Wagner)
+      </para>
 
-  <sect1 id="release-8-1-4">
-   <title>Release 8.1.4</title>
+      <para>
+       Reports information about the current connection's <acronym>SSL</>
+       certificate.
+      </para>
+     </listitem>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-05-23</simpara>
-   </note>
+     <listitem>
+      <para>
+       Add pgrowlocks module (Tatsuo)
+      </para>
 
-   <para>
-    This release contains a variety of fixes from 8.1.3,
-    including patches for extremely serious security issues.
-   </para>
+      <para>
+       This shows row locking information for a specified table.
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Migration to version 8.1.4</title>
+     <listitem>
+      <para>
+       Add hstore module (Oleg, Teodor)
+      </para>
+     </listitem>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
+     <listitem>
+      <para>
+       Add isn module, replacing isbn_issn (Jeremy Kronuz)
+      </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>
+       This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
+       <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
+       <acronym>ISSN</> (serials).
+      </para>
+     </listitem>
 
-   <sect2>
-    <title>Changes</title>
+     <listitem>
+      <para>
+       Add index information functions to pgstattuple (ITAGAKI Takahiro,
+       Satoshi Nagayasu)
+      </para>
+     </listitem>
 
-<itemizedlist>
-<listitem><para>Change the server to reject invalidly-encoded multibyte
-characters in all cases (Tatsuo, Tom)</para>
-<para>While <productname>PostgreSQL</> has been moving in this direction for
-some time, the checks are now applied uniformly to all encodings and all
-textual input, and are now always errors not merely warnings.  This change
-defends against SQL-injection attacks of the type described in CVE-2006-2313.
-</para></listitem>
+     <listitem>
+      <para>
+       Add pg_freespacemap module to display free space map information
+       (Mark Kirkwood)
+      </para>
+     </listitem>
 
-<listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
-<para>As a server-side defense against SQL-injection attacks of the type
-described in CVE-2006-2314, the server now only accepts <literal>''</> and not
-<literal>\'</> as a representation of ASCII single quote in SQL string
-literals.  By default, <literal>\'</> is rejected only when
-<varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
-GB18030, or UHC), which is the scenario in which SQL injection is possible.
-A new configuration parameter <varname>backslash_quote</> is available to
-adjust this behavior when needed.  Note that full security against
-CVE-2006-2314 might require client-side changes; the purpose of
-<varname>backslash_quote</> is in part to make it obvious that insecure
-clients are insecure.
-</para></listitem>
+     <listitem>
+      <para>
+       pgcrypto now has all planned functionality (Marko Kreen)
+      </para>
+      <itemizedlist>
+       <listitem>
+        <para>
+         Include iMath library in pgcrypto to have the public-key encryption
+         functions always available.
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         Add SHA224 algorithm that was missing in OpenBSD code.
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         Activate builtin code for SHA224/256/384/512 hashes on older
+         OpenSSL to have those algorithms always available.
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         New function gen_random_bytes() that returns cryptographically strong
+         randomness.  Useful for generating encryption keys.
+        </para>
+       </listitem>
+       <listitem>
+        <para>
+         Remove digest_exists(), hmac_exists() and cipher_exists() functions.
+        </para>
+       </listitem>
+      </itemizedlist>
+     </listitem>
 
-<listitem><para>Modify <application>libpq</>'s string-escaping routines to be
-aware of encoding considerations and
-<varname>standard_conforming_strings</></para>
-<para>This fixes <application>libpq</>-using applications for the security
-issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
-them against the planned changeover to SQL-standard string literal syntax.
-Applications that use multiple <productname>PostgreSQL</> connections
-concurrently should migrate to <function>PQescapeStringConn()</> and
-<function>PQescapeByteaConn()</> to ensure that escaping is done correctly
-for the settings in use in each database connection.  Applications that
-do string escaping <quote>by hand</> should be modified to rely on library
-routines instead.
-</para></listitem>
+     <listitem>
+      <para>
+       Improvements to cube module (Joshua Reich)
+      </para>
 
-<listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
-<para>Errors in fortuna PRNG reseeding logic could cause a predictable
-session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
-This only affects non-OpenSSL-using builds.
-</para></listitem>
+      <para>
+       New functions are <function>cube(float[])</>,
+       <function>cube(float[], float[])</>, and
+       <function>cube_subset(cube, int4[])</>.
+      </para>
+     </listitem>
 
-<listitem><para>Fix some incorrect encoding conversion functions</para>
-<para><function>win1251_to_iso</>, <function>win866_to_iso</>,
-<function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
-<function>mic_to_euc_tw</> were all broken to varying
-extents.
-</para></listitem>
+     <listitem>
+      <para>
+       Add async query capability to dblink (Kai Londenberg,
+       Joe Conway)
+      </para>
+     </listitem>
 
-<listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
-(Bruce, Jan)</para></listitem>
+     <listitem>
+      <para>
+       New operators for array-subset comparisons (<literal>@&gt;</>,
+       <literal>&lt;@</>, <literal>&amp;&amp;</>) (Tom)
+      </para>
 
-<listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
-(Alvaro)</para></listitem>
+      <para>
+       Various contrib packages already had these operators for their
+       datatypes, but the naming wasn't consistent.  We have now added
+       consistently named array-subset comparison operators to the core code
+       and all the contrib packages that have such functionality.
+       (The old names remain available, but are deprecated.)
+      </para>
+     </listitem>
 
-<listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
-<para>In certain cases, having <literal>full_page_writes</> off would cause
-crash recovery to fail.  A proper fix will appear in 8.2; for now it's just
-disabled.
-</para></listitem>
+     <listitem>
+      <para>
+       Add uninstall scripts for all contrib packages that have install
+       scripts (David, Josh Drake)
+      </para>
+     </listitem>
 
-<listitem><para>Various planner fixes, particularly for bitmap index scans and
-MIN/MAX optimization (Tom)</para></listitem>
+    </itemizedlist>
 
-<listitem><para>Fix incorrect optimization in merge join (Tom)</para>
-<para>Outer joins could sometimes emit multiple copies of unmatched rows.
-</para></listitem>
+   </sect3>
 
-<listitem><para>Fix crash from using and modifying a plpgsql function in the
-same transaction</para></listitem>
+  </sect2>
+ </sect1>
 
-<listitem><para>Fix WAL replay for case where a B-Tree index has been
-truncated</para></listitem>
+ <sect1 id="release-8-1-11">
+  <title>Release 8.1.11</title>
 
-<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
-<literal>|</> (Tom)</para></listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
 
-<listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
-create tables in the default tablespace, not the base directory (Kris
-Jurka)</para></listitem>
+  <para>
+   This release contains a variety of fixes from 8.1.10,
+   including fixes for significant security issues.
+  </para>
 
-<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
-Fuhr)</para></listitem>
-
-<listitem><para>Improve qsort performance (Dann Corbit)</para>
-<para>Currently this code is only used on Solaris.
-</para></listitem>
-
-<listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
-
-<listitem><para>Fix various minor memory leaks</para></listitem>
-
-<listitem><para>Fix problem with password prompting on some Win32 systems
-(Robert Kinberg)</para></listitem>
+  <para>
+   This is the last 8.1.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.1.X will continue to
+   be supported on other platforms.
+  </para>
 
-<listitem><para>Improve <application>pg_dump</>'s handling of default values
-for domains</para></listitem>
+  <sect2>
+   <title>Migration to Version 8.1.11</title>
 
-<listitem><para>Fix <application>pg_dumpall</> to handle identically-named
-users and groups reasonably (only possible when dumping from a pre-8.1 server)
-(Tom)</para>
-<para>The user and group will be merged into a single role with
-<literal>LOGIN</> permission.  Formerly the merged role wouldn't have
-<literal>LOGIN</> permission, making it unusable as a user.
-</para></listitem>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-<listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
-documented (Tom)</para></listitem>
-</itemizedlist>
+  </sect2>
 
-   </sect2>
-  </sect1>
+  <sect2>
+   <title>Changes</title>
 
-  <sect1 id="release-8-1-3">
-   <title>Release 8.1.3</title>
+   <itemizedlist>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-02-14</simpara>
-   </note>
+    <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>
 
-   <para>
-    This release contains a variety of fixes from 8.1.2,
-    including one very serious security issue.
-   </para>
+    <listitem>
+     <para>
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+     </para>
 
-   <sect2>
-    <title>Migration to version 8.1.3</title>
+     <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>
 
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, if you are upgrading from a version earlier than 8.1.2,
-     see the release notes for 8.1.2.
-    </para>
-   </sect2>
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
 
-   <sect2>
-    <title>Changes</title>
+     <para>
+      The fix that appeared for this in 8.1.10 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
+     </para>
+    </listitem>
 
-<itemizedlist>
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2007k
+      (in particular, recent Argentina changes) (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix bug that allowed any logged-in user to <command>SET
-ROLE</> to any other database user id (CVE-2006-0553)</para>
-<para>Due to inadequate validity checking, a user could exploit the special
-case that <command>SET ROLE</> normally uses to restore the previous role
-setting after an error.  This allowed ordinary users to acquire superuser
-status, for example.
-The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
-However, in all releases back to 7.3 there is a related bug in <command>SET
-SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
-if it has been compiled with Asserts enabled (which is not the default).
-Thanks to Akio Ishida for reporting this problem.
-</para></listitem>
+    <listitem>
+     <para>
+      Improve planner's handling of LIKE/regex estimation in non-C locales
+      (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix bug with row visibility logic in self-inserted
-rows (Tom)</para>
-<para>Under rare circumstances a row inserted by the current command
-could be seen as already valid, when it should not be.  Repairs bug
-created in 8.0.4, 7.4.9, and 7.3.11 releases.
-</para></listitem>
+    <listitem>
+     <para>
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix race condition that could lead to <quote>file already
-exists</> errors during pg_clog and pg_subtrans file creation
-(Tom)</para></listitem>
+    <listitem>
+     <para>
+      Preserve the tablespace of indexes that are
+      rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix cases that could lead to crashes if a cache-invalidation
-message arrives at just the wrong time (Tom)</para></listitem>
+    <listitem>
+     <para>
+      Make archive recovery always start a new WAL timeline, rather than only
+      when a recovery stop time was used (Simon)
+     </para>
 
-<listitem><para>Properly check <literal>DOMAIN</> constraints for
-<literal>UNKNOWN</> parameters in prepared statements
-(Neil)</para></listitem>
+     <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>
 
-<listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
-<literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
-constraints in the proper order (Nakano Yoshihisa)</para></listitem>
+    <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>
 
-<listitem><para>Fixes to allow restoring dumps that have cross-schema
-references to custom operators or operator classes (Tom)</para></listitem>
+    <listitem>
+     <para>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Allow <application>pg_restore</> to continue properly after a
-<command>COPY</> failure; formerly it tried to treat the remaining
-<command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
+    <listitem>
+     <para>
+      Fix overflow in <literal>extract(epoch from interval)</> for intervals
+      exceeding 68 years (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
-when the  data directory is not specified (Magnus)</para></listitem>
+    <listitem>
+     <para>
+      Fix PL/Perl to not fail when a UTF-8 regular expression is used
+      in a trusted function (Andrew)
+     </para>
+    </listitem>
 
-<listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
-(Christoph Zwerschke)</para></listitem>
+    <listitem>
+     <para>
+      Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
+      as <literal>int</> rather than <literal>char</> (Tom)
+     </para>
 
-<listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
-(Neil)</para></listitem>
+     <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>
 
-<listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
-together in function result type declarations</para></listitem>
+    <listitem>
+     <para>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </para>
+    </listitem>
 
-<listitem><para>Recover properly if error occurs during argument passing
-in <application>PL/python</> (Neil)</para></listitem>
+    <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><para>Fix memory leak in <function>plperl_return_next</>
-(Neil)</para></listitem>
+    <listitem>
+     <para>
+      Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
+      to a file that is not a plain file (Martin Pitt)
+     </para>
+    </listitem>
 
-<listitem><para>Fix <application>PL/perl</>'s handling of locales on
-Win32 to match the backend (Andrew)</para></listitem>
+    <listitem>
+     <para>
+      <application>ecpg</> parser fixes (Michael)
+     </para>
+    </listitem>
 
-<listitem><para>Various optimizer fixes (Tom)</para></listitem>
+    <listitem>
+     <para>
+      Make <filename>contrib/pgcrypto</> defend against
+      <application>OpenSSL</> libraries that fail on keys longer than 128
+      bits; which is the case at least on some Solaris versions (Marko Kreen)
+     </para>
+    </listitem>
 
-<listitem><para>Fix crash when <literal>log_min_messages</> is set to
-<literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
-(Bruce)</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 <application>pgxs</> <literal>-L</> library path
-specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
+    <listitem>
+     <para>
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
+     </para>
+    </listitem>
 
-<listitem><para>Check that SID is enabled while checking for Win32 admin
-privileges (Magnus)</para></listitem>
+    <listitem>
+     <para>
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+     </para>
+    </listitem>
 
-<listitem><para>Properly reject out-of-range date inputs (Kris
-Jurka)</para></listitem>
+    <listitem>
+     <para>
+      Require a specific version of <productname>Autoconf</> to be used
+      when re-generating the <command>configure</> script (Peter)
+     </para>
 
-<listitem><para>Portability fix for testing presence of <function>finite</>
-and <function>isinf</> during configure (Tom)</para></listitem>
+     <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>
 
-<listitem><para>Improve speed of <command>COPY IN</> via libpq, by
-avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
+   </itemizedlist>
 
-<listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
-creation (Tom)</para></listitem>
+  </sect2>
+ </sect1>
 
-</itemizedlist>
+ <sect1 id="release-8-1-10">
+  <title>Release 8.1.10</title>
 
-   </sect2>
-  </sect1>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
 
-  <sect1 id="release-8-1-2">
-   <title>Release 8.1.2</title>
+  <para>
+   This release contains a variety of fixes from 8.1.9.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2006-01-09</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 8.1.10</title>
 
    <para>
-    This release contains a variety of fixes from 8.1.1.
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.1.2</title>
-
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-     However, 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>
 
-   <sect2>
-    <title>Changes</title>
+  <sect2>
+   <title>Changes</title>
 
-<itemizedlist>
+   <itemizedlist>
 
-<listitem><para>Fix Windows code so that postmaster will continue rather
-than exit if there is no more room in ShmemBackendArray (Magnus)</para>
-<para>The previous behavior could lead to a denial-of-service situation if too
-many connection requests arrive close together.  This applies
-<emphasis>only</> to the Windows port.</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)
+     </para>
+    </listitem>
 
-<listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
-to return an already-used page as new, potentially causing loss of
-recently-committed data (Tom)</para></listitem>
+    <listitem>
+     <para>
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix for protocol-level Describe messages issued
-outside a transaction or in a failed transaction (Tom)</para></listitem>
+    <listitem>
+     <para>
+      Allow the <type>interval</> data type to accept input consisting only of
+      milliseconds or microseconds (Neil)
+     </para>
+    </listitem>
 
-<listitem><para>Fix character string comparison for locales that consider
-different character combinations as equal, such as Hungarian (Tom)</para>
-<para>This might require <command>REINDEX</> to fix existing indexes on
-textual columns.</para></listitem>
+    <listitem>
+     <para>
+      Speed up rtree index insertion (Teodor)
+     </para>
+    </listitem>
 
-<listitem><para>Set locale environment variables during postmaster startup
-to ensure that <application>plperl</> won't change the locale later</para>
-<para>This fixes a problem that occurred if the <application>postmaster</> was
-started with environment variables specifying a different locale than what
-<application>initdb</> had been told.  Under these conditions, any use of
-<application>plperl</> was likely to lead to corrupt indexes.  You might need
-<command>REINDEX</> to fix existing indexes on
-textual columns if this has happened to you.</para></listitem>
+    <listitem>
+     <para>
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Allow more flexible relocation of installation
-directories (Tom)</para>
-<para>Previous releases supported relocation only if all installation
-directory paths were the same except for the last component.</para></listitem>
+    <listitem>
+     <para>
+      Fix logging so that log messages are never interleaved when using
+      the syslogger process (Andrew)
+     </para>
+    </listitem>
 
-<listitem><para>Prevent crashes caused by the use of
-<literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
-(Tatsuo)</para></listitem>
+    <listitem>
+     <para>
+      Fix crash when <varname>log_min_error_statement</> logging runs out
+      of memory (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix longstanding bug in strpos() and regular expression
-handling in certain rarely used Asian multi-byte character sets (Tatsuo)
-</para></listitem>
+    <listitem>
+     <para>
+      Fix incorrect handling of some foreign-key corner cases (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix bug where COPY CSV mode considered any
-<literal>\.</> to terminate the copy data</para> <para>The new code
-requires <literal>\.</> to appear alone on a line, as per
-documentation.</para></listitem>
+    <listitem>
+     <para>
+      Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
+      due to attempting to process temporary tables of other sessions (Alvaro)
+     </para>
+    </listitem>
 
-<listitem><para>Make COPY CSV mode quote a literal data value of
-<literal>\.</> to ensure it cannot be interpreted as the
-end-of-data marker (Bruce)</para></listitem>
+    <listitem>
+     <para>
+      Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Various fixes for functions returning <literal>RECORD</>s
-(Tom) </para></listitem>
+    <listitem>
+     <para>
+      Windows socket improvements (Magnus)
+     </para>
+    </listitem>
 
-<listitem><para>Fix processing of <filename>postgresql.conf</> so a
-final line with no newline is processed properly (Tom)
-</para></listitem>
+    <listitem>
+     <para>
+      Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
+      because of possible encoding mismatches (Tom)
+     </para>
+    </listitem>
 
-<listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
-which caused it not to use all available salt space for MD5 and
-XDES algorithms (Marko Kreen, Solar Designer)</para>
-<para>Salts for Blowfish and standard DES are unaffected.</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>Fix autovacuum crash when processing expression indexes
-</para></listitem>
+   </itemizedlist>
 
-<listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
-rather than crashing, when the number of columns specified is different from
-what's actually returned by the query (Joe)</para></listitem>
+  </sect2>
+ </sect1>
 
-</itemizedlist>
+ <sect1 id="release-8-1-9">
+  <title>Release 8.1.9</title>
 
-   </sect2>
-  </sect1>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-04-23</simpara>
+  </note>
 
-  <sect1 id="release-8-1-1">
-   <title>Release 8.1.1</title>
+  <para>
+   This release contains a variety of fixes from 8.1.8,
+   including a security fix.
+  </para>
 
-   <note>
-   <title>Release date</title>
-   <simpara>2005-12-12</simpara>
-   </note>
+  <sect2>
+   <title>Migration to Version 8.1.9</title>
 
    <para>
-    This release contains a variety of fixes from 8.1.0.
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
    </para>
 
-   <sect2>
-    <title>Migration to version 8.1.1</title>
-
-    <para>
-     A dump/restore is not required for those running 8.1.X.
-    </para>
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
+  </sect2>
 
-<itemizedlist>
-<listitem><para>Fix incorrect optimizations of outer-join conditions
-(Tom)</para></listitem>
+  <sect2>
+   <title>Changes</title>
 
-<listitem><para>Fix problems with wrong reported column names in cases
-involving sub-selects flattened by the optimizer (Tom)</para></listitem>
+   <itemizedlist>
 
-<listitem><para>Fix update failures in scenarios involving CHECK constraints,
-toasted columns, <emphasis>and</> indexes (Tom)</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 bgwriter problems after recovering from errors
-(Tom)</para>
-<para>
-The background writer was found to leak buffer pins after write errors.
-While not fatal in itself, this might lead to mysterious blockages of
-later VACUUM commands.
-</para>
-</listitem>
+    <listitem>
+    <para>
+     <filename>/contrib/tsearch2</> crash fixes (Teodor)
+    </para>
+    </listitem>
 
-<listitem><para>Prevent failure if client sends Bind protocol message
-when current transaction is already aborted</para></listitem>
+    <listitem>
+    <para>
+     Require <command>COMMIT PREPARED</> to be executed in the same
+     database as the transaction was prepared in (Heikki)
+    </para>
+    </listitem>
 
-<listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
-fixes (Teodor)</para></listitem>
+    <listitem>
+    <para>
+     Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
+     <command>UPDATE</> chains (Tom, Pavan Deolasee)
+    </para>
+    </listitem>
 
-<listitem><para>Fix problems with translated error messages in
-languages that require word reordering, such as Turkish; also problems with
-unexpected truncation of output strings and wrong display of the smallest
-possible bigint value (Andrew, Tom)</para>
-<para>
-These problems only appeared on platforms that were using our
-<filename>port/snprintf.c</> code, which includes BSD variants if
-<literal>--enable-nls</> was given, and perhaps others.  In addition,
-a different form of the translated-error-message problem could appear
-on Windows depending on which version of <filename>libintl</> was used.
-</para></listitem>
+    <listitem>
+    <para>
+     Planner fixes, including improving outer join and bitmap scan
+     selection logic (Tom)
+    </para>
+    </listitem>
 
-<listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
-<literal>HH12</>, and <literal>D</> format specifiers for
-<function>to_char(time)</> and <function>to_char(interval)</>.
-(<function>to_char(interval)</> should probably use
-<literal>HH24</>.) (Bruce)</para></listitem>
+    <listitem>
+    <para>
+     Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
+     (Tom)
+    </para>
+    </listitem>
 
-<listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
-Saito)</para></listitem>
+    <listitem>
+    <para>
+     Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+    </para>
+    </listitem>
 
-<listitem><para>Optimizer improvements (Tom)</para></listitem>
+   </itemizedlist>
 
-<listitem><para>Retry file reads and writes after Windows
-NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
+  </sect2>
+ </sect1>
 
-<listitem><para>Prevent <application>autovacuum</> from crashing during
-ANALYZE of expression index (Alvaro)</para></listitem>
+ <sect1 id="release-8-1-8">
+  <title>Release 8.1.8</title>
 
-<listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
-tables</para></listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-07</simpara>
+  </note>
 
-<listitem><para>Fix problems when a trigger alters the output of a SELECT
-DISTINCT query</para></listitem>
+  <para>
+   This release contains one fix from 8.1.7.
+  </para>
 
-<listitem><para>Add 8.1.0 release note item on how to migrate invalid
-<literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
-</itemizedlist>
+  <sect2>
+   <title>Migration to Version 8.1.8</title>
 
-   </sect2>
-  </sect1>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-  <sect1 id="release-8-1">
-   <title>Release 8.1</title>
+  </sect2>
 
-   <note>
-    <title>Release date</title>
-    <simpara>2005-11-08</simpara>
-   </note>
+  <sect2>
+   <title>Changes</title>
 
-   <sect2>
-    <title>Overview</title>
+   <itemizedlist>
 
+    <listitem>
     <para>
-     Major changes in this release:
+     Remove overly-restrictive check for type length in constraints and
+     functional indexes(Tom)
     </para>
+    </listitem>
 
-    <variablelist>
+   </itemizedlist>
 
-     <varlistentry>
-      <term>
-       Improve concurrent access to the shared buffer cache (Tom)
-      </term>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Access to the shared buffer cache was identified as a
-        significant scalability problem, particularly on multi-CPU
-        systems. In this release, the way that locking is done in the
-        buffer manager has been overhauled to reduce lock contention
-        and improve scalability. The buffer manager has also been
-        changed to use a <quote>clock sweep</quote> replacement
-        policy.
-       </para>
-      </listitem>
-     </varlistentry>
+ <sect1 id="release-8-1-7">
+  <title>Release 8.1.7</title>
 
-     <varlistentry>
-      <term>
-       Allow index scans to use an intermediate in-memory bitmap (Tom)
-      </term>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        In previous releases, only a single index could be used to do
-        lookups on a table. With this feature, if a query has
-        <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
-        no multicolumn index on <literal>col1</> and <literal>col2</>,
-        but there is an index on <literal>col1</> and another on
-        <literal>col2</>, it is possible to search both indexes and
-        combine the results in memory, then do heap fetches for only
-        the rows matching both the <literal>col1</> and
-        <literal>col2</> restrictions. This is very useful in
-        environments that have a lot of unstructured queries where it
-        is impossible to create indexes that match all possible access
-        conditions.  Bitmap scans are useful even with a single index,
-        as they reduce the amount of random access needed; a bitmap
-        index scan is efficient for retrieving fairly large fractions
-        of the complete table, whereas plain index scans are not.
-       </para>
-      </listitem>
-     </varlistentry>
+  <para>
+   This release contains a variety of fixes from 8.1.6, including
+   a security fix.
+  </para>
 
-     <varlistentry>
-      <term>
-       Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
-      </term>
+  <sect2>
+   <title>Migration to Version 8.1.7</title>
 
-      <listitem>
-       <para>
-        Two-phase commit allows transactions to be "prepared" on several
-        computers, and once all computers have successfully prepared
-        their transactions (none failed), all transactions can be
-        committed. Even if a machine crashes after a prepare, the
-        prepared transaction can be committed after the machine is
-        restarted. New syntax includes <command>PREPARE TRANSACTION</> and
-        <command>COMMIT/ROLLBACK PREPARED</>. A new system view
-        <literal>pg_prepared_xacts</> has also been added.
-       </para>
-      </listitem>
-     </varlistentry>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-     <varlistentry>
-      <term>
-       Create a new role system that replaces users and groups
-       (Stephen Frost)
-      </term>
+  </sect2>
 
-      <listitem>
-       <para>
-        Roles are a combination of users and groups. Like users, they
-        can have login capability, and like groups, a role can have
-        other roles as members. Roles basically remove the distinction
-        between users and groups. For example, a role can:
-       </para>
+  <sect2>
+   <title>Changes</title>
 
-       <itemizedlist>
+   <itemizedlist>
 
-        <listitem>
-         <para>
-           Have login capability (optionally)
-         </para>
-        </listitem>
+    <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>
-          Own objects
-         </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>
-          Hold access permissions for database objects
-         </para>
-        </listitem>
-
-        <listitem>
-         <para>
-          Inherit permissions from other roles it is a member of
-         </para>
-        </listitem>
-
-       </itemizedlist>
-       <para>
-        Once a user logs into a role, she obtains capabilities of
-        the login role plus any inherited roles, and can use
-        <command>SET ROLE</> to switch to other roles she is a member of.
-        This feature is a generalization of the SQL standard's concept of
-        roles.
-        This change also replaces <structname>pg_shadow</> and
-        <structname>pg_group</> by new role-capable catalogs
-        <structname>pg_authid</> and <structname>pg_auth_members</>. The old
-        tables are redefined as read-only views on the new role tables.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Automatically use indexes for <function>MIN()</> and
-       <function>MAX()</> (Tom)
-      </term>
-
-      <listitem>
-       <para>
-        In previous releases, the only way to use an index for
-        <function>MIN()</> or <function>MAX()</> was to rewrite the
-        query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
-        Index usage now happens automatically.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Move <filename>/contrib/pg_autovacuum</> into the main server
-       (Alvaro)
-      </term>
-
-      <listitem>
-       <para>
-        Integrating autovacuum into the server allows it to be
-        automatically started and stopped in sync with the database
-        server, and allows autovacuum to be configured from
-        <filename>postgresql.conf</>.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Add shared row level locks using <command>SELECT ... FOR SHARE</>
-       (Alvaro)
-      </term>
-
-      <listitem>
-       <para>
-        While <productname>PostgreSQL</productname>'s MVCC locking
-        allows <command>SELECT</> to never be blocked by writers and
-        therefore does not need shared row locks for typical operations,
-        shared locks are useful for applications that require shared row
-        locking.  In particular this reduces the locking requirements
-        imposed by referential integrity checks.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Add dependencies on shared objects, specifically roles
-       (Alvaro)
-      </term>
-
-      <listitem>
-       <para>
-        This extension of the dependency mechanism prevents roles from
-        being dropped while there are still database objects they own.
-        Formerly it was possible to accidentally <quote>orphan</> objects by
-        deleting their owner.  While this could be recovered from, it
-        was messy and unpleasant.
-       </para>
-      </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Improve performance for partitioned tables (Simon)
-      </term>
+    <listitem>
+    <para>
+     Improve <command>VACUUM</> performance for databases with many tables (Tom)
+    </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        The new <varname>constraint_exclusion</varname> configuration
-        parameter avoids lookups on child tables where constraints indicate
-        that no matching rows exist in the child table.
-       </para>
-       <para>
-        This allows for a basic type of table partitioning. If child tables
-        store separate key ranges and this is enforced using appropriate
-        <command>CHECK</> constraints, the optimizer will skip child
-        table accesses when the constraint guarantees no matching rows
-        exist in the child table.
-       </para>
-      </listitem>
-     </varlistentry>
+    <listitem>
+    <para>
+     Fix autovacuum to avoid leaving non-permanent transaction IDs in
+     non-connectable databases (Alvaro)
+    </para>
 
-    </variablelist>
-   </sect2>
+    <para>
+     This bug affects the 8.1 branch only.
+    </para>
+    </listitem>
 
-   <sect2>
-    <title>Migration to version 8.1</title>
+    <listitem>
+    <para>
+     Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+    </para>
+    </listitem>
 
+    <listitem>
     <para>
-     A dump/restore using <application>pg_dump</application> is required
-     for those wishing to migrate data from any previous release.
+     Tighten security of multi-byte character processing for UTF8 sequences
+     over three bytes long (Tom)
     </para>
+    </listitem>
 
+    <listitem>
     <para>
-     The 8.0 release announced that the <function>to_char()</> function
-     for intervals would be removed in 8.1. However, since no better API
-     has been suggested, <function>to_char(interval)</> has been enhanced in
-     8.1 and will remain in the server.
+     Fix bogus <quote>permission denied</> failures occurring on Windows
+     due to attempts to fsync already-deleted files (Magnus, Tom)
     </para>
+    </listitem>
 
+    <listitem>
     <para>
-     Observe the following incompatibilities:
+     Fix possible crashes when an already-in-use PL/pgSQL function is
+     updated (Tom)
     </para>
+    </listitem>
 
-    <itemizedlist>
+   </itemizedlist>
 
-     <listitem>
-      <para>
-       <varname>add_missing_from</> is now false by default (Neil)
-      </para>
-      <para>
-       By default, we now generate an error if a table is used in a query
-       without a <literal>FROM</> reference.  The old behavior is still
-       available, but the parameter must be set to 'true' to obtain it.
-      </para>
+  </sect2>
+ </sect1>
 
-      <para>
-       It might be necessary to set <varname>add_missing_from</> to true
-       in order to load an existing dump file, if the dump contains any
-       views or rules created using the implicit-<literal>FROM</> syntax.
-       This should be a one-time annoyance, because
-       <productname>PostgreSQL</productname> 8.1 will convert
-       such views and rules to standard explicit-<literal>FROM</> syntax.
-       Subsequent dumps will therefore not have the problem.
-      </para>
-     </listitem>
+ <sect1 id="release-8-1-6">
+  <title>Release 8.1.6</title>
 
-     <listitem>
-      <para>
-       Cause input of a zero-length string (<literal>''</literal>) for
-       <type>float4</type>/<type>float8</type>/<type>oid</type>
-       to throw an error, rather than treating it as a zero (Neil)
-      </para>
-      <para>
-       This change is consistent with the current handling of
-       zero-length strings for integers. The schedule for this change
-       was announced in 8.0.
-      </para>
-     </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
 
-     <listitem>
-      <para>
-       <varname>default_with_oids</> is now false by default (Neil)
-      </para>
-      <para>
-       With this option set to false, user-created tables no longer
-       have an OID column unless <command>WITH OIDS</> is specified in
-       <command>CREATE TABLE</>. Though OIDs have existed in all
-       releases of <productname>PostgreSQL</>, their use is limited
-       because they are only four bytes long and the counter is shared
-       across all installed databases. The preferred way of uniquely
-       identifying rows is via sequences and the <type>SERIAL</> type,
-       which have been supported since <productname>PostgreSQL</> 6.4.
-      </para>
-     </listitem>
+  <para>
+   This release contains a variety of fixes from 8.1.5.
+  </para>
 
-     <listitem>
-      <para>
-       Add <literal>E''</> syntax so eventually ordinary strings can
-       treat backslashes literally (Bruce)
-      </para>
-      <para>
-       Currently <productname>PostgreSQL</productname> processes a
-       backslash in a string literal as introducing a special escape sequence,
-       e.g. <literal>\n</> or <literal>\010</>.
-       While this allows easy entry of special values, it is
-       nonstandard and makes porting of applications from other
-       databases more difficult. For this reason, the
-       <productname>PostgreSQL</productname> project is planning to
-       remove the special meaning of backslashes in strings. For
-       backward compatibility and for users who want special backslash
-       processing, a new string syntax has been created. This new string
-       syntax is formed by writing an <literal>E</> immediately preceding the
-       single quote that starts the string, e.g. <literal>E'hi\n'</>. While
-       this release does not change the handling of backslashes in strings, it
-       does add new configuration parameters to help users migrate applications
-       for future releases:
-      </para>
-      <itemizedlist>
+  <sect2>
+   <title>Migration to Version 8.1.6</title>
 
-       <listitem>
-        <para>
-         <varname>standard_conforming_strings</> &mdash; does this release
-         treat backslashes literally in ordinary strings?
-        </para>
-       </listitem>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-       <listitem>
-       <para>
-        <varname>escape_string_warning</> &mdash; warn about backslashes in
-        ordinary (non-E) strings
-       </para>
-      </listitem>
+  </sect2>
 
-      </itemizedlist>
+  <sect2>
+   <title>Changes</title>
 
-      <para>
-       The <varname>standard_conforming_strings</> value is read-only.
-       Applications can retrieve the value to know how backslashes are
-       processed.  (Presence of the parameter can also be taken as an
-       indication that <literal>E''</> string syntax is supported.)
-       In a future release, <varname>standard_conforming_strings</>
-       will be true, meaning backslashes will be treated literally in
-       non-E strings. To prepare for this change, use <literal>E''</>
-       strings in places that need special backslash processing, and
-       turn on <varname>escape_string_warning</> to find additional
-       strings that need to be converted to use <literal>E''</>.
-       Also, use two single-quotes (<literal>''</>) to embed a literal
-       single-quote in a string, rather than the
-       <productname>PostgreSQL</productname>-supported syntax of
-       backslash single-quote (<literal>\'</>).  The former is
-       standards-conforming and does not require the use of the
-       <literal>E''</> string syntax.  You can also use the
-       <literal>$$</> string syntax, which does not treat backslashes
-       specially.
-      </para>
-     </listitem>
+   <itemizedlist>
 
-     <listitem>
-      <para>
-       Make <command>REINDEX DATABASE</> reindex all indexes in the
-       database (Tom)
-      </para>
-      <para>
-       Formerly, <command>REINDEX DATABASE</> reindexed only
-       system tables. This new behavior seems more intuitive. A new
-       command <command>REINDEX SYSTEM</> provides the old functionality
-       of reindexing just the system tables.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+     </para>
 
-     <listitem>
-      <para>
-       Read-only large object descriptors now obey MVCC snapshot semantics
-      </para>
-      <para>
-       When a large object is opened with <literal>INV_READ</> (and not
-       <literal>INV_WRITE</>), the data read from the descriptor will now
-       reflect a <quote>snapshot</> of the large object's state at the
-       time of the transaction snapshot in use by the query that called
-       <function>lo_open()</>.  To obtain the old behavior of always
-       returning the latest committed data, include <literal>INV_WRITE</>
-       in the mode flags for <function>lo_open()</>.
-      </para>
-     </listitem>
+     <para>
+      This fixes a problem with starting the statistics collector,
+      among other things.
+     </para>
+    </listitem>
 
-     <listitem>
-      <para>
-       Add proper dependencies for arguments of sequence functions (Tom)
-      </para>
-      <para>
-       In previous releases, sequence names passed to <function>nextval()</>,
-       <function>currval()</>, and <function>setval()</> were stored as
-       simple text strings, meaning that renaming or dropping a
-       sequence used in a <literal>DEFAULT</> clause made the clause
-       invalid. This release stores all newly-created sequence function
-       arguments as internal OIDs, allowing them to track sequence
-       renaming, and adding dependency information that prevents
-       improper sequence removal. It also makes such <literal>DEFAULT</>
-       clauses immune to schema renaming and search path changes.
-      </para>
-      <para>
-       Some applications might rely on the old behavior of
-       run-time lookup for sequence names. This can still be done by
-       explicitly casting the argument to <type>text</>, for example
-       <literal>nextval('myseq'::text)</>.
-      </para>
-      <para>
-       Pre-8.1 database dumps loaded into 8.1 will use the old text-based
-       representation and therefore will not have the features of
-       OID-stored arguments. However, it is possible to update a
-       database containing text-based <literal>DEFAULT</> clauses.
-       First, save this query into a file, such as <filename>fixseq.sql</>:
-<programlisting>
-SELECT  'ALTER TABLE ' ||
-    pg_catalog.quote_ident(n.nspname) || '.' ||
-    pg_catalog.quote_ident(c.relname) ||
-    ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
-    ' SET DEFAULT ' ||
-    regexp_replace(d.adsrc,
-                   $$val\(\(('[^']*')::text\)::regclass$$,
-                   $$val(\1$$,
-                   'g') ||
-    ';'
-FROM    pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
-WHERE   n.oid = c.relnamespace AND
-    c.oid = a.attrelid AND
-    a.attrelid = d.adrelid AND
-    a.attnum = d.adnum AND
-    d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
-</programlisting>
-       Next, run the query against a database to find what
-       adjustments are required, like this for database <literal>db1</>:
-<programlisting>
-psql -t -f fixseq.sql db1
-</programlisting>
-       This will show the <command>ALTER TABLE</> commands needed to
-       convert the database to the newer OID-based representation.
-       If the commands look reasonable, run this to update the database:
-<programlisting>
-psql -t -f fixseq.sql db1 | psql -e db1
-</programlisting>
-       This process must be repeated in each database to be updated.
-      </para>
-     </listitem>
+    <listitem>
+     <para>
+      Fix <application>pg_restore</> to handle a tar-format backup
+      that contains large objects (blobs) with comments (Tom)
+     </para>
+    </listitem>
 
      <listitem>
       <para>
-       In <application>psql</application>, treat unquoted
-       <literal>\{digit}+</> sequences as octal (Bruce)
-      </para>
-      <para>
-       In previous releases, <literal>\{digit}+</> sequences were
-       treated as decimal, and only <literal>\0{digit}+</> were treated
-       as octal. This change was made for consistency.
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Remove grammar productions for prefix and postfix <literal>%</>
-       and <literal>^</> operators
-       (Tom)
-      </para>
-      <para>
-       These have never been documented and complicated the use of the
-       modulus operator (<literal>%</>) with negative numbers.
+       Clean out <filename>pg_internal.init</> cache files during server
+       restart (Simon)
       </para>
-     </listitem>
 
-     <listitem>
       <para>
-       Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
-       consistent with the box "over" operators (Tom)
+       This avoids a hazard that the cache files might contain stale
+       data after PITR recovery.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       <command>CREATE LANGUAGE</> can ignore the provided arguments
-       in favor of information from <structname>pg_pltemplate</>
-       (Tom)
-      </para>
-      <para>
-       A new system catalog <structname>pg_pltemplate</> has been defined
-       to carry information about the preferred definitions of procedural
-       languages (such as whether they have validator functions).  When
-       an entry exists in this catalog for the language being created,
-       <command>CREATE LANGUAGE</> will ignore all its parameters except the
-       language name and instead use the catalog information.  This measure
-       was taken because of increasing problems with obsolete language
-       definitions being loaded by old dump files.  As of 8.1,
-       <application>pg_dump</> will dump procedural language definitions as
-       just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
-       on a template entry to exist at load time.  We expect this will be a
-       more future-proof representation.
+       Fix race condition for truncation of a large relation across a
+       gigabyte boundary by <command>VACUUM</> (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Make <function>pg_cancel_backend(int)</function> return a
-       <type>boolean</type> rather than an <type>integer</type> (Neil)
+       Fix bug causing needless deadlock errors on row-level locks (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Some users are having problems loading UTF-8 data into 8.1.X.
-       This is because previous versions allowed invalid UTF-8 byte
-       sequences to be entered into the database, and this release
-       properly accepts only valid UTF-8 sequences. One way to correct a
-       dumpfile is to run the command <command>iconv -c -f UTF-8 -t
-       UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
-       removes invalid character sequences. A diff of the two files will
-       show the sequences that are invalid. <command>iconv</> reads the
-       entire input file into memory so it might be necessary to use
-       <application>split</> to break up the dump into multiple smaller
-       files for processing.
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
       </para>
      </listitem>
 
-    </itemizedlist>
-   </sect2>
+    <listitem>
+     <para>
+      Fix possible deadlock in Windows signal handling (Teodor)
+     </para>
+    </listitem>
 
-   <sect2>
-    <title>Additional Changes</title>
+    <listitem>
+     <para>
+      Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+      empty elements (Tom)
+     </para>
+    </listitem>
 
-    <para>
-     Below you will find a detailed account of the additional changes
-     between <productname>PostgreSQL</productname> 8.1 and the
-     previous major release.
-    </para>
+    <listitem>
+     <para>
+      Fix ecpg memory leak during connection (Michael)
+     </para>
+    </listitem>
 
-    <sect3>
-     <title>Performance Improvements</title>
-     <itemizedlist>
+    <listitem>
+     <para>
+      Fix for Darwin (OS X) compilation (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Improve GiST and R-tree index performance (Neil)
-       </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 the optimizer, including auto-resizing of hash joins
-        (Tom)
-       </para>
-      </listitem>
+     <para>
+      This is because <varname>lc_numeric</> can potentially
+      change the output of these functions.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Overhaul internal API in several areas
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
 
-      <listitem>
-       <para>
-        Change WAL record CRCs from 64-bit to 32-bit (Tom)
-       </para>
-       <para>
-        We determined that the extra cost of computing 64-bit CRCs was
-        significant, and the gain in reliability too marginal to justify it.
-       </para>
-      </listitem>
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Prevent writing large empty gaps in WAL pages (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Update timezone database
+     </para>
 
-      <listitem>
-       <para>
-        Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
-       </para>
-      </listitem>
+     <para>
+      This affects Australian and Canadian daylight-savings rules in
+      particular.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Allow nonconsecutive index columns to be used in a multicolumn
-        index (Tom)
-       </para>
-       <para>
-        For example, this allows an index on columns a,b,c to be used in
-        a query with <command>WHERE a = 4 and c = 10</>.
-       </para>
-      </listitem>
+   </itemizedlist>
 
-      <listitem>
-       <para>
-        Skip WAL logging for <command>CREATE TABLE AS</> /
-        <command>SELECT INTO</> (Simon)
-       </para>
-       <para>
-        Since a crash during <command>CREATE TABLE AS</> would cause the
-        table to be dropped during recovery, there is no reason to WAL
-        log as the table is loaded.  (Logging still happens if WAL
-        archiving is enabled, however.)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Allow concurrent GiST index access (Teodor, Oleg)
-       </para>
-      </listitem>
+ <sect1 id="release-8-1-5">
+  <title>Release 8.1.5</title>
 
-      <listitem>
-       <para>
-        Add configuration parameter <varname>full_page_writes</> to
-        control writing full pages to WAL (Bruce)
-       </para>
-       <para>
-        To prevent partial disk writes from corrupting the database,
-        <productname>PostgreSQL</productname> writes a complete copy of
-        each database disk page to WAL the first time it is modified
-        after a checkpoint. This option turns off that functionality for more
-        speed.  This is safe to use with battery-backed disk caches where
-        partial page writes cannot happen.
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-10-16</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Use <literal>O_DIRECT</> if available when using
-        <literal>O_SYNC</> for <varname>wal_sync_method</varname>
-        (Itagaki Takahiro)
-       </para>
-       <para>
-        <literal>O_DIRECT</> causes disk writes to bypass the kernel
-        cache, and for WAL writes, this improves performance.
-       </para>
-      </listitem>
+  <para>
+   This release contains a variety of fixes from 8.1.4.
+  </para>
 
-      <listitem>
-       <para>
-        Improve <command>COPY FROM</> performance (Alon Goldshuv)
-       </para>
-       <para>
-        This was accomplished by reading <command>COPY</> input in
-        larger chunks, rather than character by character.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.1.5</title>
 
-      <listitem>
-       <para>
-        Improve the performance of <function>COUNT()</function>,
-        <function>SUM</function>, <function>AVG()</function>,
-        <function>STDDEV()</function>, and
-        <function>VARIANCE()</function> (Neil, Tom)
-       </para>
-      </listitem>
-     </itemizedlist>
-    </sect3>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-    <sect3>
-     <title>Server Changes</title>
-     <itemizedlist>
+  </sect2>
 
-      <listitem>
-       <para>
-        Prevent problems due to transaction ID (XID) wraparound (Tom)
-       </para>
-       <para>
-        The server will now warn when the transaction counter approaches
-        the wraparound point.  If the counter becomes too close to wraparound,
-        the server will stop accepting queries.  This ensures that data is
-        not lost before needed vacuuming is performed.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Fix problems with object IDs (OIDs) conflicting with existing system
-        objects after the OID counter has wrapped around (Tom)
-       </para>
-      </listitem>
+<itemizedlist>
+<listitem><para>Disallow aggregate functions in <command>UPDATE</>
+commands, except within sub-SELECTs (Tom)</para>
+<para>The behavior of such an aggregate was unpredictable, and in 8.1.X
+could cause a crash, so it has been disabled.  The SQL standard does not allow
+this either.</para></listitem>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</para></listitem>
+<listitem><para>Fix core dump in duration logging for extended query protocol
+when a <command>COMMIT</> or <command>ROLLBACK</> is
+executed</para></listitem>
+<listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
+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>
+<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
+</para></listitem>
+<listitem><para>Fix <function>to_timestamp()</> for
+<literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
+<listitem><para>Fix autovacuum's calculation that decides whether
+ <command>ANALYZE</> is needed (Alvaro)</para></listitem>
+<listitem><para>Fix corner cases in pattern matching for
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
+<listitem><para>Fix index-corrupting bugs in /contrib/ltree
+ (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>
+<listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
+</listitem>
+<listitem><para>Efficiency improvements in hash tables and bitmap index scans
+(Tom)</para></listitem>
+<listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
+<listitem><para>Fix <varname>statement_timeout</> to use the proper
+units on Win32 (Bruce)</para>
+<para>In previous Win32 8.1.X versions, the delay was off by a factor of
+100.</para></listitem>
+<listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
+compilers (Hiroshi Saito)</para></listitem>
+<listitem><para>Fixes for <systemitem class="osname">AIX</> and
+<productname>Intel</> compilers (Tom)</para></listitem>
+<listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
+</itemizedlist>
 
-      <listitem>
-       <para>
-        Add warning about the need to increase
-        <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
-        during <command>VACUUM</> (Ron Mayer)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Add <varname>temp_buffers</> configuration parameter to allow
-        users to determine the size of the local buffer area for
-        temporary table access (Tom)
-       </para>
-      </listitem>
+ <sect1 id="release-8-1-4">
+  <title>Release 8.1.4</title>
 
-      <listitem>
-       <para>
-        Add session start time and client IP address to
-        <literal>pg_stat_activity</> (Magnus)
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-05-23</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Adjust <literal>pg_stat</> views for bitmap scans (Tom)
-       </para>
-       <para>
-        The meanings of some of the fields have changed slightly.
-       </para>
-      </listitem>
+  <para>
+   This release contains a variety of fixes from 8.1.3,
+   including patches for extremely serious security issues.
+  </para>
 
-      <listitem>
-       <para>
-        Enhance <literal>pg_locks</> view (Tom)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.1.4</title>
 
-      <listitem>
-       <para>
-        Log queries for client-side <command>PREPARE</> and
-        <command>EXECUTE</> (Simon)
-       </para>
-      </listitem>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
 
-      <listitem>
-       <para>
-        Allow Kerberos name and user name case sensitivity to be
-        specified in <filename>postgresql.conf</> (Magnus)
-       </para>
-      </listitem>
+   <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>
 
-      <listitem>
-       <para>
-        Add configuration parameter <varname>krb_server_hostname</> so
-        that the server host name can be specified as part of service
-        principal (Todd Kover)
-       </para>
-       <para>
-        If not set, any service principal matching an entry in the
-        keytab can be used. This is new Kerberos matching behavior in
-        this release.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Add <varname>log_line_prefix</> options for millisecond
-        timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
-        L.)
-       </para>
-      </listitem>
+<itemizedlist>
+<listitem><para>Change the server to reject invalidly-encoded multibyte
+characters in all cases (Tatsuo, Tom)</para>
+<para>While <productname>PostgreSQL</> has been moving in this direction for
+some time, the checks are now applied uniformly to all encodings and all
+textual input, and are now always errors not merely warnings.  This change
+defends against SQL-injection attacks of the type described in CVE-2006-2313.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add WAL logging for GiST indexes (Teodor, Oleg)
-       </para>
-       <para>
-        GiST indexes are now safe for crash and point-in-time recovery.
-       </para>
-      </listitem>
+<listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
+<para>As a server-side defense against SQL-injection attacks of the type
+described in CVE-2006-2314, the server now only accepts <literal>''</> and not
+<literal>\'</> as a representation of ASCII single quote in SQL string
+literals.  By default, <literal>\'</> is rejected only when
+<varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
+GB18030, or UHC), which is the scenario in which SQL injection is possible.
+A new configuration parameter <varname>backslash_quote</> is available to
+adjust this behavior when needed.  Note that full security against
+CVE-2006-2314 might require client-side changes; the purpose of
+<varname>backslash_quote</> is in part to make it obvious that insecure
+clients are insecure.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Remove old <filename>*.backup</> files when we do
-        <function>pg_stop_backup()</> (Bruce)
-       </para>
-       <para>
-        This prevents a large number of <filename>*.backup</> files from
-        existing in <filename>pg_xlog/</>.
-       </para>
-      </listitem>
+<listitem><para>Modify <application>libpq</>'s string-escaping routines to be
+aware of encoding considerations and
+<varname>standard_conforming_strings</></para>
+<para>This fixes <application>libpq</>-using applications for the security
+issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
+them against the planned changeover to SQL-standard string literal syntax.
+Applications that use multiple <productname>PostgreSQL</> connections
+concurrently should migrate to <function>PQescapeStringConn()</> and
+<function>PQescapeByteaConn()</> to ensure that escaping is done correctly
+for the settings in use in each database connection.  Applications that
+do string escaping <quote>by hand</> should be modified to rely on library
+routines instead.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add configuration parameters to control TCP/IP keep-alive
-        times for idle, interval, and count (Oliver Jowett)
-       </para>
+<listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
+<para>Errors in fortuna PRNG reseeding logic could cause a predictable
+session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
+This only affects non-OpenSSL-using builds.
+</para></listitem>
 
-       <para>
-        These values can be changed to allow more rapid detection of
-        lost client connections.
-       </para>
-      </listitem>
+<listitem><para>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>win866_to_iso</>,
+<function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
+<function>mic_to_euc_tw</> were all broken to varying
+extents.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add per-user and per-database connection limits (Petr Jelinek)
-       </para>
-       <para>
-        Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
-        limits can now be enforced on the maximum number of sessions that
-        can concurrently connect as a specific user or to a specific database.
-        Setting the limit to zero disables user or database connections.
-       </para>
-      </listitem>
+<listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow more than two gigabytes of shared memory and per-backend
-        work memory on 64-bit machines (Koichi Suzuki)
-       </para>
-      </listitem>
+<listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
+(Alvaro)</para></listitem>
 
-      <listitem>
-       <para>
-        New system catalog <structname>pg_pltemplate</> allows overriding
-        obsolete procedural-language definitions in dump files (Tom)
-       </para>
-      </listitem>
+<listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
+<para>In certain cases, having <literal>full_page_writes</> off would cause
+crash recovery to fail.  A proper fix will appear in 8.2; for now it's just
+disabled.
+</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Various planner fixes, particularly for bitmap index scans and
+MIN/MAX optimization (Tom)</para></listitem>
 
+<listitem><para>Fix incorrect optimization in merge join (Tom)</para>
+<para>Outer joins could sometimes emit multiple copies of unmatched rows.
+</para></listitem>
 
-    <sect3>
-     <title>Query Changes</title>
-     <itemizedlist>
+<listitem><para>Fix crash from using and modifying a plpgsql function in the
+same transaction</para></listitem>
 
-      <listitem>
-       <para>
-        Add temporary views (Koju Iijima, Neil)
-       </para>
-      </listitem>
+<listitem><para>Fix WAL replay for case where a B-Tree index has been
+truncated</para></listitem>
 
-      <listitem>
-       <para>
-        Fix <command>HAVING</> without any aggregate functions or
-        <command>GROUP BY</> so that the query returns a single group (Tom)
-       </para>
-       <para>
-        Previously, such a case would treat the <command>HAVING</>
-        clause the same as a <command>WHERE</> clause.  This was not per spec.
-       </para>
-      </listitem>
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <command>USING</> clause to allow additional tables to be
-        specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
-       </para>
-       <para>
-        In prior releases, there was no clear method for specifying
-        additional tables to be used for joins in a <command>DELETE</>
-        statement. <command>UPDATE</> already has a <literal>FROM</>
-        clause for this purpose.
-       </para>
-      </listitem>
+<listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
+create tables in the default tablespace, not the base directory (Kris
+Jurka)</para></listitem>
 
-      <listitem>
-       <para>
-        Add support for <literal>\x</> hex escapes in backend and ecpg
-        strings (Bruce)
-       </para>
-       <para>
-        This is just like the standard C <literal>\x</> escape syntax.
-        Octal escapes were already supported.
-       </para>
-      </listitem>
+<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
-       </para>
-       <para>
-        This feature allows <command>BETWEEN</> comparisons without
-        requiring the first value to be less than the second. For
-        example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
-        false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
-        true. <command>BETWEEN ASYMMETRIC</> was already supported.
-       </para>
-      </listitem>
+<listitem><para>Improve qsort performance (Dann Corbit)</para>
+<para>Currently this code is only used on Solaris.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add <command>NOWAIT</> option to <command>SELECT ... FOR
-        UPDATE/SHARE</> (Hans-Juergen Schoenig)
-       </para>
-       <para>
-        While the <varname>statement_timeout</> configuration
-        parameter allows a query taking more than a certain amount of
-        time to be cancelled, the <command>NOWAIT</> option allows a
-        query to be canceled as soon as a <command>SELECT ... FOR
-        UPDATE/SHARE</> command cannot immediately acquire a row lock.
-       </para>
-      </listitem>
-     </itemizedlist>
-    </sect3>
+<listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
 
+<listitem><para>Fix various minor memory leaks</para></listitem>
 
-    <sect3>
-     <title>Object Manipulation Changes</title>
-     <itemizedlist>
+<listitem><para>Fix problem with password prompting on some Win32 systems
+(Robert Kinberg)</para></listitem>
 
-      <listitem>
-       <para>
-        Track dependencies of shared objects (Alvaro)
-       </para>
-       <para>
-        <productname>PostgreSQL</productname> allows global tables
-        (users, databases, tablespaces) to reference information in
-        multiple databases. This addition adds dependency information
-        for global tables, so, for example, user ownership can be
-        tracked across databases, so a user who owns something in any
-        database can no longer be removed. Dependency tracking already
-        existed for database-local objects.
-       </para>
-      </listitem>
+<listitem><para>Improve <application>pg_dump</>'s handling of default values
+for domains</para></listitem>
 
-      <listitem>
-       <para>
-        Allow limited <command>ALTER OWNER</> commands to be performed
-        by the object owner (Stephen Frost)
-       </para>
-       <para>
-        Prior releases allowed only superusers to change object owners.
-        Now, ownership can be transferred if the user executing the command
-        owns the object and would be able to create it as the new owner
-        (that is, the user is a member of the new owning role and that role
-        has the CREATE permission that would be needed to create the object
-        afresh).
-       </para>
-      </listitem>
+<listitem><para>Fix <application>pg_dumpall</> to handle identically-named
+users and groups reasonably (only possible when dumping from a pre-8.1 server)
+(Tom)</para>
+<para>The user and group will be merged into a single role with
+<literal>LOGIN</> permission.  Formerly the merged role wouldn't have
+<literal>LOGIN</> permission, making it unusable as a user.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add <command>ALTER</> object <command>SET SCHEMA</> capability
-        for some object types (tables, functions, types) (Bernd Helmle)
-       </para>
-       <para>
-        This allows objects to be moved to different schemas.
-       </para>
-      </listitem>
+<listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
+documented (Tom)</para></listitem>
+</itemizedlist>
 
-      <listitem>
-       <para>
-        Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
-        disable triggers (Satoshi Nagayasu)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
    </itemizedlist>
-    </sect3>
<sect1 id="release-8-1-3">
+  <title>Release 8.1.3</title>
 
+  <note>
+  <title>Release date</title>
+  <simpara>2006-02-14</simpara>
+  </note>
 
-    <sect3>
-     <title>Utility Command Changes</title>
-     <itemizedlist>
+  <para>
+   This release contains a variety of fixes from 8.1.2,
+   including one very serious security issue.
+  </para>
 
-      <listitem>
-       <para>
-        Allow <command>TRUNCATE</> to truncate multiple tables in a
-        single command (Alvaro)
-       </para>
-       <para>
-        Because of referential integrity checks, it is not allowed to
-        truncate a table that is part of a referential integrity
-        constraint. Using this new functionality, <command>TRUNCATE</>
-        can be used to truncate such tables, if both tables involved in
-        a referential integrity constraint are truncated in a single
-        <command>TRUNCATE</> command.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.1.3</title>
 
-      <listitem>
-       <para>
-        Properly process carriage returns and line feeds in
-        <command>COPY CSV</> mode (Andrew)
-       </para>
-       <para>
-        In release 8.0, carriage returns and line feeds in <command>CSV
-        COPY TO</> were processed in an inconsistent manner. (This was
-        documented on the TODO list.)
-       </para>
-      </listitem>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, if you are upgrading from a version earlier than 8.1.2,
+    see the release notes for 8.1.2.
+   </para>
+  </sect2>
 
-      <listitem>
-       <para>
-        Add <command>COPY WITH CSV HEADER</> to allow a header line as
-        the first line in <command>COPY</> (Andrew)
-       </para>
-       <para>
-        This allows handling of the common <command>CSV</> usage of
-        placing the column names on the first line of the data file. For
-        <command>COPY TO</>, the first line contains the column names,
-        and for <command>COPY FROM</>, the first line is ignored.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        On Windows, display better sub-second precision in
-        <command>EXPLAIN ANALYZE</> (Magnus)
-       </para>
-      </listitem>
+<itemizedlist>
 
-      <listitem>
-       <para>
-        Add trigger duration display to <command>EXPLAIN ANALYZE</>
-        (Tom)
-       </para>
-       <para>
-        Prior releases included trigger execution time as part of the
-        total execution time, but did not show it separately.  It is now
-        possible to see how much time is spent in each trigger.
-       </para>
-      </listitem>
+<listitem><para>Fix bug that allowed any logged-in user to <command>SET
+ROLE</> to any other database user id (CVE-2006-0553)</para>
+<para>Due to inadequate validity checking, a user could exploit the special
+case that <command>SET ROLE</> normally uses to restore the previous role
+setting after an error.  This allowed ordinary users to acquire superuser
+status, for example.
+The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
+However, in all releases back to 7.3 there is a related bug in <command>SET
+SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
+if it has been compiled with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add support for <literal>\x</> hex escapes in <command>COPY</>
-        (Sergey Ten)
-       </para>
-       <para>
-        Previous releases only supported octal escapes.
-       </para>
-      </listitem>
+<listitem><para>Fix bug with row visibility logic in self-inserted
+rows (Tom)</para>
+<para>Under rare circumstances a row inserted by the current command
+could be seen as already valid, when it should not be.  Repairs bug
+created in 8.0.4, 7.4.9, and 7.3.11 releases.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Make <command>SHOW ALL</> include variable descriptions
-        (Matthias Schmidt)
-       </para>
-       <para>
-        <command>SHOW</> varname still only displays the variable's
-        value and does not include the description.
-       </para>
-      </listitem>
+<listitem><para>Fix race condition that could lead to <quote>file already
+exists</> errors during pg_clog and pg_subtrans file creation
+(Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Make <application>initdb</application> create a new standard
-        database called <literal>postgres</>, and convert utilities to
-        use <literal>postgres</> rather than <literal>template1</> for
-        standard lookups (Dave)
-       </para>
-       <para>
-        In prior releases, <literal>template1</> was used both as a
-        default connection for utilities like
-        <application>createuser</application>, and as a template for
-        new databases. This caused <command>CREATE DATABASE</> to
-        sometimes fail, because a new database cannot be created if
-        anyone else is in the template database. With this change, the
-        default connection database is now <literal>postgres</>,
-        meaning it is much less likely someone will be using
-        <literal>template1</> during <command>CREATE DATABASE</>.
-       </para>
-      </listitem>
+<listitem><para>Fix cases that could lead to crashes if a cache-invalidation
+message arrives at just the wrong time (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Create new <application>reindexdb</application> command-line
-        utility by moving <filename>/contrib/reindexdb</> into the
-        server (Euler Taveira de Oliveira)
-       </para>
-      </listitem>
+<listitem><para>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
+<literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
+constraints in the proper order (Nakano Yoshihisa)</para></listitem>
 
+<listitem><para>Fixes to allow restoring dumps that have cross-schema
+references to custom operators or operator classes (Tom)</para></listitem>
 
-    <sect3>
-     <title>Data Type and Function Changes</title>
-     <itemizedlist>
+<listitem><para>Allow <application>pg_restore</> to continue properly after a
+<command>COPY</> failure; formerly it tried to treat the remaining
+<command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>MAX()</> and <function>MIN()</> aggregates for
-        array types (Koju Iijima)
-       </para>
-      </listitem>
+<listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
+when the  data directory is not specified (Magnus)</para></listitem>
 
-      <listitem>
-       <para>
-        Fix <function>to_date()</> and <function>to_timestamp()</> to
-        behave reasonably when <literal>CC</> and <literal>YY</> fields
-        are both used (Karel Zak)
-       </para>
-       <para>
-        If the format specification contains <literal>CC</> and a year
-        specification is <literal>YYY</> or longer, ignore the
-        <literal>CC</>. If the year specification is <literal>YY</> or
-        shorter, interpret <literal>CC</> as the previous century.
-       </para>
-      </listitem>
+<listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
+(Christoph Zwerschke)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>md5(bytea)</> (Abhijit Menon-Sen)
-       </para>
-       <para>
-        <function>md5(text)</> already existed.
-       </para>
-      </listitem>
+<listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
+(Neil)</para></listitem>
 
-      <listitem>
-       <para>
-        Add support for <command>numeric ^ numeric</> based on
-        <function>power(numeric, numeric)</>
-       </para>
-       <para>
-        The function already existed, but there was no operator assigned
-        to it.
-       </para>
-      </listitem>
+<listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
+together in function result type declarations</para></listitem>
 
-      <listitem>
-       <para>
-        Fix <type>NUMERIC</> modulus by properly truncating the quotient
-        during computation (Bruce)
-       </para>
-       <para>
-        In previous releases, modulus for large values sometimes
-        returned negative results due to rounding of the quotient.
-       </para>
-      </listitem>
+<listitem><para>Recover properly if error occurs during argument passing
+in <application>PL/python</> (Neil)</para></listitem>
 
-      <listitem>
-       <para>
-        Add a function <function>lastval()</> (Dennis Bj&ouml;rklund)
-       </para>
-       <para>
-        <function>lastval()</> is a simplified version of
-        <function>currval()</>. It automatically determines the proper
-        sequence name based on the most recent <function>nextval()</> or
-        <function>setval()</> call performed by the current session.
-       </para>
-      </listitem>
+<listitem><para>Fix memory leak in <function>plperl_return_next</>
+(Neil)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>to_timestamp(DOUBLE PRECISION) (Michael Glaesemann)</>
-       </para>
-       <para>
-        Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
-        TIMEZONE</>.
-       </para>
-      </listitem>
+<listitem><para>Fix <application>PL/perl</>'s handling of locales on
+Win32 to match the backend (Andrew)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>pg_postmaster_start_time()</> function (Euler
-        Taveira de Oliveira, Matthias Schmidt)
-       </para>
-      </listitem>
+<listitem><para>Various optimizer fixes (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow the full use of time zone names in <command>AT TIME
-        ZONE</>, not just the short list previously available (Magnus)
-       </para>
-       <para>
-        Previously, only a predefined list of time zone names were
-        supported by <command>AT TIME ZONE</>. Now any supported time
-        zone name can be used, e.g.:
-        <programlisting>
-         SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
-        </programlisting>
-        In the above query, the time zone used is adjusted based on the
-        daylight saving time rules that were in effect on the supplied
-        date.
-       </para>
-      </listitem>
+<listitem><para>Fix crash when <literal>log_min_messages</> is set to
+<literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
+(Bruce)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>GREATEST()</> and <function>LEAST()</> variadic
-        functions (Pavel Stehule)
-       </para>
-       <para>
-        These functions take a variable number of arguments and return
-        the greatest or least value among the arguments.
-       </para>
-      </listitem>
+<listitem><para>Fix <application>pgxs</> <literal>-L</> library path
+specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>pg_column_size()</> (Mark Kirkwood)
-       </para>
-       <para>
-        This returns storage size of a column, which might be compressed.
-       </para>
-      </listitem>
+<listitem><para>Check that SID is enabled while checking for Win32 admin
+privileges (Magnus)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>regexp_replace()</> (Atsushi Ogawa)
-       </para>
-       <para>
-        This allows regular expression replacement, like sed. An optional
-        flag argument allows selection of global (replace all) and
-        case-insensitive modes.
-       </para>
-      </listitem>
+<listitem><para>Properly reject out-of-range date inputs (Kris
+Jurka)</para></listitem>
 
-      <listitem>
-       <para>
-        Fix interval division and multiplication (Bruce)
-       </para>
-       <para>
-        Previous versions sometimes returned unjustified results, like
-        <command>'4 months'::interval / 5</> returning <command>'1 mon
-        -6 days'</>.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Fix roundoff behavior in timestamp, time, and interval output (Tom)
-       </para>
-       <para>
-        This fixes some cases in which the seconds field would be shown as
-        <literal>60</> instead of incrementing the higher-order fields.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add a separate day field to type <type>interval</> so a one day
-        interval can be distinguished from a 24 hour interval (Michael
-        Glaesemann)
-       </para>
-       <para>
-        Days that contain a daylight saving time adjustment are not 24
-        hours long, but typically 23 or 25 hours.  This change creates a
-        conceptual distinction between intervals of <quote>so many days</>
-        and intervals of <quote>so many hours</>.  Adding
-        <literal>1 day</> to a timestamp now gives the same local time on
-        the next day even if a daylight saving time adjustment occurs
-        between, whereas adding <literal>24 hours</> will give a different
-        local time when this happens.  For example, under US DST rules:
-        <programlisting>
-         '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
-         '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
-        </programlisting>
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Add <function>justify_days()</> and <function>justify_hours()</>
-        (Michael Glaesemann)
-       </para>
-       <para>
-        These functions, respectively, adjust days to an appropriate
-        number of full months and days, and adjust hours to an
-        appropriate number of full days and hours.
-       </para>
-      </listitem>
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Move <filename>/contrib/dbsize</> into the backend, and rename
-        some of the functions (Dave Page, Andreas Pflug)
-       </para>
-       <para>
-        <itemizedlist>
-
-         <listitem>
-          <para>
-            <function>pg_tablespace_size()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_database_size()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_relation_size()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_total_relation_size()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_size_pretty()</>
-          </para>
-         </listitem>
-
-        </itemizedlist>
-       </para>
-       <para>
-        <function>pg_total_relation_size()</> includes indexes and TOAST
-        tables.
-       </para>
-      </listitem>
+<listitem><para>Improve speed of <command>COPY IN</> via libpq, by
+avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
 
-      <listitem>
-       <para>
-        Add functions for read-only file access to the cluster directory
-        (Dave Page, Andreas Pflug)
-       </para>
-       <para>
-        <itemizedlist>
-
-         <listitem>
-          <para>
-           <function>pg_stat_file()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_read_file()</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <function>pg_ls_dir()</>
-          </para>
-         </listitem>
-
-        </itemizedlist>
-       </para>
-      </listitem>
+<listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
+creation (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>pg_reload_conf()</> to force reloading of the
-        configuration files (Dave Page, Andreas Pflug)
-       </para>
-      </listitem>
+</itemizedlist>
 
-      <listitem>
-       <para>
-        Add <function>pg_rotate_logfile()</> to force rotation of the
-        server log file (Dave Page, Andreas Pflug)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
-       </para>
-      </listitem>
+ <sect1 id="release-8-1-2">
+  <title>Release 8.1.2</title>
 
-     </itemizedlist>
-    </sect3>
+  <note>
+  <title>Release date</title>
+  <simpara>2006-01-09</simpara>
+  </note>
 
+  <para>
+   This release contains a variety of fixes from 8.1.1.
+  </para>
 
-    <sect3>
-     <title>Encoding and Locale Changes</title>
-     <itemizedlist>
+  <sect2>
+   <title>Migration to Version 8.1.2</title>
 
-      <listitem>
-       <para>
-        Rename some encodings to be more consistent and to follow
-        international standards (Bruce)
-       </para>
-       <para>
-        <itemizedlist>
-
-         <listitem>
-          <para>
-           <literal>UNICODE</> is now <literal>UTF8</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <literal>ALT</> is now <literal>WIN866</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-           <literal>WIN</> is now <literal>WIN1251</>
-          </para>
-         </listitem>
-
-         <listitem>
-          <para>
-          <literal>TCVN</> is now <literal>WIN1258</>
-          </para>
-         </listitem>
-
-        </itemizedlist>
-       </para>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+    However, 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>
-        The original names still work.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Add support for <literal>WIN1252</> encoding (Roland Volkmann)
-       </para>
-      </listitem>
+<itemizedlist>
 
-      <listitem>
-       <para>
-        Add support for four-byte <literal>UTF8</> characters (John
-        Hansen)
-       </para>
-       <para>
-        Previously only one, two, and three-byte <literal>UTF8</> characters
-        were supported. This is particularly important for support for
-        some Chinese character sets.
-       </para>
-      </listitem>
+<listitem><para>Fix Windows code so that postmaster will continue rather
+than exit if there is no more room in ShmemBackendArray (Magnus)</para>
+<para>The previous behavior could lead to a denial-of-service situation if too
+many connection requests arrive close together.  This applies
+<emphasis>only</> to the Windows port.</para></listitem>
 
-      <listitem>
-       <para>
-        Allow direct conversion between <literal>EUC_JP</> and
-        <literal>SJIS</> to improve performance (Atsushi Ogawa)
-       </para>
-      </listitem>
+<listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
+to return an already-used page as new, potentially causing loss of
+recently-committed data (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow the UTF8 encoding to work on Windows (Magnus)
-       </para>
-       <para>
-        This is done by mapping UTF8 to the Windows-native UTF16
-        implementation.
-       </para>
-      </listitem>
+<listitem><para>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Fix character string comparison for locales that consider
+different character combinations as equal, such as Hungarian (Tom)</para>
+<para>This might require <command>REINDEX</> to fix existing indexes on
+textual columns.</para></listitem>
 
+<listitem><para>Set locale environment variables during postmaster startup
+to ensure that <application>plperl</> won't change the locale later</para>
+<para>This fixes a problem that occurred if the <application>postmaster</> was
+started with environment variables specifying a different locale than what
+<application>initdb</> had been told.  Under these conditions, any use of
+<application>plperl</> was likely to lead to corrupt indexes.  You might need
+<command>REINDEX</> to fix existing indexes on
+textual columns if this has happened to you.</para></listitem>
 
-    <sect3>
-     <title>General Server-Side Language Changes</title>
-     <itemizedlist>
+<listitem><para>Allow more flexible relocation of installation
+directories (Tom)</para>
+<para>Previous releases supported relocation only if all installation
+directory paths were the same except for the last component.</para></listitem>
 
-      <listitem>
-       <para>
-        Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
-       </para>
-      </listitem>
+<listitem><para>Prevent crashes caused by the use of
+<literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
+(Tatsuo)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow function characteristics, like strictness and volatility,
-        to be modified via <command>ALTER FUNCTION</> (Neil)
-       </para>
-      </listitem>
+<listitem><para>Fix longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</para></listitem>
 
-      <listitem>
-       <para>
-        Increase the maximum number of function arguments to 100 (Tom)
-       </para>
-      </listitem>
+<listitem><para>Fix bug where COPY CSV mode considered any
+<literal>\.</> to terminate the copy data</para> <para>The new code
+requires <literal>\.</> to appear alone on a line, as per
+documentation.</para></listitem>
 
-      <listitem>
-       <para>
-        Allow SQL and PL/PgSQL functions to use <command>OUT</> and
-        <command>INOUT</> parameters (Tom)
-       </para>
-       <para>
-        <command>OUT</> is an alternate way for a function to return
-        values. Instead of using <command>RETURN</>, values can be
-        returned by assigning to parameters declared as <command>OUT</> or
-        <command>INOUT</>.  This is notationally simpler in some cases,
-        particularly so when multiple values need to be returned.
-        While returning multiple values from a function
-        was possible in previous releases, this greatly simplifies the
-        process.  (The feature will be extended to other server-side
-        languages in future releases.)
-       </para>
-      </listitem>
+<listitem><para>Make COPY CSV mode quote a literal data value of
+<literal>\.</> to ensure it cannot be interpreted as the
+end-of-data marker (Bruce)</para></listitem>
 
-      <listitem>
-       <para>
-        Move language handler functions into the <literal>pg_catalog</> schema
-       </para>
-       <para>
-        This makes it easier to drop the public schema if desired.
-       </para>
-      </listitem>
+<listitem><para>Various fixes for functions returning <literal>RECORD</>s
+(Tom) </para></listitem>
 
-      <listitem>
-       <para>
-        Add <function>SPI_getnspname()</function> to SPI (Neil)
-       </para>
-      </listitem>
+<listitem><para>Fix processing of <filename>postgresql.conf</> so a
+final line with no newline is processed properly (Tom)
+</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
+which caused it not to use all available salt space for MD5 and
+XDES algorithms (Marko Kreen, Solar Designer)</para>
+<para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
 
-    <sect3>
-     <title>PL/PgSQL Server-Side Language Changes</title>
-     <itemizedlist>
+<listitem><para>Fix autovacuum crash when processing expression indexes
+</para></listitem>
 
-      <listitem>
-       <para>
-        Overhaul the memory management of PL/PgSQL functions (Neil)
-       </para>
-       <para>
-        The parsetree of each function is now stored in a separate
-        memory context. This allows this memory to be easily reclaimed
-        when it is no longer needed.
-       </para>
-      </listitem>
+<listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
+rather than crashing, when the number of columns specified is different from
+what's actually returned by the query (Joe)</para></listitem>
 
-      <listitem>
-       <para>
-        Check function syntax at <command>CREATE FUNCTION</> time,
-        rather than at runtime (Neil)
-       </para>
-       <para>
-        Previously, most syntax errors were reported only when the
-        function was executed.
-       </para>
-      </listitem>
+</itemizedlist>
 
-      <listitem>
-       <para>
-        Allow <command>OPEN</> to open non-<command>SELECT</> queries
-        like <command>EXPLAIN</> and <command>SHOW</> (Tom)
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        No longer require functions to issue a <command>RETURN</>
-        statement (Tom)
-       </para>
-       <para>
-        This is a byproduct of the newly added <command>OUT</> and
-        <command>INOUT</> functionality.  <command>RETURN</> can
-        be omitted when it is not needed to provide the function's
-        return value.
-       </para>
-      </listitem>
+ <sect1 id="release-8-1-1">
+  <title>Release 8.1.1</title>
 
-      <listitem>
-       <para>
-        Add support for an optional <command>INTO</> clause to
-        PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
-       </para>
-      </listitem>
+  <note>
+  <title>Release date</title>
+  <simpara>2005-12-12</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
-       </para>
-      </listitem>
+  <para>
+   This release contains a variety of fixes from 8.1.0.
+  </para>
 
-      <listitem>
-       <para>
-        Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
-        the <literal>SQLSTATE</> and error message of the current
-        exception (Pavel Stehule, Neil)
-       </para>
-       <para>
-        These variables are only defined inside exception blocks.
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.1.1</title>
 
-      <listitem>
-       <para>
-        Allow the parameters to the <command>RAISE</> statement to be
-        expressions (Pavel Stehule, Neil)
-       </para>
-      </listitem>
+   <para>
+    A dump/restore is not required for those running 8.1.X.
+   </para>
+  </sect2>
 
-      <listitem>
-       <para>
-        Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Changes</title>
 
-      <listitem>
-       <para>
-        Allow block and loop labels (Pavel Stehule)
-       </para>
-      </listitem>
+<itemizedlist>
+<listitem><para>Fix incorrect optimizations of outer-join conditions
+(Tom)</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Fix problems with wrong reported column names in cases
+involving sub-selects flattened by the optimizer (Tom)</para></listitem>
 
+<listitem><para>Fix update failures in scenarios involving CHECK constraints,
+toasted columns, <emphasis>and</> indexes (Tom)</para></listitem>
 
-    <sect3>
-     <title>PL/Perl Server-Side Language Changes</title>
-     <itemizedlist>
+<listitem><para>Fix bgwriter problems after recovering from errors
+(Tom)</para>
+<para>
+The background writer was found to leak buffer pins after write errors.
+While not fatal in itself, this might lead to mysterious blockages of
+later VACUUM commands.
+</para>
+</listitem>
 
-      <listitem>
-       <para>
-        Allow large result sets to be returned efficiently (Abhijit
-        Menon-Sen)
-       </para>
-       <para>
-        This allows functions to use <function>return_next()</> to avoid
-        building the entire result set in memory.
-       </para>
-      </listitem>
+<listitem><para>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
 
-      <listitem>
-       <para>
-        Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
-       </para>
-       <para>
-        This allows functions to use <function>spi_query()</> and
-        <function>spi_fetchrow()</> to avoid accumulating the entire
-        result set in memory.
-       </para>
-      </listitem>
+<listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
+fixes (Teodor)</para></listitem>
 
-      <listitem>
-       <para>
-        Force PL/Perl to handle strings as <literal>UTF8</> if the
-        server encoding is <literal>UTF8</> (David Kamholz)
-       </para>
-      </listitem>
+<listitem><para>Fix problems with translated error messages in
+languages that require word reordering, such as Turkish; also problems with
+unexpected truncation of output strings and wrong display of the smallest
+possible bigint value (Andrew, Tom)</para>
+<para>
+These problems only appeared on platforms that were using our
+<filename>port/snprintf.c</> code, which includes BSD variants if
+<literal>--enable-nls</> was given, and perhaps others.  In addition,
+a different form of the translated-error-message problem could appear
+on Windows depending on which version of <filename>libintl</> was used.
+</para></listitem>
 
-      <listitem>
-       <para>
-        Add a validator function for PL/Perl (Andrew)
-       </para>
-       <para>
-        This allows syntax errors to be reported at definition time,
-        rather than execution time.
-       </para>
-      </listitem>
+<listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
+<literal>HH12</>, and <literal>D</> format specifiers for
+<function>to_char(time)</> and <function>to_char(interval)</>.
+(<function>to_char(interval)</> should probably use
+<literal>HH24</>.) (Bruce)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow PL/Perl to return a Perl array when the function returns
-        an array type (Andrew)
-       </para>
-       <para>
-        This basically maps <productname>PostgreSQL</productname> arrays
-        to Perl arrays.
-       </para>
-      </listitem>
+<listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
+Saito)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow Perl nonfatal warnings to generate <command>NOTICE</>
-        messages (Andrew)
-       </para>
-      </listitem>
+<listitem><para>Optimizer improvements (Tom)</para></listitem>
 
-      <listitem>
-       <para>
-        Allow Perl's <literal>strict</> mode to be enabled (Andrew)
-       </para>
-      </listitem>
+<listitem><para>Retry file reads and writes after Windows
+NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
 
-     </itemizedlist>
-    </sect3>
+<listitem><para>Prevent <application>autovacuum</> from crashing during
+ANALYZE of expression index (Alvaro)</para></listitem>
 
+<listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
+tables</para></listitem>
 
-    <sect3>
-     <title><application>psql</> Changes</title>
-     <itemizedlist>
+<listitem><para>Fix problems when a trigger alters the output of a SELECT
+DISTINCT query</para></listitem>
 
-      <listitem>
-       <para>
-        Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
-        a transaction to error without affecting the rest of the
-        transaction (Greg Sabino Mullane)
-       </para>
-       <para>
-        This is basically implemented by wrapping every statement in a
-        sub-transaction.
-       </para>
-      </listitem>
+<listitem><para>Add 8.1.0 release note item on how to migrate invalid
+<literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
+</itemizedlist>
 
-      <listitem>
-       <para>
-        Add support for <literal>\x</> hex strings in
-        <application>psql</> variables (Bruce)
-       </para>
-       <para>
-        Octal escapes were already supported.
-       </para>
-      </listitem>
+  </sect2>
+ </sect1>
 
-      <listitem>
-       <para>
-        Add support for <command>troff -ms</> output format (Roger
-        Leigh)
-       </para>
-      </listitem>
+ <sect1 id="release-8-1">
+  <title>Release 8.1</title>
 
-      <listitem>
-       <para>
-        Allow the history file location to be controlled by
-        <envar>HISTFILE</> (Andreas Seltenreich)
-       </para>
-       <para>
-        This allows configuration of per-database history storage.
-       </para>
-      </listitem>
+  <note>
+   <title>Release date</title>
+   <simpara>2005-11-08</simpara>
+  </note>
 
-      <listitem>
-       <para>
-        Prevent <command>\x</> (expanded mode) from affecting
-        the output of <command>\d tablename</> (Neil)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Overview</title>
 
-      <listitem>
-       <para>
-        Add <option>-L</> option to <application>psql</application> to
-        log sessions (Lorne Sunley)
-       </para>
-       <para>
-        This option was added because some operating systems do not have
-        simple command-line activity logging functionality.
-       </para>
-      </listitem>
+   <para>
+    Major changes in this release:
+   </para>
 
-      <listitem>
-       <para>
-        Make <command>\d</> show the tablespaces of indexes (Qingqing
-        Zhou)
-       </para>
-      </listitem>
+   <variablelist>
 
-      <listitem>
-       <para>
-        Allow <application>psql</application> help (<command>\h</>) to
-        make a best guess on the proper help information (Greg Sabino
-        Mullane)
-       </para>
-       <para>
-        This allows the user to just add <command>\h</> to the front of
-        the syntax error query and get help on the supported syntax.
-        Previously any additional query text beyond the command name
-        had to be removed to use <command>\h</>.
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Improve concurrent access to the shared buffer cache (Tom)
+     </term>
 
-      <listitem>
-       <para>
-        Add <command>\pset numericlocale</> to allow numbers to be
-        output in a locale-aware format (Eugen Nedelcu)
-       </para>
-       <para>
-        For example, using <literal>C</> locale <literal>100000</> would
-        be output as <literal>100,000.0</> while a European locale might
-        output this value as <literal>100.000,0</>.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Access to the shared buffer cache was identified as a
+       significant scalability problem, particularly on multi-CPU
+       systems. In this release, the way that locking is done in the
+       buffer manager has been overhauled to reduce lock contention
+       and improve scalability. The buffer manager has also been
+       changed to use a <quote>clock sweep</quote> replacement
+       policy.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Make startup banner show both server version number and
-        <application>psql</>'s version number, when they are different (Bruce)
-       </para>
-       <para>
-        Also, a warning will be shown if the server and <application>psql</>
-        are from different major releases.
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Allow index scans to use an intermediate in-memory bitmap (Tom)
+     </term>
 
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       In previous releases, only a single index could be used to do
+       lookups on a table. With this feature, if a query has
+       <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
+       no multicolumn index on <literal>col1</> and <literal>col2</>,
+       but there is an index on <literal>col1</> and another on
+       <literal>col2</>, it is possible to search both indexes and
+       combine the results in memory, then do heap fetches for only
+       the rows matching both the <literal>col1</> and
+       <literal>col2</> restrictions. This is very useful in
+       environments that have a lot of unstructured queries where it
+       is impossible to create indexes that match all possible access
+       conditions.  Bitmap scans are useful even with a single index,
+       as they reduce the amount of random access needed; a bitmap
+       index scan is efficient for retrieving fairly large fractions
+       of the complete table, whereas plain index scans are not.
+      </para>
+     </listitem>
+    </varlistentry>
 
+    <varlistentry>
+     <term>
+      Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
+     </term>
 
-    <sect3>
-     <title><application>pg_dump</> Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       Two-phase commit allows transactions to be "prepared" on several
+       computers, and once all computers have successfully prepared
+       their transactions (none failed), all transactions can be
+       committed. Even if a machine crashes after a prepare, the
+       prepared transaction can be committed after the machine is
+       restarted. New syntax includes <command>PREPARE TRANSACTION</> and
+       <command>COMMIT/ROLLBACK PREPARED</>. A new system view
+       <literal>pg_prepared_xacts</> has also been added.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Add <option>-n</> / <option>--schema</> switch to
-        <application>pg_restore</> (Richard van den Berg)
-       </para>
-       <para>
-        This allows just the objects in a specified schema to be restored.
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Create a new role system that replaces users and groups
+      (Stephen Frost)
+     </term>
 
-      <listitem>
-       <para>
-        Allow <application>pg_dump</> to dump large objects even in
-        text mode (Tom)
-       </para>
-       <para>
-        With this change, large objects are now always dumped; the former
-        <option>-b</> switch is a no-op.
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       Roles are a combination of users and groups. Like users, they
+       can have login capability, and like groups, a role can have
+       other roles as members. Roles basically remove the distinction
+       between users and groups. For example, a role can:
+      </para>
 
-      <listitem>
-       <para>
-        Allow <application>pg_dump</> to dump a consistent snapshot of
-        large objects (Tom)
-       </para>
-      </listitem>
+      <itemizedlist>
 
-      <listitem>
-       <para>
-        Dump comments for large objects (Tom)
-       </para>
-      </listitem>
+       <listitem>
+        <para>
+          Have login capability (optionally)
+        </para>
+       </listitem>
 
-      <listitem>
-       <para>
-        Add <option>--encoding</> to <application>pg_dump</>
-        (Magnus Hagander)
-       </para>
-       <para>
-        This allows a database to be dumped in an encoding that is
-        different from the server's encoding. This is valuable when
-        transferring the dump to a machine with a different encoding.
-       </para>
-      </listitem>
+       <listitem>
+        <para>
+         Own objects
+        </para>
+       </listitem>
 
-      <listitem>
-       <para>
-        Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
-       </para>
-       <para>
-        If the call handler for a procedural language is in the
-        <literal>pg_catalog</> schema, <application>pg_dump</> does not
-        dump the handler.  Instead, it dumps the language using just
-        <command>CREATE LANGUAGE <replaceable>name</></command>,
-        relying on the <structname>pg_pltemplate</> catalog to provide
-        the language's creation parameters at load time.
-       </para>
-      </listitem>
+       <listitem>
+        <para>
+         Hold access permissions for database objects
+        </para>
+       </listitem>
 
-     </itemizedlist>
-    </sect3>
+       <listitem>
+        <para>
+         Inherit permissions from other roles it is a member of
+        </para>
+       </listitem>
 
+      </itemizedlist>
+      <para>
+       Once a user logs into a role, she obtains capabilities of
+       the login role plus any inherited roles, and can use
+       <command>SET ROLE</> to switch to other roles she is a member of.
+       This feature is a generalization of the SQL standard's concept of
+       roles.
+       This change also replaces <structname>pg_shadow</> and
+       <structname>pg_group</> by new role-capable catalogs
+       <structname>pg_authid</> and <structname>pg_auth_members</>. The old
+       tables are redefined as read-only views on the new role tables.
+      </para>
+     </listitem>
+    </varlistentry>
 
-    <sect3>
-     <title><application>libpq</application> Changes</title>
-     <itemizedlist>
+    <varlistentry>
+     <term>
+      Automatically use indexes for <function>MIN()</> and
+      <function>MAX()</> (Tom)
+     </term>
 
-      <listitem>
-       <para>
-        Add a <envar>PGPASSFILE</> environment variable to specify the
-        password file's filename (Andrew)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       In previous releases, the only way to use an index for
+       <function>MIN()</> or <function>MAX()</> was to rewrite the
+       query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
+       Index usage now happens automatically.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Add <function>lo_create()</>, that is similar to
-        <function>lo_creat()</> but allows the OID of the large object
-        to be specified (Tom)
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Move <filename>/contrib/pg_autovacuum</> into the main server
+      (Alvaro)
+     </term>
 
-      <listitem>
-       <para>
-        Make <application>libpq</application> consistently return an error
-        to the client application on <function>malloc()</function>
-        failure (Neil)
-       </para>
-      </listitem>
-     </itemizedlist>
-    </sect3>
+     <listitem>
+      <para>
+       Integrating autovacuum into the server allows it to be
+       automatically started and stopped in sync with the database
+       server, and allows autovacuum to be configured from
+       <filename>postgresql.conf</>.
+      </para>
+     </listitem>
+    </varlistentry>
 
+    <varlistentry>
+     <term>
+      Add shared row level locks using <command>SELECT ... FOR SHARE</>
+      (Alvaro)
+     </term>
 
-    <sect3>
-     <title>Source Code Changes</title>
-     <itemizedlist>
+     <listitem>
+      <para>
+       While <productname>PostgreSQL</productname>'s MVCC locking
+       allows <command>SELECT</> to never be blocked by writers and
+       therefore does not need shared row locks for typical operations,
+       shared locks are useful for applications that require shared row
+       locking.  In particular this reduces the locking requirements
+       imposed by referential integrity checks.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Fix <application>pgxs</> to support building against a relocated
-        installation
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Add dependencies on shared objects, specifically roles
+      (Alvaro)
+     </term>
 
-      <listitem>
-       <para>
-        Add spinlock support for the Itanium processor using Intel
-        compiler (Vikram Kalsi)
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       This extension of the dependency mechanism prevents roles from
+       being dropped while there are still database objects they own.
+       Formerly it was possible to accidentally <quote>orphan</> objects by
+       deleting their owner.  While this could be recovered from, it
+       was messy and unpleasant.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Add Kerberos 5 support for Windows (Magnus)
-       </para>
-      </listitem>
+    <varlistentry>
+     <term>
+      Improve performance for partitioned tables (Simon)
+     </term>
 
-      <listitem>
-       <para>
-        Add Chinese FAQ ([email protected])
-       </para>
-      </listitem>
+     <listitem>
+      <para>
+       The new <varname>constraint_exclusion</varname> configuration
+       parameter avoids lookups on child tables where constraints indicate
+       that no matching rows exist in the child table.
+      </para>
+      <para>
+       This allows for a basic type of table partitioning. If child tables
+       store separate key ranges and this is enforced using appropriate
+       <command>CHECK</> constraints, the optimizer will skip child
+       table accesses when the constraint guarantees no matching rows
+       exist in the child table.
+      </para>
+     </listitem>
+    </varlistentry>
 
-      <listitem>
-       <para>
-        Rename Rendezvous to Bonjour to match OS/X feature renaming
-        (Bruce)
-       </para>
-      </listitem>
+   </variablelist>
+  </sect2>
 
-      <listitem>
-       <para>
-        Add support for <literal>fsync_writethrough</literal> on
-        Darwin (Chris Campbell)
-       </para>
-      </listitem>
+  <sect2>
+   <title>Migration to Version 8.1</title>
 
-      <listitem>
-       <para>
-        Streamline the passing of information within the server, the
-        optimizer, and the lock system (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>
-        Allow <application>pg_config</> to be compiled using MSVC (Andrew)
-       </para>
-       <para>
-        This is required to build DBD::Pg using <application>MSVC</>.
-       </para>
-      </listitem>
+   <para>
+    The 8.0 release announced that the <function>to_char()</> function
+    for intervals would be removed in 8.1. However, since no better API
+    has been suggested, <function>to_char(interval)</> has been enhanced in
+    8.1 and will remain in the server.
+   </para>
 
-      <listitem>
-       <para>
-        Remove support for Kerberos V4 (Magnus)
-       </para>
-       <para>
-        Kerberos 4 had security vulnerabilities and is no longer
-        maintained.
-       </para>
-      </listitem>
+   <para>
+    Observe the following incompatibilities:
+   </para>
 
-      <listitem>
-       <para>
-        Code cleanups (Coverity static analysis performed by
-        EnterpriseDB)
-       </para>
-      </listitem>
+   <itemizedlist>
 
-      <listitem>
-       <para>
-        Modify <filename>postgresql.conf</> to use documentation defaults
-        <literal>on</>/<literal>off</> rather than
-        <literal>true</>/<literal>false</> (Bruce)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <varname>add_missing_from</> is now false by default (Neil)
+     </para>
+     <para>
+      By default, we now generate an error if a table is used in a query
+      without a <literal>FROM</> reference.  The old behavior is still
+      available, but the parameter must be set to 'true' to obtain it.
+     </para>
 
-      <listitem>
-       <para>
-        Enhance <application>pg_config</> to be able to report more
-        build-time values (Tom)
-       </para>
-      </listitem>
+     <para>
+      It might be necessary to set <varname>add_missing_from</> to true
+      in order to load an existing dump file, if the dump contains any
+      views or rules created using the implicit-<literal>FROM</> syntax.
+      This should be a one-time annoyance, because
+      <productname>PostgreSQL</productname> 8.1 will convert
+      such views and rules to standard explicit-<literal>FROM</> syntax.
+      Subsequent dumps will therefore not have the problem.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Allow <application>libpq</application> to be built thread-safe
-        on Windows (Dave Page)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Cause input of a zero-length string (<literal>''</literal>) for
+      <type>float4</type>/<type>float8</type>/<type>oid</type>
+      to throw an error, rather than treating it as a zero (Neil)
+     </para>
+     <para>
+      This change is consistent with the current handling of
+      zero-length strings for integers. The schedule for this change
+      was announced in 8.0.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Allow IPv6 connections to be used on Windows (Andrew)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <varname>default_with_oids</> is now false by default (Neil)
+     </para>
+     <para>
+      With this option set to false, user-created tables no longer
+      have an OID column unless <command>WITH OIDS</> is specified in
+      <command>CREATE TABLE</>. Though OIDs have existed in all
+      releases of <productname>PostgreSQL</>, their use is limited
+      because they are only four bytes long and the counter is shared
+      across all installed databases. The preferred way of uniquely
+      identifying rows is via sequences and the <type>SERIAL</> type,
+      which have been supported since <productname>PostgreSQL</> 6.4.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Add Server Administration documentation about I/O subsystem
-        reliability (Bruce)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Add <literal>E''</> syntax so eventually ordinary strings can
+      treat backslashes literally (Bruce)
+     </para>
+     <para>
+      Currently <productname>PostgreSQL</productname> processes a
+      backslash in a string literal as introducing a special escape sequence,
+      e.g. <literal>\n</> or <literal>\010</>.
+      While this allows easy entry of special values, it is
+      nonstandard and makes porting of applications from other
+      databases more difficult. For this reason, the
+      <productname>PostgreSQL</productname> project is planning to
+      remove the special meaning of backslashes in strings. For
+      backward compatibility and for users who want special backslash
+      processing, a new string syntax has been created. This new string
+      syntax is formed by writing an <literal>E</> immediately preceding the
+      single quote that starts the string, e.g. <literal>E'hi\n'</>. While
+      this release does not change the handling of backslashes in strings, it
+      does add new configuration parameters to help users migrate applications
+      for future releases:
+     </para>
+     <itemizedlist>
 
       <listitem>
        <para>
-        Move private declarations from <filename>gist.h</filename> to
-        <filename>gist_private.h</filename> (Neil)
-       </para>
-
-       <para>
-        In previous releases, <filename>gist.h</> contained both the
-        public GiST API (intended for use by authors of GiST index
-        implementations) as well as some private declarations used by
-        the implementation of GiST itself. The latter have been moved
-        to a separate file, <filename>gist_private.h</>. Most GiST
-        index implementations should be unaffected.
+        <varname>standard_conforming_strings</> &mdash; does this release
+        treat backslashes literally in ordinary strings?
        </para>
       </listitem>
 
       <listitem>
-       <para>
-        Overhaul GiST memory management (Neil)
-       </para>
+      <para>
+       <varname>escape_string_warning</> &mdash; warn about backslashes in
+       ordinary (non-E) strings
+      </para>
+     </listitem>
 
-       <para>
-        GiST methods are now always invoked in a short-lived memory
-        context. Therefore, memory allocated via <function>palloc()</>
-        will be reclaimed automatically, so GiST index implementations
-        do not need to manually release allocated memory via
-        <function>pfree()</>.
-       </para>
-      </listitem>
      </itemizedlist>
-    </sect3>
 
+     <para>
+      The <varname>standard_conforming_strings</> value is read-only.
+      Applications can retrieve the value to know how backslashes are
+      processed.  (Presence of the parameter can also be taken as an
+      indication that <literal>E''</> string syntax is supported.)
+      In a future release, <varname>standard_conforming_strings</>
+      will be true, meaning backslashes will be treated literally in
+      non-E strings. To prepare for this change, use <literal>E''</>
+      strings in places that need special backslash processing, and
+      turn on <varname>escape_string_warning</> to find additional
+      strings that need to be converted to use <literal>E''</>.
+      Also, use two single-quotes (<literal>''</>) to embed a literal
+      single-quote in a string, rather than the
+      <productname>PostgreSQL</productname>-supported syntax of
+      backslash single-quote (<literal>\'</>).  The former is
+      standards-conforming and does not require the use of the
+      <literal>E''</> string syntax.  You can also use the
+      <literal>$$</> string syntax, which does not treat backslashes
+      specially.
+     </para>
+    </listitem>
 
-    <sect3>
-     <title>Contrib Changes</title>
-     <itemizedlist>
+    <listitem>
+     <para>
+      Make <command>REINDEX DATABASE</> reindex all indexes in the
+      database (Tom)
+     </para>
+     <para>
+      Formerly, <command>REINDEX DATABASE</> reindexed only
+      system tables. This new behavior seems more intuitive. A new
+      command <command>REINDEX SYSTEM</> provides the old functionality
+      of reindexing just the system tables.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Add <filename>/contrib/pg_buffercache</> contrib module (Mark
-        Kirkwood)
-       </para>
-       <para>
-        This displays the contents of the buffer cache, for debugging and
-        performance tuning purposes.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Read-only large object descriptors now obey MVCC snapshot semantics
+     </para>
+     <para>
+      When a large object is opened with <literal>INV_READ</> (and not
+      <literal>INV_WRITE</>), the data read from the descriptor will now
+      reflect a <quote>snapshot</> of the large object's state at the
+      time of the transaction snapshot in use by the query that called
+      <function>lo_open()</>.  To obtain the old behavior of always
+      returning the latest committed data, include <literal>INV_WRITE</>
+      in the mode flags for <function>lo_open()</>.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Remove <filename>/contrib/array</> because it is obsolete (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Add proper dependencies for arguments of sequence functions (Tom)
+     </para>
+     <para>
+      In previous releases, sequence names passed to <function>nextval()</>,
+      <function>currval()</>, and <function>setval()</> were stored as
+      simple text strings, meaning that renaming or dropping a
+      sequence used in a <literal>DEFAULT</> clause made the clause
+      invalid. This release stores all newly-created sequence function
+      arguments as internal OIDs, allowing them to track sequence
+      renaming, and adding dependency information that prevents
+      improper sequence removal. It also makes such <literal>DEFAULT</>
+      clauses immune to schema renaming and search path changes.
+     </para>
+     <para>
+      Some applications might rely on the old behavior of
+      run-time lookup for sequence names. This can still be done by
+      explicitly casting the argument to <type>text</>, for example
+      <literal>nextval('myseq'::text)</>.
+     </para>
+     <para>
+      Pre-8.1 database dumps loaded into 8.1 will use the old text-based
+      representation and therefore will not have the features of
+      OID-stored arguments. However, it is possible to update a
+      database containing text-based <literal>DEFAULT</> clauses.
+      First, save this query into a file, such as <filename>fixseq.sql</>:
+<programlisting>
+SELECT  'ALTER TABLE ' ||
+   pg_catalog.quote_ident(n.nspname) || '.' ||
+   pg_catalog.quote_ident(c.relname) ||
+   ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
+   ' SET DEFAULT ' ||
+   regexp_replace(d.adsrc,
+                  $$val\(\(('[^']*')::text\)::regclass$$,
+                  $$val(\1$$,
+                  'g') ||
+   ';'
+FROM    pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
+WHERE   n.oid = c.relnamespace AND
+   c.oid = a.attrelid AND
+   a.attrelid = d.adrelid AND
+   a.attnum = d.adnum AND
+   d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
+</programlisting>
+      Next, run the query against a database to find what
+      adjustments are required, like this for database <literal>db1</>:
+<programlisting>
+psql -t -f fixseq.sql db1
+</programlisting>
+      This will show the <command>ALTER TABLE</> commands needed to
+      convert the database to the newer OID-based representation.
+      If the commands look reasonable, run this to update the database:
+<programlisting>
+psql -t -f fixseq.sql db1 | psql -e db1
+</programlisting>
+      This process must be repeated in each database to be updated.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Clean up the <filename>/contrib/lo</> module (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      In <application>psql</application>, treat unquoted
+      <literal>\{digit}+</> sequences as octal (Bruce)
+     </para>
+     <para>
+      In previous releases, <literal>\{digit}+</> sequences were
+      treated as decimal, and only <literal>\0{digit}+</> were treated
+      as octal. This change was made for consistency.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Move <filename>/contrib/findoidjoins</> to
-        <filename>/src/tools</> (Tom)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Remove grammar productions for prefix and postfix <literal>%</>
+      and <literal>^</> operators
+      (Tom)
+     </para>
+     <para>
+      These have never been documented and complicated the use of the
+      modulus operator (<literal>%</>) with negative numbers.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Remove the <literal>&lt;&lt</>, <literal>&gt;&gt;</>,
-        <literal>&amp;&lt</>, and <literal>&amp;&gt;</> operators from
-        <filename>/contrib/cube</>
-       </para>
-       <para>
-        These operators were not useful.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
+      consistent with the box "over" operators (Tom)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Improve <filename>/contrib/btree_gist</> (Janko Richter)
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      <command>CREATE LANGUAGE</> can ignore the provided arguments
+      in favor of information from <structname>pg_pltemplate</>
+      (Tom)
+     </para>
+     <para>
+      A new system catalog <structname>pg_pltemplate</> has been defined
+      to carry information about the preferred definitions of procedural
+      languages (such as whether they have validator functions).  When
+      an entry exists in this catalog for the language being created,
+      <command>CREATE LANGUAGE</> will ignore all its parameters except the
+      language name and instead use the catalog information.  This measure
+      was taken because of increasing problems with obsolete language
+      definitions being loaded by old dump files.  As of 8.1,
+      <application>pg_dump</> will dump procedural language definitions as
+      just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
+      on a template entry to exist at load time.  We expect this will be a
+      more future-proof representation.
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Improve <filename>/contrib/pgbench</> (Tomoaki Sato, Tatsuo)
-       </para>
-       <para>
-        There is now a facility for testing with SQL command scripts given
-        by the user, instead of only a hard-wired command sequence.
-       </para>
-      </listitem>
+    <listitem>
+     <para>
+      Make <function>pg_cancel_backend(int)</function> return a
+      <type>boolean</type> rather than an <type>integer</type> (Neil)
+     </para>
+    </listitem>
 
-      <listitem>
-       <para>
-        Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
-       </para>
+    <listitem>
+     <para>
+      Some users are having problems loading UTF-8 data into 8.1.X.
+      This is because previous versions allowed invalid UTF-8 byte
+      sequences to be entered into the database, and this release
+      properly accepts only valid UTF-8 sequences. One way to correct a
+      dumpfile is to run the command <command>iconv -c -f UTF-8 -t
+      UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
+      removes invalid character sequences. A diff of the two files will
+      show the sequences that are invalid. <command>iconv</> reads the
+      entire input file into memory so it might be necessary to use
+      <application>split</> to break up the dump into multiple smaller
+      files for processing.
+     </para>
+    </listitem>
 
-       <itemizedlist>
+   </itemizedlist>
+  </sect2>
 
-        <listitem>
-         <para>
-          Implementation of OpenPGP symmetric-key and public-key encryption
-         </para>
-         <para>
-          Both RSA and Elgamal public-key algorithms are supported.
-         </para>
-        </listitem>
-
-        <listitem>
-         <para>
-          Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
-         </para>
-        </listitem>
-
-        <listitem>
-         <para>
-          OpenSSL build: support 3DES, use internal AES with OpenSSL &lt; 0.9.7
-         </para>
-        </listitem>
-
-        <listitem>
-         <para>
-          Take build parameters (OpenSSL, zlib) from <filename>configure</> result
-         </para>
-         <para>
-          There is no need to edit the <filename>Makefile</> anymore.
-         </para>
-        </listitem>
-
-        <listitem>
-         <para>
-          Remove support for <filename>libmhash</> and <filename>libmcrypt</>
-         </para>
-        </listitem>
-
-       </itemizedlist>
-      </listitem>
-
-     </itemizedlist>
-    </sect3>
-
-   </sect2>
-  </sect1>
-
-  <sect1 id="release-8-0-14">
-   <title>Release 8.0.14</title>
-
-   <note>
-   <title>Release date</title>
-   <simpara>2007-09-17</simpara>
-   </note>
+  <sect2>
+   <title>Additional Changes</title>
 
    <para>
-    This release contains a variety of fixes from 8.0.13.
+    Below you will find a detailed account of the additional changes
+    between <productname>PostgreSQL</productname> 8.1 and the
+    previous major release.
    </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>
-
-   </sect2>
-
-   <sect2>
-    <title>Changes</title>
-
+   <sect3>
+    <title>Performance Improvements</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)
+       Improve GiST and R-tree index performance (Neil)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+       Improve the optimizer, including auto-resizing of hash joins
+       (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix excessive logging of <acronym>SSL</> error messages (Tom)
+       Overhaul internal API in several areas
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix logging so that log messages are never interleaved when using
-       the syslogger process (Andrew)
+       Change WAL record CRCs from 64-bit to 32-bit (Tom)
+      </para>
+      <para>
+       We determined that the extra cost of computing 64-bit CRCs was
+       significant, and the gain in reliability too marginal to justify it.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix crash when <varname>log_min_error_statement</> logging runs out
-       of memory (Tom)
+       Prevent writing large empty gaps in WAL pages (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Fix incorrect handling of some foreign-key corner cases (Tom)
+       Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Prevent <command>CLUSTER</> from failing
-       due to attempting to process temporary tables of other sessions (Alvaro)
+       Allow nonconsecutive index columns to be used in a multicolumn
+       index (Tom)
+      </para>
+      <para>
+       For example, this allows an index on columns a,b,c to be used in
+       a query with <command>WHERE a = 4 and c = 10</>.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
+       Skip WAL logging for <command>CREATE TABLE AS</> /
+       <command>SELECT INTO</> (Simon)
+      </para>
+      <para>
+       Since a crash during <command>CREATE TABLE AS</> would cause the
+       table to be dropped during recovery, there is no reason to WAL
+       log as the table is loaded.  (Logging still happens if WAL
+       archiving is enabled, however.)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Windows socket improvements (Magnus)
+       Allow concurrent GiST index access (Teodor, Oleg)
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
-       because of possible encoding mismatches (Tom)
+       Add configuration parameter <varname>full_page_writes</> to
+       control writing full pages to WAL (Bruce)
+      </para>
+      <para>
+       To prevent partial disk writes from corrupting the database,
+       <productname>PostgreSQL</productname> writes a complete copy of
+       each database disk page to WAL the first time it is modified
+       after a checkpoint. This option turns off that functionality for more
+       speed.  This is safe to use with battery-backed disk caches where
+       partial page writes cannot happen.
       </para>
      </listitem>
 
      <listitem>
       <para>
-       Require non-superusers who use <filename>/contrib/dblink</> to use only
-       password authentication, as a security measure (Joe)
+       Use <literal>O_DIRECT</> if available when using
+       <literal>O_SYNC</> for <varname>wal_sync_method</varname>
+       (Itagaki Takahiro)
+      </para>
+      <para>
+       <literal>O_DIRECT</> causes disk writes to bypass the kernel
+       cache, and for WAL writes, this improves performance.
       </para>
      </listitem>
 
-    </itemizedlist>
-
-   </sect2>
-  </sect1>
-
-  <sect1 id="release-8-0-13">
-   <title>Release 8.0.13</title>
-
-   <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>
-     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>
-      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>
+      <para>
+       Improve <command>COPY FROM</> performance (Alon Goldshuv)
+      </para>
+      <para>
+       This was accomplished by reading <command>COPY</> input in
+       larger chunks, rather than character by character.
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      <filename>/contrib/tsearch2</> crash fixes (Teodor)
-     </para>
+      <para>
+       Improve the performance of <function>COUNT()</function>,
+       <function>SUM</function>, <function>AVG()</function>,
+       <function>STDDEV()</function>, and
+       <function>VARIANCE()</function> (Neil, Tom)
+      </para>
      </listitem>
+    </itemizedlist>
+   </sect3>
 
-     <listitem>
-     <para>
-      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
-      <command>UPDATE</> chains (Tom, Pavan Deolasee)
-     </para>
-     </listitem>
+   <sect3>
+    <title>Server Changes</title>
+    <itemizedlist>
 
      <listitem>
-     <para>
-      Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
-      (Tom)
-     </para>
+      <para>
+       Prevent problems due to transaction ID (XID) wraparound (Tom)
+      </para>
+      <para>
+       The server will now warn when the transaction counter approaches
+       the wraparound point.  If the counter becomes too close to wraparound,
+       the server will stop accepting queries.  This ensures that data is
+       not lost before needed vacuuming is performed.
+      </para>
      </listitem>
 
      <listitem>
-     <para>
-      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
-     </para>
+      <para>
+       Fix problems with object IDs (OIDs) conflicting with existing system
+       objects after the OID counter has wrapped around (Tom)
+      </para>
<