Split the release notes into a separate file for each (active) major branch,
authorTom Lane <[email protected]>
Sat, 2 May 2009 20:17:45 +0000 (20:17 +0000)
committerTom Lane <[email protected]>
Sat, 2 May 2009 20:17:45 +0000 (20:17 +0000)
as per my recent proposal.  release.sgml itself is now just a stub that should
change rarely; ideally, only once per major release to add a new include line.
Most editing work will occur in the release-N.N.sgml files.  To update a back
branch for a minor release, just copy the appropriate release-N.N.sgml
file(s) into the back branch.

This commit doesn't change the end-product documentation at all, only the
source layout.  However, it makes it easy to start omitting ancient information
from newer branches' documentation, should we ever decide to do that.

doc/src/sgml/Makefile
doc/src/sgml/filelist.sgml
doc/src/sgml/generate_history.pl [new file with mode: 0644]
doc/src/sgml/release-7.4.sgml [new file with mode: 0644]
doc/src/sgml/release-8.0.sgml [new file with mode: 0644]
doc/src/sgml/release-8.1.sgml [new file with mode: 0644]
doc/src/sgml/release-8.2.sgml [new file with mode: 0644]
doc/src/sgml/release-old.sgml [new file with mode: 0644]
doc/src/sgml/release.sgml

index 7b699cac780b3f45245907cd31080b257cbb7ec9..ba3920a64012854a851f0c09e87cbcd9fd9e6021 100644 (file)
@@ -2,7 +2,7 @@
 #
 # PostgreSQL documentation makefile
 #
-# $PostgreSQL: pgsql/doc/src/sgml/Makefile,v 1.81.2.3 2007/05/18 09:43:15 petere Exp $
+# $PostgreSQL: pgsql/doc/src/sgml/Makefile,v 1.81.2.4 2009/05/02 20:17:45 tgl Exp $
 #
 #----------------------------------------------------------------------------
 
@@ -193,12 +193,8 @@ INSTALL HISTORY regress_README: % : %.html
 INSTALL.html: standalone-install.sgml installation.sgml version.sgml
    $(JADE.text) -V nochunks standalone-install.sgml installation.sgml >$@
 
-# remove links to main documentation
-HISTORY.html: release.sgml
-   ( echo '<!doctype appendix PUBLIC "-//OASIS//DTD DocBook V4.2//EN">'; \
-     cat $< ) | \
-   $(PERL) -p -0 -e 's/<link\s+linkend[^>]*>//g' | \
-   $(PERL) -p -e 's/<\/link>//g' >tempfile_HISTORY.sgml
+HISTORY.html: generate_history.pl $(wildcard $(srcdir)/release*.sgml)
+   $(PERL) $< "$(srcdir)" release.sgml >tempfile_HISTORY.sgml
    $(JADE.text) -V nochunks tempfile_HISTORY.sgml >$@
    rm tempfile_HISTORY.sgml
 
index fe1fdfd579433e1e8305525f445f6c0b5916be64..dcd3cabb0c9a07167896109e2cdded051220604e 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.49 2006/11/17 16:38:44 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/filelist.sgml,v 1.49.2.1 2009/05/02 20:17:45 tgl Exp $ -->
 
 <!entity history    SYSTEM "history.sgml">
 <!entity info       SYSTEM "info.sgml">
 <!entity errcodes   SYSTEM "errcodes.sgml">
 <!entity features   SYSTEM "features.sgml">
 <!entity keywords   SYSTEM "keywords.sgml">
+
 <!entity release    SYSTEM "release.sgml">
+<!entity release-8.2    SYSTEM "release-8.2.sgml">
+<!entity release-8.1    SYSTEM "release-8.1.sgml">
+<!entity release-8.0    SYSTEM "release-8.0.sgml">
+<!entity release-7.4    SYSTEM "release-7.4.sgml">
+<!entity release-old    SYSTEM "release-old.sgml">
 
 <!entity features-supported   SYSTEM "features-supported.sgml">
 <!entity features-unsupported SYSTEM "features-unsupported.sgml">
diff --git a/doc/src/sgml/generate_history.pl b/doc/src/sgml/generate_history.pl
new file mode 100644 (file)
index 0000000..03b3ca9
--- /dev/null
@@ -0,0 +1,58 @@
+#! /usr/bin/perl -w
+
+# generate_history.pl -- flatten release notes for use as HISTORY file
+#
+# Usage: generate_history.pl srcdir release.sgml >output.sgml
+#
+# The main point of this script is to strip out <link> references, which
+# generally point into the rest of the documentation and so can't be used
+# in a standalone build of the release notes.  To make sure this is done
+# everywhere, we have to fold in the sub-files of the release notes.
+#
+# $PostgreSQL: pgsql/doc/src/sgml/generate_history.pl,v 1.1.4.1 2009/05/02 20:17:45 tgl Exp $
+
+use strict;
+
+my($srcdir) = shift;
+defined($srcdir) || die "$0: missing required argument: srcdir\n";
+my($infile) = shift;
+defined($infile) || die "$0: missing required argument: inputfile\n";
+
+# Emit DOCTYPE header so that the output is a self-contained SGML document
+print "<!DOCTYPE appendix PUBLIC \"-//OASIS//DTD DocBook V4.2//EN\">\n";
+
+process_file($infile);
+
+exit 0;
+
+sub process_file {
+    my($filename) = @_;
+
+    local *FILE;       # need a local filehandle so we can recurse
+
+    my($f) = $srcdir . '/' . $filename;
+    open(FILE, $f) || die "could not read $f: $!\n";
+
+    while (<FILE>) {
+   # Recursively expand sub-files of the release notes
+   if (m/^&(release-.*);$/) {
+       process_file($1 . ".sgml");
+       next;
+   }
+
+   # Remove <link ...> tags, which might span multiple lines
+   while (m/<link/) {
+       if (s/<link\s+linkend[^>]*>//) {
+       next;
+       }
+       # incomplete tag, so slurp another line
+       $_ .= <FILE>;
+   }
+
+   # Remove </link> too
+   s|</link>||g;
+
+   print;
+    }
+    close(FILE);
+}
diff --git a/doc/src/sgml/release-7.4.sgml b/doc/src/sgml/release-7.4.sgml
new file mode 100644 (file)
index 0000000..ca7af70
--- /dev/null
@@ -0,0 +1,3975 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-7.4.sgml,v 1.1.4.1 2009/05/02 20:17:45 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-7-4-25">
+  <title>Release 7.4.25</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2009-03-16</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.24.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.25</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent error recursion crashes when encoding conversion fails (Tom)
+     </para>
+
+     <para>
+      This change extends fixes made in the last two minor releases for
+      related failure scenarios.  The previous fixes were narrowly tailored
+      for the original problem reports, but we have now recognized that
+      <emphasis>any</> error thrown by an encoding conversion function could
+      potentially lead to infinite recursion while trying to report the
+      error.  The solution therefore is to disable translation and encoding
+      conversion and report the plain-ASCII form of any error message,
+      if we find we have gotten into a recursive error reporting situation.
+      (CVE-2009-0922)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Disallow <command>CREATE CONVERSION</> with the wrong encodings
+      for the specified conversion function (Heikki)
+     </para>
+
+     <para>
+      This prevents one possible scenario for encoding conversion failure.
+      The previous change is a backstop to guard against other kinds of
+      failures in the same area.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix core dump when <function>to_char()</> is given format codes that
+      are inappropriate for the type of the data argument (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+      of known timezone abbreviations (Xavier Bugaud)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-24">
+  <title>Release 7.4.24</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2009-02-02</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.23.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.24</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Improve handling of URLs in <function>headline()</> function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve handling of overlength headlines in <function>headline()</>
+      function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Prevent possible Assert failure or misconversion if an encoding
+      conversion is created with the wrong conversion function for the
+      specified pair of encodings (Tom, Heikki)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Avoid unnecessary locking of small tables in <command>VACUUM</>
+      (Heikki)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix uninitialized variables in <filename>contrib/tsearch2</>'s
+      <function>get_covers()</> function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix bug in <function>to_char()</>'s handling of <literal>TH</>
+      format codes (Andreas Scherbaum)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make all documentation reference <literal>pgsql-bugs</> and/or
+      <literal>pgsql-hackers</> as appropriate, instead of the
+      now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+      mailing lists (Tom)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-23">
+  <title>Release 7.4.23</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-11-03</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.22.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.23</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Fix backend crash when the client encoding cannot represent a localized
+      error message (Tom)
+     </para>
+
+     <para>
+      We have addressed similar issues before, but it would still fail if
+      the <quote>character has no equivalent</> message itself couldn't
+      be converted.  The fix is to disable localization and send the plain
+      ASCII error message when we detect such a situation.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix incorrect tsearch2 headline generation when single query
+      item matches first word of text (Sushant Sinha)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix improper display of fractional seconds in interval values when
+      using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+      build (Ron Mayer)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+      behave correctly when the passed tuple and tuple descriptor have
+      different numbers of columns (Tom)
+     </para>
+
+     <para>
+      This situation is normal when a table has had columns added or removed,
+      but these two functions didn't handle it properly.
+      The only likely consequence is an incorrect error indication.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>ecpg</>'s parsing of <command>CREATE USER</> (Michael)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-22">
+  <title>Release 7.4.22</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-09-22</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.21.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.22</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Fix datetime input functions to correctly detect integer overflow when
+      running on a 64-bit platform (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve performance of writing very long log messages to syslog (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+      ON</> query (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+      boolean results always result in two groups, regardless of the
+      expressions' contents (Tom)
+     </para>
+
+     <para>
+      This is very substantially more accurate than the regular <literal>GROUP
+      BY</> estimate for certain boolean tests like <replaceable>col</>
+      <literal>IS NULL</>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve <application>pg_dump</> and <application>pg_restore</>'s
+      error reporting after failure to send a SQL command (Tom)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-21">
+  <title>Release 7.4.21</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-06-12</simpara>
+  </note>
+
+  <para>
+   This release contains one serious bug fix over 7.4.20.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.21</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+     </para>
+
+     <para>
+      Before this fix, a negative constant in a view or rule might be dumped
+      as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+      be <literal>(-42)::integer</> due to operator precedence rules.
+      Usually this would make little difference, but it could interact with
+      another recent patch to cause
+      <productname>PostgreSQL</> to reject what had been a valid
+      <command>SELECT DISTINCT</> view query.  Since this could result in
+      <application>pg_dump</> output failing to reload, it is being treated
+      as a high-priority fix.  The only released versions in which dump
+      output is actually incorrect are 8.3.1 and 8.2.7.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-20">
+  <title>Release 7.4.20</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>never released</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.19.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.20</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+    However, if you are upgrading from a version earlier than 7.4.11,
+    see the release notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Fix conversions between ISO-8859-5 and other encodings to handle
+      Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+      two dots) (Sergey Burladyan)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix a few datatype input functions
+      that were allowing unused bytes in their results to contain
+      uninitialized, unpredictable values (Tom)
+     </para>
+
+     <para>
+      This could lead to failures in which two apparently identical literal
+      values were not seen as equal, resulting in the parser complaining
+      about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+      expressions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix a corner case in regular-expression substring matching
+      (<literal>substring(<replaceable>string</> from
+      <replaceable>pattern</>)</literal>) (Tom)
+     </para>
+
+     <para>
+      The problem occurs when there is a match to the pattern overall but
+      the user has specified a parenthesized subexpression and that
+      subexpression hasn't got a match.  An example is
+      <literal>substring('foo' from 'foo(bar)?')</>.
+      This should return NULL, since <literal>(bar)</> isn't matched, but
+      it was mistakenly returning the whole-pattern match instead (ie,
+      <literal>foo</>).
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix incorrect result from <application>ecpg</>'s
+      <function>PGTYPEStimestamp_sub()</> function (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+      4.3 (Tom)
+     </para>
+
+     <para>
+      This problem affects <quote>old style</> (V0) C functions that
+      return boolean.  The fix is already in 8.3, but the need to
+      back-patch it was not realized at the time.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+      race condition (Tom)
+     </para>
+
+     <para>
+      In rare cases a session that had just executed a
+      <command>LISTEN</> might not get a notification, even though
+      one would be expected because the concurrent transaction executing
+      <command>NOTIFY</> was observed to commit later.
+     </para>
+
+     <para>
+      A side effect of the fix is that a transaction that has executed
+      a not-yet-committed <command>LISTEN</> command will not see any
+      row in <structname>pg_listener</> for the <command>LISTEN</>,
+      should it choose to look; formerly it would have.  This behavior
+      was never documented one way or the other, but it is possible that
+      some applications depend on the old behavior.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix display of constant expressions in <literal>ORDER BY</>
+      and <literal>GROUP BY</> (Tom)
+     </para>
+
+     <para>
+      An explictly casted constant would be shown incorrectly.  This could
+      for example lead to corruption of a view definition during
+      dump and reload.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>libpq</> to handle NOTICE messages correctly
+      during COPY OUT (Tom)
+     </para>
+
+     <para>
+      This failure has only been observed to occur when a user-defined
+      datatype's output routine issues a NOTICE, but there is no
+      guarantee it couldn't happen due to other causes.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-19">
+  <title>Release 7.4.19</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.18,
+   including fixes for significant security issues.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.19</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent functions in indexes from executing with the privileges of
+      the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+     </para>
+
+     <para>
+      Functions used in index expressions and partial-index
+      predicates are evaluated whenever a new table entry is made.  It has
+      long been understood that this poses a risk of trojan-horse code
+      execution if one modifies a table owned by an untrustworthy user.
+      (Note that triggers, defaults, check constraints, etc. pose the
+      same type of risk.)  But functions in indexes pose extra danger
+      because they will be executed by routine maintenance operations
+      such as <command>VACUUM FULL</>, which are commonly performed
+      automatically under a superuser account.  For example, a nefarious user
+      can execute code with superuser privileges by setting up a
+      trojan-horse index definition and waiting for the next routine vacuum.
+      The fix arranges for standard maintenance operations
+      (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+      and <command>CLUSTER</>) to execute as the table owner rather than
+      the calling user, using the same privilege-switching mechanism already
+      used for <literal>SECURITY DEFINER</> functions.  To prevent bypassing
+      this security measure, execution of <command>SET SESSION
+      AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+      <literal>SECURITY DEFINER</> context.  (CVE-2007-6600)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+     </para>
+
+     <para>
+      Suitably crafted regular-expression patterns could cause crashes,
+      infinite or near-infinite looping, and/or massive memory consumption,
+      all of which pose denial-of-service hazards for applications that
+      accept regex search patterns from untrustworthy sources.
+      (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
+
+     <para>
+      The fix that appeared for this in 7.4.18 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>ecpg</> parser fixes (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+      NULL rowid as a category in its own right, rather than crashing (Joe)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require a specific version of <productname>Autoconf</> to be used
+      when re-generating the <command>configure</> script (Peter)
+     </para>
+
+     <para>
+      This affects developers and packagers only.  The change was made
+      to prevent accidental use of untested combinations of
+      <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+      You can remove the version check if you really want to use a
+      different <productname>Autoconf</> version, but it's
+      your responsibility whether the result works or not.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-18">
+  <title>Release 7.4.18</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
+
+  <para>
+   This release contains fixes from 7.4.17.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.18</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent index corruption when a transaction inserts rows and
+      then aborts close to the end of a concurrent <command>VACUUM</>
+      on the same table (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix crash when <varname>log_min_error_statement</> logging runs out
+      of memory (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Prevent <command>CLUSTER</> from failing
+      due to attempting to process temporary tables of other sessions (Alvaro)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-17">
+  <title>Release 7.4.17</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-04-23</simpara>
+  </note>
+
+  <para>
+   This release contains fixes from 7.4.16,
+   including a security fix.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.17</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     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>
+     <filename>/contrib/tsearch2</> crash 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 PANIC during enlargement of a hash index (bug introduced in 7.4.15)
+     (Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-16">
+  <title>Release 7.4.16</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.15, including
+   a security fix.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.16</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     Remove security vulnerability that allowed connected users
+     to read backend memory (Tom)
+    </para>
+    <para>
+     The vulnerability involves suppressing the normal check that a SQL
+     function returns the data type it's declared to, or changing the
+     data type of a table column used in a SQL function (CVE-2007-0555).
+     This error can easily be exploited to cause a backend crash, and in
+     principle might be used to read database content that the user
+     should not be able to access.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix rare bug wherein btree index page splits could fail
+     due to choosing an infeasible split point (Heikki Linnakangas)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Tighten security of multi-byte character processing for UTF8 sequences
+     over three bytes long (Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-15">
+  <title>Release 7.4.15</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.14.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.15</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+     </para>
+
+     <para>
+      This fixes a problem with starting the statistics collector,
+      among other things.
+     </para>
+    </listitem>
+
+     <listitem>
+      <para>
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
+      </para>
+     </listitem>
+
+    <listitem>
+     <para>
+      Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+      empty elements (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <function>to_number()</> and <function>to_char(numeric)</>
+      are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
+      new <application>initdb</> installs (Tom)
+     </para>
+
+     <para>
+      This is because <varname>lc_numeric</> can potentially
+      change the output of these functions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
+
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-14">
+  <title>Release 7.4.14</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-10-16</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.13.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.14</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</para></listitem>
+<listitem><para>Fix <function>string_to_array()</> to handle overlapping
+ matches for the separator string</para>
+<para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
+</para></listitem>
+<listitem><para>Fix corner cases in pattern matching for
+ <application>psql</>'s <literal>\d</> commands</para></listitem>
+<listitem><para>Fix index-corrupting bugs in /contrib/ltree
+ (Teodor)</para></listitem>
+<listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
+<listitem><para>Adjust regression tests for recent changes in US DST laws
+</para> </listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-13">
+  <title>Release 7.4.13</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-05-23</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.12,
+   including patches for extremely serious security issues.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.13</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+
+   <para>
+    Full security against the SQL-injection attacks described in
+    CVE-2006-2313 and CVE-2006-2314 might require changes in application
+    code.  If you have applications that embed untrustworthy strings
+    into SQL commands, you should examine them as soon as possible to
+    ensure that they are using recommended escaping techniques.  In
+    most cases, applications should be using subroutines provided by
+    libraries or drivers (such as <application>libpq</>'s
+    <function>PQescapeStringConn()</>) to perform string escaping,
+    rather than relying on <foreignphrase>ad hoc</> code to do it.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<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>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>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>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>alt_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>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
+
+<listitem><para>Fix bug that sometimes caused OR'd index scans to
+miss rows they should have returned</para></listitem>
+
+<listitem><para>Fix WAL replay for case where a btree index has been
+truncated</para></listitem>
+
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</para></listitem>
+
+<listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
+
+<listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
+
+<listitem><para>Fix various minor memory leaks</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-12">
+  <title>Release 7.4.12</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-02-14</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.11.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.12</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.11, see the release
+    notes for 7.4.11.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix potential crash in <command>SET
+SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
+<para>An unprivileged user could crash the server process, resulting in
+momentary denial of service to other users, if the server has been compiled
+with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</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 7.4.9 and 7.3.11 releases.
+</para></listitem>
+
+<listitem><para>Fix race condition that could lead to <quote>file already
+exists</> errors during pg_clog file creation
+(Tom)</para></listitem>
+
+<listitem><para>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</para></listitem>
+
+<listitem><para>Fix to allow restoring dumps that have cross-schema
+references to custom operators (Tom)</para></listitem>
+
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
+
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-11">
+  <title>Release 7.4.11</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-01-09</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.10.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.11</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+    Also, you might need to <command>REINDEX</> indexes on textual
+    columns after updating, if you are affected by the locale or
+    <application>plperl</> issues described below.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</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>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 longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</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>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>
+
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-10">
+  <title>Release 7.4.10</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-12-12</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.9.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.10</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix race condition in transaction log management</para>
+<para>There was a narrow window in which an I/O operation could be initiated
+for the wrong page, leading to an Assert failure or data
+corruption.</para>
+</listitem>
+
+<listitem><para>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
+
+<listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
+
+<listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
+
+<listitem><para>Fix longstanding planning error for outer joins</para>
+<para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
+only supported with merge-joinable join conditions</>.</para></listitem>
+
+<listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
+table has been dropped</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-9">
+  <title>Release 7.4.9</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-10-04</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.8.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.9</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    if you are upgrading from a version earlier than 7.4.8, see the release
+    notes for 7.4.8.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix error that allowed <command>VACUUM</> to remove
+<literal>ctid</> chains too soon, and add more checking in code that follows
+<literal>ctid</> links</para>
+<para>This fixes a long-standing problem that could cause crashes in very rare
+circumstances.</para></listitem>
+<listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
+length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
+<para>In prior releases, the padding of <type>CHAR()</> was incorrect
+because it only padded to the specified number of bytes without
+considering how many characters were stored.</para></listitem>
+<listitem><para>Fix the sense of the test for read-only transaction
+in <command>COPY</></para>
+<para>The code formerly prohibited <command>COPY TO</>, where it should
+prohibit <command>COPY FROM</>.
+</para></listitem>
+<listitem><para>Fix planning problem with outer-join ON clauses that reference
+only the inner-side relation</para></listitem>
+<listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
+cases</para></listitem>
+<listitem><para>Make <function>array_in</> and <function>array_recv</> more
+paranoid about validating their OID parameter</para></listitem>
+<listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
+a...</> with GiST index on column <literal>a</></para></listitem>
+<listitem><para>Improve robustness of datetime parsing</para></listitem>
+<listitem><para>Improve checking for partially-written WAL
+pages</para></listitem>
+<listitem><para>Improve robustness of signal handling when SSL is
+enabled</para></listitem>
+<listitem><para>Don't try to open more than <literal>max_files_per_process</>
+files during postmaster startup</para></listitem>
+<listitem><para>Various memory leakage fixes</para></listitem>
+<listitem><para>Various portability improvements</para></listitem>
+<listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
+the variable is of pass-by-reference type</para></listitem>
+<listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
+code</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-8">
+  <title>Release 7.4.8</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-05-09</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.7, including several
+   security-related issues.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.8</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    it is one possible way of handling two significant security problems
+    that have been found in the initial contents of 7.4.X system
+    catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
+    automatically correct these problems.
+   </para>
+
+   <para>
+    The larger security problem is that the built-in character set encoding
+    conversion functions can be invoked from SQL commands by unprivileged
+    users, but the functions were not designed for such use and are not
+    secure against malicious choices of arguments.  The fix involves changing
+    the declared parameter list of these functions so that they can no longer
+    be invoked from SQL commands.  (This does not affect their normal use
+    by the encoding conversion machinery.)
+   </para>
+
+   <para>
+    The lesser problem is that the <filename>contrib/tsearch2</> module
+    creates several functions that are misdeclared to return
+    <type>internal</> when they do not accept <type>internal</> arguments.
+    This breaks type safety for all functions using <type>internal</>
+    arguments.
+   </para>
+
+   <para>
+    It is strongly recommended that all installations repair these errors,
+    either by initdb or by following the manual repair procedures given
+    below.  The errors at least allow unprivileged database users to crash
+    their server process, and might allow unprivileged users to gain the
+    privileges of a database superuser.
+   </para>
+
+   <para>
+    If you wish not to do an initdb, perform the following procedures instead.
+    As the database superuser, do:
+
+<programlisting>
+BEGIN;
+UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
+WHERE pronamespace = 11 AND pronargs = 5
+     AND proargtypes[2] = 'cstring'::regtype;
+-- The command should report having updated 90 rows;
+-- if not, rollback and investigate instead of committing!
+COMMIT;
+</programlisting>
+
+    Next, if you have installed <filename>contrib/tsearch2</>, do:
+
+<programlisting>
+BEGIN;
+UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
+WHERE oid IN (
+   'dex_init(text)'::regprocedure,
+   'snb_en_init(text)'::regprocedure,
+   'snb_ru_init(text)'::regprocedure,
+   'spell_init(text)'::regprocedure,
+   'syn_init(text)'::regprocedure
+);
+-- The command should report having updated 5 rows;
+-- if not, rollback and investigate instead of committing!
+COMMIT;
+</programlisting>
+
+    If this command fails with a message like <quote>function
+    "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
+    is not installed in this database, or you already did the update.
+   </para>
+
+   <para>
+    The above procedures must be carried out in <emphasis>each</> database
+    of an installation, including <literal>template1</>, and ideally
+    including <literal>template0</> as well.  If you do not fix the
+    template databases then any subsequently created databases will contain
+    the same errors.  <literal>template1</> can be fixed in the same way
+    as any other database, but fixing <literal>template0</> requires
+    additional steps.  First, from any database issue:
+<programlisting>
+UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
+</programlisting>
+     Next connect to <literal>template0</> and perform the above repair
+     procedures.  Finally, do:
+<programlisting>
+-- re-freeze template0:
+VACUUM FREEZE;
+-- and protect it against future alterations:
+UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
+</programlisting>
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change encoding function signature to prevent
+misuse</para></listitem>
+<listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
+<type>INTERNAL</> function results</para></listitem>
+<listitem><para>Repair ancient race condition that allowed a transaction to be
+seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
+than for other purposes</para>
+<para>This is an extremely serious bug since it could lead to apparent
+data inconsistencies being briefly visible to applications.</para></listitem>
+<listitem><para>Repair race condition between relation extension and
+VACUUM</para>
+<para>This could theoretically have caused loss of a page's worth of
+freshly-inserted data, although the scenario seems of very low probability.
+There are no known cases of it having caused more than an Assert failure.
+</para></listitem>
+<listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
+<para>
+The comparison code was wrong in the case where the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
+it will need to be <command>REINDEX</>ed after installing this update, because
+the fix corrects the sort order of column values.
+</para></listitem>
+<listitem><para>Fix <function>EXTRACT(EPOCH)</> for
+<type>TIME WITH TIME ZONE</> values</para></listitem>
+<listitem><para>Fix mis-display of negative fractional seconds in
+<type>INTERVAL</> values</para>
+<para>
+This error only occurred when the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+</para></listitem>
+<listitem><para>Ensure operations done during backend shutdown are counted by
+statistics collector</para>
+<para>
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough &mdash; it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
+</para></listitem>
+<listitem><para>Additional buffer overrun checks in plpgsql
+(Neil)</para></listitem>
+<listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
+correctly (Neil)</para></listitem>
+<listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
+(Marko Kreen)</para></listitem>
+<listitem><para>Still more 64-bit fixes for
+<filename>contrib/intagg</></para></listitem>
+<listitem><para>Prevent incorrect optimization of functions returning
+<type>RECORD</></para></listitem>
+<listitem><para>Prevent <function>to_char(interval)</> from dumping core for
+month-related formats</para></listitem>
+<listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
+<listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
+<listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
+<listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
+<listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
+<para>
+This fixes a lock management error that would only be visible if a transaction
+was kicked out of a wait for a lock (typically by query cancel) and then the
+holder of the lock released it within a very narrow window.
+</para></listitem>
+<listitem><para>Fix problem with untyped parameter appearing in
+<command>INSERT ... SELECT</></para></listitem>
+<listitem><para>Fix <command>CLUSTER</> failure after
+<command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-7">
+  <title>Release 7.4.7</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-01-31</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.6, including several
+   security-related issues.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 7.4.7</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Disallow <command>LOAD</> to non-superusers</para>
+<para>
+On platforms that will automatically execute initialization functions of a
+shared library (this includes at least Windows and ELF-based Unixen),
+<command>LOAD</> can be used to make the server execute arbitrary code.
+Thanks to NGS Software for reporting this.</para></listitem>
+<listitem><para>Check that creator of an aggregate function has the right to
+execute the specified transition functions</para>
+<para>
+This oversight made it possible to bypass denial of EXECUTE
+permission on a function.</para></listitem>
+<listitem><para>Fix security and 64-bit issues in
+contrib/intagg</para></listitem>
+<listitem><para>Add needed STRICT marking to some contrib functions (Kris
+Jurka)</para></listitem>
+<listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
+many parameters (Neil)</para></listitem>
+<listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
+<para>
+The result of the join was mistakenly supposed to be sorted the same as the
+left input.  This could not only deliver mis-sorted output to the user, but
+in case of nested merge joins could give outright wrong answers.
+</para></listitem>
+<listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
+<listitem><para>Fix display of negative intervals in SQL and GERMAN
+datestyles</para></listitem>
+<listitem><para>Make age(timestamptz) do calculation in local timezone not
+GMT</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-6">
+  <title>Release 7.4.6</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2004-10-22</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.5.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.6</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Repair possible failure to update hint bits on disk</para>
+<para>
+Under rare circumstances this oversight could lead to
+<quote>could not access transaction status</> failures, which qualifies
+it as a potential-data-loss bug.
+</para></listitem>
+<listitem><para>Ensure that hashed outer join does not miss tuples</para>
+<para>
+Very large left joins using a hash join plan could fail to output unmatched
+left-side rows given just the right data distribution.
+</para></listitem>
+<listitem><para>Disallow running <application>pg_ctl</> as root</para>
+<para>
+This is to guard against any possible security issues.
+</para></listitem>
+<listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
+<para>
+This has been reported as a security issue, though it's hardly worthy of
+concern since there is no reason for non-developers to use this script anyway.
+</para></listitem>
+<listitem><para>Prevent forced backend shutdown from re-emitting prior command
+result</para>
+<para>
+In rare cases, a client might think that its last command had succeeded when
+it really had been aborted by forced database shutdown.
+</para></listitem>
+<listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
+<para>
+This could lead to misbehavior in some of the system-statistics views.
+</para></listitem>
+<listitem><para>Fix small memory leak in postmaster</para></listitem>
+<listitem><para>Fix <quote>expected both swapped tables to have TOAST
+tables</> bug</para>
+<para>
+This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
+</para></listitem>
+<listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
+<listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
+<listitem><para><literal>::</> is no longer interpreted as a variable in an
+ECPG prepare statement</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-5">
+  <title>Release 7.4.5</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2004-08-18</simpara>
+  </note>
+
+  <para>
+   This release contains one serious bug fix over 7.4.4.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.5</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
+<para>
+This patch fixes a rare case in which concurrent insertions into a B-tree index
+could result in a server panic.  No permanent damage would result, but it's
+still worth a re-release.  The bug does not exist in pre-7.4 releases.
+</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-4">
+  <title>Release 7.4.4</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2004-08-16</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.3.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.4</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Prevent possible loss of committed transactions during crash</para>
+<para>
+Due to insufficient interlocking between transaction commit and checkpointing,
+it was possible for transactions committed just before the most recent
+checkpoint to be lost, in whole or in part, following a database crash and
+restart.  This is a serious bug that has existed
+since <productname>PostgreSQL</productname> 7.1.
+</para></listitem>
+<listitem><para>Check HAVING restriction before evaluating result list of an
+aggregate plan</para></listitem>
+<listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
+<listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
+<listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
+<listitem><para>Pretty-print UNION queries correctly</para></listitem>
+<listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
+<listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
+<listitem><para>Fix thread support for OS X and Solaris</para></listitem>
+<listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
+<listitem><para>ECPG fixes</para></listitem>
+<listitem><para>Translation updates (various contributors)</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-3">
+  <title>Release 7.4.3</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2004-06-14</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.2.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.3</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
+<listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
+<listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
+<listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
+<listitem><para>Several important fixes in pg_autovacuum, including fixes for
+large tables, unsigned oids, stability, temp tables, and debug mode
+(Matthew T. O'Connor)</para></listitem>
+<listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
+<listitem><para>Several JDBC fixes</para></listitem>
+<listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
+<listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
+<listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
+<listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
+<listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
+<listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
+<para>
+Select-list aliases within the sub-select will now take precedence over
+names from outer query levels.
+</para></listitem>
+<listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
+<listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
+<para>
+ This fixes a difficult-to-exploit security hole.
+</para></listitem>
+<listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
+<listitem><para>Numerous translation updates (various contributors)</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-2">
+  <title>Release 7.4.2</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2004-03-08</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.1.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.2</title>
+
+   <para>
+    A dump/restore is not required for those running 7.4.X.  However,
+    it might be advisable as the easiest method of incorporating fixes for
+    two errors that have been found in the initial contents of 7.4.X system
+    catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
+    automatically correct these problems.
+   </para>
+
+   <para>
+    The more severe of the two errors is that data type <type>anyarray</>
+    has the wrong alignment label; this is a problem because the
+    <structname>pg_statistic</> system catalog uses <type>anyarray</>
+    columns.  The mislabeling can cause planner misestimations and even
+    crashes when planning queries that involve <literal>WHERE</> clauses on
+    double-aligned columns (such as <type>float8</> and <type>timestamp</>).
+    It is strongly recommended that all installations repair this error,
+    either by initdb or by following the manual repair procedure given
+    below.
+   </para>
+
+   <para>
+    The lesser error is that the system view <structname>pg_settings</>
+    ought to be marked as having public update access, to allow
+    <literal>UPDATE pg_settings</> to be used as a substitute for
+    <command>SET</>.  This can also be fixed either by initdb or manually,
+    but it is not necessary to fix unless you want to use <literal>UPDATE
+    pg_settings</>.
+   </para>
+
+   <para>
+    If you wish not to do an initdb, the following procedure will work
+    for fixing <structname>pg_statistic</>.  As the database superuser,
+    do:
+
+<programlisting>
+-- clear out old data in pg_statistic:
+DELETE FROM pg_statistic;
+VACUUM pg_statistic;
+-- this should update 1 row:
+UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
+-- this should update 6 rows:
+UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
+--
+-- At this point you MUST start a fresh backend to avoid a crash!
+--
+-- repopulate pg_statistic:
+ANALYZE;
+</programlisting>
+
+    This can be done in a live database, but beware that all backends
+    running in the altered database must be restarted before it is safe to
+    repopulate <structname>pg_statistic</>.
+   </para>
+
+   <para>
+    To repair the <structname>pg_settings</> error, simply do:
+<programlisting>
+GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
+</programlisting>
+   </para>
+
+   <para>
+    The above procedures must be carried out in <emphasis>each</> database
+    of an installation, including <literal>template1</>, and ideally
+    including <literal>template0</> as well.  If you do not fix the
+    template databases then any subsequently created databases will contain
+    the same errors.  <literal>template1</> can be fixed in the same way
+    as any other database, but fixing <literal>template0</> requires
+    additional steps.  First, from any database issue:
+<programlisting>
+UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
+</programlisting>
+     Next connect to <literal>template0</> and perform the above repair
+     procedures.  Finally, do:
+<programlisting>
+-- re-freeze template0:
+VACUUM FREEZE;
+-- and protect it against future alterations:
+UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
+</programlisting>
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<para>
+   Release 7.4.2 incorporates all the fixes included in release 7.3.6,
+   plus the following fixes:
+</para>
+
+<itemizedlist>
+<listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
+<para>See above for details about this problem.</para></listitem>
+<listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
+<listitem><para>Fix several optimizer bugs, most of which led to
+<quote>variable not found in subplan target lists</> errors</para></listitem>
+<listitem><para>Avoid out-of-memory failure during startup of large multiple
+index scan</para></listitem>
+<listitem><para>Fix multibyte problem that could lead to <quote>out of
+memory</> error during <command>COPY IN</></para></listitem>
+<listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
+TABLE AS</> from tables without OIDs</para></listitem>
+<listitem><para>Fix problems with <filename>alter_table</> regression test
+during parallel testing</para></listitem>
+<listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
+<listitem><para>Partial fix for Turkish-locale issues</para>
+<para>initdb will succeed now in Turkish locale, but there are still some
+inconveniences associated with the <literal>i/I</> problem.</para></listitem>
+<listitem><para>Make pg_dump set client encoding on restore</para></listitem>
+<listitem><para>Other minor pg_dump fixes</para></listitem>
+<listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
+<listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
+<literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem>
+<listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
+<listitem><para>Various other ecpg fixes (Michael)</para></listitem>
+<listitem><para>Fixes for Borland compiler</para></listitem>
+<listitem><para>Thread build improvements (Bruce)</para></listitem>
+<listitem><para>Various other build fixes</para></listitem>
+<listitem><para>Various JDBC fixes</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-7-4-1">
+  <title>Release 7.4.1</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2003-12-22</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 7.4.
+   For information about new features in the 7.4 major release, see
+   <xref linkend="release-7-4">.
+  </para>
+
+
+  <sect2>
+   <title>Migration to Version 7.4.1</title>
+
+   <para>
+    A dump/restore is <emphasis>not</emphasis> required for those
+    running 7.4.
+   </para>
+
+   <para>
+    If you want to install the fixes in the information schema
+    you need to reload it into the database.
+    This is either accomplished by initializing a new cluster
+    by running <command>initdb</command>, or by running the following
+    sequence of SQL commands in each database (ideally including
+    <literal>template1</literal>) as a superuser in
+    <application>psql</application>, after installing the new release:
+<programlisting>
+DROP SCHEMA information_schema CASCADE;
+\i /usr/local/pgsql/share/information_schema.sql
+</programlisting>
+    Substitute your installation path in the second command.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
+<listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
+<listitem><para>Fix for subqueries that used hash joins (Tom)</para>
+<para>
+   Certain subqueries that used hash joins would crash because of
+   improperly shared structures.
+</para></listitem>
+<listitem><para>Fix free space map compaction bug (Tom)</para>
+<para>
+   This fixes a bug where compaction of the free space map could lead
+   to a database server shutdown.
+</para>
+</listitem>
+<listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
+<listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
+<para>
+   Fix these functions to return values consistent with pre-7.4
+   releases.
+</para>
+</listitem>
+<listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
+<para>
+   Fixes include improper variable initialization, missing vacuum after
+   <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
+</para>
+</listitem>
+<listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
+<listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
+<para>
+   Fix crash on Solaris caused by use of any type of password
+   authentication when no passwords were defined.
+</para>
+</listitem>
+<listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
+<listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
+<listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
+<listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
+<listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
+<listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
+<listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
+<para>
+ If different client encodings are used for <type>bytea</type> output and input, it
+ is possible for <type>bytea</type> values to be corrupted by the differing
+ encodings.  This fix escapes all bytes that might be affected.
+</para>
+</listitem>
+<listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
+<listitem><para>New Czech FAQ</para></listitem>
+<listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
+<listitem><para>ECPG fixes (Michael)</para></listitem>
+<listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
+<listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
+<listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
+<para>
+ Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
+ By installing them in their own directory, name conflicts have been reduced.
+</para>
+</listitem>
+<listitem><para>Fix SSL memory leak (Neil)</para>
+<para>
+ This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
+</para>
+</listitem>
+<listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
+<listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
+</itemizedlist>
+
+ </sect2>
+</sect1>
+
+<sect1 id="release-7-4">
+ <title>Release 7.4</title>
+
+ <note>
+  <title>Release date</title>
+  <simpara>2003-11-17</simpara>
+ </note>
+
+ <sect2>
+  <title>Overview</title>
+
+  <para>
+   Major changes in this release:
+  </para>
+
+  <variablelist>
+   <varlistentry>
+    <term>
+     <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
+     now much more efficient
+    </term>
+
+    <listitem>
+     <para>
+      In previous releases, <literal>IN</literal>/<literal>NOT
+      IN</literal> subqueries were joined to the upper query by
+      sequentially scanning the subquery looking for a match.  The
+      7.4 code uses the same sophisticated techniques used by
+      ordinary joins and so is much faster.  An
+      <literal>IN</literal> will now usually be as fast as or faster
+      than an equivalent <literal>EXISTS</literal> subquery; this
+      reverses the conventional wisdom that applied to previous
+      releases.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Improved <literal>GROUP BY</literal> processing by using hash buckets
+    </term>
+
+    <listitem>
+     <para>
+      In previous releases, rows to be grouped had to be sorted
+      first.  The 7.4 code can do <literal>GROUP BY</literal>
+      without sorting, by accumulating results into a hash table
+      with one entry per group.  It will still use the sort
+      technique, however, if the hash table is estimated to be too
+      large to fit in <varname>sort_mem</>.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New multikey hash join capability
+    </term>
+
+    <listitem>
+     <para>
+      In previous releases, hash joins could only occur on single
+      keys.  This release allows multicolumn hash joins.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Queries using the explicit <literal>JOIN</literal> syntax are
+     now better optimized
+    </term>
+
+    <listitem>
+     <para>
+      Prior releases evaluated queries using the explicit
+      <literal>JOIN</literal> syntax only in the order implied by
+      the syntax. 7.4 allows full optimization of these queries,
+      meaning the optimizer considers all possible join orderings
+      and chooses the most efficient.  Outer joins, however, must
+      still follow the declared ordering.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Faster and more powerful regular expression code
+    </term>
+
+    <listitem>
+     <para>
+      The entire regular expression module has been replaced with a
+      new version by Henry Spencer, originally written for Tcl.  The
+      code greatly improves performance and supports several flavors
+      of regular expressions.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Function-inlining for simple SQL functions
+    </term>
+
+    <listitem>
+     <para>
+      Simple SQL functions can now be inlined by including their SQL
+      in the main query.  This improves performance by eliminating
+      per-call overhead.  That means simple SQL functions now
+      behave like macros.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Full support for IPv6 connections and IPv6 address data types
+    </term>
+
+    <listitem>
+     <para>
+      Previous releases allowed only IPv4 connections, and the IP
+      data types only supported IPv4 addresses. This release adds
+      full IPv6 support in both of these areas.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Major improvements in SSL performance and reliability
+    </term>
+
+    <listitem>
+     <para>
+      Several people very familiar with the SSL API have overhauled
+      our SSL code to improve SSL key negotiation and error
+      recovery.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Make free space map efficiently reuse empty index pages,
+     and other free space management improvements
+    </term>
+
+    <listitem>
+     <para>
+      In previous releases, B-tree index pages that were left empty
+      because of deleted rows could only be reused by rows with
+      index values similar to the rows originally indexed on that
+      page. In 7.4, <command>VACUUM</command> records empty index
+      pages and allows them to be reused for any future index rows.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     SQL-standard information schema
+    </term>
+
+    <listitem>
+     <para>
+      The information schema provides a standardized and stable way
+      to access information about the schema objects defined in a
+      database.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Cursors conform more closely to the SQL standard
+    </term>
+
+    <listitem>
+     <para>
+      The commands <command>FETCH</command> and
+      <command>MOVE</command> have been overhauled to conform more
+      closely to the SQL standard.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Cursors can exist outside transactions
+    </term>
+
+    <listitem>
+     <para>
+      These cursors are also called holdable cursors.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New client-to-server protocol
+    </term>
+
+    <listitem>
+     <para>
+      The new protocol adds error codes, more status information,
+      faster startup, better support for binary data transmission,
+      parameter values separated from SQL commands, prepared
+      statements available at the protocol level, and cleaner
+      recovery from <command>COPY</command> failures.  The older
+      protocol is still supported by both server and clients.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     <application>libpq</application> and
+     <application>ECPG</application> applications are now fully
+     thread-safe
+    </term>
+
+    <listitem>
+     <para>
+      While previous <application>libpq</application> releases
+      already supported threads, this release improves thread safety
+      by fixing some non-thread-safe code that was used during
+      database connection startup.  The <command>configure</command>
+      option <option>--enable-thread-safety</option> must be used to
+      enable this feature.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New version of full-text indexing
+    </term>
+
+    <listitem>
+     <para>
+      A new full-text indexing suite is available in
+      <filename>contrib/tsearch2</filename>.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     New autovacuum tool
+    </term>
+
+    <listitem>
+     <para>
+      The new autovacuum tool in
+      <filename>contrib/autovacuum</filename> monitors the database
+      statistics tables for
+      <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
+      activity and automatically vacuums tables when needed.
+     </para>
+    </listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>
+     Array handling has been improved and moved into the server core
+    </term>
+
+    <listitem>
+     <para>
+      Many array limitations have been removed, and arrays behave
+      more like fully-supported data types.
+     </para>
+    </listitem>
+   </varlistentry>
+
+  </variablelist>
+ </sect2>
+
+ <sect2>
+  <title>Migration to Version 7.4</title>
+
+  <para>
+   A dump/restore using <application>pg_dump</application> is
+   required for those wishing to migrate data from any previous
+   release.
+  </para>
+
+  <para>
+   Observe the following incompatibilities:
+  </para>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     The server-side autocommit setting was removed and
+     reimplemented in client applications and languages.
+     Server-side autocommit was causing too many problems with
+     languages and applications that wanted to control their own
+     autocommit behavior, so autocommit was removed from the server
+     and added to individual client APIs as appropriate.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Error message wording has changed substantially in this
+     release.  Significant effort was invested to make the messages
+     more consistent and user-oriented.  If your applications try to
+     detect different error conditions by parsing the error message,
+     you are strongly encouraged to use the new error code facility instead.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Inner joins using the explicit <literal>JOIN</literal> syntax
+     might behave differently because they are now better
+     optimized.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     A number of server configuration parameters have been renamed
+     for clarity, primarily those related to
+     logging.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
+     does nothing.  In prior releases, <literal>FETCH 0</literal>
+     would fetch all remaining rows, and <literal>MOVE 0</literal>
+     would move to the end of the cursor.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <command>FETCH</command> and <command>MOVE</command> now return
+     the actual number of rows fetched/moved, or zero if at the
+     beginning/end of the cursor.  Prior releases would return the
+     row count passed to the command, not the number of rows
+     actually fetched or moved.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <command>COPY</command> now can process files that use
+     carriage-return or carriage-return/line-feed end-of-line
+     sequences. Literal carriage-returns and line-feeds are no
+     longer accepted in data values; use <literal>\r</literal> and
+     <literal>\n</literal> instead.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Trailing spaces are now trimmed when converting from type
+     <type>char(<replaceable>n</>)</type> to
+     <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
+     This is what most people always expected to happen anyway.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     The data type <type>float(<replaceable>p</>)</type> now
+     measures <replaceable>p</> in binary digits, not decimal
+     digits.  The new behavior follows the SQL standard.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Ambiguous date values now must match the ordering specified by
+     the <varname>datestyle</varname> setting.  In prior releases, a
+     date specification of <literal>10/20/03</> was interpreted as a
+     date in October even if <varname>datestyle</> specified that
+     the day should be first.  7.4 will throw an error if a date
+     specification is invalid for the current setting of
+     <varname>datestyle</>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     The functions <function>oidrand</function>,
+     <function>oidsrand</function>, and
+     <function>userfntest</function> have been removed.  These
+     functions were determined to be no longer useful.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     String literals specifying time-varying date/time values, such
+     as <literal>'now'</literal> or <literal>'today'</literal> will
+     no longer work as expected in column default expressions; they
+     now cause the time of the table creation to be the default, not
+     the time of the insertion.  Functions such as
+     <function>now()</>, <function>current_timestamp</>, or
+     <function>current_date</function> should be used instead.
+    </para>
+
+    <para>
+     In previous releases, there was special code so that strings
+     such as <literal>'now'</literal> were interpreted at
+     <command>INSERT</> time and not at table creation time, but
+     this work around didn't cover all cases.  Release 7.4 now
+     requires that defaults be defined properly using functions such
+     as <function>now()</> or <function>current_timestamp</>. These
+     will work in all situations.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     The dollar sign (<literal>$</>) is no longer allowed in
+     operator names.  It can instead be a non-first character in
+     identifiers.  This was done to improve compatibility with other
+     database systems, and to avoid syntax problems when parameter
+     placeholders (<literal>$<replaceable>n</></>) are written
+     adjacent to operators.
+    </para>
+   </listitem>
+
+  </itemizedlist>
+ </sect2>
+
+ <sect2>
+  <title>Changes</title>
+
+  <para>
+   Below you will find a detailed account of the changes between
+   release 7.4 and the previous major release.
+  </para>
+
+ <sect3>
+  <title>Server Operation Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
+     Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Fix SSL to handle errors cleanly (Nathan Mueller)
+    </para>
+    <para>
+     In prior releases, certain SSL API error reports were not
+     handled correctly.  This release fixes those problems.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     SSL protocol security and performance improvements (Sean Chittenden)
+    </para>
+    <para>
+     SSL key renegotiation was happening too frequently, causing poor
+     SSL performance.  Also, initial key handling was improved.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Print lock information when a deadlock is detected (Tom)
+    </para>
+    <para>
+     This allows easier debugging of deadlock situations.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Update <filename>/tmp</filename> socket modification times
+     regularly to avoid their removal (Tom)
+    </para>
+    <para>
+     This should help prevent <filename>/tmp</filename> directory
+     cleaner administration scripts from removing server socket
+     files.
+    </para>
+   </listitem>
+
+   <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
+
+   <listitem>
+    <para>Make B-tree indexes fully WAL-safe (Tom)</para>
+    <para>
+     In prior releases, under certain rare cases, a server crash
+     could cause B-tree indexes to become corrupt. This release
+     removes those last few rare cases.
+    </para>
+   </listitem>
+
+   <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Fix inconsistent index lookups during split of first root page (Tom)
+    </para>
+    <para>
+     In prior releases, when a single-page index split into two
+     pages, there was a brief period when another database session
+     could miss seeing an index entry.  This release fixes that rare
+     failure case.
+    </para>
+   </listitem>
+
+   <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
+
+   <listitem>
+    <para>Preserve free space information between server restarts (Tom)</para>
+    <para>
+     In prior releases, the free space map was not saved when the
+     postmaster was stopped, so newly started servers had no free
+     space information. This release saves the free space map, and
+     reloads it when the server is restarted.
+    </para>
+   </listitem>
+
+   <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
+   <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
+   <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
+   <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
+   <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
+   <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
+   <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Performance Improvements</title>
+
+  <itemizedlist>
+   <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
+   <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
+   <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
+   <listitem><para>Improve constant folding (Tom)</para></listitem>
+   <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
+
+   <listitem>
+    <para>Reduce memory usage for queries using complex functions (Tom)</para>
+    <para>
+     In prior releases, functions returning allocated memory would
+     not free it until the query completed. This release allows the
+     freeing of function-allocated memory when the function call
+     completes, reducing the total memory used by functions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Improve GEQO optimizer performance (Tom)</para>
+    <para>
+     This release fixes several inefficiencies in the way the GEQO optimizer
+     manages potential query paths.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
+     tables (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
+     performance (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow most <literal>IN</literal> subqueries to be processed as
+     joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Pattern matching operations can use indexes regardless of
+     locale (Peter)
+    </para>
+    <para>
+     There is no way for non-ASCII locales to use the standard
+     indexes for <literal>LIKE</literal> comparisons. This release
+     adds a way to create a special index for
+     <literal>LIKE</literal>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
+    <para>
+     For shared libraries that require a long time to load, this
+     option is available so the library can be preloaded in the
+     postmaster and inherited by all database sessions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve optimizer cost computations, particularly for subqueries (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
+     means <literal>a.x = 42</literal> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow hash/merge joins on complex joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow hash joins for more data types (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow join optimization of explicit inner joins, disable with
+     <varname>join_collapse_limit</varname> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add parameter <varname>from_collapse_limit</varname> to control
+     conversion of subqueries to joins (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Use faster and more powerful regular expression code from Tcl
+     (Henry Spencer, Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Use bit-mapped relation sets in the optimizer (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Improve connection startup time (Tom)</para>
+    <para>
+     The new client/server protocol requires fewer network packets to
+     start a database session.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve trigger/constraint performance (Stephan)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Fix hash indexes which were broken in rare cases (Tom)
+    </para>
+   </listitem>
+
+   <listitem><para>Improve hash index concurrency and speed (Tom)</para>
+    <para>
+     Prior releases suffered from poor hash index performance,
+     particularly for high concurrency situations. This release fixes
+     that, and the development group is interested in reports
+     comparing B-tree and hash index performance.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
+    <para>
+     Certain CPU's perform faster data copies when addresses are
+     32-byte aligned.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
+    <para>
+     <type>numeric</type> used to be stored in base 100. The new code
+     uses base 10000, for significantly better performance.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Server Configuration Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
+    <para>
+     This was done so most parameters that control the server logs
+     begin with <literal>log_</>.
+    </para>
+   </listitem>
+
+   <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
+   <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
+   <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
+
+   <listitem>
+    <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
+    <para>
+     In prior releases, it was difficult to determine if checkpoint
+     was happening too frequently. This feature adds a warning to the
+     server logs when excessive checkpointing happens.
+    </para>
+   </listitem>
+
+   <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Change debug server log messages to output as <literal>DEBUG</>
+     rather than <literal>LOG</> (Bruce)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
+    <para>
+     This is a security feature so non-superusers cannot disable
+     logging that was enabled by the administrator.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <varname>log_min_messages</>/<varname>client_min_messages</> now
+     controls <varname>debug_*</> output (Bruce)
+    </para>
+    <para>
+     This centralizes client debug information so all debug output
+     can be sent to either the client or server logs.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
+    <para>
+     This allows Mac OS X hosts to query the network for available
+     <productname>PostgreSQL</productname> servers.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add ability to print only slow statements using
+     <varname>log_min_duration_statement</varname>
+     (Christopher)
+    </para>
+    <para>
+     This is an often requested debugging feature that allows
+     administrators to see only slow queries in their server logs.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
+    <para>
+     This allows administrators to merge the host IP address and
+     netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
+    </para>
+   </listitem>
+
+   <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
+
+   <listitem>
+    <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
+    <para>
+     This works with the new error reporting feature to supply
+     additional error information like hints, file names and line
+     numbers.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
+    <para>
+     This option is useful for administration tools that need to know
+     the configuration variable names and their minimums, maximums,
+     defaults, and descriptions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add new columns in <literal>pg_settings</literal>:
+     <literal>context</>, <literal>type</>, <literal>source</>,
+     <literal>min_val</>, <literal>max_val</> (Joe)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make default <varname>shared_buffers</> 1000 and
+     <varname>max_connections</> 100, if possible (Tom)
+    </para>
+    <para>
+     Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
+     would start on even very old systems. This release tests the
+     amount of shared memory allowed by the platform and selects more
+     reasonable default values if possible.  Of course, users are
+     still encouraged to evaluate their resource load and size
+     <varname>shared_buffers</varname> accordingly.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     New <filename>pg_hba.conf</filename> record type
+     <literal>hostnossl</> to prevent SSL connections (Jon
+     Jensen)
+    </para>
+    <para>
+     In prior releases, there was no way to prevent SSL connections
+     if both the client and server supported SSL. This option allows
+     that capability.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Remove parameter <varname>geqo_random_seed</varname>
+     (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Query Changes</title>
+
+  <itemizedlist>
+   <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
+   <listitem><para>Add read-only transactions (Peter)</para></listitem>
+   <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
+
+   <listitem>
+    <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
+    <para>
+     In prior releases, only the superuser could see query strings
+     using <literal>pg_stat_activity</literal>. Now ordinary users
+     can see their own query strings.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
+    <para>
+     The SQL standard says that an aggregate function appearing
+     within a nested subquery belongs to the outer query if its
+     argument contains only outer-query variables.  Prior
+     <productname>PostgreSQL</productname> releases did not handle
+     this fine point correctly.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
+    <para>
+     By default, tables mentioned in the query are automatically
+     added to the <literal>FROM</> clause if they are not already
+     there.  This is compatible with historic
+     <productname>POSTGRES</productname> behavior but is contrary to
+     the SQL standard.  This option allows selecting
+     standard-compatible behavior.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
+    <para>
+     This allows <command>UPDATE</command> to set a column to its
+     declared default value.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
+    <para>
+     In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
+     only use constants, not expressions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Object Manipulation Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
+   </listitem>
+
+   <listitem>
+    <para>Add statement-level triggers (Neil)</para>
+    <para>
+     While this allows a trigger to fire at the end of a statement,
+     it does not allow the trigger to access all rows modified by the
+     statement.  This capability is planned for a future release.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add check constraints for domains (Rod)</para>
+    <para>
+     This greatly increases the usefulness of domains by allowing
+     them to use check constraints.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
+    <para>
+     This allows manipulation of existing domains.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Fix several zero-column table bugs (Tom)</para>
+    <para>
+     <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
+     that occur when using such tables.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
+    <para>
+     In prior releases, <literal>ALTER TABLE ... ADD
+     PRIMARY</literal> would add a unique index, but not a not-null
+     constraint.  That is fixed in this release.
+    </para>
+   </listitem>
+
+   <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
+    <para>
+     This allows control over whether new and updated rows will have
+     an OID column.  This is most useful for saving storage space.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
+     increment, cache, cycle values (Rod)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
+    <para>
+     This command is used by <command>pg_dump</command> to record the
+     cluster column for each table previously clustered. This
+     information is used by database-wide cluster to cluster all
+     previously clustered tables.
+    </para>
+   </listitem>
+
+   <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
+   <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
+   <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Allow copying table schema using <literal>LIKE
+     <replaceable>subtable</replaceable></literal>, also SQL:2003
+     feature <literal>INCLUDING DEFAULTS</literal> (Rod)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add <literal>WITH GRANT OPTION</literal> clause to
+     <command>GRANT</command> (Peter)
+    </para>
+    <para>
+     This enabled <command>GRANT</command> to give other users the
+     ability to grant privileges on a object.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Utility Command Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
+    <para>
+     This adds the ability for a table to be dropped or all rows
+     deleted on transaction commit.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
+    <para>
+     In previous releases, cursors were removed at the end of the
+     transaction that created them. Cursors can now be created with
+     the <literal>WITH HOLD</literal> option, which allows them to
+     continue to be accessed after the creating transaction has
+     committed.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
+    <para>
+     In previous releases, <literal>FETCH 0</literal> fetched all
+     remaining rows, and <literal>MOVE 0</literal> moved to the end
+     of the cursor.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Cause <command>FETCH</command> and <command>MOVE</command> to
+     return the number of rows fetched/moved, or zero if at the
+     beginning/end of cursor, per SQL standard (Bruce)
+    </para>
+    <para>
+     In prior releases, the row count returned by
+     <command>FETCH</command> and <command>MOVE</command> did not
+     accurately reflect the number of rows processed.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Properly handle <literal>SCROLL</literal> with cursors, or
+    report an error (Neil)</para>
+    <para>
+     Allowing random access (both forward and backward scrolling) to
+     some kinds of queries cannot be done without some additional
+     work. If <literal>SCROLL</literal> is specified when the cursor
+     is created, this additional work will be performed. Furthermore,
+     if the cursor has been created with <literal>NO SCROLL</literal>,
+     no random access is allowed.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Implement SQL-compatible options <literal>FIRST</>,
+     <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
+     <literal>RELATIVE <replaceable>n</></> for
+     <command>FETCH</command> and <command>MOVE</command> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
+    <para>
+     This allows all previously clustered tables in a database to be
+     reclustered with a single command.
+    </para>
+   </listitem>
+
+   <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
+
+   <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
+
+   <listitem>
+    <para>
+     Disallow literal carriage return as a data value,
+     backslash-carriage-return and <literal>\r</> are still allowed
+     (Bruce)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
+    <para>
+     <command>TRUNCATE</command> can now be used inside a
+     transaction. If the transaction aborts, the changes made by the
+     <command>TRUNCATE</command> are automatically rolled back.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow prepare/bind of utility commands like
+     <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
+   </listitem>
+
+   <listitem>
+    <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
+    <para>
+     In prior releases, functional indexes only supported a simple
+     function applied to one or more column names.  This release
+     allows any type of scalar expression.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Have <command>SHOW TRANSACTION ISOLATION</command> match input
+     to <command>SET TRANSACTION ISOLATION</command>
+     (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+      Have <command>COMMENT ON DATABASE</command> on nonlocal
+      database generate a warning, rather than an error (Rod)
+     </para>
+
+    <para>
+     Database comments are stored in database-local tables so
+     comments on a database have to be stored in each database.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
+    <para>
+     This allows system tables to be reindexed without the
+     requirement of a standalone session, which was necessary in
+     previous releases. The only tables that now require a standalone
+     session for reindexing are the global system tables
+     <literal>pg_database</>, <literal>pg_shadow</>, and
+     <literal>pg_group</>.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Data Type and Function Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     New server parameter <varname>extra_float_digits</varname> to
+     control precision display of floating-point numbers (Pedro
+     Ferreira, Tom)
+    </para>
+    <para>
+     This controls output precision which was causing regression
+     testing problems.
+    </para>
+   </listitem>
+
+   <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Remove rarely used functions <function>oidrand</>,
+     <function>oidsrand</>, and <function>userfntest</> functions
+     (Neil)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
+    <para>
+     An MD5 function was frequently requested. For more complex
+     encryption capabilities, use
+     <filename>contrib/pgcrypto</filename>.
+    </para>
+   </listitem>
+
+   <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
+
+   <listitem>
+    <para>
+     Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
+     <type>timestamp without time zone</type> is assumed to be in
+     local time, not GMT (Tom)
+    </para>
+   </listitem>
+
+   <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
+   <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
+   <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
+   <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
+
+   <listitem>
+    <para>
+     Allow functions that can take any argument data type and return
+     any data type, using <type>anyelement</type> and
+     <type>anyarray</type> (Joe)
+    </para>
+    <para>
+     This allows the creation of functions that can work with any
+     data type.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Arrays can now be specified as <literal>ARRAY[1,2,3]</literal>,
+     <literal>ARRAY[['a','b'],['c','d']]</literal>, or
+     <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow proper comparisons for arrays, including <literal>ORDER
+     BY</literal> and <literal>DISTINCT</literal> support
+     (Joe)
+    </para>
+   </listitem>
+
+   <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
+   <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
+
+   <listitem>
+    <para>
+     Allow <literal>WHERE</literal> qualification
+     <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
+     (<replaceable>array_expr</>)</literal> (Joe)
+    </para>
+    <para>
+     This allows arrays to behave like a list of values, for purposes
+     like <literal>SELECT * FROM tab WHERE col IN
+     (array_val)</literal>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     New array functions <function>array_append</>,
+     <function>array_cat</>, <function>array_lower</>,
+     <function>array_prepend</>, <function>array_to_string</>,
+     <function>array_upper</>, <function>string_to_array</> (Joe)
+    </para>
+   </listitem>
+
+   <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
+   <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
+
+   <listitem>
+    <para>
+     Allow 60 in seconds fields of <type>time</type>,
+     <type>timestamp</type>, and <type>interval</type> input values
+     (Tom)
+    </para>
+    <para>
+     Sixty-second values are needed for leap seconds.
+    </para>
+   </listitem>
+
+   <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
+
+   <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
+
+   <listitem>
+    <para>
+     Trim trailing spaces when <type>char</type> is cast to
+     <type>varchar</> or <type>text</> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make <type>float(<replaceable>p</>)</> measure the precision
+     <replaceable>p</> in binary digits, not decimal digits
+     (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
+   </listitem>
+
+   <listitem>
+    <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Have <literal>SHOW datestyle</literal> generate output similar
+     to that used by <literal>SET datestyle</literal> (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
+     TIME ZONE</literal> follow the SQL convention for the sign of
+     time zone offsets, i.e., positive is east from UTC (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
+    <para>
+     Prior releases returned an incorrect value for this function call.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
+    <para>
+     <function>initcap()</function> now uppercases a letter appearing
+     after any non-alphanumeric character, rather than only after
+     whitespace.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add new <varname>datestyle</varname> values <literal>MDY</>,
+     <literal>DMY</>, and <literal>YMD</> to set input field order;
+     honor <literal>US</> and <literal>European</> for backward
+     compatibility (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     String literals like <literal>'now'</literal> or
+     <literal>'today'</literal> will no longer work as a column
+     default. Use functions such as <function>now()</function>,
+     <function>current_timestamp</function> instead.  (change
+     required for prepared statements) (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
+    <para>
+     NaN was already sorted after ordinary numeric values for most
+     purposes, but <function>min()</> and <function>max()</> didn't
+     get this right.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Prevent interval from suppressing <literal>:00</literal>
+    seconds display</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     New functions <function>pg_get_triggerdef(prettyprint)</function>
+     and <function>pg_conversion_is_visible()</function> (Christopher)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
+     match <varname>datestyle</varname>
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make <function>pg_get_constraintdef</function> support
+     unique, primary-key, and check constraints (Christopher)
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Server-Side Language Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
+     used on a zero-row record variable (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make PL/Python's <function>spi_execute</function> interface
+     handle null values properly (Andrew Bosma)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
+   </listitem>
+
+   <listitem>
+    <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
+    <para>
+     The Python language no longer supports a restricted execution
+     environment, so the trusted version of PL/Python was removed. If
+     this situation changes, a version of PL/Python that can be used
+     by non-superusers will be readded.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Allow polymorphic SQL functions (Joe)</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Improved compiled function caching mechanism in PL/pgSQL with
+     full support for polymorphism (Joe)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Add new parameter <literal>$0</> in PL/pgSQL representing the
+     function's actual return type (Joe)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
+     qualified type names in the parameter type list
+     (Jan)
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>psql Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
+    <para>
+     This forces the pager to be used even if the number of rows is
+     less than the screen height.  This is valuable for rows that
+     wrap across several screen rows.
+    </para>
+   </listitem>
+
+   <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
+   <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
+   <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
+
+   <listitem>
+    <para>
+     <command>\encoding</> now changes based on the server parameter
+     <varname>client_encoding</varname> (Tom)
+    </para>
+    <para>
+     In previous versions, <command>\encoding</command> was not aware
+     of encoding changes made using <literal>SET
+     client_encoding</literal>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Save editor buffer into readline history (Ross)</para>
+    <para>
+     When <command>\e</> is used to edit a query, the result is saved
+     in the readline history for retrieval using the up arrow.
+    </para>
+   </listitem>
+
+   <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
+   <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
+
+   <listitem>
+    <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
+    <para>
+     This takes the place of the removed server parameter <varname>autocommit</varname>.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
+    <para>
+     This controls the new error reporting details.
+    </para>
+   </listitem>
+
+   <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
+   <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>pg_dump Changes</title>
+
+  <itemizedlist>
+   <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
+   <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
+
+   <listitem>
+    <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
+    <para>
+     This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
+    </para>
+   </listitem>
+
+   <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
+
+   <listitem>
+    <para>
+     Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privileges (Tom)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow pg_dumpall to support the options <option>-a</>,
+     <option>-s</>, <option>-x</> of pg_dump (Tom)
+    </para>
+   </listitem>
+
+   <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     pg_dump options <option>--use-set-session-authorization</option>
+     and <option>--no-reconnect</option> now do nothing, all dumps
+     use <command>SET SESSION AUTHORIZATION</command>
+    </para>
+    <para>
+     pg_dump no longer reconnects to switch users, but instead always
+     uses <command>SET SESSION AUTHORIZATION</command>. This will
+     reduce password prompting during restores.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
+    <para>
+     <productname>PostgreSQL</productname> now includes its own
+     long-option processing routines.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>libpq Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     Add function <function>PQfreemem</function> for freeing memory on
+     Windows, suggested for <command>NOTIFY</command> (Bruce)
+    </para>
+    <para>
+     Windows requires that memory allocated in a library be freed by
+     a function in the same library, hence
+     <function>free()</function> doesn't work for freeing memory
+     allocated by libpq. <function>PQfreemem</function> is the proper
+     way to free libpq memory, especially on Windows, and is
+     recommended for other platforms as well.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Document service capability, and add sample file (Bruce)</para>
+    <para>
+     This allows clients to look up connection information in a
+     central file on the client machine.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Make <function>PQsetdbLogin</function> have the same defaults as
+     <function>PQconnectdb</function> (Tom)
+    </para>
+   </listitem>
+
+   <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow thread-safe libpq with <filename>configure</filename>
+     option <option>--enable-thread-safety</option> (Lee Kindness,
+     Philip Yarra)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow function <function>pqInternalNotice</function> to accept a
+     format string and arguments instead of just a preformatted
+     message (Tom, Sean Chittenden)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Control SSL negotiation with <literal>sslmode</literal> values
+     <literal>disable</literal>, <literal>allow</literal>,
+     <literal>prefer</literal>, and <literal>require</literal> (Jon
+     Jensen)
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Allow new error codes and levels of text (Tom)</para>
+   </listitem>
+
+   <listitem>
+    <para>Allow access to the underlying table and column of a query result (Tom)</para>
+    <para>
+     This is helpful for query-builder applications that want to know
+     the underlying table and column names associated with a specific
+     result set.
+    </para>
+   </listitem>
+
+   <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
+   <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
+
+   <listitem>
+    <para>
+     Add function <function>PQexecPrepared</function> and
+     <function>PQsendQueryPrepared</function> functions which perform
+     bind/execute of previously prepared statements (Tom)
+     </para>
+    </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>JDBC Changes</title>
+
+  <itemizedlist>
+   <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
+   <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
+   <listitem><para>Support SSL connections (Barry)</para></listitem>
+   <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
+   <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Miscellaneous Interface Changes</title>
+
+  <itemizedlist>
+   <listitem>
+    <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
+   </listitem>
+   <listitem>
+    <para>Add Informix compatibility to ECPG (Michael)</para>
+    <para>
+     This allows ECPG to process embedded C programs that were
+     written using certain Informix extensions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Allow thread-safe embedded SQL programs with
+     <filename>configure</filename> option
+     <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
+    </para>
+    <para>
+     This allows multiple threads to access the database at the same
+     time.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Source Code Changes</title>
+
+  <itemizedlist>
+   <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
+   <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
+   <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
+   <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
+   <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
+   <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
+   <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
+   <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
+   <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
+   <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
+   <listitem><para> Bison &gt;= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
+   <listitem><para>Merge documentation into one book (Peter)</para></listitem>
+   <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
+   <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
+   <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
+   <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
+   <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
+   <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
+   <listitem>
+    <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
+    <para>
+     This was no longer needed now that we have <command>CREATE CONVERSION</command>.
+    </para>
+   </listitem>
+   <listitem>
+    <para>Generate a compile error if spinlock code is not found (Bruce)</para>
+    <para>
+     Platforms without spinlock code will now fail to compile, rather
+     than silently using semaphores. This failure can be disabled
+     with a new <command>configure</command> option.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </sect3>
+
+ <sect3>
+  <title>Contrib Changes</title>
+
+  <itemizedlist>
+   <listitem><para>Change dbmirror license to BSD</para></listitem>
+   <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
+   <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
+   <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
+   <listitem><para>Update oracle</para></listitem>
+   <listitem><para>Update mysql</para></listitem>
+   <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
+   <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
+   <listitem><para>Update btree_gist (Oleg)</para></listitem>
+   <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
+   <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
+   <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
+   <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
+   <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
+   <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
+   <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
+   <listitem><para>Improve pgstattuple (Rod)</para></listitem>
+   <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
+   <listitem><para>Improve adddepend (Rod)</para></listitem>
+   <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
+   <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
+   <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
+  </itemizedlist>
+ </sect3>
+ </sect2>
+</sect1>
diff --git a/doc/src/sgml/release-8.0.sgml b/doc/src/sgml/release-8.0.sgml
new file mode 100644 (file)
index 0000000..b5a27ca
--- /dev/null
@@ -0,0 +1,4561 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.0.sgml,v 1.1.4.1 2009/05/02 20:17:45 tgl Exp $ -->
+<!-- See header comment in release.sgml about typical markup -->
+
+ <sect1 id="release-8-0-21">
+  <title>Release 8.0.21</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2009-03-16</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.20.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.21</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>
+      Prevent error recursion crashes when encoding conversion fails (Tom)
+     </para>
+
+     <para>
+      This change extends fixes made in the last two minor releases for
+      related failure scenarios.  The previous fixes were narrowly tailored
+      for the original problem reports, but we have now recognized that
+      <emphasis>any</> error thrown by an encoding conversion function could
+      potentially lead to infinite recursion while trying to report the
+      error.  The solution therefore is to disable translation and encoding
+      conversion and report the plain-ASCII form of any error message,
+      if we find we have gotten into a recursive error reporting situation.
+      (CVE-2009-0922)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Disallow <command>CREATE CONVERSION</> with the wrong encodings
+      for the specified conversion function (Heikki)
+     </para>
+
+     <para>
+      This prevents one possible scenario for encoding conversion failure.
+      The previous change is a backstop to guard against other kinds of
+      failures in the same area.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix core dump when <function>to_char()</> is given format codes that
+      are inappropriate for the type of the data argument (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
+      of known timezone abbreviations (Xavier Bugaud)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-20">
+  <title>Release 8.0.20</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2009-02-02</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.19.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.20</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.
+    However, if you are upgrading from a version earlier than 8.0.6,
+    see the release notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Improve handling of URLs in <function>headline()</> function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve handling of overlength headlines in <function>headline()</>
+      function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Prevent possible Assert failure or misconversion if an encoding
+      conversion is created with the wrong conversion function for the
+      specified pair of encodings (Tom, Heikki)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Avoid unnecessary locking of small tables in <command>VACUUM</>
+      (Heikki)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix uninitialized variables in <filename>contrib/tsearch2</>'s
+      <function>get_covers()</> function (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make all documentation reference <literal>pgsql-bugs</> and/or
+      <literal>pgsql-hackers</> as appropriate, instead of the
+      now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
+      mailing lists (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2009a (for
+      Kathmandu and historical DST corrections in Switzerland, Cuba)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-19">
+  <title>Release 8.0.19</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-11-03</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.18.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.19</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.
+    However, if you are upgrading from a version earlier than 8.0.6,
+    see the release notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Fix backend crash when the client encoding cannot represent a localized
+      error message (Tom)
+     </para>
+
+     <para>
+      We have addressed similar issues before, but it would still fail if
+      the <quote>character has no equivalent</> message itself couldn't
+      be converted.  The fix is to disable localization and send the plain
+      ASCII error message when we detect such a situation.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix possible crash when deeply nested functions are invoked from
+      a trigger (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Ensure an error is reported when a newly-defined PL/pgSQL trigger
+      function is invoked as a normal function (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix incorrect tsearch2 headline generation when single query
+      item matches first word of text (Sushant Sinha)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix improper display of fractional seconds in interval values when
+      using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
+      build (Ron Mayer)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
+      behave correctly when the passed tuple and tuple descriptor have
+      different numbers of columns (Tom)
+     </para>
+
+     <para>
+      This situation is normal when a table has had columns added or removed,
+      but these two functions didn't handle it properly.
+      The only likely consequence is an incorrect error indication.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>ecpg</>'s parsing of <command>CREATE USER</> (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix recent breakage of <literal>pg_ctl restart</> (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2008i (for
+      DST law changes in Argentina, Brazil, Mauritius, Syria)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-18">
+  <title>Release 8.0.18</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-09-22</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.17.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.18</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>
+      Widen local lock counters from 32 to 64 bits (Tom)
+     </para>
+
+     <para>
+      This responds to reports that the counters could overflow in
+      sufficiently long transactions, leading to unexpected <quote>lock is
+      already held</> errors.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Add checks in executor startup to ensure that the tuples produced by an
+      <command>INSERT</> or <command>UPDATE</> will match the target table's
+      current rowtype (Tom)
+     </para>
+
+     <para>
+      <command>ALTER COLUMN TYPE</>, followed by re-use of a previously
+      cached plan, could produce this type of situation.  The check protects
+      against data corruption and/or crashes that could ensue.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix datetime input functions to correctly detect integer overflow when
+      running on a 64-bit platform (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve performance of writing very long log messages to syslog (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
+      ON</> query (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix planner to estimate that <literal>GROUP BY</> expressions yielding
+      boolean results always result in two groups, regardless of the
+      expressions' contents (Tom)
+     </para>
+
+     <para>
+      This is very substantially more accurate than the regular <literal>GROUP
+      BY</> estimate for certain boolean tests like <replaceable>col</>
+      <literal>IS NULL</>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
+      about the encoding of data sent to or from Tcl (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix PL/Python to work with Python 2.5
+     </para>
+
+     <para>
+      This is a back-port of fixes made during the 8.2 development cycle.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve <application>pg_dump</> and <application>pg_restore</>'s
+      error reporting after failure to send a SQL command (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>pg_ctl</> to properly preserve postmaster
+      command-line arguments across a <literal>restart</> (Bruce)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2008f (for
+      DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
+      Pakistan, Palestine, and Paraguay)
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-17">
+  <title>Release 8.0.17</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-06-12</simpara>
+  </note>
+
+  <para>
+   This release contains one serious bug fix over 8.0.16.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.17</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>
+      Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
+     </para>
+
+     <para>
+      Before this fix, a negative constant in a view or rule might be dumped
+      as, say, <literal>-42::integer</>, which is subtly incorrect: it should
+      be <literal>(-42)::integer</> due to operator precedence rules.
+      Usually this would make little difference, but it could interact with
+      another recent patch to cause
+      <productname>PostgreSQL</> to reject what had been a valid
+      <command>SELECT DISTINCT</> view query.  Since this could result in
+      <application>pg_dump</> output failing to reload, it is being treated
+      as a high-priority fix.  The only released versions in which dump
+      output is actually incorrect are 8.3.1 and 8.2.7.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-16">
+  <title>Release 8.0.16</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>never released</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.15.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.16</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.
+    However, if you are upgrading from a version earlier than 8.0.6,
+    see the release notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
+      column is correctly checked to see if it's been initialized to all
+      non-nulls (Brendan Jurd)
+     </para>
+
+     <para>
+      Previous versions neglected to check this requirement at all.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix possible <command>CREATE TABLE</> failure when inheriting the
+      <quote>same</> constraint from multiple parent relations that
+      inherited that constraint from a common ancestor (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix conversions between ISO-8859-5 and other encodings to handle
+      Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
+      two dots) (Sergey Burladyan)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix a few datatype input functions
+      that were allowing unused bytes in their results to contain
+      uninitialized, unpredictable values (Tom)
+     </para>
+
+     <para>
+      This could lead to failures in which two apparently identical literal
+      values were not seen as equal, resulting in the parser complaining
+      about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
+      expressions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix a corner case in regular-expression substring matching
+      (<literal>substring(<replaceable>string</> from
+      <replaceable>pattern</>)</literal>) (Tom)
+     </para>
+
+     <para>
+      The problem occurs when there is a match to the pattern overall but
+      the user has specified a parenthesized subexpression and that
+      subexpression hasn't got a match.  An example is
+      <literal>substring('foo' from 'foo(bar)?')</>.
+      This should return NULL, since <literal>(bar)</> isn't matched, but
+      it was mistakenly returning the whole-pattern match instead (ie,
+      <literal>foo</>).
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2008c (for
+      DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba,
+      Argentina/San_Luis, and Chile)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix incorrect result from <application>ecpg</>'s
+      <function>PGTYPEStimestamp_sub()</> function (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix core dump in <filename>contrib/xml2</>'s
+      <function>xpath_table()</> function when the input query returns a
+      NULL value (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <filename>contrib/xml2</>'s makefile to not override
+      <literal>CFLAGS</> (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
+      4.3 (Tom)
+     </para>
+
+     <para>
+      This problem affects <quote>old style</> (V0) C functions that
+      return boolean.  The fix is already in 8.3, but the need to
+      back-patch it was not realized at the time.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
+      race condition (Tom)
+     </para>
+
+     <para>
+      In rare cases a session that had just executed a
+      <command>LISTEN</> might not get a notification, even though
+      one would be expected because the concurrent transaction executing
+      <command>NOTIFY</> was observed to commit later.
+     </para>
+
+     <para>
+      A side effect of the fix is that a transaction that has executed
+      a not-yet-committed <command>LISTEN</> command will not see any
+      row in <structname>pg_listener</> for the <command>LISTEN</>,
+      should it choose to look; formerly it would have.  This behavior
+      was never documented one way or the other, but it is possible that
+      some applications depend on the old behavior.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix rare crash when an error occurs during a query using a hash index
+      (Heikki)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix input of datetime values for February 29 in years BC (Tom)
+     </para>
+
+     <para>
+      The former coding was mistaken about which years were leap years.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <quote>unrecognized node type</> error in some variants of
+      <command>ALTER OWNER</> (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>pg_ctl</> to correctly extract the postmaster's port
+      number from command-line options (Itagaki Takahiro, Tom)
+     </para>
+
+     <para>
+      Previously, <literal>pg_ctl start -w</> could try to contact the
+      postmaster on the wrong port, leading to bogus reports of startup
+      failure.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Use <option>-fwrapv</> to defend against possible misoptimization
+      in recent <application>gcc</> versions (Tom)
+     </para>
+
+     <para>
+      This is known to be necessary when building <productname>PostgreSQL</>
+      with <application>gcc</> 4.3 or later.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix display of constant expressions in <literal>ORDER BY</>
+      and <literal>GROUP BY</> (Tom)
+     </para>
+
+     <para>
+      An explictly casted constant would be shown incorrectly.  This could
+      for example lead to corruption of a view definition during
+      dump and reload.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <application>libpq</> to handle NOTICE messages correctly
+      during COPY OUT (Tom)
+     </para>
+
+     <para>
+      This failure has only been observed to occur when a user-defined
+      datatype's output routine issues a NOTICE, but there is no
+      guarantee it couldn't happen due to other causes.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-15">
+  <title>Release 8.0.15</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2008-01-07</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.14,
+   including fixes for significant security issues.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <para>
+   This is the last 8.0.X release for which the <productname>PostgreSQL</>
+   community will produce binary packages for <productname>Windows</>.
+   Windows users are encouraged to move to 8.2.X or later,
+   since there are Windows-specific fixes in 8.2.X that
+   are impractical to back-port.  8.0.X will continue to
+   be supported on other platforms.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.15</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>
+      Prevent functions in indexes from executing with the privileges of
+      the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
+     </para>
+
+     <para>
+      Functions used in index expressions and partial-index
+      predicates are evaluated whenever a new table entry is made.  It has
+      long been understood that this poses a risk of trojan-horse code
+      execution if one modifies a table owned by an untrustworthy user.
+      (Note that triggers, defaults, check constraints, etc. pose the
+      same type of risk.)  But functions in indexes pose extra danger
+      because they will be executed by routine maintenance operations
+      such as <command>VACUUM FULL</>, which are commonly performed
+      automatically under a superuser account.  For example, a nefarious user
+      can execute code with superuser privileges by setting up a
+      trojan-horse index definition and waiting for the next routine vacuum.
+      The fix arranges for standard maintenance operations
+      (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
+      and <command>CLUSTER</>) to execute as the table owner rather than
+      the calling user, using the same privilege-switching mechanism already
+      used for <literal>SECURITY DEFINER</> functions.  To prevent bypassing
+      this security measure, execution of <command>SET SESSION
+      AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
+      <literal>SECURITY DEFINER</> context.  (CVE-2007-6600)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
+     </para>
+
+     <para>
+      Suitably crafted regular-expression patterns could cause crashes,
+      infinite or near-infinite looping, and/or massive memory consumption,
+      all of which pose denial-of-service hazards for applications that
+      accept regex search patterns from untrustworthy sources.
+      (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require non-superusers who use <filename>/contrib/dblink</> to use only
+      password authentication, as a security measure (Joe)
+     </para>
+
+     <para>
+      The fix that appeared for this in 8.0.14 was incomplete, as it plugged
+      the hole for only some <filename>dblink</> functions.  (CVE-2007-6601,
+      CVE-2007-3278)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update time zone data files to <application>tzdata</> release 2007k
+      (in particular, recent Argentina changes) (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix planner failure in some cases of <literal>WHERE false AND var IN
+      (SELECT ...)</> (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>
+      Make archive recovery always start a new WAL timeline, rather than only
+      when a recovery stop time was used (Simon)
+     </para>
+
+     <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>
+      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>
+      Fix potential crash in <function>translate()</> when using a multibyte
+      database encoding (Tom)
+     </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>
+
+     <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>
+      Fix PL/Python to not crash on long exception messages (Alvaro)
+     </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>
+      <application>ecpg</> parser fixes (Michael)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
+      NULL rowid as a category in its own right, rather than crashing (Joe)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix <type>tsvector</> and <type>tsquery</> output routines to
+      escape backslashes correctly (Teodor, Bruce)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Require a specific version of <productname>Autoconf</> to be used
+      when re-generating the <command>configure</> script (Peter)
+     </para>
+
+     <para>
+      This affects developers and packagers only.  The change was made
+      to prevent accidental use of untested combinations of
+      <productname>Autoconf</> and <productname>PostgreSQL</> versions.
+      You can remove the version check if you really want to use a
+      different <productname>Autoconf</> version, but it's
+      your responsibility whether the result works or not.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-14">
+  <title>Release 8.0.14</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-09-17</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.13.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </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>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Prevent index corruption when a transaction inserts rows and
+      then aborts close to the end of a concurrent <command>VACUUM</>
+      on the same table (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix excessive logging of <acronym>SSL</> error messages (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix 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>
+      Prevent <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 improvements (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>
+
+   </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.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </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>
+    </listitem>
+
+    <listitem>
+    <para>
+     <filename>/contrib/tsearch2</> crash 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 PANIC during enlargement of a hash index (bug introduced in 8.0.10)
+     (Tom)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-12">
+  <title>Release 8.0.12</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-07</simpara>
+  </note>
+
+  <para>
+   This release contains one fix from 8.0.11.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.12</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     Remove overly-restrictive check for type length in constraints and
+     functional indexes(Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-11">
+  <title>Release 8.0.11</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-02-05</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.10, including
+   a security fix.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.11</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+    <para>
+     Remove security vulnerabilities that allowed connected users
+     to read backend memory (Tom)
+    </para>
+    <para>
+     The vulnerabilities involve suppressing the normal check that a SQL
+     function returns the data type it's declared to, and changing the
+     data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
+     errors can easily be exploited to cause a backend crash, and in
+     principle might be used to read database content that the user
+     should not be able to access.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix rare bug wherein btree index page splits could fail
+     due to choosing an infeasible split point (Heikki Linnakangas)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+     Tighten security of multi-byte character processing for UTF8 sequences
+     over three bytes long (Tom)
+    </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-10">
+  <title>Release 8.0.10</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2007-01-08</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.9.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.10</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Improve handling of <function>getaddrinfo()</> on AIX (Tom)
+     </para>
+
+     <para>
+      This fixes a problem with starting the statistics collector,
+      among other things.
+     </para>
+    </listitem>
+
+     <listitem>
+      <para>
+       Fix <quote>failed to re-find parent key</> errors in
+       <command>VACUUM</> (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix race condition for truncation of a large relation across a
+       gigabyte boundary by <command>VACUUM</> (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix bugs affecting multi-gigabyte hash indexes (Tom)
+      </para>
+     </listitem>
+
+    <listitem>
+     <para>
+      Fix possible deadlock in Windows signal handling (Teodor)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix error when constructing an <literal>ARRAY[]</> made up of multiple
+      empty elements (Tom)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Fix ecpg memory leak during connection (Michael)
+     </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>
+
+     <para>
+      This is because <varname>lc_numeric</> can potentially
+      change the output of these functions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Improve index usage of regular expressions that use parentheses (Tom)
+     </para>
+
+     <para>
+      This improves <application>psql</> <literal>\d</> performance also.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Update timezone database
+     </para>
+
+     <para>
+      This affects Australian and Canadian daylight-savings rules in
+      particular.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-9">
+  <title>Release 8.0.9</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-10-16</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.8.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.9</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix crash when referencing <literal>NEW</> row
+values in rule WHERE expressions (Tom)</para></listitem>
+<listitem><para>Fix core dump when an untyped literal is taken as
+ANYARRAY</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 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>Fix instability of statistics collection on Win32 (Tom, Andrew)</para></listitem>
+<listitem><para>Fixes for <systemitem class="osname">AIX</> and
+<productname>Intel</> compilers (Tom)</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-8">
+  <title>Release 8.0.8</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-05-23</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.7,
+   including patches for extremely serious security issues.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.8</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+
+   <para>
+    Full security against the SQL-injection attacks described in
+    CVE-2006-2313 and CVE-2006-2314 might require changes in application
+    code.  If you have applications that embed untrustworthy strings
+    into SQL commands, you should examine them as soon as possible to
+    ensure that they are using recommended escaping techniques.  In
+    most cases, applications should be using subroutines provided by
+    libraries or drivers (such as <application>libpq</>'s
+    <function>PQescapeStringConn()</>) to perform string escaping,
+    rather than relying on <foreignphrase>ad hoc</> code to do it.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<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>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>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>Fix some incorrect encoding conversion functions</para>
+<para><function>win1251_to_iso</>, <function>alt_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>Clean up stray remaining uses of <literal>\'</> in strings
+(Bruce, Jan)</para></listitem>
+
+<listitem><para>Fix bug that sometimes caused OR'd index scans to
+miss rows they should have returned</para></listitem>
+
+<listitem><para>Fix WAL replay for case where a btree index has been
+truncated</para></listitem>
+
+<listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
+<literal>|</> (Tom)</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>Fix server to use custom DH SSL parameters correctly (Michael
+Fuhr)</para></listitem>
+
+<listitem><para>Fix for Bonjour on Intel Macs (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>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-7">
+  <title>Release 8.0.7</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-02-14</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.6.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.7</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.6, see the release
+    notes for 8.0.6.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix potential crash in <command>SET
+SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
+<para>An unprivileged user could crash the server process, resulting in
+momentary denial of service to other users, if the server has been compiled
+with Asserts enabled (which is not the default).
+Thanks to Akio Ishida for reporting this problem.
+</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 race condition that could lead to <quote>file already
+exists</> errors during pg_clog and pg_subtrans file creation
+(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>Properly check <literal>DOMAIN</> constraints for
+<literal>UNKNOWN</> parameters in prepared statements
+(Neil)</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>Fixes to allow restoring dumps that have cross-schema
+references to custom operators or operator classes (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 <application>pg_ctl</> <literal>unregister</> crash
+when the  data directory is not specified (Magnus)</para></listitem>
+
+<listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
+(Neil)</para></listitem>
+
+<listitem><para>Recover properly if error occurs during argument passing
+in <application>PL/python</> (Neil)</para></listitem>
+
+<listitem><para>Fix <application>PL/perl</>'s handling of locales on
+Win32 to match the backend (Andrew)</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>Fix <application>pgxs</> <literal>-L</> library path
+specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
+
+<listitem><para>Check that SID is enabled while checking for Win32 admin
+privileges (Magnus)</para></listitem>
+
+<listitem><para>Properly reject out-of-range date inputs (Kris
+Jurka)</para></listitem>
+
+<listitem><para>Portability fix for testing presence of <function>finite</>
+and <function>isinf</> during configure (Tom)</para></listitem>
+
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-6">
+  <title>Release 8.0.6</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2006-01-09</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.5.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.6</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+    Also, you might need to <command>REINDEX</> indexes on textual
+    columns after updating, if you are affected by the locale or
+    <application>plperl</> issues described below.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<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>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>Fix for protocol-level Describe messages issued
+outside a transaction or in a failed transaction (Tom)</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>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>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 longstanding bug in strpos() and regular expression
+handling in certain rarely used Asian multi-byte character sets (Tatsuo)
+</para></listitem>
+
+<listitem><para>Various fixes for functions returning <literal>RECORD</>s
+(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>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>
+
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-5">
+  <title>Release 8.0.5</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-12-12</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.4.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.5</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+
+<listitem><para>Fix race condition in transaction log management</para>
+<para>There was a narrow window in which an I/O operation could be initiated
+for the wrong page, leading to an Assert failure or data
+corruption.</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>Prevent failure if client sends Bind protocol message
+when current transaction is already aborted</para></listitem>
+
+<listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
+
+<listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
+
+<listitem><para>Retry file reads and writes after Windows
+NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
+
+<listitem><para>Fix intermittent failure when <varname>log_line_prefix</>
+includes <literal>%i</></para></listitem>
+
+<listitem><para>Fix <application>psql</> performance issue with long scripts
+on Windows (Merlin Moncure)</para></listitem>
+
+<listitem><para>Fix missing updates of <filename>pg_group</> flat
+file</para></listitem>
+
+<listitem><para>Fix longstanding planning error for outer joins</para>
+<para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
+only supported with merge-joinable join conditions</>.</para></listitem>
+
+<listitem><para>Postpone timezone initialization until after
+<filename>postmaster.pid</> is created</para>
+<para>This avoids confusing startup scripts that expect the pid file to appear
+quickly.</para></listitem>
+
+<listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
+table has been dropped</para></listitem>
+
+<listitem><para>Fix problems with whole-row references (<literal>foo.*</>)
+to subquery results</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-4">
+  <title>Release 8.0.4</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-10-04</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.3.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.4</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    if you are upgrading from a version earlier than 8.0.3, see the release
+    notes for 8.0.3.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Fix error that allowed <command>VACUUM</> to remove
+<literal>ctid</> chains too soon, and add more checking in code that follows
+<literal>ctid</> links</para>
+<para>This fixes a long-standing problem that could cause crashes in very rare
+circumstances.</para></listitem>
+<listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
+length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
+<para>In prior releases, the padding of <type>CHAR()</> was incorrect
+because it only padded to the specified number of bytes without
+considering how many characters were stored.</para></listitem>
+<listitem><para>Force a checkpoint before committing <command>CREATE
+DATABASE</></para>
+<para>This should fix recent reports of <quote>index is not a btree</>
+failures when a crash occurs shortly after <command>CREATE
+DATABASE</>.</para></listitem>
+<listitem><para>Fix the sense of the test for read-only transaction
+in <command>COPY</></para>
+<para>The code formerly prohibited <command>COPY TO</>, where it should
+prohibit <command>COPY FROM</>.
+</para></listitem>
+<listitem><para>Handle consecutive embedded newlines in <command>COPY</>
+CSV-mode input</para></listitem>
+<listitem><para>Fix <function>date_trunc(week)</> for dates near year
+end</para></listitem>
+<listitem><para>Fix planning problem with outer-join ON clauses that reference
+only the inner-side relation</para></listitem>
+<listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
+cases</para></listitem>
+<listitem><para>Fix overenthusiastic optimization of <literal>x IN (SELECT
+DISTINCT ...)</> and related cases</para></listitem>
+<listitem><para>Fix mis-planning of queries with small <literal>LIMIT</>
+values due to poorly thought out <quote>fuzzy</> cost
+comparison</para></listitem>
+<listitem><para>Make <function>array_in</> and <function>array_recv</> more
+paranoid about validating their OID parameter</para></listitem>
+<listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
+a...</> with GiST index on column <literal>a</></para></listitem>
+<listitem><para>Improve robustness of datetime parsing</para></listitem>
+<listitem><para>Improve checking for partially-written WAL
+pages</para></listitem>
+<listitem><para>Improve robustness of signal handling when SSL is
+enabled</para></listitem>
+<listitem><para>Improve MIPS and M68K spinlock code</para></listitem>
+<listitem><para>Don't try to open more than <literal>max_files_per_process</>
+files during postmaster startup</para></listitem>
+<listitem><para>Various memory leakage fixes</para></listitem>
+<listitem><para>Various portability improvements</para></listitem>
+<listitem><para>Update timezone data files</para></listitem>
+<listitem><para>Improve handling of DLL load failures on Windows</para></listitem>
+<listitem><para>Improve random-number generation on Windows</para></listitem>
+<listitem><para>Make <literal>psql -f filename</> return a nonzero exit code
+when opening the file fails</para></listitem>
+<listitem><para>Change <application>pg_dump</> to handle inherited check
+constraints more reliably</para></listitem>
+<listitem><para>Fix password prompting in <application>pg_restore</> on
+Windows</para></listitem>
+<listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
+the variable is of pass-by-reference type</para></listitem>
+<listitem><para>Fix PL/Perl <literal>%_SHARED</> so it's actually
+shared</para></listitem>
+<listitem><para>Fix <filename>contrib/pg_autovacuum</> to allow sleep
+intervals over 2000 sec</para></listitem>
+<listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
+code</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-3">
+  <title>Release 8.0.3</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-05-09</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.2, including several
+   security-related issues.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.3</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.X.  However,
+    it is one possible way of handling two significant security problems
+    that have been found in the initial contents of 8.0.X system
+    catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
+    automatically correct these problems.
+   </para>
+
+   <para>
+    The larger security problem is that the built-in character set encoding
+    conversion functions can be invoked from SQL commands by unprivileged
+    users, but the functions were not designed for such use and are not
+    secure against malicious choices of arguments.  The fix involves changing
+    the declared parameter list of these functions so that they can no longer
+    be invoked from SQL commands.  (This does not affect their normal use
+    by the encoding conversion machinery.)
+   </para>
+
+   <para>
+    The lesser problem is that the <filename>contrib/tsearch2</> module
+    creates several functions that are improperly declared to return
+    <type>internal</> when they do not accept <type>internal</> arguments.
+    This breaks type safety for all functions using <type>internal</>
+    arguments.
+   </para>
+
+   <para>
+    It is strongly recommended that all installations repair these errors,
+    either by initdb or by following the manual repair procedure given
+    below.  The errors at least allow unprivileged database users to crash
+    their server process, and might allow unprivileged users to gain the
+    privileges of a database superuser.
+   </para>
+
+   <para>
+    If you wish not to do an initdb, perform the same manual repair
+    procedures shown in the <link linkend="release-7-4-8">7.4.8 release
+    notes</link>.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Change encoding function signature to prevent
+misuse</para></listitem>
+<listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
+<type>INTERNAL</> function results</para></listitem>
+<listitem><para>Guard against incorrect second parameter to
+<function>record_out</></para></listitem>
+<listitem><para>Repair ancient race condition that allowed a transaction to be
+seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
+than for other purposes</para>
+<para>This is an extremely serious bug since it could lead to apparent
+data inconsistencies being briefly visible to applications.</para></listitem>
+<listitem><para>Repair race condition between relation extension and
+VACUUM</para>
+<para>This could theoretically have caused loss of a page's worth of
+freshly-inserted data, although the scenario seems of very low probability.
+There are no known cases of it having caused more than an Assert failure.
+</para></listitem>
+<listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
+<para>
+The comparison code was wrong in the case where the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
+it will need to be <command>REINDEX</>ed after installing this update, because
+the fix corrects the sort order of column values.
+</para></listitem>
+<listitem><para>Fix <function>EXTRACT(EPOCH)</> for
+<type>TIME WITH TIME ZONE</> values</para></listitem>
+<listitem><para>Fix mis-display of negative fractional seconds in
+<type>INTERVAL</> values</para>
+<para>
+This error only occurred when the
+<literal>--enable-integer-datetimes</> configuration switch had been used.
+</para></listitem>
+<listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
+correctly (Neil)</para></listitem>
+<listitem><para>Still more 64-bit fixes for
+<filename>contrib/intagg</></para></listitem>
+<listitem><para>Prevent incorrect optimization of functions returning
+<type>RECORD</></para></listitem>
+<listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
+<listitem><para>Fix Borland makefile for libpq</para></listitem>
+<listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
+(Teodor)</para></listitem>
+<listitem><para>Make <command>pg_ctl</> check the PID found in
+<filename>postmaster.pid</> to see if it is still a live
+process</para></listitem>
+<listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
+by addition of dump timestamps</para></listitem>
+<listitem><para>Fix interaction between materializing holdable cursors and
+firing deferred triggers during transaction commit</para></listitem>
+<listitem><para>Fix memory leak in SQL functions returning pass-by-reference
+data types</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-2">
+  <title>Release 8.0.2</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-04-07</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.1.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.2</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.*.
+    This release updates the major version number of the
+    <productname>PostgreSQL</productname> libraries, so it might be
+    necessary to re-link some user applications if they cannot
+    find the properly-numbered shared library.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Increment the major version number of all interface
+libraries (Bruce)</para>
+<para>
+This should have been done in 8.0.0.  It is required so 7.4.X versions
+of PostgreSQL client applications, like <application>psql</>,
+can be used on the same machine as 8.0.X applications.  This might require
+re-linking user applications that use these libraries.
+</para></listitem>
+<listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
+<option>fsync_writethrough</> (Magnus, Bruce)</para>
+<para>
+This setting causes <productname>PostgreSQL</productname> to write through
+any disk-drive write cache when writing to WAL.
+This behavior was formerly called <option>fsync</>, but was
+renamed because it acts quite differently from <option>fsync</> on other
+platforms.
+</para>
+</listitem>
+<listitem><para>Enable the <varname>wal_sync_method</> setting of
+<option>open_datasync</> on Windows, and make it the default for that
+ platform (Magnus, Bruce)</para>
+<para>
+Because the default is no longer <option>fsync_writethrough</>,
+data loss is possible during a power failure if the disk drive has
+write caching enabled. To turn off the write cache on Windows,
+from the <application>Device Manager</>, choose the drive properties,
+then <literal>Policies</>.
+</para>
+</listitem>
+<listitem><para>New cache management algorithm <acronym>2Q</> replaces
+<acronym>ARC</> (Tom)</para>
+<para>
+This was done to avoid a pending US patent on <acronym>ARC</>.  The
+<acronym>2Q</> code might be a few percentage points slower than
+<acronym>ARC</> for some work loads.  A better cache management algorithm
+will appear in 8.1.
+</para></listitem>
+<listitem><para>Planner adjustments to improve behavior on freshly-created
+tables (Tom)</para></listitem>
+<listitem><para>Allow plpgsql to assign to an element of an array that is
+initially <literal>NULL</> (Tom)</para>
+<para>
+Formerly the array would remain <literal>NULL</>, but now it becomes a
+single-element array.  The main SQL engine was changed to handle
+<command>UPDATE</> of a null array value this way in 8.0, but the similar
+case in plpgsql was overlooked.
+</para>
+</listitem>
+<listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
+in plpython function bodies (Michael Fuhr)</para>
+<para>
+ This prevents syntax errors when plpython code is written on a Windows or
+ Mac client.
+</para>
+</listitem>
+<listitem><para>Allow SPI cursors to handle utility commands that return rows,
+such as <command>EXPLAIN</> (Tom)</para></listitem>
+<listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
+SET WITHOUT OIDS</> (Tom)</para></listitem>
+<listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
+(Neil)</para></listitem>
+<listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
+<listitem><para>Document the Windows-only <literal>register</> and
+<literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
+<listitem><para>Ensure operations done during backend shutdown are counted by
+statistics collector</para>
+<para>
+This is expected to resolve reports of <application>pg_autovacuum</>
+not vacuuming the system catalogs often enough &mdash; it was not being
+told about catalog deletions caused by temporary table removal during
+backend exit.
+</para></listitem>
+<listitem><para>Change the Windows default for configuration parameter
+<varname>log_destination</> to <option>eventlog</> (Magnus)</para>
+<para>
+By default, a server running on Windows will now send log output to the
+Windows event logger rather than standard error.
+</para></listitem>
+<listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
+<listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
+who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
+<listitem><para>Modify WAL log entries for <command>CREATE</> and
+<command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
+<para>This allows point-in-time recovery on a different machine with possibly
+different database location.  Note that <command>CREATE TABLESPACE</> still
+poses a hazard in such situations.
+</para></listitem>
+<listitem><para>Fix crash from a backend exiting with an open transaction
+that created a table and opened a cursor on it (Tom)</para></listitem>
+<listitem><para>Fix <function>array_map()</> so it can call PL functions
+(Tom)</para></listitem>
+<listitem><para>Several <filename>contrib/tsearch2</> and
+<filename>contrib/btree_gist</> fixes (Teodor)
+</para></listitem>
+<listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
+functions on some platforms (Marko Kreen)</para></listitem>
+<listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
+(Tom)</para></listitem>
+<listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
+(Michael)</para></listitem>
+<listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
+ecpg (Christof Petig)</para></listitem>
+<listitem><para>Do not use locale-aware versions of <function>upper()</>,
+<function>lower()</>, and <function>initcap()</> when the locale is
+<literal>C</> (Bruce)</para>
+<para>
+ This allows these functions to work on platforms that generate errors
+ for non-7-bit data when the locale is <literal>C</>.
+</para></listitem>
+<listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
+<listitem><para>Fix <function>to_date()</> to behave reasonably when
+<literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
+<listitem><para>Prevent <function>to_char(interval)</> from failing
+when given a zero-month interval (Tom)</para></listitem>
+<listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
+(Bruce)</para>
+<para>
+<function>date_trunc('week')</>
+returned the wrong year for the first few days of January in some years.
+</para></listitem>
+<listitem><para>Use the correct default mask length for class <literal>D</>
+addresses in <type>INET</> data types (Tom)</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0-1">
+  <title>Release 8.0.1</title>
+
+  <note>
+  <title>Release date</title>
+  <simpara>2005-01-31</simpara>
+  </note>
+
+  <para>
+   This release contains a variety of fixes from 8.0.0, including several
+   security-related issues.
+   For information about new features in the 8.0 major release, see
+   <xref linkend="release-8-0">.
+  </para>
+
+  <sect2>
+   <title>Migration to Version 8.0.1</title>
+
+   <para>
+    A dump/restore is not required for those running 8.0.0.
+   </para>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+<itemizedlist>
+<listitem><para>Disallow <command>LOAD</> to non-superusers</para>
+<para>
+On platforms that will automatically execute initialization functions of a
+shared library (this includes at least Windows and ELF-based Unixen),
+<command>LOAD</> can be used to make the server execute arbitrary code.
+Thanks to NGS Software for reporting this.</para></listitem>
+<listitem><para>Check that creator of an aggregate function has the right to
+execute the specified transition functions</para>
+<para>
+This oversight made it possible to bypass denial of EXECUTE
+permission on a function.</para></listitem>
+<listitem><para>Fix security and 64-bit issues in
+contrib/intagg</para></listitem>
+<listitem><para>Add needed STRICT marking to some contrib functions (Kris
+Jurka)</para></listitem>
+<listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
+many parameters (Neil)</para></listitem>
+<listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
+constraints in all cases</para></listitem>
+<listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
+<para>
+The result of the join was mistakenly supposed to be sorted the same as the
+left input.  This could not only deliver mis-sorted output to the user, but
+in case of nested merge joins could give outright wrong answers.
+</para></listitem>
+<listitem><para>Improve planning of grouped aggregate queries</para></listitem>
+<listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
+closes cursors created since the savepoint</para></listitem>
+<listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
+<listitem><para>Avoid SHGetSpecialFolderPath() on Windows
+(Magnus)</para></listitem>
+<listitem><para>Fix some problems in running pg_autovacuum as a Windows
+service (Dave Page)</para></listitem>
+<listitem><para>Multiple minor bug fixes in
+pg_dump/pg_restore</para></listitem>
+<listitem><para>Fix ecpg segfault with named structs used in
+typedefs (Michael)</para></listitem>
+</itemizedlist>
+
+  </sect2>
+ </sect1>
+
+ <sect1 id="release-8-0">
+  <title>Release 8.0</title>
+
+  <note>
+   <title>Release date</title>
+   <simpara>2005-01-19</simpara>
+  </note>
+
+  <sect2>
+   <title>Overview</title>
+
+   <para>
+    Major changes in this release:
+   </para>
+
+   <variablelist>
+    <varlistentry>
+     <term>
+      Microsoft Windows Native Server
+     </term>
+
+     <listitem>
+      <para>
+       This is the first <productname>PostgreSQL</productname> release
+       to run natively on <trademark class="registered">Microsoft Windows</> as
+       a server. It can run as a <productname>Windows</> service. This
+       release supports NT-based Windows releases like
+       <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
+       <productname>Windows 2003</>. Older releases like
+       <productname>Windows 95</>, <productname>Windows 98</>, and
+       <productname>Windows ME</> are not supported because these operating
+       systems do not have the infrastructure to support
+       <productname>PostgreSQL</productname>. A separate installer
+       project has been created to ease installation on
+       <productname>Windows</> &mdash; see <ulink
+       url="http://www.postgresql.org/ftp/win32/"></ulink>.
+      </para>
+
+      <para>
+       Although tested throughout our release cycle, the Windows port
+       does not have the benefit of years of use in production
+       environments that <productname>PostgreSQL</productname> has on
+       Unix platforms.  Therefore it should be treated with the same
+       level of caution as you would a new product.
+      </para>
+
+      <para>
+       Previous releases required the Unix emulation toolkit
+       <productname>Cygwin</> in order to run the server on Windows
+       operating systems.  <productname>PostgreSQL</productname> has
+       supported native clients on Windows for many years.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      Savepoints
+     </term>
+
+     <listitem>
+      <para>
+       Savepoints allow specific parts of a transaction to be aborted
+       without affecting the remainder of the transaction. Prior
+       releases had no such capability; there was no way to recover
+       from a statement failure within a transaction except by
+       aborting the whole transaction. This feature is valuable for
+       application writers who require error recovery within a
+       complex transaction.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      Point-In-Time Recovery
+     </term>
+
+     <listitem>
+      <para>
+       In previous releases there was no way to recover from disk
+       drive failure except to restore from a previous backup or use
+       a standby replication server.  Point-in-time recovery allows
+       continuous backup of the server.  You can recover either to
+       the point of failure or to some transaction in the past.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      Tablespaces
+     </term>
+
+     <listitem>
+      <para>
+       Tablespaces allow administrators to select different file systems
+       for storage of individual tables, indexes, and databases.
+       This improves performance and control over disk space
+       usage. Prior releases used <application>initlocation</> and
+       manual symlink management for such tasks.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      Improved Buffer Management, <command>CHECKPOINT</command>,
+      <command>VACUUM</command>
+     </term>
+
+     <listitem>
+      <para>
+       This release has a more intelligent buffer replacement strategy,
+       which will make better use of available shared buffers and
+       improve performance. The performance impact of vacuum and
+       checkpoints is also lessened.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      Change Column Types
+     </term>
+
+     <listitem>
+      <para>
+       A column's data type can now be changed with <command>ALTER
+       TABLE</command>.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+      New Perl Server-Side Language
+     </term>
+
+     <listitem>
+      <para>
+       A new version of the <application>plperl</> server-side language now
+       supports a persistent shared storage area, triggers, returning records
+       and arrays of records, and SPI calls to access the database.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>
+       Comma-separated-value (CSV) support in <command>COPY</command>
+     </term>
+
+     <listitem>
+      <para>
+       <command>COPY</command> can now read and write
+       comma-separated-value files. It has the flexibility to
+       interpret nonstandard quoting and separation characters too.
+      </para>
+     </listitem>
+    </varlistentry>
+
+   </variablelist>
+  </sect2>
+
+  <sect2>
+   <title>Migration to Version 8.0</title>
+
+   <para>
+    A dump/restore using <application>pg_dump</application> is
+    required for those wishing to migrate data from any previous
+    release.
+   </para>
+
+   <para>
+    Observe the following incompatibilities:
+   </para>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      In <option>READ COMMITTED</> serialization mode, volatile functions
+      now see the results of concurrent transactions committed up to the
+      beginning of each statement within the function, rather than up to the
+      beginning of the interactive command that called the function.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
+      use the snapshot of the calling query, and therefore do not see the
+      effects of actions taken after the calling query starts, whether in
+      their own transaction or other transactions.  Such a function must be
+      read-only, too, meaning that it cannot use any SQL commands other than
+      <command>SELECT</>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Nondeferred <option>AFTER</> triggers are now fired immediately
+      after completion of the triggering query, rather than upon
+      finishing the current interactive command. This makes a
+      difference when the triggering query occurred within a function:
+      the trigger is invoked before the function proceeds to its next
+      operation.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameters <varname>virtual_host</> and
+      <varname>tcpip_socket</> have been replaced with a more general
+      parameter <varname>listen_addresses</>. Also, the server now listens on
+      <literal>localhost</> by default, which eliminates the need for the
+      <literal>-i</> postmaster switch in many scenarios.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameters <varname>SortMem</> and
+      <varname>VacuumMem</> have been renamed to <varname>work_mem</>
+      and <varname>maintenance_work_mem</> to better reflect their
+      use. The original names are still supported in
+      <command>SET</command> and <command>SHOW</command>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameters <varname>log_pid</>,
+      <varname>log_timestamp</>, and <varname>log_source_port</> have been
+      replaced with a more general parameter <varname>log_line_prefix</>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>syslog</> has been
+      replaced with a more logical <varname>log_destination</> variable to
+      control the log output destination.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>log_statement</> has been
+      changed so it can selectively log just database modification or
+      data definition statements.  Server configuration parameter
+      <varname>log_duration</> now prints only when <varname>log_statement</>
+      prints the query.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Server configuration parameter <varname>max_expr_depth</> parameter has
+      been replaced with <varname>max_stack_depth</> which measures the
+      physical stack size rather than the expression nesting depth. This
+      helps prevent session termination due to stack overflow caused by
+      recursive functions.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The <function>length()</> function no longer counts trailing spaces in
+      <type>CHAR(n)</> values.
+     </para>
+    </listitem>
+
+   <listitem>
+    <para>
+     Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
+     integer, not the leftmost N bits as before.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     Updating an element or slice of a NULL array value now produces
+     a nonnull array result, namely an array containing
+     just the assigned-to positions.
+    </para>
+   </listitem>
+
+    <listitem>
+     <para>
+      Syntax checking of array input values has been tightened up
+      considerably. Junk that was previously allowed in odd places with
+      odd results now causes an error. Empty-string element values
+      must now be written as <literal>""</>, rather than writing nothing.
+      Also changed behavior with respect to whitespace surrounding
+      array elements: trailing whitespace is now ignored, for symmetry
+      with leading whitespace (which has always been ignored).
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Overflow in integer arithmetic operations is now detected and
+      reported as an error.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The arithmetic operators associated with the single-byte
+      <type>"char"</> data type have been removed.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The <function>extract()</> function (also called
+      <function>date_part</>) now returns the proper year for BC dates.
+      It previously returned one less than the correct year. The
+      function now also returns the proper values for millennium and
+      century.
+     </para>
+    </listitem>
+
+   <listitem>
+    <para>
+     <type>CIDR</> values now must have their nonmasked bits be zero.
+     For example, we no longer allow
+     <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
+     values should never have been accepted by
+     <productname>PostgreSQL</productname> and will now be rejected.
+    </para>
+   </listitem>
+
+    <listitem>
+     <para>
+      <command>EXECUTE</command> now returns a completion tag that
+      matches the executed statement.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>psql</>'s <command>\copy</> command now reads or
+      writes to the query's <literal>stdin/stdout</>, rather than
+      <application>psql</>'s <literal>stdin/stdout</>. The previous
+      behavior can be accessed via new
+      <option>pstdin</>/<option>pstdout</> parameters.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+     The JDBC client interface has been removed from the core
+     distribution, and is now hosted at <ulink url=
+     "http://jdbc.postgresql.org"></ulink>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+     The Tcl client interface has also been removed. There are several
+     Tcl interfaces now hosted at <ulink url=
+     "http://gborg.postgresql.org"></ulink>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The server now uses its own time zone database, rather than the
+      one supplied by the operating system. This will provide consistent
+      behavior across all platforms.  In most cases, there should be
+      little noticeable difference in time zone behavior, except that
+      the time zone names used by <command>SET</>/<command>SHOW</>
+      <varname>TimeZone</> might be different from what your platform provides.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      <application>Configure</>'s threading option no longer requires
+      users to run tests or edit configuration files; threading options
+      are now detected automatically.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Now that tablespaces have been implemented,
+      <application>initlocation</> has been removed.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The API for user-defined GiST indexes has been changed. The
+      Union and PickSplit methods are now passed a pointer to a
+      special <structname>GistEntryVector</structname> structure,
+      rather than a <type>bytea</type>.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+  </sect2>
+
+ <sect2>
+  <title>Deprecated Features</title>
+
+  <para>
+    Some aspects of <productname>PostgreSQL</productname>'s behavior
+    have been determined to be suboptimal. For the sake of backward
+    compatibility these have not been removed in 8.0, but they are
+    considered deprecated and will be removed in the next major
+    release.
+    </para>
+
+   <itemizedlist>
+    <listitem>
+     <para>
+      The 8.1 release will remove the <function>to_char()</> function
+      for intervals.
+     </para>
+    </listitem>
+
+     <listitem>
+      <para>
+       The server now warns of empty strings passed to
+       <type>oid</type>/<type>float4</type>/<type>float8</type> data
+       types, but continues to interpret them as zeroes as before.
+       In the next major release, empty strings will be considered
+       invalid input for these data types.
+      </para>
+     </listitem>
+
+    <listitem>
+     <para>
+      By default, tables in <productname>PostgreSQL</productname> 8.0
+      and earlier are created with <type>OID</>s. In the next release,
+      this will <emphasis>not</emphasis> be the case: to create a table
+      that contains <type>OID</>s, the <option>WITH OIDS</> clause must
+      be specified or the <varname>default_with_oids</varname>
+      configuration parameter must be set. Users are encouraged to
+      explicitly specify <option>WITH OIDS</> if their tables
+      require OIDs for compatibility with future releases of
+      <productname>PostgreSQL</productname>.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+  </sect2>
+
+  <sect2>
+   <title>Changes</title>
+
+   <para>
+    Below you will find a detailed account of the changes between
+    release 8.0 and the previous major release.
+   </para>
+
+   <sect3>
+    <title>Performance Improvements</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Support cross-data-type index usage (Tom)
+      </para>
+      <para>
+       Before this change, many queries would not use an index if the data
+       types did not match exactly. This improvement makes index usage more
+       intuitive and consistent.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New buffer replacement strategy that improves caching (Jan)
+      </para>
+      <para>
+       Prior releases used a least-recently-used (LRU) cache to keep
+       recently referenced pages in memory. The LRU algorithm
+       did not consider the number of times a specific cache entry was
+       accessed, so large table scans could force out useful cache pages.
+       The new cache algorithm uses four separate lists to track most
+       recently used and most frequently used cache pages and dynamically
+       optimize their replacement based on the work load. This should
+       lead to much more efficient use of the shared buffer cache.
+       Administrators who have tested shared buffer sizes in the past
+       should retest with this new cache replacement policy.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add subprocess to write dirty buffers periodically to reduce
+       checkpoint writes (Jan)
+      </para>
+      <para>
+       In previous releases, the checkpoint process, which runs every few
+       minutes, would write all dirty buffers to the operating system's
+       buffer cache then flush all dirty operating system buffers to
+       disk. This resulted in a periodic spike in disk usage that often
+       hurt performance. The new code uses a background writer to trickle
+       disk writes at a steady pace so checkpoints have far fewer dirty
+       pages to write to disk. Also, the new code does not issue a global
+       <function>sync()</> call, but instead <function>fsync()</>s just
+       the files written since the last checkpoint. This should improve
+       performance and minimize degradation during checkpoints.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add ability to prolong vacuum to reduce performance impact (Jan)
+      </para>
+      <para>
+       On busy systems, <command>VACUUM</command> performs many I/O
+       requests which can hurt performance for other users. This
+       release allows you to slow down <command>VACUUM</command> to
+       reduce its impact on other users, though this increases the
+       total duration of <command>VACUUM</command>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
+      </para>
+      <para>
+       This improves the way indexes are scanned when many duplicate
+       values exist in the index.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use dynamically-generated table size estimates while planning (Tom)
+      </para>
+      <para>
+       Formerly the planner estimated table sizes using the values seen
+       by the last <command>VACUUM</command> or <command>ANALYZE</command>,
+       both as to physical table size (number of pages) and number of rows.
+       Now, the current physical table size is obtained from the kernel,
+       and the number of rows is estimated by multiplying the table size
+       by the row density (rows per page) seen by the last
+       <command>VACUUM</command> or <command>ANALYZE</command>.  This should
+       produce more reliable estimates in cases where the table size has
+       changed significantly since the last housekeeping command.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improved index usage with <literal>OR</> clauses (Tom)
+      </para>
+      <para>
+       This allows the optimizer to use indexes in statements with many OR
+       clauses that would not have been indexed in the past.  It can also use
+       multi-column indexes where the first column is specified and the second
+       column is part of an <literal>OR</> clause.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve matching of partial index clauses (Tom)
+      </para>
+      <para>
+       The server is now smarter about using partial indexes in queries
+       involving complex <option>WHERE</> clauses.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve performance of the GEQO optimizer (Tom)
+      </para>
+      <para>
+       The GEQO optimizer is used to plan queries involving many tables (by
+       default, twelve or more). This release speeds up the way queries are
+       analyzed to decrease time spent in optimization.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Miscellaneous optimizer improvements
+      </para>
+      <para>
+       There is not room here to list all the minor improvements made, but
+       numerous special cases work better than in prior releases.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve lookup speed for C functions (Tom)
+      </para>
+      <para>
+       This release uses a hash table to lookup information for dynamically
+       loaded C functions. This improves their speed so they perform nearly as
+       quickly as functions that are built into the server executable.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add type-specific <command>ANALYZE</command> statistics
+       capability (Mark Cave-Ayland)
+      </para>
+      <para>
+       This feature allows more flexibility in generating statistics
+       for nonstandard data types.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <command>ANALYZE</command> now collects statistics for
+       expression indexes (Tom)
+      </para>
+      <para>
+       Expression indexes (also called functional indexes) allow users to
+       index not just columns but the results of expressions and function
+       calls. With this release, the optimizer can gather and use statistics
+       about the contents of expression indexes.  This will greatly improve
+       the quality of planning for queries in which an expression index is
+       relevant.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New two-stage sampling method for <command>ANALYZE</command>
+       (Manfred Koizar)
+      </para>
+      <para>
+       This gives better statistics when the density of valid rows is very
+       different in different regions of a table.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Speed up <command>TRUNCATE</command> (Tom)
+      </para>
+      <para>
+       This buys back some of the performance loss observed in 7.4, while still
+       keeping <command>TRUNCATE</command> transaction-safe.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Server Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add WAL file archiving and point-in-time recovery (Simon Riggs)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add tablespaces so admins can control disk layout (Gavin)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add a built-in log rotation program (Andreas Pflug)
+      </para>
+      <para>
+       It is now possible to log server messages conveniently without
+       relying on either <application>syslog</> or an external log
+       rotation program.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add new read-only server configuration parameters to show server
+       compile-time settings: <varname>block_size</>,
+       <varname>integer_datetimes</>, <varname>max_function_args</>,
+       <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
+       <literal>all</> remove special meaning of these terms in
+       <filename>pg_hba.conf</> (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use clearer IPv6 name <literal>::1/128</> for
+       <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Rename server configuration parameters <varname>SortMem</> and
+       <varname>VacuumMem</> to <varname>work_mem</> and
+       <varname>maintenance_work_mem</> (Old names still supported) (Tom)
+      </para>
+      <para>
+       This change was made to clarify that bulk operations such as index and
+       foreign key creation use <varname>maintenance_work_mem</>, while
+       <varname>work_mem</> is for workspaces used during query execution.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow logging of session disconnections using server configuration
+       <varname>log_disconnections</> (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add new server configuration parameter <varname>log_line_prefix</> to
+       allow control of information emitted in each log line (Andrew)
+      </para>
+      <para>
+       Available information includes user name, database name, remote IP
+       address, and session start time.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove server configuration parameters <varname>log_pid</>,
+       <varname>log_timestamp</>, <varname>log_source_port</>; functionality
+       superseded by <varname>log_line_prefix</> (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
+       parameters with a unified <varname>listen_addresses</> parameter
+       (Andrew, Tom)
+      </para>
+      <para>
+       <varname>virtual_host</> could only specify a single IP address to
+       listen on.  <varname>listen_addresses</> allows multiple addresses
+       to be specified.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Listen on localhost by default, which eliminates the need for the
+       <option>-i</> postmaster switch in many scenarios (Andrew)
+      </para>
+      <para>
+       Listening on localhost (<literal>127.0.0.1</>) opens no new
+       security holes but allows configurations like Windows and JDBC,
+       which do not support local sockets, to work without special
+       adjustments.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <varname>syslog</> server configuration parameter, and add more
+       logical <varname>log_destination</> variable to control log output
+       location (Magnus)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change server configuration parameter <varname>log_statement</> to take
+       values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
+       <varname>none</> to select which queries are logged (Bruce)
+      </para>
+      <para>
+       This allows administrators to log only data definition changes or
+       only data modification statements.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Some logging-related configuration parameters could formerly be adjusted
+       by ordinary users, but only in the <quote>more verbose</> direction.
+       They are now treated more strictly: only superusers can set them.
+       However, a superuser can use <command>ALTER USER</> to provide per-user
+       settings of these values for non-superusers.  Also, it is now possible
+       for superusers to set values of superuser-only configuration parameters
+       via <literal>PGOPTIONS</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow configuration files to be placed outside the data directory (mlw)
+      </para>
+      <para>
+       By default, configuration files are kept in the cluster's top directory.
+       With this addition, configuration files can be placed outside the
+       data directory, easing administration.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Plan prepared queries only when first executed so constants can be
+       used for statistics (Oliver Jowett)
+      </para>
+      <para>
+       Prepared statements plan queries once and execute them many
+       times. While prepared queries avoid the overhead of re-planning
+       on each use, the quality of the plan suffers from not knowing the exact
+       parameters to be used in the query.  In this release, planning of
+       unnamed prepared statements is delayed until the first execution,
+       and the actual parameter values of that execution are used as
+       optimization hints.  This allows use of out-of-line parameter passing
+       without incurring a performance penalty.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>DECLARE CURSOR</command> to take parameters
+       (Oliver Jowett)
+      </para>
+      <para>
+       It is now useful to issue <command>DECLARE CURSOR</command> in a
+       <function>Parse</> message with parameters. The parameter values
+       sent at <function>Bind</> time will be substituted into the
+       execution of the cursor's query.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix hash joins and aggregates of <type>inet</type> and
+       <type>cidr</type> data types (Tom)
+      </para>
+      <para>
+       Release 7.4 handled hashing of mixed <type>inet</type> and
+       <type>cidr</type> values incorrectly.  (This bug did not exist
+       in prior releases because they wouldn't try to hash either
+       data type.)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <varname>log_duration</> print only when <varname>log_statement</>
+       prints the query (Ed L.)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Query Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add savepoints (nested transactions) (Alvaro)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Unsupported isolation levels are now accepted and promoted to the
+       nearest supported level (Peter)
+      </para>
+      <para>
+       The SQL specification states that if a database doesn't support a
+       specific isolation level, it should use the next more restrictive level.
+       This change complies with that recommendation.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>BEGIN WORK</command> to specify transaction
+       isolation levels like <command>START TRANSACTION</command> does
+       (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix table permission checking for cases in which rules generate
+       a query type different from the originally submitted query (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
+       David Fetter)
+      </para>
+      <para>
+       In previous releases, because single quotes had to be used to
+       quote a function's body, the use of single quotes inside the
+       function text required use of two single quotes or other error-prone
+       notations. With this release we add the ability to use "dollar
+       quoting" to quote a block of text.  The ability to use different
+       quoting delimiters at different nesting levels greatly simplifies
+       the task of quoting correctly, especially in complex functions.
+       Dollar quoting can be used anywhere quoted text is needed.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
+      </para>
+      <para>
+       <option>CASE</> no longer evaluates the tested expression multiple
+       times. This has benefits when the expression is complex or is
+       volatile.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Test <option>HAVING</> before computing target list of an
+       aggregate query (Tom)
+      </para>
+      <para>
+       Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
+       ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
+       could fail with divide-by-zero.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Replace <varname>max_expr_depth</> parameter with
+       <varname>max_stack_depth</> parameter, measured in kilobytes of stack
+       size (Tom)
+      </para>
+      <para>
+      This gives us a fairly bulletproof defense against crashing due to
+      runaway recursive functions. Instead of measuring the depth of expression
+      nesting, we now directly measure the size of the execution stack.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow arbitrary row expressions (Tom)
+      </para>
+      <para>
+       This release allows SQL expressions to contain arbitrary composite
+       types, that is, row values. It also allows functions to more easily
+       take rows as arguments and return row values.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
+       in row and subselect comparisons (Fabien Coelho)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Avoid locale-specific case conversion of basic ASCII letters in
+       identifiers and keywords (Tom)
+      </para>
+      <para>
+       This solves the <quote>Turkish problem</> with mangling of words
+       containing <literal>I</> and  <literal>i</>.  Folding of characters
+       outside the 7-bit-ASCII set is still locale-aware.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve syntax error reporting (Fabien, Tom)
+      </para>
+      <para>
+       Syntax error reports are more useful than before.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change <command>EXECUTE</command> to return a completion tag
+       matching the executed statement (Kris Jurka)
+      </para>
+      <para>
+       Previous releases return an <command>EXECUTE</command> tag for
+       any <command>EXECUTE</command> call. In this release, the tag
+       returned will reflect the command executed.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
+      </para>
+      <para>
+       Such a clause makes no logical sense, but in some cases the rule
+       decompiler formerly produced this syntax.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Object Manipulation Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Add <command>COMMENT ON</> for casts, conversions, languages,
+       operator classes, and large objects (Christopher)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add new server configuration parameter <varname>default_with_oids</> to
+       control whether tables are created with <type>OID</>s by default (Neil)
+      </para>
+      <para>
+       This allows administrators to control whether <command>CREATE
+       TABLE</command> commands create tables with or without <type>OID</>
+       columns by default.  (Note: the current factory default setting for
+       <varname>default_with_oids</> is <literal>TRUE</>, but the default
+       will become <literal>FALSE</> in future releases.)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
+       <command>CREATE TABLE AS</command> (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
+       column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
+       (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow composite types as table columns (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>ALTER ... ADD COLUMN</> with defaults and
+       <option>NOT NULL</> constraints; works per SQL spec (Rod)
+      </para>
+      <para>
+       It is now possible for <option>ADD COLUMN</> to create a column
+       that is not initially filled with NULLs, but with a specified
+       default value.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
+      </para>
+      <para>
+       It is now possible to alter a column's data type without dropping
+       and re-adding the column.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow multiple <command>ALTER</> actions in a single <command>ALTER
+       TABLE</command> command (Rod)
+      </para>
+      <para>
+       This is particularly useful for <command>ALTER</> commands that
+       rewrite the table (which include <option>ALTER COLUMN TYPE</> and
+       <option>ADD COLUMN</> with a default). By grouping
+       <command>ALTER</> commands together, the table need be rewritten
+       only once.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
+       columns (Tom)
+      </para>
+      <para>
+       This falls out from the new capability of specifying defaults for new
+       columns.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow changing the owners of aggregates, conversions, databases,
+       functions, operators, operator classes, schemas, types, and tablespaces
+       (Christopher, Euler Taveira de Oliveira)
+      </para>
+      <para>
+       Previously this required modifying the system tables directly.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow temporary object creation to be limited to <option>SECURITY
+       DEFINER</> functions (Sean Chittenden)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
+      </para>
+      <para>
+       Prior to this release, there was no way to clear an auto-cluster
+       specification except to modify the system tables.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Constraint/Index/<type>SERIAL</> names are now
+       <replaceable>table_column_type</>
+       with numbers appended to guarantee uniqueness within the schema
+       (Tom)
+      </para>
+      <para>
+       The SQL specification states that such names should be unique
+       within a schema.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>pg_get_serial_sequence()</> to return a
+       <type>SERIAL</> column's sequence name (Christopher)
+      </para>
+      <para>
+       This allows automated scripts to reliably find the <type>SERIAL</>
+       sequence name.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Warn when primary/foreign key data type mismatch requires costly lookup
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New <command>ALTER INDEX</> command to allow moving of indexes
+       between tablespaces (Gavin)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <command>ALTER TABLE OWNER</> change dependent sequence
+       ownership too (Alvaro)
+      </para>
+     </listitem>
+
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Utility Command Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Allow <command>CREATE SCHEMA</command> to create triggers,
+       indexes, and sequences (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
+       Coelho)
+      </para>
+      <para>
+       This allows <option>ALSO</> to be added to rule creation to contrast it with
+       <option>INSTEAD</> rules.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
+      </para>
+      <para>
+       This allows the <command>LOCK</command> command to fail if it
+       would have to wait for the requested lock.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <command>COPY</command> to read and write
+       comma-separated-value (CSV) files (Andrew, Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Generate error if the <command>COPY</command> delimiter and NULL
+       string conflict (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <command>GRANT</command>/<command>REVOKE</command> behavior
+       follows the SQL spec more closely
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Avoid locking conflict between <command>CREATE INDEX</command>
+       and <command>CHECKPOINT</command> (Tom)
+      </para>
+      <para>
+       In 7.3 and 7.4, a long-running B-tree index build could block concurrent
+       <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
+       WAL log could not be recycled.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Database-wide <command>ANALYZE</command> does not hold locks
+       across tables (Tom)
+      </para>
+      <para>
+       This reduces the potential for deadlocks against other backends
+       that want exclusive locks on tables.  To get the benefit of this
+       change, do not execute database-wide <command>ANALYZE</command>
+       inside a transaction block (<command>BEGIN</command> block); it
+       must be able to commit and start a new transaction for each
+       table.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <command>REINDEX</command> does not exclusively lock the index's
+       parent table anymore
+      </para>
+      <para>
+       The index itself is still exclusively locked, but readers of the
+       table can continue if they are not using the particular index
+       being rebuilt.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Erase MD5 user passwords when a user is renamed (Bruce)
+      </para>
+      <para>
+       <productname>PostgreSQL</productname> uses the user name as salt
+       when encrypting passwords via MD5. When a user's name is changed,
+       the salt will no longer match the stored MD5 password, so the
+       stored password becomes useless.  In this release a notice is
+       generated and the password is cleared.  A new password must then
+       be assigned if the user is to be able to log in with a password.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
+      </para>
+      <para>
+       Windows does not have a <literal>kill</> command to send signals to
+       backends so this capability was added to <application>pg_ctl</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Information schema improvements
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>--pwfile</> option to
+       <application>initdb</application> so the initial password can be
+       set by GUI tools (Magnus)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Detect locale/encoding mismatch in
+       <application>initdb</application> (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>register</> command to <application>pg_ctl</> to
+       register Windows operating system service (Dave Page)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Data Type and Function Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       More complete support for composite types (row types)  (Tom)
+      </para>
+      <para>
+       Composite values can be used in many places where only scalar values
+       worked before.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Reject nonrectangular array values as erroneous (Joe)
+      </para>
+      <para>
+       Formerly, <function>array_in</> would silently build a
+       surprising result.
+      </para>
+     </listitem>
+
+      <listitem>
+       <para>
+        Overflow in integer arithmetic operations is now detected (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        The arithmetic operators associated with the single-byte
+        <type>"char"</> data type have been removed.
+       </para>
+       <para>
+        Formerly, the parser would select these operators in many situations
+        where an <quote>unable to select an operator</> error would be more
+        appropriate, such as <literal>null * null</>.  If you actually want
+        to do arithmetic on a <type>"char"</> column, you can cast it to
+        integer explicitly.
+       </para>
+      </listitem>
+
+     <listitem>
+       <para>
+        Syntax checking of array input values considerably tightened up (Joe)
+       </para>
+      <para>
+        Junk that was previously allowed in odd places with odd results
+        now causes an <literal>ERROR</>, for example, non-whitespace
+        after the closing right brace.
+       </para>
+     </listitem>
+
+     <listitem>
+       <para>
+        Empty-string array element values must now be written as
+        <literal>""</>, rather than writing nothing (Joe)
+       </para>
+      <para>
+        Formerly, both ways of writing an empty-string element value were
+        allowed, but now a quoted empty string is required.  The case where
+        nothing at all appears will probably be considered to be a NULL
+        element value in some future release.
+       </para>
+     </listitem>
+
+     <listitem>
+       <para>
+        Array element trailing whitespace is now ignored (Joe)
+       </para>
+      <para>
+        Formerly leading whitespace was ignored, but trailing whitespace
+        between an element value and the delimiter or right brace was
+        significant.  Now trailing whitespace is also ignored.
+       </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Emit array values with explicit array bounds when lower bound is not one
+       (Joe)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <function>netmask</> and <function>hostmask</> functions
+       return maximum-length mask length (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change factorial function to return <type>numeric</type> (Gavin)
+      </para>
+      <para>
+       Returning <type>numeric</type> allows the factorial function to
+       work for a wider range of input values.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <function>to_char</>/<function>to_date()</> date conversion
+       improvements (Kurt Roeckx, Fabien Coelho)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <function>length()</> disregard trailing spaces in
+       <type>CHAR(n)</> (Gavin)
+      </para>
+      <para>
+       This change was made to improve consistency: trailing spaces are
+       semantically insignificant in <type>CHAR(n)</> data, so they
+       should not be counted by <function>length()</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Warn about empty string being passed to
+       <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
+      </para>
+      <para>
+       8.1 will throw an error instead.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow leading or trailing whitespace in
+       <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
+       input routines
+       (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Better support for IEEE <literal>Infinity</> and <literal>NaN</>
+       values in <type>float4</type>/<type>float8</type> (Neil)
+      </para>
+      <para>
+       These should now work on all platforms that support IEEE-compliant
+       floating point arithmetic.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix <function>to_char</function> for <literal>1 BC</>
+       (previously it returned <literal>1 AD</>) (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix <function>date_part(year)</> for BC dates (previously it
+       returned one less than the correct year) (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix <function>date_part()</> to return the proper millennium and
+       century (Fabien Coelho)
+      </para>
+      <para>
+       In previous versions, the century and millennium results had a wrong
+       number and started in the wrong year, as compared to standard
+       reckoning of such things.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>ceiling()</> as an alias for <function>ceil()</>,
+       and <function>power()</> as an alias for <function>pow()</> for
+       standards compliance (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change <function>ln()</>, <function>log()</>,
+       <function>power()</>, and <function>sqrt()</> to emit the correct
+       <literal>SQLSTATE</> error codes for certain error conditions, as
+       specified by SQL:2003 (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>generate_series()</> functions to simplify working
+       with numeric sets (Joe)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Fix <function>upper/lower/initcap()</> functions to work with
+       multibyte encodings (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add boolean and bitwise integer <option>AND</>/<option>OR</>
+       aggregates (Fabien Coelho)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New session information functions to return network addresses for client
+       and server (Sean Chittenden)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add function to determine the area of a closed path (Sean Chittenden)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add function to send cancel request to other backends (Magnus)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <type>interval</> plus <type>datetime</> operators (Tom)
+      </para>
+      <para>
+       The reverse ordering, <type>datetime</> plus <type>interval</>,
+       was already supported, but both are required by the SQL standard.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Casting an integer to <type>BIT(N)</> selects the rightmost N bits
+       of the integer
+       (Tom)
+      </para>
+      <para>
+       In prior releases, the leftmost N bits were selected, but this was
+       deemed unhelpful, not to mention inconsistent with casting from bit
+       to int.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Require <type>CIDR</> values to have all nonmasked bits be zero
+       (Kevin Brintnall)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Server-Side Language Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       In <literal>READ COMMITTED</> serialization mode, volatile functions
+       now see the results of concurrent transactions committed up to the
+       beginning of each statement within the function, rather than up to the
+       beginning of the interactive command that called the function.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
+       use the snapshot of the calling query, and therefore do not see the
+       effects of actions taken after the calling query starts, whether in
+       their own transaction or other transactions.  Such a function must be
+       read-only, too, meaning that it cannot use any SQL commands other than
+       <command>SELECT</>.  There is a considerable performance gain from
+       declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
+       rather than <literal>VOLATILE</>.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Nondeferred <option>AFTER</> triggers are now fired immediately
+       after completion of the triggering query, rather than upon
+       finishing the current interactive command. This makes a difference
+       when the triggering query occurred within a function: the trigger
+       is invoked before the function proceeds to its next operation. For
+       example, if a function inserts a new row into a table, any
+       nondeferred foreign key checks occur before proceeding with the
+       function.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
+      </para>
+      <para>
+       This allows better documentation of functions.  Whether the names
+       actually do anything depends on the specific function language
+       being used.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
+      </para>
+      <para>
+       This basically creates an automatic alias for each named parameter.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
+      </para>
+      <para>
+       This allows us to catch simple syntax errors sooner.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       More support for composite types (row and record variables) in PL/pgSQL
+      </para>
+      <para>
+       For example, it now works to pass a rowtype variable to another function
+       as a single variable.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Default values for PL/pgSQL variables can now reference previously
+       declared variables
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve parsing of PL/pgSQL FOR loops (Tom)
+      </para>
+      <para>
+       Parsing is now driven by presence of <literal>".."</> rather than
+       data type of <option>FOR</> variable. This makes no difference for
+       correct functions, but should result in more understandable error
+       messages when a mistake is made.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       In PL/Tcl, SPI commands are now run in subtransactions.  If an error
+       occurs, the subtransaction is cleaned up and the error is reported
+       as an ordinary Tcl error, which can be trapped with <literal>catch</>.
+       Formerly, it was not possible to catch such errors.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Accept <command>ELSEIF</> in PL/pgSQL (Neil)
+      </para>
+      <para>
+       Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
+       are accustomed to spelling this keyword <command>ELSEIF</>.
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title><application>psql</> Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Improve <application>psql</> information display about database
+       objects (Christopher)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <application>psql</> to display group membership in
+       <command>\du</> and <command>\dg</> (Markus Bertheau)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Prevent <application>psql</> <command>\dn</command> from showing
+       temporary schemas (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <application>psql</> to handle tilde user expansion for file
+       names (Zach Irmen)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <application>psql</> to display fancy prompts, including
+       color, via <application>readline</> (Reece Hart, Chet Ramey)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
+       fully (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Show the location of syntax errors (Fabien Coelho, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <command>CLUSTER</command> information to <application>psql</>
+       <command>\d</> display
+       (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Change <application>psql</> <command>\copy stdin/stdout</> to read
+       from command input/output (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>pstdin</>/<option>pstdout</> to read from
+       <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
+       Feit)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
+       (Bruce)
+      </para>
+      <para>
+       This allows a central file where global <application>psql</> startup commands can
+       be stored.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <application>psql</> <command>\d+</> indicate if the table
+       has an <type>OID</> column (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       On Windows, use binary mode in <application>psql</> when reading files so control-Z
+       is not seen as end-of-file
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <command>\dn+</> show permissions and description for schemas (Dennis
+       Bj&ouml;rklund)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow boolean settings to be set using upper or lower case (Michael Paesold)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title><application>pg_dump</> Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Use dependency information to improve the reliability of
+       <application>pg_dump</> (Tom)
+      </para>
+      <para>
+       This should solve the longstanding problems with related objects
+       sometimes being dumped in the wrong order.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
+      </para>
+      <para>
+       This should make it easier to identify changes between
+       dump files.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
+      </para>
+      <para>
+       This makes <application>pg_restore</>'s behavior similar to the
+       results of feeding a <application>pg_dump</> output script to
+       <application>psql</>. In most cases, ignoring errors and plowing
+       ahead is the most useful thing to do. Also added was a pg_restore
+       option to give the old behavior of exiting on an error.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       <application>pg_restore</> <option>-l</> display now includes
+       objects' schema names
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New begin/end markers in <application>pg_dump</> text output (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add start/stop times for
+       <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
+       (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow most <application>pg_dump</> options in
+       <application>pg_dumpall</> (Christopher)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Have <application>pg_dump</> use <command>ALTER OWNER</> rather
+       than <command>SET SESSION AUTHORIZATION</> by default
+       (Christopher)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>libpq Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>PQmbdsplen()</> which returns the display length
+       of a character (Tatsuo)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add thread locking to <application>SSL</> and
+       <application>Kerberos</> connections (Manfred Spraul)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
+       <function>PQoidStatus()</> to work on <command>EXECUTE</command>
+       commands (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>PQserverVersion()</> to provide more convenient
+       access to the server version number (Greg Sabino Mullane)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <function>PQprepare/PQsendPrepared()</> functions to support
+       preparing statements without necessarily specifying the data types
+       of their parameters (Abhijit Menon-Sen)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
+      </para>
+     </listitem>
+
+    </itemizedlist>
+   </sect3>
+
+
+   <sect3>
+    <title>Source Code Changes</title>
+    <itemizedlist>
+
+     <listitem>
+      <para>
+       Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Shell script commands converted to C versions for Windows support (Andrew)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Create an extension makefile framework (Fabien Coelho, Peter)
+      </para>
+      <para>
+       This simplifies the task of building extensions outside the original
+       source tree.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Support relocatable installations (Bruce)
+      </para>
+      <para>
+       Directory paths for installed files (such as the
+       <filename>/share</> directory) are now computed relative to the
+       actual location of the executables, so that an installation tree
+       can be moved to another place without reconfiguring and
+       rebuilding.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use <option>--with-docdir</> to choose installation location of documentation; also
+       allow <option>--infodir</> (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add <option>--without-docdir</> to prevent installation of documentation (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Upgrade to <application>DocBook</> V4.2 SGML (Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
+      </para>
+      <para>
+       This was done to make it easier for organizations to manage their
+       own copies of the <productname>PostgreSQL</productname>
+       <application>CVS</> repository. File version stamps from the master
+       repository will not get munged by checking into or out of a copied
+       repository.
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Clarify locking code (Manfred Koizar)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Buffer manager cleanup (Neil)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Decouple platform tests from CPU spinlock code (Bruce, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Add inlined test-and-set code on PA-RISC for <application>gcc</>
+       (ViSolve, Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improve i386 spinlock code (Manfred Spraul)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Clean up spinlock assembly code to avoid warnings from newer
+       <application>gcc</> releases (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove JDBC from source tree; now a separate project
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove the libpgtcl client interface; now a separate project
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       More accurately estimate memory and file descriptor usage (Tom)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Improvements to the Mac OS X startup scripts (Ray A.)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       New <function>fsync()</> test program (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Major documentation improvements (Neil, Peter)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <application>pg_encoding</application>; not needed
+       anymore
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <application>pg_id</application>; not needed anymore
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Remove <application>initlocation</application>; not needed
+       anymore
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Auto-detect thread flags (no more manual testing) (Bruce)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       Use Olson's public domain <application>timezone</> library (Magnus)
+      </para>
+     </listitem>
+
+     <listitem>
+      <para>
+       With threading enabled, use thread flags on Unixware for
+