<!-- doc/src/sgml/release-8.2.sgml -->
<!-- See header comment in release.sgml about typical markup -->

 <sect1 id="release-8-2-23">
  <title>Release 8.2.23</title>

  <formalpara>
  <title>Release date:</title>
  <para>2011-12-05</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.22.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <para>
   This is expected to be the last <productname>PostgreSQL</productname> release
   in the 8.2.X series.  Users are encouraged to update to a newer
   release branch soon.
  </para>

  <sect2>
   <title>Migration to Version 8.2.23</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </para>

   <para>
    However, a longstanding error was discovered in the definition of the
    <literal>information_schema.referential_constraints</literal> view.  If you
    rely on correct results from that view, you should replace its
    definition as explained in the first changelog item below.
   </para>

   <para>
    Also, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix bugs in <literal>information_schema.referential_constraints</literal> view
      (Tom Lane)
     </para>

     <para>
      This view was being insufficiently careful about matching the
      foreign-key constraint to the depended-on primary or unique key
      constraint.  That could result in failure to show a foreign key
      constraint at all, or showing it multiple times, or claiming that it
      depends on a different constraint than the one it really does.
     </para>

     <para>
      Since the view definition is installed by <application>initdb</application>,
      merely upgrading will not fix the problem.  If you need to fix this
      in an existing installation, you can (as a superuser) drop the
      <literal>information_schema</literal> schema then re-create it by sourcing
      <filename><replaceable>SHAREDIR</replaceable>/information_schema.sql</filename>.
      (Run <literal>pg_config --sharedir</literal> if you're uncertain where
      <replaceable>SHAREDIR</replaceable> is.)  This must be repeated in each database
      to be fixed.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix TOAST-related data corruption during <literal>CREATE TABLE dest AS
      SELECT * FROM src</literal> or <literal>INSERT INTO dest SELECT * FROM src</literal>
      (Tom Lane)
     </para>

     <para>
      If a table has been modified by <command>ALTER TABLE ADD COLUMN</command>,
      attempts to copy its data verbatim to another table could produce
      corrupt results in certain corner cases.
      The problem can only manifest in this precise form in 8.4 and later,
      but we patched earlier versions as well in case there are other code
      paths that could trigger the same bug.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix race condition during toast table access from stale syscache entries
      (Tom Lane)
     </para>

     <para>
      The typical symptom was transient errors like <quote>missing chunk
      number 0 for toast value NNNNN in pg_toast_2619</quote>, where the cited
      toast table would always belong to a system catalog.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve locale support in <type>money</type> type's input and output
      (Tom Lane)
     </para>

     <para>
      Aside from not supporting all standard
      <link linkend="guc-lc-monetary"><varname>lc_monetary</varname></link>
      formatting options, the input and output functions were inconsistent,
      meaning there were locales in which dumped <type>money</type> values could
      not be re-read.
     </para>
    </listitem>

    <listitem>
     <para>
      Don't let <link
      linkend="guc-transform-null-equals"><varname>transform_null_equals</varname></link>
      affect <literal>CASE foo WHEN NULL ...</literal> constructs
      (Heikki Linnakangas)
     </para>

     <para>
      <varname>transform_null_equals</varname> is only supposed to affect
      <literal>foo = NULL</literal> expressions written directly by the user, not
      equality checks generated internally by this form of <literal>CASE</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
      Change foreign-key trigger creation order to better support
      self-referential foreign keys (Tom Lane)
     </para>

     <para>
      For a cascading foreign key that references its own table, a row update
      will fire both the <literal>ON UPDATE</literal> trigger and the
      <literal>CHECK</literal> trigger as one event.  The <literal>ON UPDATE</literal>
      trigger must execute first, else the <literal>CHECK</literal> will check a
      non-final state of the row and possibly throw an inappropriate error.
      However, the firing order of these triggers is determined by their
      names, which generally sort in creation order since the triggers have
      auto-generated names following the convention
      <quote>RI_ConstraintTrigger_NNNN</quote>.  A proper fix would require
      modifying that convention, which we will do in 9.2, but it seems risky
      to change it in existing releases.  So this patch just changes the
      creation order of the triggers.  Users encountering this type of error
      should drop and re-create the foreign key constraint to get its
      triggers into the right order.
     </para>
    </listitem>

    <listitem>
     <para>
      Preserve blank lines within commands in <application>psql</application>'s command
      history (Robert Haas)
     </para>

     <para>
      The former behavior could cause problems if an empty line was removed
      from within a string literal, for example.
     </para>
    </listitem>

    <listitem>
     <para>
      Use the preferred version of <application>xsubpp</application> to build PL/Perl,
      not necessarily the operating system's main copy
      (David Wheeler and Alex Hunsaker)
     </para>
    </listitem>

    <listitem>
     <para>
      Honor query cancel interrupts promptly in <function>pgstatindex()</function>
      (Robert Haas)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure VPATH builds properly install all server header files
      (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Shorten file names reported in verbose error messages (Peter Eisentraut)
     </para>

     <para>
      Regular builds have always reported just the name of the C file
      containing the error message call, but VPATH builds formerly
      reported an absolute path name.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix interpretation of Windows timezone names for Central America
      (Tom Lane)
     </para>

     <para>
      Map <quote>Central America Standard Time</quote> to <literal>CST6</literal>, not
      <literal>CST6CDT</literal>, because DST is generally not observed anywhere in
      Central America.
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2011n
      for DST law changes in Brazil, Cuba, Fiji, Palestine, Russia, and Samoa;
      also historical corrections for Alaska and British East Africa.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-22">
  <title>Release 8.2.22</title>

  <formalpara>
  <title>Release date:</title>
  <para>2011-09-26</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.21.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <para>
   The <productname>PostgreSQL</productname> community will stop releasing updates
   for the 8.2.X release series in December 2011.
   Users are encouraged to update to a newer release branch soon.
  </para>

  <sect2>
   <title>Migration to Version 8.2.22</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix multiple bugs in GiST index page split processing (Heikki
      Linnakangas)
     </para>

     <para>
      The probability of occurrence was low, but these could lead to index
      corruption.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid possibly accessing off the end of memory in <command>ANALYZE</command>
      (Noah Misch)
     </para>

     <para>
      This fixes a very-low-probability server crash scenario.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix race condition in relcache init file invalidation (Tom Lane)
     </para>

     <para>
      There was a window wherein a new backend process could read a stale init
      file but miss the inval messages that would tell it the data is stale.
      The result would be bizarre failures in catalog accesses, typically
      <quote>could not read block 0 in file ...</quote> later during startup.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leak at end of a GiST index scan (Tom Lane)
     </para>

     <para>
      Commands that perform many separate GiST index scans, such as
      verification of a new GiST-based exclusion constraint on a table
      already containing many rows, could transiently require large amounts of
      memory due to this leak.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix performance problem when constructing a large, lossy bitmap
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix array- and path-creating functions to ensure padding bytes are
      zeroes (Tom Lane)
     </para>

     <para>
      This avoids some situations where the planner will think that
      semantically-equal constants are not equal, resulting in poor
      optimization.
     </para>
    </listitem>

    <listitem>
     <para>
      Work around gcc 4.6.0 bug that breaks WAL replay (Tom Lane)
     </para>

     <para>
      This could lead to loss of committed transactions after a server crash.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix dump bug for <literal>VALUES</literal> in a view (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Disallow <literal>SELECT FOR UPDATE/SHARE</literal> on sequences (Tom Lane)
     </para>

     <para>
      This operation doesn't work as expected and can lead to failures.
     </para>
    </listitem>

    <listitem>
     <para>
      Defend against integer overflow when computing size of a hash table (Tom
      Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix portability bugs in use of credentials control messages for
      <quote>peer</quote> authentication (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix typo in <function>pg_srand48</function> seed initialization (Andres Freund)
     </para>

     <para>
      This led to failure to use all bits of the provided seed.  This function
      is not used on most platforms (only those without <function>srandom</function>),
      and the potential security exposure from a less-random-than-expected
      seed seems minimal in any case.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid integer overflow when the sum of <literal>LIMIT</literal> and
      <literal>OFFSET</literal> values exceeds 2^63 (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
     <para>
      Add overflow checks to <type>int4</type> and <type>int8</type> versions of
      <function>generate_series()</function> (Robert Haas)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix trailing-zero removal in <function>to_char()</function> (Marti Raudsepp)
     </para>

     <para>
      In a format with <literal>FM</literal> and no digit positions
      after the decimal point, zeroes to the left of the decimal point could
      be removed incorrectly.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>pg_size_pretty()</function> to avoid overflow for inputs close to
      2^63 (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>psql</application>'s counting of script file line numbers during
      <literal>COPY</literal> from a different file (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_restore</application>'s direct-to-database mode for
      <varname>standard_conforming_strings</varname> (Tom Lane)
     </para>

     <para>
      <application>pg_restore</application> could emit incorrect commands when restoring
      directly to a database server from an archive file that had been made
      with <varname>standard_conforming_strings</varname> set to <literal>on</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix write-past-buffer-end and memory leak in <application>libpq</application>'s
      LDAP service lookup code (Albe Laurenz)
     </para>
    </listitem>

    <listitem>
     <para>
      In <application>libpq</application>, avoid failures when using nonblocking I/O
      and an SSL connection (Martin Pihlak, Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve libpq's handling of failures during connection startup
      (Tom Lane)
     </para>

     <para>
      In particular, the response to a server report of <function>fork()</function>
      failure during SSL connection startup is now saner.
     </para>
    </listitem>

    <listitem>
     <para>
      Make <application>ecpglib</application> write <type>double</type> values with 15 digits
      precision (Akira Kurosawa)
     </para>
    </listitem>

    <listitem>
     <para>
      Apply upstream fix for blowfish signed-character bug (CVE-2011-2483)
      (Tom Lane)
     </para>

     <para>
      <filename>contrib/pg_crypto</filename>'s blowfish encryption code could give
      wrong results on platforms where char is signed (which is most),
      leading to encrypted passwords being weaker than they should be.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leak in <filename>contrib/seg</filename> (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>pgstatindex()</function> to give consistent results for empty
      indexes (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow building with perl 5.14 (Alex Hunsaker)
     </para>
    </listitem>

    <listitem>
     <para>
      Update configure script's method for probing existence of system
      functions (Tom Lane)
     </para>

     <para>
      The version of autoconf we used in 8.3 and 8.2 could be fooled by
      compilers that perform link-time optimization.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix assorted issues with build and install file paths containing spaces
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2011i
      for DST law changes in Canada, Egypt, Russia, Samoa, and South Sudan.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-21">
  <title>Release 8.2.21</title>

  <formalpara>
  <title>Release date:</title>
  <para>2011-04-18</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.20.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.21</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Avoid potential deadlock during catalog cache initialization
      (Nikhil Sontakke)
     </para>

     <para>
      In some cases the cache loading code would acquire share lock on a
      system index before locking the index's catalog.  This could deadlock
      against processes trying to acquire exclusive locks in the other,
      more standard order.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix dangling-pointer problem in <literal>BEFORE ROW UPDATE</literal> trigger
      handling when there was a concurrent update to the target tuple
      (Tom Lane)
     </para>

     <para>
      This bug has been observed to result in intermittent <quote>cannot
      extract system attribute from virtual tuple</quote> failures while trying to
      do <literal>UPDATE RETURNING ctid</literal>.  There is a very small probability
      of more serious errors, such as generating incorrect index entries for
      the updated tuple.
     </para>
    </listitem>

    <listitem>
     <para>
      Disallow <command>DROP TABLE</command> when there are pending deferred trigger
      events for the table (Tom Lane)
     </para>

     <para>
      Formerly the <command>DROP</command> would go through, leading to
      <quote>could not open relation with OID nnn</quote> errors when the
      triggers were eventually fired.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/Python memory leak involving array slices (Daniel Popowich)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_restore</application> to cope with long lines (over 1KB) in
      TOC files (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Put in more safeguards against crashing due to division-by-zero
      with overly enthusiastic compiler optimization (Aurelien Jarno)
     </para>
    </listitem>

    <listitem>
     <para>
      Support use of dlopen() in FreeBSD and OpenBSD on MIPS (Tom Lane)
     </para>

     <para>
      There was a hard-wired assumption that this system function was not
      available on MIPS hardware on these systems.  Use a compile-time test
      instead, since more recent versions have it.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix compilation failures on HP-UX (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix path separator used by <application>pg_regress</application> on Cygwin
      (Andrew Dunstan)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2011f
      for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa,
      and Turkey; also historical corrections for South Australia, Alaska,
      and Hawaii.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-20">
  <title>Release 8.2.20</title>

  <formalpara>
  <title>Release date:</title>
  <para>2011-01-31</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.19.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.20</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Avoid failures when <command>EXPLAIN</command> tries to display a simple-form
      <literal>CASE</literal> expression (Tom Lane)
     </para>

     <para>
      If the <literal>CASE</literal>'s test expression was a constant, the planner
      could simplify the <literal>CASE</literal> into a form that confused the
      expression-display code, resulting in <quote>unexpected CASE WHEN
      clause</quote> errors.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix assignment to an array slice that is before the existing range
      of subscripts (Tom Lane)
     </para>

     <para>
      If there was a gap between the newly added subscripts and the first
      pre-existing subscript, the code miscalculated how many entries needed
      to be copied from the old array's null bitmap, potentially leading to
      data corruption or crash.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid unexpected conversion overflow in planner for very distant date
      values (Tom Lane)
     </para>

     <para>
      The <type>date</type> type supports a wider range of dates than can be
      represented by the <type>timestamp</type> types, but the planner assumed it
      could always convert a date to timestamp with impunity.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_restore</application>'s text output for large objects (BLOBs)
      when <varname>standard_conforming_strings</varname> is on (Tom Lane)
     </para>

     <para>
      Although restoring directly to a database worked correctly, string
      escaping was incorrect if <application>pg_restore</application> was asked for
      SQL text output and <varname>standard_conforming_strings</varname> had been
      enabled in the source database.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix erroneous parsing of <type>tsquery</type> values containing
      <literal>... &amp; !(subexpression) | ...</literal> (Tom Lane)
     </para>

     <para>
      Queries containing this combination of operators were not executed
      correctly.  The same error existed in <filename>contrib/intarray</filename>'s
      <type>query_int</type> type and <filename>contrib/ltree</filename>'s
      <type>ltxtquery</type> type.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix buffer overrun in <filename>contrib/intarray</filename>'s input function
      for the <type>query_int</type> type (Apple)
     </para>

     <para>
      This bug is a security risk since the function's return address could
      be overwritten.  Thanks to Apple Inc's security team for reporting this
      issue and supplying the fix.  (CVE-2010-4015)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug in <filename>contrib/seg</filename>'s GiST picksplit algorithm
      (Alexander Korotkov)
     </para>

     <para>
      This could result in considerable inefficiency, though not actually
      incorrect answers, in a GiST index on a <type>seg</type> column.
      If you have such an index, consider <command>REINDEX</command>ing it after
      installing this update.  (This is identical to the bug that was fixed in
      <filename>contrib/cube</filename> in the previous update.)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-19">
  <title>Release 8.2.19</title>

  <formalpara>
  <title>Release date:</title>
  <para>2010-12-16</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.18.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.19</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Force the default
      <link linkend="guc-wal-sync-method"><varname>wal_sync_method</varname></link>
      to be <literal>fdatasync</literal> on Linux (Tom Lane, Marti Raudsepp)
     </para>

     <para>
      The default on Linux has actually been <literal>fdatasync</literal> for many
      years, but recent kernel changes caused <productname>PostgreSQL</productname> to
      choose <literal>open_datasync</literal> instead.  This choice did not result
      in any performance improvement, and caused outright failures on
      certain filesystems, notably <literal>ext4</literal> with the
      <literal>data=journal</literal> mount option.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix assorted bugs in WAL replay logic for GIN indexes (Tom Lane)
     </para>

     <para>
      This could result in <quote>bad buffer id: 0</quote> failures or
      corruption of index contents during replication.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix recovery from base backup when the starting checkpoint WAL record
      is not in the same WAL segment as its redo point (Jeff Davis)
     </para>
    </listitem>

    <listitem>
     <para>
      Add support for detecting register-stack overrun on <literal>IA64</literal>
      (Tom Lane)
     </para>

     <para>
      The <literal>IA64</literal> architecture has two hardware stacks.  Full
      prevention of stack-overrun failures requires checking both.
     </para>
    </listitem>

    <listitem>
     <para>
      Add a check for stack overflow in <function>copyObject()</function> (Tom Lane)
     </para>

     <para>
      Certain code paths could crash due to stack overflow given a
      sufficiently complex query.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix detection of page splits in temporary GiST indexes (Heikki
      Linnakangas)
     </para>

     <para>
      It is possible to have a <quote>concurrent</quote> page split in a
      temporary index, if for example there is an open cursor scanning the
      index when an insertion is done.  GiST failed to detect this case and
      hence could deliver wrong results when execution of the cursor
      continued.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid memory leakage while <command>ANALYZE</command>'ing complex index
      expressions (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure an index that uses a whole-row Var still depends on its table
      (Tom Lane)
     </para>

     <para>
      An index declared like <literal>create index i on t (foo(t.*))</literal>
      would not automatically get dropped when its table was dropped.
     </para>
    </listitem>

    <listitem>
     <para>
      Do not <quote>inline</quote> a SQL function with multiple <literal>OUT</literal>
      parameters (Tom Lane)
     </para>

     <para>
      This avoids a possible crash due to loss of information about the
      expected result rowtype.
     </para>
    </listitem>

    <listitem>
     <para>
      Behave correctly if <literal>ORDER BY</literal>, <literal>LIMIT</literal>,
      <literal>FOR UPDATE</literal>, or <literal>WITH</literal> is attached to the
      <literal>VALUES</literal> part of <literal>INSERT ... VALUES</literal> (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix constant-folding of <literal>COALESCE()</literal> expressions (Tom Lane)
     </para>

     <para>
      The planner would sometimes attempt to evaluate sub-expressions that
      in fact could never be reached, possibly leading to unexpected errors.
     </para>
    </listitem>

    <listitem>
     <para>
      Add print functionality for <structname>InhRelation</structname> nodes (Tom Lane)
     </para>

     <para>
      This avoids a failure when <varname>debug_print_parse</varname> is enabled
      and certain types of query are executed.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect calculation of distance from a point to a horizontal
      line segment (Tom Lane)
     </para>

     <para>
      This bug affected several different geometric distance-measurement
      operators.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>PL/pgSQL</application>'s handling of <quote>simple</quote>
      expressions to not fail in recursion or error-recovery cases (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>PL/Python</application>'s handling of set-returning functions
      (Jan Urbanski)
     </para>

     <para>
      Attempts to call SPI functions within the iterator generating a set
      result would fail.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug in <filename>contrib/cube</filename>'s GiST picksplit algorithm
      (Alexander Korotkov)
     </para>

     <para>
      This could result in considerable inefficiency, though not actually
      incorrect answers, in a GiST index on a <type>cube</type> column.
      If you have such an index, consider <command>REINDEX</command>ing it after
      installing this update.
     </para>
    </listitem>

    <listitem>
     <para>
      Don't emit <quote>identifier will be truncated</quote> notices in
      <filename>contrib/dblink</filename> except when creating new connections
      (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potential coredump on missing public key in
      <filename>contrib/pgcrypto</filename> (Marti Raudsepp)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leak in <filename>contrib/xml2</filename>'s XPath query functions
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2010o
      for DST law changes in Fiji and Samoa;
      also historical corrections for Hong Kong.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-18">
  <title>Release 8.2.18</title>

  <formalpara>
  <title>Release date:</title>
  <para>2010-10-04</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.17.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.18</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Use a separate interpreter for each calling SQL userid in PL/Perl and
      PL/Tcl (Tom Lane)
     </para>

     <para>
      This change prevents security problems that can be caused by subverting
      Perl or Tcl code that will be executed later in the same session under
      another SQL user identity (for example, within a <literal>SECURITY
      DEFINER</literal> function).  Most scripting languages offer numerous ways that
      that might be done, such as redefining standard functions or operators
      called by the target function.  Without this change, any SQL user with
      Perl or Tcl language usage rights can do essentially anything with the
      SQL privileges of the target function's owner.
     </para>

     <para>
      The cost of this change is that intentional communication among Perl
      and Tcl functions becomes more difficult.  To provide an escape hatch,
      PL/PerlU and PL/TclU functions continue to use only one interpreter
      per session.  This is not considered a security issue since all such
      functions execute at the trust level of a database superuser already.
     </para>

     <para>
      It is likely that third-party procedural languages that claim to offer
      trusted execution have similar security issues.  We advise contacting
      the authors of any PL you are depending on for security-critical
      purposes.
     </para>

     <para>
      Our thanks to Tim Bunce for pointing out this issue (CVE-2010-3433).
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent possible crashes in <function>pg_get_expr()</function> by disallowing
      it from being called with an argument that is not one of the system
      catalog columns it's intended to be used with
      (Heikki Linnakangas, Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix Windows shared-memory allocation code
      (Tsutomu Yamada, Magnus Hagander)
     </para>

     <para>
      This bug led to the often-reported <quote>could not reattach to shared
      memory</quote> error message.  This is a back-patch of a fix that was
      applied to newer branches some time ago.
     </para>
    </listitem>

    <listitem>
     <para>
      Treat exit code 128 (<literal>ERROR_WAIT_NO_CHILDREN</literal>) as non-fatal on
      Windows (Magnus Hagander)
     </para>

     <para>
      Under high load, Windows processes will sometimes fail at startup with
      this error code.  Formerly the postmaster treated this as a panic
      condition and restarted the whole database, but that seems to be
      an overreaction.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible duplicate scans of <literal>UNION ALL</literal> member relations
      (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <quote>cannot handle unplanned sub-select</quote> error (Tom Lane)
     </para>

     <para>
      This occurred when a sub-select contains a join alias reference that
      expands into an expression containing another sub-select.
     </para>
    </listitem>

    <listitem>
     <para>
      Reduce PANIC to ERROR in some occasionally-reported btree failure cases,
      and provide additional detail in the resulting error messages
      (Tom Lane)
     </para>

     <para>
      This should improve the system's robustness with corrupted indexes.
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent show_session_authorization() from crashing within autovacuum
      processes (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Defend against functions returning setof record where not all the
      returned rows are actually of the same rowtype (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible failure when hashing a pass-by-reference function result
      (Tao Ma, Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Take care to fsync the contents of lockfiles (both
      <filename>postmaster.pid</filename> and the socket lockfile) while writing them
      (Tom Lane)
     </para>

     <para>
      This omission could result in corrupted lockfile contents if the
      machine crashes shortly after postmaster start.  That could in turn
      prevent subsequent attempts to start the postmaster from succeeding,
      until the lockfile is manually removed.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid recursion while assigning XIDs to heavily-nested
      subtransactions (Andres Freund, Robert Haas)
     </para>

     <para>
      The original coding could result in a crash if there was limited
      stack space.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <varname>log_line_prefix</varname>'s <literal>%i</literal> escape,
      which could produce junk early in backend startup (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible data corruption in <command>ALTER TABLE ... SET
      TABLESPACE</command> when archiving is enabled (Jeff Davis)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow <command>CREATE DATABASE</command> and <command>ALTER DATABASE ... SET
      TABLESPACE</command> to be interrupted by query-cancel (Guillaume Lelarge)
     </para>
    </listitem>

    <listitem>
     <para>
      In PL/Python, defend against null pointer results from
      <function>PyCObject_AsVoidPtr</function> and <function>PyCObject_FromVoidPtr</function>
      (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve <filename>contrib/dblink</filename>'s handling of tables containing
      dropped columns (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix connection leak after <quote>duplicate connection name</quote>
      errors in <filename>contrib/dblink</filename> (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <filename>contrib/dblink</filename> to handle connection names longer than
      62 bytes correctly (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Add <function>hstore(text, text)</function>
      function to <filename>contrib/hstore</filename> (Robert Haas)
     </para>

     <para>
      This function is the recommended substitute for the now-deprecated
      <literal>=&gt;</literal> operator.  It was back-patched so that future-proofed
      code can be used with older server versions.  Note that the patch will
      be effective only after <filename>contrib/hstore</filename> is installed or
      reinstalled in a particular database.  Users might prefer to execute
      the <command>CREATE FUNCTION</command> command by hand, instead.
     </para>
    </listitem>

    <listitem>
     <para>
      Update build infrastructure and documentation to reflect the source code
      repository's move from CVS to Git (Magnus Hagander and others)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2010l
      for DST law changes in Egypt and Palestine; also historical corrections
      for Finland.
     </para>

     <para>
      This change also adds new names for two Micronesian timezones:
      Pacific/Chuuk is now preferred over Pacific/Truk (and the preferred
      abbreviation is CHUT not TRUT) and Pacific/Pohnpei is preferred over
      Pacific/Ponape.
     </para>
    </listitem>

    <listitem>
     <para>
      Make Windows' <quote>N. Central Asia Standard Time</quote> timezone map to
      Asia/Novosibirsk, not Asia/Almaty (Magnus Hagander)
     </para>

     <para>
      Microsoft changed the DST behavior of this zone in the timezone update
      from KB976098. Asia/Novosibirsk is a better match to its new behavior.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-17">
  <title>Release 8.2.17</title>

  <formalpara>
  <title>Release date:</title>
  <para>2010-05-17</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.16.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.17</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Enforce restrictions in <literal>plperl</literal> using an opmask applied to
      the whole interpreter, instead of using <filename>Safe.pm</filename>
      (Tim Bunce, Andrew Dunstan)
     </para>

     <para>
      Recent developments have convinced us that <filename>Safe.pm</filename> is too
      insecure to rely on for making <literal>plperl</literal> trustable.  This
      change removes use of <filename>Safe.pm</filename> altogether, in favor of using
      a separate interpreter with an opcode mask that is always applied.
      Pleasant side effects of the change include that it is now possible to
      use Perl's <literal>strict</literal> pragma in a natural way in
      <literal>plperl</literal>, and that Perl's <literal>$a</literal> and <literal>$b</literal>
      variables work as expected in sort routines, and that function
      compilation is significantly faster.  (CVE-2010-1169)
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent PL/Tcl from executing untrustworthy code from
      <structname>pltcl_modules</structname> (Tom)
     </para>

     <para>
      PL/Tcl's feature for autoloading Tcl code from a database table
      could be exploited for trojan-horse attacks, because there was no
      restriction on who could create or insert into that table.  This change
      disables the feature unless <structname>pltcl_modules</structname> is owned by a
      superuser.  (However, the permissions on the table are not checked, so
      installations that really need a less-than-secure modules table can
      still grant suitable privileges to trusted non-superusers.)  Also,
      prevent loading code into the unrestricted <quote>normal</quote> Tcl
      interpreter unless we are really going to execute a <literal>pltclu</literal>
      function.  (CVE-2010-1170)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crash if a cache reset message is received during
      rebuild of a relcache entry (Heikki)
     </para>

     <para>
      This error was introduced in 8.2.16 while fixing a related failure.
     </para>
    </listitem>

    <listitem>
     <para>
      Do not allow an unprivileged user to reset superuser-only parameter
      settings (Alvaro)
     </para>

     <para>
      Previously, if an unprivileged user ran <literal>ALTER USER ... RESET
      ALL</literal> for himself, or <literal>ALTER DATABASE ... RESET ALL</literal> for
      a database he owns, this would remove all special parameter settings
      for the user or database, even ones that are only supposed to be
      changeable by a superuser.  Now, the <command>ALTER</command> will only
      remove the parameters that the user has permission to change.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid possible crash during backend shutdown if shutdown occurs
      when a <literal>CONTEXT</literal> addition would be made to log entries (Tom)
     </para>

     <para>
      In some cases the context-printing function would fail because the
      current transaction had already been rolled back when it came time
      to print a log message.
     </para>
    </listitem>

    <listitem>
     <para>
      Update PL/Perl's <filename>ppport.h</filename> for modern Perl versions
      (Andrew)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix assorted memory leaks in PL/Python (Andreas Freund, Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent infinite recursion in <application>psql</application> when expanding
      a variable that refers to itself (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>psql</application>'s <literal>\copy</literal> to not add spaces around
      a dot within <literal>\copy (select ...)</literal> (Tom)
     </para>

     <para>
      Addition of spaces around the decimal point in a numeric literal would
      result in a syntax error.
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure that <filename>contrib/pgstattuple</filename> functions respond to cancel
      interrupts promptly (Tatsuhito Kasahara)
     </para>
    </listitem>

    <listitem>
     <para>
      Make server startup deal properly with the case that
      <function>shmget()</function> returns <literal>EINVAL</literal> for an existing
      shared memory segment (Tom)
     </para>

     <para>
      This behavior has been observed on BSD-derived kernels including macOS.
      It resulted in an entirely-misleading startup failure complaining that
      the shared memory request size was too large.
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid possible crashes in syslogger process on Windows (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Deal more robustly with incomplete time zone information in the
      Windows registry (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Update the set of known Windows time zone names (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2010j
      for DST law changes in Argentina, Australian Antarctic, Bangladesh,
      Mexico, Morocco, Pakistan, Palestine, Russia, Syria, Tunisia;
      also historical corrections for Taiwan.
     </para>

     <para>
      Also, add <literal>PKST</literal> (Pakistan Summer Time) to the default set of
      timezone abbreviations.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-16">
  <title>Release 8.2.16</title>

  <formalpara>
  <title>Release date:</title>
  <para>2010-03-15</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.15.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.16</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Add new configuration parameter <varname>ssl_renegotiation_limit</varname> to
      control how often we do session key renegotiation for an SSL connection
      (Magnus)
     </para>

     <para>
      This can be set to zero to disable renegotiation completely, which may
      be required if a broken SSL library is used.  In particular, some
      vendors are shipping stopgap patches for CVE-2009-3555 that cause
      renegotiation attempts to fail.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible deadlock during backend startup (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crashes due to not handling errors during relcache reload
      cleanly (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crashes when trying to recover from a failure in
      subtransaction start (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix server memory leak associated with use of savepoints and a client
      encoding different from server's encoding (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect WAL data emitted during end-of-recovery cleanup of a GIST
      index page split (Yoichi Hirai)
     </para>

     <para>
      This would result in index corruption, or even more likely an error
      during WAL replay, if we were unlucky enough to crash during
      end-of-recovery cleanup after having completed an incomplete GIST
      insertion.
     </para>
    </listitem>

    <listitem>
     <para>
      Make <function>substring()</function> for <type>bit</type> types treat any negative
      length as meaning <quote>all the rest of the string</quote> (Tom)
     </para>

     <para>
      The previous coding treated only -1 that way, and would produce an
      invalid result value for other negative values, possibly leading to
      a crash (CVE-2010-0442).
     </para>
    </listitem>

    <listitem>
     <para>
      Fix integer-to-bit-string conversions to handle the first fractional
      byte correctly when the output bit width is wider than the given
      integer by something other than a multiple of 8 bits (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix some cases of pathologically slow regular expression matching (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix the <literal>STOP WAL LOCATION</literal> entry in backup history files to
      report the next WAL segment's name when the end location is exactly at a
      segment boundary (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix some more cases of temporary-file leakage (Heikki)
     </para>

     <para>
      This corrects a problem introduced in the previous minor release.
      One case that failed is when a plpgsql function returning set is
      called within another function's exception handler.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve constraint exclusion processing of boolean-variable cases,
      in particular make it possible to exclude a partition that has a
      <quote>bool_column = false</quote> constraint (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      When reading <filename>pg_hba.conf</filename> and related files, do not treat
      <literal>@something</literal> as a file inclusion request if the <literal>@</literal>
      appears inside quote marks; also, never treat <literal>@</literal> by itself
      as a file inclusion request (Tom)
     </para>

     <para>
      This prevents erratic behavior if a role or database name starts with
      <literal>@</literal>.  If you need to include a file whose path name
      contains spaces, you can still do so, but you must write
      <literal>@"/path to/file"</literal> rather than putting the quotes around
      the whole construct.
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent infinite loop on some platforms if a directory is named as
      an inclusion target in <filename>pg_hba.conf</filename> and related files
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible infinite loop if <function>SSL_read</function> or
      <function>SSL_write</function> fails without setting <varname>errno</varname> (Tom)
     </para>

     <para>
      This is reportedly possible with some Windows versions of
      <application>openssl</application>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>psql</application>'s <literal>numericlocale</literal> option to not
      format strings it shouldn't in latex and troff output formats (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <application>psql</application> return the correct exit status (3) when
      <literal>ON_ERROR_STOP</literal> and <literal>--single-transaction</literal> are
      both specified and an error occurs during the implied <command>COMMIT</command>
      (Bruce)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix plpgsql failure in one case where a composite column is set to NULL
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible failure when calling PL/Perl functions from PL/PerlU
      or vice versa (Tim Bunce)
     </para>
    </listitem>

    <listitem>
     <para>
      Add <literal>volatile</literal> markings in PL/Python to avoid possible
      compiler-specific misbehavior (Zdenek Kotala)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure PL/Tcl initializes the Tcl interpreter fully (Tom)
     </para>

     <para>
      The only known symptom of this oversight is that the Tcl
      <literal>clock</literal> command misbehaves if using Tcl 8.5 or later.
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent crash in <filename>contrib/dblink</filename> when too many key
      columns are specified to a <function>dblink_build_sql_*</function> function
      (Rushabh Lathia, Joe Conway)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix assorted crashes in <filename>contrib/xml2</filename> caused by sloppy
      memory management (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Make building of <filename>contrib/xml2</filename> more robust on Windows
      (Andrew)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix race condition in Windows signal handling (Radu Ilie)
     </para>

     <para>
      One known symptom of this bug is that rows in <structname>pg_listener</structname>
      could be dropped under heavy load.
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2010e
      for DST law changes in Bangladesh, Chile, Fiji, Mexico, Paraguay, Samoa.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-15">
  <title>Release 8.2.15</title>

  <formalpara>
  <title>Release date:</title>
  <para>2009-12-14</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.14.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.15</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.14,
    see <xref linkend="release-8-2-14"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Protect against indirect security threats caused by index functions
      changing session-local state (Gurjeet Singh, Tom)
     </para>

     <para>
      This change prevents allegedly-immutable index functions from possibly
      subverting a superuser's session (CVE-2009-4136).
     </para>
    </listitem>

    <listitem>
     <para>
      Reject SSL certificates containing an embedded null byte in the common
      name (CN) field (Magnus)
     </para>

     <para>
      This prevents unintended matching of a certificate to a server or client
      name during SSL validation (CVE-2009-4034).
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crash during backend-startup-time cache initialization (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent signals from interrupting <literal>VACUUM</literal> at unsafe times
      (Alvaro)
     </para>

     <para>
      This fix prevents a PANIC if a <literal>VACUUM FULL</literal> is canceled
      after it's already committed its tuple movements, as well as transient
      errors if a plain <literal>VACUUM</literal> is interrupted after having
      truncated the table.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crash due to integer overflow in hash table size
      calculation (Tom)
     </para>

     <para>
      This could occur with extremely large planner estimates for the size of
      a hashjoin's result.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix very rare crash in <type>inet</type>/<type>cidr</type> comparisons (Chris
      Mikkelson)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure that shared tuple-level locks held by prepared transactions are
      not ignored (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix premature drop of temporary files used for a cursor that is accessed
      within a subtransaction (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect logic for GiST index page splits, when the split depends
      on a non-first column of the index (Paul Ramsey)
     </para>
    </listitem>

    <listitem>
     <para>
      Don't error out if recycling or removing an old WAL file fails at the
      end of checkpoint (Heikki)
     </para>

     <para>
      It's better to treat the problem as non-fatal and allow the checkpoint
      to complete.  Future checkpoints will retry the removal.  Such problems
      are not expected in normal operation, but have been seen to be
      caused by misdesigned Windows anti-virus and backup software.
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure WAL files aren't repeatedly archived on Windows (Heikki)
     </para>

     <para>
      This is another symptom that could happen if some other process
      interfered with deletion of a no-longer-needed file.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PAM password processing to be more robust (Tom)
     </para>

     <para>
      The previous code is known to fail with the combination of the Linux
      <literal>pam_krb5</literal> PAM module with Microsoft Active Directory as the
      domain controller.  It might have problems elsewhere too, since it was
      making unjustified assumptions about what arguments the PAM stack would
      pass to it.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix processing of ownership dependencies during <literal>CREATE OR
      REPLACE FUNCTION</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug with calling <literal>plperl</literal> from <literal>plperlu</literal> or vice
      versa (Tom)
     </para>

     <para>
      An error exit from the inner function could result in crashes due to
      failure to re-select the correct Perl interpreter for the outer function.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix session-lifespan memory leak when a PL/Perl function is redefined
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure that Perl arrays are properly converted to
      <productname>PostgreSQL</productname> arrays when returned by a set-returning
      PL/Perl function (Andrew Dunstan, Abhijit Menon-Sen)
     </para>

     <para>
      This worked correctly already for non-set-returning functions.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix rare crash in exception processing in PL/Python (Peter)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure <application>psql</application>'s flex module is compiled with the correct
      system header definitions (Tom)
     </para>

     <para>
      This fixes build failures on platforms where
      <literal>--enable-largefile</literal> causes incompatible changes in the
      generated code.
     </para>
    </listitem>

    <listitem>
     <para>
      Make the postmaster ignore any <literal>application_name</literal> parameter in
      connection request packets, to improve compatibility with future libpq
      versions (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Update the timezone abbreviation files to match current reality (Joachim
      Wieland)
     </para>

     <para>
      This includes adding <literal>IDT</literal> and <literal>SGT</literal> to the default
      timezone abbreviation set.
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2009s
      for DST law changes in Antarctica, Argentina, Bangladesh, Fiji,
      Novokuznetsk, Pakistan, Palestine, Samoa, Syria; also historical
      corrections for Hong Kong.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-14">
  <title>Release 8.2.14</title>

  <formalpara>
  <title>Release date:</title>
  <para>2009-09-09</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.13.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.14</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you have any hash indexes on <type>interval</type> columns,
    you must <command>REINDEX</command> them after updating to 8.2.14.
    Also, if you are upgrading from a version earlier than 8.2.11,
    see <xref linkend="release-8-2-11"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Force WAL segment switch during <function>pg_start_backup()</function>
      (Heikki)
     </para>

     <para>
      This avoids corner cases that could render a base backup unusable.
     </para>
    </listitem>

    <listitem>
     <para>
      Disallow <command>RESET ROLE</command> and <command>RESET SESSION
      AUTHORIZATION</command> inside security-definer functions (Tom, Heikki)
     </para>

     <para>
      This covers a case that was missed in the previous patch that
      disallowed <command>SET ROLE</command> and <command>SET SESSION
      AUTHORIZATION</command> inside security-definer functions.
      (See CVE-2007-6600)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <command>LOAD</command> of an already-loaded loadable module
      into a no-op (Tom)
     </para>

     <para>
      Formerly, <command>LOAD</command> would attempt to unload and re-load the
      module, but this is unsafe and not all that useful.
     </para>
    </listitem>

    <listitem>
     <para>
      Disallow empty passwords during LDAP authentication (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix handling of sub-SELECTs appearing in the arguments of
      an outer-level aggregate function (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bugs associated with fetching a whole-row value from the
      output of a Sort or Materialize plan node (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Revert planner change that disabled partial-index and constraint
      exclusion optimizations when there were more than 100 clauses in
      an AND or OR list (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix hash calculation for data type <type>interval</type> (Tom)
     </para>

     <para>
      This corrects wrong results for hash joins on interval values.
      It also changes the contents of hash indexes on interval columns.
      If you have any such indexes, you must <command>REINDEX</command> them
      after updating.
     </para>
    </listitem>

    <listitem>
     <para>
      Treat <function>to_char(..., 'TH')</function> as an uppercase ordinal
      suffix with <literal>'HH'</literal>/<literal>'HH12'</literal> (Heikki)
     </para>

     <para>
      It was previously handled as <literal>'th'</literal> (lowercase).
     </para>
    </listitem>

    <listitem>
     <para>
      Fix overflow for <literal>INTERVAL '<replaceable>x</replaceable> ms'</literal>
      when <replaceable>x</replaceable> is more than 2 million and integer
      datetimes are in use (Alex Hunsaker)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix calculation of distance between a point and a line segment (Tom)
     </para>

     <para>
      This led to incorrect results from a number of geometric operators.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <type>money</type> data type to work in locales where currency
      amounts have no fractional digits, e.g. Japan (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Properly round datetime input like
      <literal>00:12:57.9999999999999999999999999999</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix poor choice of page split point in GiST R-tree operator classes
      (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid performance degradation in bulk inserts into GIN indexes
      when the input values are (nearly) in sorted order (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Correctly enforce NOT NULL domain constraints in some contexts in
      PL/pgSQL (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix portability issues in plperl initialization (Andrew Dunstan)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_ctl</application> to not go into an infinite loop if
      <filename>postgresql.conf</filename> is empty (Jeff Davis)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <filename>contrib/hstore</filename> throw an error when a key or
      value is too long to fit in its data structure, rather than
      silently truncating it (Andrew Gierth)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <filename>contrib/xml2</filename>'s <function>xslt_process()</function> to
      properly handle the maximum number of parameters (twenty) (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve robustness of <application>libpq</application>'s code to recover
      from errors during <command>COPY FROM STDIN</command> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid including conflicting readline and editline header files
      when both libraries are installed (Zdenek Kotala)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2009l
      for DST law changes in Bangladesh, Egypt, Jordan, Pakistan,
      Argentina/San_Luis, Cuba, Jordan (historical correction only),
      Mauritius, Morocco, Palestine, Syria, Tunisia.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-13">
  <title>Release 8.2.13</title>

  <formalpara>
  <title>Release date:</title>
  <para>2009-03-16</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.12.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.13</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.11,
    see <xref linkend="release-8-2-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</emphasis> 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</command> 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()</function> is given format codes that
      are inappropriate for the type of the data argument (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible failure in <filename>contrib/tsearch2</filename> when C locale is
      used with a multi-byte encoding (Teodor)
     </para>

     <para>
      Crashes were possible on platforms where <type>wchar_t</type> is narrower
      than <type>int</type>; Windows in particular.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix extreme inefficiency in <filename>contrib/tsearch2</filename> parser's
      handling of an email-like string containing multiple <literal>@</literal>
      characters (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix decompilation of <literal>CASE WHEN</literal> with an implicit coercion
      (Tom)
     </para>

     <para>
      This mistake could lead to Assert failures in an Assert-enabled build,
      or an <quote>unexpected CASE WHEN clause</quote> error message in other
      cases, when trying to examine or dump a view.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
     </para>

     <para>
      If <command>CLUSTER</command> or a rewriting variant of <command>ALTER TABLE</command>
      were executed by someone other than the table owner, the
      <structname>pg_type</structname> entry for the table's TOAST table would end up
      marked as owned by that someone.  This caused no immediate problems,
      since the permissions on the TOAST rowtype aren't examined by any
      ordinary database operation.  However, it could lead to unexpected
      failures if one later tried to drop the role that issued the command
      (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</quote>
      warnings from <application>pg_dump</application> after having done so (in 8.3).
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/pgSQL to not treat <literal>INTO</literal> after <command>INSERT</command> as
      an INTO-variables clause anywhere in the string, not only at the start;
      in particular, don't fail for <command>INSERT INTO</command> within
      <command>CREATE RULE</command> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Clean up PL/pgSQL error status variables fully at block exit
      (Ashesh Vashi and Dave Page)
     </para>

     <para>
      This is not a problem for PL/pgSQL itself, but the omission could cause
      the PL/pgSQL Debugger to crash while examining the state of a function.
     </para>
    </listitem>

    <listitem>
     <para>
      Retry failed calls to <function>CallNamedPipe()</function> on Windows
      (Steve Marshall, Magnus)
     </para>

     <para>
      It appears that this function can sometimes fail transiently;
      we previously treated any failure as a hard error, which could
      confuse <command>LISTEN</command>/<command>NOTIFY</command> as well as other
      operations.
     </para>
    </listitem>

    <listitem>
     <para>
      Add <literal>MUST</literal> (Mauritius Island Summer Time) to the default list
      of known timezone abbreviations (Xavier Bugaud)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-12">
  <title>Release 8.2.12</title>

  <formalpara>
  <title>Release date:</title>
  <para>2009-02-02</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.11.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.12</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.11,
    see <xref linkend="release-8-2-11"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Improve handling of URLs in <function>headline()</function> function (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve handling of overlength headlines in <function>headline()</function>
      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>
      Fix possible Assert failure if a statement executed in PL/pgSQL is
      rewritten into another kind of statement, for example if an
      <command>INSERT</command> is rewritten into an <command>UPDATE</command> (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure that a snapshot is available to datatype input functions (Tom)
     </para>

     <para>
      This primarily affects domains that are declared with <literal>CHECK</literal>
      constraints involving user-defined stable or immutable functions.  Such
      functions typically fail if no snapshot has been set.
     </para>
    </listitem>

    <listitem>
     <para>
      Make it safer for SPI-using functions to be used within datatype I/O;
      in particular, to be used in domain check constraints (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid unnecessary locking of small tables in <command>VACUUM</command>
      (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix a problem that made <literal>UPDATE RETURNING tableoid</literal>
      return zero instead of the correct OID (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planner misestimation of selectivity when transitive equality
      is applied to an outer-join clause (Tom)
     </para>

     <para>
      This could result in bad plans for queries like
      <literal>... from a left join b on a.a1 = b.b1 where a.a1 = 42 ...</literal>
     </para>
    </listitem>

    <listitem>
     <para>
      Improve optimizer's handling of long <literal>IN</literal> lists (Tom)
     </para>

     <para>
      This change avoids wasting large amounts of time on such lists
      when constraint exclusion is enabled.
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure that the contents of a holdable cursor don't depend on the
      contents of TOAST tables (Tom)
     </para>

     <para>
      Previously, large field values in a cursor result might be represented
      as TOAST pointers, which would fail if the referenced table got dropped
      before the cursor is read, or if the large value is deleted and then
      vacuumed away.  This cannot happen with an ordinary cursor,
      but it could with a cursor that is held past its creating transaction.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leak when a set-returning function is terminated without
      reading its whole result (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <filename>contrib/dblink</filename>'s
      <function>dblink_get_result(text,bool)</function> function (Joe)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible garbage output from <filename>contrib/sslinfo</filename> functions
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>configure</application> script to properly report failure when
      unable to obtain linkage information for PL/Perl (Andrew)
     </para>
    </listitem>

    <listitem>
     <para>
      Make all documentation reference <literal>pgsql-bugs</literal> and/or
      <literal>pgsql-hackers</literal> as appropriate, instead of the
      now-decommissioned <literal>pgsql-ports</literal> and <literal>pgsql-patches</literal>
      mailing lists (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2009a (for
      Kathmandu and historical DST corrections in Switzerland, Cuba)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-11">
  <title>Release 8.2.11</title>

  <formalpara>
  <title>Release date:</title>
  <para>2008-11-03</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.10.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.11</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.7,
    see <xref linkend="release-8-2-7"/>.  Also, if you were running a previous
    8.2.X release, it is recommended to <command>REINDEX</command> all GiST
    indexes after the upgrade.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix GiST index corruption due to marking the wrong index entry
      <quote>dead</quote> after a deletion (Teodor)
     </para>

     <para>
      This would result in index searches failing to find rows they
      should have found.  Corrupted indexes can be fixed with
      <command>REINDEX</command>.
     </para>
    </listitem>

    <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</quote> 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>
      Improve optimization of <replaceable>expression</replaceable> <literal>IN</literal>
      (<replaceable>expression-list</replaceable>) queries (Tom, per an idea from Robert
      Haas)
     </para>

     <para>
      Cases in which there are query variables on the right-hand side had been
      handled less efficiently in 8.2.x and 8.3.x than in prior versions.
      The fix restores 8.1 behavior for such cases.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix mis-expansion of rule queries when a sub-<literal>SELECT</literal> appears
      in a function call in <literal>FROM</literal>,  a multi-row <literal>VALUES</literal>
      list, or a <literal>RETURNING</literal> list (Tom)
     </para>

     <para>
      The usual symptom of this problem is an <quote>unrecognized node type</quote>
      error.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leak during rescan of a hashed aggregation plan (Neil)
     </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>
      Prevent possible collision of <structfield>relfilenode</structfield> numbers
      when moving a table to another tablespace with <command>ALTER SET
      TABLESPACE</command> (Heikki)
     </para>

     <para>
      The command tried to re-use the existing filename, instead of
      picking one that is known unused in the destination directory.
     </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</option>
      build (Ron Mayer)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure <function>SPI_getvalue</function> and <function>SPI_getbinval</function>
      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</application>'s parsing of <command>CREATE ROLE</command> (Michael)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix recent breakage of <literal>pg_ctl restart</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure <filename>pg_control</filename> is opened in binary mode
      (Itagaki Takahiro)
     </para>

     <para>
      <application>pg_controldata</application> and <application>pg_resetxlog</application>
      did this incorrectly, and so could fail on Windows.
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2008i (for
      DST law changes in Argentina, Brazil, Mauritius, Syria)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-10">
  <title>Release 8.2.10</title>

  <formalpara>
  <title>Release date:</title>
  <para>2008-09-22</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.9.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.10</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.7,
    see <xref linkend="release-8-2-7"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix bug in btree WAL recovery code (Heikki)
     </para>

     <para>
      Recovery failed if the WAL ended partway through a page split operation.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potential miscalculation of <structfield>datfrozenxid</structfield> (Alvaro)
     </para>

     <para>
      This error may explain some recent reports of failure to remove old
      <structname>pg_clog</structname> data.
     </para>
    </listitem>

    <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</quote> errors.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible duplicate output of tuples during a GiST index scan (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix missed permissions checks when a view contains a simple
      <literal>UNION ALL</literal> construct (Heikki)
     </para>

     <para>
      Permissions for the referenced tables were checked properly, but not
      permissions for the view itself.
     </para>
    </listitem>

    <listitem>
     <para>
      Add checks in executor startup to ensure that the tuples produced by an
      <command>INSERT</command> or <command>UPDATE</command> will match the target table's
      current rowtype (Tom)
     </para>

     <para>
      <command>ALTER COLUMN TYPE</command>, 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 possible repeated drops during <command>DROP OWNED</command> (Tom)
     </para>

     <para>
      This would typically result in strange errors such as <quote>cache
      lookup failed for relation NNN</quote>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <literal>AT TIME ZONE</literal> to first try to interpret its timezone
      argument as a timezone abbreviation, and only try it as a full timezone
      name if that fails, rather than the other way around as formerly (Tom)
     </para>

     <para>
      The timestamp input functions have always resolved ambiguous zone names
      in this order.  Making <literal>AT TIME ZONE</literal> do so as well improves
      consistency, and fixes a compatibility bug introduced in 8.1:
      in ambiguous cases we now behave the same as 8.0 and before did,
      since in the older versions <literal>AT TIME ZONE</literal> accepted
      <emphasis>only</emphasis> abbreviations.
     </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>
      Prevent integer overflows during units conversion when displaying a
      configuration parameter that has units (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve performance of writing very long log messages to syslog (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow spaces in the suffix part of an LDAP URL in
      <filename>pg_hba.conf</filename> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
      ON</literal> query (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planner bug with nested sub-select expressions (Tom)
     </para>

     <para>
      If the outer sub-select has no direct dependency on the parent query,
      but the inner one does, the outer value might not get recalculated
      for new parent query rows.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planner to estimate that <literal>GROUP BY</literal> 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</literal> estimate for certain boolean tests like <replaceable>col</replaceable>
      <literal>IS NULL</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/pgSQL to not fail when a <literal>FOR</literal> loop's target variable
      is a record containing composite-type fields (Tom)
     </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>
      On Windows, work around a Microsoft bug by preventing
      <application>libpq</application> from trying to send more than 64kB per system call
      (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve <application>pg_dump</application> and <application>pg_restore</application>'s
      error reporting after failure to send a SQL command (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_ctl</application> to properly preserve postmaster
      command-line arguments across a <literal>restart</literal> (Bruce)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> 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-2-9">
  <title>Release 8.2.9</title>

  <formalpara>
  <title>Release date:</title>
  <para>2008-06-12</para>
  </formalpara>

  <para>
   This release contains one serious and one minor bug fix over 8.2.8.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.9</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.7,
    see <xref linkend="release-8-2-7"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Make <function>pg_get_ruledef()</function> 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</literal>, which is subtly incorrect: it should
      be <literal>(-42)::integer</literal> due to operator precedence rules.
      Usually this would make little difference, but it could interact with
      another recent patch to cause
      <productname>PostgreSQL</productname> to reject what had been a valid
      <command>SELECT DISTINCT</command> view query.  Since this could result in
      <application>pg_dump</application> 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>

    <listitem>
     <para>
      Make <command>ALTER AGGREGATE ... OWNER TO</command> update
      <structname>pg_shdepend</structname> (Tom)
     </para>

     <para>
      This oversight could lead to problems if the aggregate was later
      involved in a <command>DROP OWNED</command> or <command>REASSIGN OWNED</command>
      operation.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-8">
  <title>Release 8.2.8</title>

  <formalpara>
  <title>Release date:</title>
  <para>never released</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.7.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.8</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, if you are upgrading from a version earlier than 8.2.7,
    see <xref linkend="release-8-2-7"/>.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
      occurred on Windows when using UTF-8 database encoding and a different
      client encoding (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</command> 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</command> failure when inheriting the
      <quote>same</quote> constraint from multiple parent relations that
      inherited that constraint from a common ancestor (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>pg_get_ruledef()</function> to show the alias, if any, attached
      to the target table of an <command>UPDATE</command> or <command>DELETE</command>
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix GIN bug that could result in a <literal>too many LWLocks
      taken</literal> failure (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Avoid possible crash when decompressing corrupted data
      (Zdenek Kotala)
     </para>
    </listitem>

    <listitem>
     <para>
      Repair two places where SIGTERM exit of a backend could leave corrupted
      state in shared memory (Tom)
     </para>

     <para>
      Neither case is very important if SIGTERM is used to shut down the
      whole database cluster together, but there was a problem if someone
      tried to SIGTERM individual backends.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix conversions between ISO-8859-5 and other encodings to handle
      Cyrillic <quote>Yo</quote> characters (<literal>e</literal> and <literal>E</literal> with
      two dots) (Sergey Burladyan)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix several datatype input functions, notably <function>array_in()</function>,
      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</literal> and <literal>DISTINCT</literal>
      expressions.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix a corner case in regular-expression substring matching
      (<literal>substring(<replaceable>string</replaceable> from
      <replaceable>pattern</replaceable>)</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)?')</literal>.
      This should return NULL, since <literal>(bar)</literal> isn't matched, but
      it was mistakenly returning the whole-pattern match instead (ie,
      <literal>foo</literal>).
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2008c (for
      DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
      Argentina/San_Luis)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect result from <application>ecpg</application>'s
      <function>PGTYPEStimestamp_sub()</function> function (Michael)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix broken GiST comparison function for <filename>contrib/tsearch2</filename>'s
      <type>tsquery</type> type (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crashes in <filename>contrib/cube</filename> functions (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix core dump in <filename>contrib/xml2</filename>'s
      <function>xpath_table()</function> function when the input query returns a
      NULL value (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <filename>contrib/xml2</filename>'s makefile to not override
      <literal>CFLAGS</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <literal>DatumGetBool</literal> macro to not fail with <application>gcc</application>
      4.3 (Tom)
     </para>

     <para>
      This problem affects <quote>old style</quote> (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>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-7">
  <title>Release 8.2.7</title>

  <formalpara>
  <title>Release date:</title>
  <para>2008-03-17</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.6.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.7</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
    However, you might need to <command>REINDEX</command> indexes on textual
    columns after updating, if you are affected by the Windows locale
    issue described below.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix character string comparison for Windows locales that consider
      different character combinations as equal (Tom)
     </para>

     <para>
      This fix applies only on Windows and only when using UTF-8
      database encoding.  The same fix was made for all other cases
      over two years ago, but Windows with UTF-8 uses a separate code
      path that was not updated.  If you are using a locale that
      considers some non-identical strings as equal, you may need to
      <command>REINDEX</command> to fix existing indexes on textual columns.
     </para>
    </listitem>

    <listitem>
     <para>
      Repair potential deadlock between concurrent <command>VACUUM FULL</command>
      operations on different system catalogs (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix longstanding <command>LISTEN</command>/<command>NOTIFY</command>
      race condition (Tom)
     </para>

     <para>
      In rare cases a session that had just executed a
      <command>LISTEN</command> might not get a notification, even though
      one would be expected because the concurrent transaction executing
      <command>NOTIFY</command> 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> command will not see any
      row in <structname>pg_listener</structname> for the <command>LISTEN</command>,
      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>
      Disallow <command>LISTEN</command> and <command>UNLISTEN</command> within a
      prepared transaction (Tom)
     </para>

     <para>
      This was formerly allowed but trying to do it had various unpleasant
      consequences, notably that the originating backend could not exit
      as long as an <command>UNLISTEN</command> remained uncommitted.
     </para>
    </listitem>

    <listitem>
     <para>
      Disallow dropping a temporary table within a
      prepared transaction (Heikki)
     </para>

     <para>
      This was correctly disallowed by 8.1, but the check was inadvertently
      broken in 8.2.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix rare crash when an error occurs during a query using a hash index
      (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory leaks in certain usages of set-returning functions (Neil)
     </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</quote> error in some variants of
      <command>ALTER OWNER</command> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Ensure <structname>pg_stat_activity</structname>.<structfield>waiting</structfield> flag
      is cleared when a lock wait is aborted (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix handling of process permissions on Windows Vista (Dave, Magnus)
     </para>

     <para>
      In particular, this fix allows starting the server as the Administrator
      user.
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2008a
      (in particular, recent Chile changes); adjust timezone abbreviation
      <literal>VET</literal> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_ctl</application> to correctly extract the postmaster's port
      number from command-line options (Itagaki Takahiro, Tom)
     </para>

     <para>
      Previously, <literal>pg_ctl start -w</literal> could try to contact the
      postmaster on the wrong port, leading to bogus reports of startup
      failure.
     </para>
    </listitem>

    <listitem>
     <para>
      Use <option>-fwrapv</option> to defend against possible misoptimization
      in recent <application>gcc</application> versions (Tom)
     </para>

     <para>
      This is known to be necessary when building <productname>PostgreSQL</productname>
      with <application>gcc</application> 4.3 or later.
     </para>
    </listitem>


    <listitem>
     <para>
      Correctly enforce <varname>statement_timeout</varname> values longer
      than <literal>INT_MAX</literal> microseconds (about 35 minutes) (Tom)
     </para>

     <para>
      This bug affects only builds with <option>--enable-integer-datetimes</option>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <quote>unexpected PARAM_SUBLINK ID</quote> planner error when
      constant-folding simplifies a sub-select (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix logical errors in constraint-exclusion handling of <literal>IS
      NULL</literal> and <literal>NOT</literal> expressions (Tom)
     </para>

     <para>
      The planner would sometimes exclude partitions that should not
      have been excluded because of the possibility of NULL results.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix another cause of <quote>failed to build any N-way joins</quote>
      planner errors (Tom)
     </para>

     <para>
      This could happen in cases where a clauseless join needed to be
      forced before a join clause could be exploited.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect constant propagation in outer-join planning (Tom)
     </para>

     <para>
      The planner could sometimes incorrectly conclude that a variable
      could be constrained to be equal to a constant, leading
      to wrong query results.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix display of constant expressions in <literal>ORDER BY</literal>
      and <literal>GROUP BY</literal> (Tom)
     </para>

     <para>
      An explicitly 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</application> 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-2-6">
  <title>Release 8.2.6</title>

  <formalpara>
  <title>Release date:</title>
  <para>2008-01-07</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.5,
   including fixes for significant security issues.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.6</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </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>, <command>ANALYZE</command>, 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</command>, 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>, <command>ANALYZE</command>, <command>REINDEX</command>,
      and <command>CLUSTER</command>) to execute as the table owner rather than
      the calling user, using the same privilege-switching mechanism already
      used for <literal>SECURITY DEFINER</literal> functions.  To prevent bypassing
      this security measure, execution of <command>SET SESSION
      AUTHORIZATION</command> and <command>SET ROLE</command> is now forbidden within a
      <literal>SECURITY DEFINER</literal> 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</filename> to use only
      password authentication, as a security measure (Joe)
     </para>

     <para>
      The fix that appeared for this in 8.2.5 was incomplete, as it plugged
      the hole for only some <filename>dblink</filename> functions.  (CVE-2007-6601,
      CVE-2007-3278)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bugs in WAL replay for GIN indexes (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix GIN index build to work properly when
      <varname>maintenance_work_mem</varname> is 4GB or more (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Update time zone data files to <application>tzdata</application> release 2007k
      (in particular, recent Argentina changes) (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve planner's handling of LIKE/regex estimation in non-C locales
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planning-speed problem for deep outer-join nests, as well as
      possible poor choice of join order (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planner failure in some cases of <literal>WHERE false AND var IN
      (SELECT ...)</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <command>CREATE TABLE ... SERIAL</command> and
      <command>ALTER SEQUENCE ... OWNED BY</command> not change the
      <function>currval()</function> state of the sequence (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Preserve the tablespace and storage parameters of indexes that are
      rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</command> (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</command> not use all of <varname>maintenance_work_mem</varname>
      when the table is too small for it to be useful (Alvaro)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potential crash in <function>translate()</function> when using a multibyte
      database encoding (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <function>corr()</function> return the correct result for negative
      correlation values (Neil)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix overflow in <literal>extract(epoch from interval)</literal> for intervals
      exceeding 68 years (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/Perl to not fail when a UTF-8 regular expression is used
      in a trusted function (Andrew)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/Perl to cope when platform's Perl defines type <literal>bool</literal>
      as <literal>int</literal> rather than <literal>char</literal> (Tom)
     </para>

     <para>
      While this could theoretically happen anywhere, no standard build of
      Perl did things this way ... until <productname>macOS</productname> 10.5.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/Python to work correctly with Python 2.5 on 64-bit machines
      (Marko Kreen)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PL/Python to not crash on long exception messages (Alvaro)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>pg_dump</application> to correctly handle inheritance child tables
      that have default expressions different from their parent's (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <application>libpq</application> crash when <varname>PGPASSFILE</varname> refers
      to a file that is not a plain file (Martin Pitt)
     </para>
    </listitem>

    <listitem>
     <para>
      <application>ecpg</application> parser fixes (Michael)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <filename>contrib/pgcrypto</filename> defend against
      <application>OpenSSL</application> libraries that fail on keys longer than 128
      bits; which is the case at least on some Solaris versions (Marko Kreen)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <filename>contrib/tablefunc</filename>'s <function>crosstab()</function> handle
      NULL rowid as a category in its own right, rather than crashing (Joe)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <type>tsvector</type> and <type>tsquery</type> output routines to
      escape backslashes correctly (Teodor, Bruce)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix crash of <function>to_tsvector()</function> on huge input strings (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Require a specific version of <productname>Autoconf</productname> to be used
      when re-generating the <command>configure</command> script (Peter)
     </para>

     <para>
      This affects developers and packagers only.  The change was made
      to prevent accidental use of untested combinations of
      <productname>Autoconf</productname> and <productname>PostgreSQL</productname> versions.
      You can remove the version check if you really want to use a
      different <productname>Autoconf</productname> version, but it's
      your responsibility whether the result works or not.
     </para>
    </listitem>

    <listitem>
     <para>
      Update <function>gettimeofday</function> configuration check so that
      <productname>PostgreSQL</productname> can be built on newer versions of
      <productname>MinGW</productname> (Magnus)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-5">
  <title>Release 8.2.5</title>

  <formalpara>
  <title>Release date:</title>
  <para>2007-09-17</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.4.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.5</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Prevent index corruption when a transaction inserts rows and
      then aborts close to the end of a concurrent <command>VACUUM</command>
      on the same table (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <literal>ALTER DOMAIN ADD CONSTRAINT</literal> for cases involving
      domains over domains (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <command>CREATE DOMAIN ... DEFAULT NULL</command> work properly (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix some planner problems with outer joins, notably poor
      size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</literal>
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow the <type>interval</type> data type to accept input consisting only of
      milliseconds or microseconds (Neil)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow timezone name to appear before the year in <type>timestamp</type> input (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fixes for <acronym>GIN</acronym> indexes used by <filename>/contrib/tsearch2</filename> (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Speed up rtree index insertion (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix excessive logging of <acronym>SSL</acronym> 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</varname> logging runs out
      of memory (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect handling of some foreign-key corner cases (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>stddev_pop(numeric)</function> and <function>var_pop(numeric)</function> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent <command>REINDEX</command> and <command>CLUSTER</command> from failing
      due to attempting to process temporary tables of other sessions (Alvaro)
     </para>
    </listitem>

    <listitem>
     <para>
      Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Windows socket and semaphore improvements (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <command>pg_ctl -w</command> work properly in Windows service mode (Dave Page)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix memory allocation bug when using <application>MIT Kerberos</application> on Windows (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      Suppress timezone name (<literal>%Z</literal>) in log timestamps on Windows
      because of possible encoding mismatches (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Require non-superusers who use <filename>/contrib/dblink</filename> to use only
      password authentication, as a security measure (Joe)
     </para>
    </listitem>

    <listitem>
     <para>
      Restrict <filename>/contrib/pgstattuple</filename> functions to superusers, for security reasons (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Do not let <filename>/contrib/intarray</filename> try to make its GIN opclass
      the default (this caused problems at dump/restore) (Tom)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-4">
  <title>Release 8.2.4</title>

  <formalpara>
  <title>Release date:</title>
  <para>2007-04-23</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.3,
   including a security fix.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.4</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Support explicit placement of the temporary-table schema within
      <varname>search_path</varname>, 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</varname>.  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</command> for more information.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <varname>shared_preload_libraries</varname> for Windows
      by forcing reload in each backend (Korry Douglas)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>to_char()</function> so it properly upper/lower cases localized day or month
      names (Pavel Stehule)
     </para>
    </listitem>

    <listitem>
     <para>
      <filename>/contrib/tsearch2</filename> crash fixes (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Require <command>COMMIT PREPARED</command> to be executed in the same
      database as the transaction was prepared in (Heikki)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow <command>pg_dump</command> to do binary backups larger than two gigabytes
      on Windows (Magnus)
     </para>
    </listitem>

    <listitem>
     <para>
      New traditional (Taiwan) Chinese <acronym>FAQ</acronym> (Zhou Daojing)
     </para>
    </listitem>

    <listitem>
     <para>
      Prevent the statistics collector from writing to disk too frequently (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potential-data-corruption bug in how <command>VACUUM FULL</command> handles
      <command>UPDATE</command> chains (Tom, Pavan Deolasee)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug in domains that use array types (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <command>pg_dump</command> so it can dump a serial column's sequence
      using <option>-t</option> when not also dumping the owning table
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Planner fixes, including improving outer join and bitmap scan
      selection logic (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible wrong answers or crash when a PL/pgSQL function tries
      to <literal>RETURN</literal> from within an <literal>EXCEPTION</literal> block
      (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix PANIC during enlargement of a hash index (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-2-3">
  <title>Release 8.2.3</title>

  <formalpara>
  <title>Release date:</title>
  <para>2007-02-07</para>
  </formalpara>

  <para>
   This release contains two fixes from 8.2.2.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.3</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Remove overly-restrictive check for type length in constraints and
      functional indexes(Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-2">
  <title>Release 8.2.2</title>

  <formalpara>
  <title>Release date:</title>
  <para>2007-02-05</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.1, including
   a security fix.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.2</title>

   <para>
    A dump/restore is not required for those running 8.2.X.
   </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 not-so-rare-anymore bug wherein btree index page splits could fail
      due to choosing an infeasible split point (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix Borland C compile scripts (L Bayuk)
     </para>
    </listitem>

    <listitem>
     <para>
      Properly handle <function>to_char('CC')</function> for years ending in
      <literal>00</literal> (Tom)
     </para>

     <para>
      Year 2000 is in the twentieth century, not the twenty-first.
     </para>
    </listitem>

    <listitem>
     <para>
      <filename>/contrib/tsearch2</filename> localization improvements (Tatsuo, Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix incorrect permission check in
      <literal>information_schema.key_column_usage</literal> view (Tom)
     </para>

     <para>
      The symptom is <quote>relation with OID nnnnn does not exist</quote> errors.
      To get this fix without using <command>initdb</command>, use <command>CREATE OR
      REPLACE VIEW</command> to install the corrected definition found in
      <filename>share/information_schema.sql</filename>.  Note you will need to do
      this in each database.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve <command>VACUUM</command> performance for databases with many tables (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix for rare Assert() crash triggered by <literal>UNION</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potentially incorrect results from index searches using
      <literal>ROW</literal> inequality conditions (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Tighten security of multi-byte character processing for UTF8 sequences
      over three bytes long (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bogus <quote>permission denied</quote> failures occurring on Windows
      due to attempts to fsync already-deleted files (Magnus, Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix bug that could cause the statistics collector
      to hang on Windows (Magnus)
     </para>

     <para>
      This would in turn lead to autovacuum not working.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible crashes when an already-in-use PL/pgSQL function is
      updated (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix possible errors in processing PL/pgSQL exception blocks (Tom)
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2-1">
  <title>Release 8.2.1</title>

  <formalpara>
  <title>Release date:</title>
  <para>2007-01-08</para>
  </formalpara>

  <para>
   This release contains a variety of fixes from 8.2.
   For information about new features in the 8.2 major release, see
   <xref linkend="release-8-2"/>.
  </para>

  <sect2>
   <title>Migration to Version 8.2.1</title>

   <para>
    A dump/restore is not required for those running 8.2.
   </para>

  </sect2>

  <sect2>
   <title>Changes</title>

   <itemizedlist>

    <listitem>
     <para>
      Fix crash with <literal>SELECT</literal> ... <literal>LIMIT ALL</literal> (also
      <literal>LIMIT NULL</literal>) (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      <filename>Several /contrib/tsearch2</filename> fixes (Teodor)
     </para>
    </listitem>

    <listitem>
     <para>
      On Windows, make log messages coming from the operating system use
      <acronym>ASCII</acronym> encoding (Hiroshi Saito)
     </para>

     <para>
      This fixes a conversion problem when there is a mismatch between
      the encoding of the operating system and database server.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix Windows linking of <application>pg_dump</application> using
      <filename>win32.mak</filename>
      (Hiroshi Saito)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix planner mistakes for outer join queries (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix several problems in queries involving sub-SELECTs (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Fix potential crash in SPI during subtransaction abort (Tom)
     </para>

     <para>
      This affects all PL functions since they all use SPI.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve build speed of <acronym>PDF</acronym> documentation (Peter)
     </para>
    </listitem>

    <listitem>
     <para>
      Re-add <acronym>JST</acronym> (Japan) timezone abbreviation (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve optimization decisions related to index scans (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Have <application>psql</application> print multi-byte combining characters as
      before, rather than output as <literal>\u</literal> (Tom)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve index usage of regular expressions that use parentheses (Tom)
     </para>

     <para>
      This improves <application>psql</application> <literal>\d</literal> performance also.
     </para>
    </listitem>

    <listitem>
     <para>
      Make <application>pg_dumpall</application> assume that databases have public
      <literal>CONNECT</literal> privilege, when dumping from a pre-8.2 server (Tom)
     </para>

     <para>
      This preserves the previous behavior that anyone can connect to a
      database if allowed by <filename>pg_hba.conf</filename>.
     </para>
    </listitem>

   </itemizedlist>

  </sect2>
 </sect1>

 <sect1 id="release-8-2">
  <title>Release 8.2</title>

  <formalpara>
   <title>Release date:</title>
   <para>2006-12-05</para>
  </formalpara>

  <sect2>
   <title>Overview</title>

   <para>
    This release adds many functionality and performance improvements that
    were requested by users, including:

   <itemizedlist>

     <listitem>
      <para>
       Query language enhancements including <command>INSERT/UPDATE/DELETE
       RETURNING</command>, multirow <literal>VALUES</literal> lists, and
       optional target-table alias in
       <command>UPDATE</command>/<command>DELETE</command>
      </para>
     </listitem>

     <listitem>
      <para>
       Index creation without blocking concurrent
       <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
       operations
      </para>
     </listitem>

     <listitem>
      <para>
       Many query optimization improvements, including support for
       reordering outer joins
      </para>
     </listitem>

     <listitem>
      <para>
       Improved sorting performance with lower memory usage
      </para>
     </listitem>

     <listitem>
      <para>
       More efficient locking with better concurrency
      </para>
     </listitem>

     <listitem>
      <para>
       More efficient vacuuming
      </para>
     </listitem>

     <listitem>
      <para>
       Easier administration of warm standby servers
      </para>
     </listitem>

     <listitem>
      <para>
       New <literal>FILLFACTOR</literal> support for tables and indexes
      </para>
     </listitem>

     <listitem>
      <para>
       Monitoring, logging, and performance tuning additions
      </para>
     </listitem>

     <listitem>
      <para>
       More control over creating and dropping objects
      </para>
     </listitem>

     <listitem>
      <para>
       Table inheritance relationships can be defined
       for and removed from pre-existing tables
      </para>
     </listitem>

     <listitem>
      <para>
       <command>COPY TO</command> can copy the output of an arbitrary
       <command>SELECT</command> statement
      </para>
     </listitem>

     <listitem>
      <para>
       Array improvements, including nulls in arrays
      </para>
     </listitem>

     <listitem>
      <para>
       Aggregate-function improvements, including multiple-input
       aggregates and SQL:2003 statistical functions
      </para>
     </listitem>

     <listitem>
      <para>
       Many <filename>contrib/</filename> improvements
      </para>
     </listitem>

    </itemizedlist>

   </para>

  </sect2>

  <sect2>
   <title>Migration to Version 8.2</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>
       Set <link
       linkend="guc-escape-string-warning"><varname>escape_string_warning</varname></link>
       to <literal>on</literal> by default (Bruce)
      </para>

      <para>
       This issues a warning if backslash escapes are used in
       <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</literal>)
       strings</link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Change the <link linkend="sql-syntax-row-constructors">row
       constructor syntax</link> (<literal>ROW(...)</literal>) so that
       list elements <literal>foo.*</literal> will be expanded to a list
       of their member fields, rather than creating a nested
       row type field as formerly (Tom)
      </para>

      <para>
       The new behavior is substantially more useful since it
       allows, for example, triggers to check for data changes
       with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</literal>.
       The old behavior is still available by omitting <literal>.*</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Make <link linkend="row-wise-comparison">row comparisons</link>
       follow <acronym>SQL</acronym> standard semantics and allow them
       to be used in index scans (Tom)
      </para>

      <para>
       Previously, row = and &lt;&gt; comparisons followed the
       standard but &lt; &lt;= &gt; &gt;= did not.  A row comparison
       can now be used as an index constraint for a multicolumn
       index matching the row value.
      </para>
     </listitem>

     <listitem>
      <para>
       Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</optional> NULL</literal></link>
       tests follow <acronym>SQL</acronym> standard semantics (Tom)
      </para>

      <para>
       The former behavior conformed to the standard for simple cases
       with <literal>IS NULL</literal>, but <literal>IS NOT NULL</literal> would return
       true if any row field was non-null, whereas the standard says it
       should return true only when all fields are non-null.
      </para>
     </listitem>

     <listitem>
      <para>
       Make <link linkend="sql-set-constraints"><command>SET
       CONSTRAINT</command></link> affect only one constraint (Kris Jurka)
      </para>

      <para>
       In previous releases, <command>SET CONSTRAINT</command> modified
       all constraints with a matching name.  In this release,
       the schema search path is used to modify only the first
       matching constraint.  A schema specification is also
       supported.  This more nearly conforms to the SQL standard.
      </para>
     </listitem>

     <listitem>
      <para>
       Remove <literal>RULE</literal> permission for tables, for security reasons
       (Tom)
      </para>

      <para>
       As of this release, only a table's owner can create or modify
       rules for the table.  For backwards compatibility,
       <command>GRANT</command>/<command>REVOKE RULE</command> is still accepted,
       but it does nothing.
      </para>
     </listitem>

     <listitem>
      <para>
       Array comparison improvements (Tom)
      </para>

      <para>
       Now array dimensions are also compared.
      </para>
     </listitem>

     <listitem>
      <para>
       Change <link linkend="functions-array">array concatenation</link>
       to match documented behavior (Tom)
      </para>

      <para>
       This changes the previous behavior where concatenation
       would modify the array lower bound.
      </para>
     </listitem>

     <listitem>
      <para>
       Make command-line options of <application>postmaster</application>
       and <link linkend="app-postgres"><application>postgres</application></link>
       identical (Peter)
      </para>

      <para>
       This allows the postmaster to pass arguments to each backend
       without using <literal>-o</literal>.  Note that some options are now
       only available as long-form options, because there were conflicting
       single-letter options.
      </para>
     </listitem>

     <listitem>
      <para>
       Deprecate use of <application>postmaster</application> symbolic link (Peter)
      </para>

      <para>
       <application>postmaster</application> and <application>postgres</application>
       commands now act identically, with the behavior determined
       by command-line options.  The <application>postmaster</application> symbolic link is
       kept for compatibility, but is not really needed.
      </para>
     </listitem>

     <listitem>
      <para>
       Change <link
       linkend="guc-log-duration"><varname>log_duration</varname></link>
       to output even if the query is not output (Tom)
      </para>

      <para>
       In prior releases, <varname>log_duration</varname> only printed if
       the query appeared earlier in the log.
      </para>
     </listitem>

     <listitem>
      <para>
       Make <link
       linkend="functions-formatting"><function>to_char(time)</function></link>
       and <link
       linkend="functions-formatting"><function>to_char(interval)</function></link>
       treat <literal>HH</literal> and <literal>HH12</literal> as 12-hour
       intervals
      </para>

      <para>
       Most applications should use <literal>HH24</literal> unless they
       want a 12-hour display.
      </para>
     </listitem>

     <listitem>
      <para>
       Zero unmasked bits in conversion from <link
       linkend="datatype-inet"><type>INET</type></link> to <link
       linkend="datatype-inet"><type>CIDR</type></link> (Tom)
      </para>

      <para>
       This ensures that the converted value is actually valid for
       <type>CIDR</type>.
      </para>
     </listitem>

     <listitem>
      <para>
       Remove <varname>australian_timezones</varname> configuration variable
       (Joachim Wieland)
      </para>

      <para>
       This variable has been superseded by a more general facility
       for configuring timezone abbreviations.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve cost estimation for nested-loop index scans (Tom)
      </para>

      <para>
       This might eliminate the need to set unrealistically small
       values of <link
       linkend="guc-random-page-cost"><varname>random_page_cost</varname></link>.
       If you have been using a very small <varname>random_page_cost</varname>,
       please recheck your test cases.
      </para>
     </listitem>

     <listitem>
      <para>
       Change behavior of <command>pg_dump</command> <literal>-n</literal> and
       <literal>-t</literal> options.  (Greg Sabino Mullane)
      </para>
      <para>
       See the <command>pg_dump</command> manual page for details.
      </para>
     </listitem>

     <listitem>
      <para>
       Change <link linkend="libpq"><application>libpq</application></link>
       <function>PQdsplen()</function> to return a useful value (Martijn
       van Oosterhout)
      </para>
     </listitem>

     <listitem>
      <para>
       Declare <link linkend="libpq"><application>libpq</application></link>
       <function>PQgetssl()</function> as returning <literal>void *</literal>,
       rather than <literal>SSL *</literal> (Martijn van Oosterhout)
      </para>

      <para>
       This allows applications to use the function without including
       the OpenSSL headers.
      </para>
     </listitem>

     <listitem>
      <para>
       C-language loadable modules must now include a
       <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</literal></link>
       macro call for version compatibility checking
       (Martijn van Oosterhout)
      </para>
     </listitem>

     <listitem>
      <para>
       For security's sake, modules used by a PL/PerlU function are no
       longer available to PL/Perl functions (Andrew)
      </para>
      <note>
       <para>
        This also implies that data can no longer be shared between a PL/Perl
        function and a PL/PerlU function.
        Some Perl installations have not been compiled with the correct flags
        to allow multiple interpreters to exist within a single process.
        In this situation PL/Perl and PL/PerlU cannot both be used in a
        single backend. The solution is to get a Perl installation which
        supports multiple interpreters.
       </para>
      </note>
     </listitem>

     <listitem>
      <para>
       In <filename>contrib/xml2/</filename>, rename <function>xml_valid()</function> to
       <function>xml_is_well_formed()</function> (Tom)
      </para>

      <para>
       <function>xml_valid()</function> will remain for backward compatibility,
       but its behavior will change to do schema checking in a future
       release.
      </para>
     </listitem>

     <listitem>
      <para>
       Remove <filename>contrib/ora2pg/</filename>, now at <ulink
       url="http://www.samse.fr/GPL/ora2pg"></ulink>
      </para>
     </listitem>

     <listitem>
      <para>
       Remove contrib modules that have been migrated to PgFoundry:
       <filename>adddepend</filename>, <filename>dbase</filename>, <filename>dbmirror</filename>,
       <filename>fulltextindex</filename>, <filename>mac</filename>, <filename>userlock</filename>
      </para>
     </listitem>

     <listitem>
      <para>
       Remove abandoned contrib modules:
       <filename>mSQL-interface</filename>, <filename>tips</filename>
      </para>
     </listitem>

     <listitem>
      <para>
       Remove <acronym>QNX</acronym> and <acronym>BEOS</acronym> ports (Bruce)
      </para>

      <para>
       These ports no longer had active maintainers.
      </para>
     </listitem>

   </itemizedlist>
  </sect2>

  <sect2>
   <title>Changes</title>

   <para>
    Below you will find a detailed account of the
    changes between <productname>PostgreSQL</productname> 8.2 and
    the previous major release.
   </para>

   <sect3>
    <title>Performance Improvements</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow the planner to reorder <link linkend="queries-join">outer
       joins</link> in some circumstances (Tom)
      </para>

      <para>
       In previous releases, outer joins would always be evaluated in
       the order written in the query. This change allows the
       query optimizer to consider reordering outer joins, in cases where
       it can determine that the join order can be changed without
       altering the meaning of the query.  This can make a
       considerable performance difference for queries involving
       multiple outer joins or mixed inner and outer joins.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve efficiency of <link
       linkend="functions-comparisons"><literal>IN</literal>
       (list-of-expressions)</link> clauses (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve sorting speed and reduce memory usage (Simon, Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve subtransaction performance (Alvaro, Itagaki Takahiro,
       Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>FILLFACTOR</literal> to <link
       linkend="sql-createtable">table</link> and <link
       linkend="sql-createindex">index</link> creation (ITAGAKI
       Takahiro)
      </para>

      <para>
       This leaves extra free space in each table or index page,
       allowing improved performance as the database grows.  This
       is particularly valuable to maintain clustering.
      </para>
     </listitem>

     <listitem>
      <para>
       Increase default values for <link
       linkend="guc-shared-buffers"><varname>shared_buffers</varname></link>
       and <varname>max_fsm_pages</varname>
       (Andrew)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve locking performance by breaking the lock manager tables into
       sections
       (Tom)
      </para>

      <para>
       This allows locking to be more fine-grained, reducing
       contention.
      </para>
     </listitem>

     <listitem>
      <para>
       Reduce locking requirements of sequential scans (Qingqing
       Zhou)
      </para>
     </listitem>

     <listitem>
      <para>
       Reduce locking required for database creation and destruction
       (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve the optimizer's selectivity estimates for <link
       linkend="functions-like"><literal>LIKE</literal></link>, <link
       linkend="functions-like"><literal>ILIKE</literal></link>, and
       <link linkend="functions-posix-regexp">regular expression</link>
       operations (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve planning of joins to <link linkend="ddl-inherit">inherited
       tables</link> and <link linkend="queries-union"><literal>UNION
       ALL</literal></link> views (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="guc-constraint-exclusion">constraint
       exclusion</link> to be applied to <link
       linkend="ddl-inherit">inherited</link> <command>UPDATE</command> and
       <command>DELETE</command> queries (Tom)
      </para>

      <para>
       <command>SELECT</command> already honored constraint exclusion.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve planning of constant <literal>WHERE</literal> clauses, such as
       a condition that depends only on variables inherited from an
       outer query level (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Protocol-level unnamed prepared statements are re-planned
       for each set of <literal>BIND</literal> values (Tom)
      </para>

      <para>
       This improves performance because the exact parameter values
       can be used in the plan.
      </para>
     </listitem>

     <listitem>
      <para>
       Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
       Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Avoid extra scan of tables without indexes during <link
       linkend="sql-vacuum"><command>VACUUM</command></link> (Greg Stark)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve multicolumn <link linkend="gist"><acronym>GiST</acronym></link>
       indexing (Oleg, Teodor)
      </para>
     </listitem>

     <listitem>
      <para>
       Remove dead index entries before B-Tree page split (Junji
       Teramoto)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Server Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow a forced switch to a new transaction log file (Simon, Tom)
      </para>

      <para>
       This is valuable for keeping warm standby slave servers
       in sync with the master.  Transaction log file switching now also happens
       automatically during <link
       linkend="functions-admin"><function>pg_stop_backup()</function></link>.
       This ensures that all
       transaction log files needed for recovery can be archived immediately.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <acronym>WAL</acronym> informational functions (Simon)
      </para>

      <para>
       Add functions for interrogating the current transaction log insertion
       point and determining <acronym>WAL</acronym> filenames from the
       hex <acronym>WAL</acronym> locations displayed by <link
       linkend="functions-admin"><function>pg_stop_backup()</function></link>
       and related functions.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve recovery from a crash during <acronym>WAL</acronym> replay (Simon)
      </para>

      <para>
       The server now does periodic checkpoints during <acronym>WAL</acronym>
       recovery, so if there is a crash, future <acronym>WAL</acronym>
       recovery is shortened.  This also eliminates the need for
       warm standby servers to replay the entire log since the
       base backup if they crash.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve reliability of long-term <acronym>WAL</acronym> replay
       (Heikki, Simon, Tom)
      </para>

      <para>
       Formerly, trying to roll forward through more than 2 billion
       transactions would not work due to XID wraparound.  This meant
       warm standby servers had to be reloaded
       from fresh base backups periodically.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="guc-archive-timeout"><varname>archive_timeout</varname></link>
       to force transaction log file switches at a given interval (Simon)
      </para>

      <para>
       This enforces a maximum replication delay for warm standby servers.
      </para>
     </listitem>

     <listitem>
      <para>
       Add native <link linkend="auth-ldap"><acronym>LDAP</acronym></link>
       authentication (Magnus Hagander)
      </para>

      <para>
       This is particularly useful for platforms that do not
       support <acronym>PAM</acronym>, such as Windows.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-grant-description-objects"><literal>GRANT
       CONNECT ON DATABASE</literal></link> (Gevik Babakhani)
      </para>

      <para>
       This gives SQL-level control over database access.  It works as
       an additional filter on top of the existing
       <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>
       controls.
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for <link linkend="ssl-tcp"><acronym>SSL</acronym>
       Certificate Revocation List</link> (<acronym>CRL</acronym>) files
       (Libor Hoho&scaron;)
      </para>

      <para>
       The server and <application>libpq</application> both recognize <acronym>CRL</acronym>
       files now.
      </para>
     </listitem>

     <listitem>
      <para>
       <link linkend="gist"><acronym>GiST</acronym></link> indexes are
       now clusterable (Teodor)
      </para>
     </listitem>

     <listitem>
      <para>
       Remove routine autovacuum server log entries (Bruce)
      </para>

      <para>
       <link
       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</literal></link>
       now shows autovacuum activity.
      </para>
     </listitem>

     <listitem>
      <para>
       Track maximum XID age within individual tables, instead of whole databases (Alvaro)
      </para>

      <para>
       This reduces the overhead involved in preventing transaction
       ID wraparound, by avoiding unnecessary VACUUMs.
      </para>
     </listitem>

     <listitem>
      <para>
       Add last vacuum and analyze timestamp columns to the stats
       collector (Larry Rosenman)
      </para>

      <para>
       These values now appear in the <link
       linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</literal></link>
       system views.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve performance of statistics monitoring, especially
       <varname>stats_command_string</varname>
       (Tom, Bruce)
      </para>

      <para>
       This release enables <varname>stats_command_string</varname> by
       default, now that its overhead is minimal.  This means
       <link
       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</literal></link>
       will now show all active queries by default.
      </para>
     </listitem>

     <listitem>
      <para>
       Add a <literal>waiting</literal> column to <link
       linkend="monitoring-stats-views-table"><literal>pg_stat_activity</literal></link>
       (Tom)
      </para>

      <para>
       This allows <structname>pg_stat_activity</structname> to show all the
       information included in the <application>ps</application> display.
      </para>
     </listitem>

     <listitem>
      <para>
       Add configuration parameter <link
       linkend="guc-update-process-title"><varname>update_process_title</varname></link>
       to control whether the <application>ps</application> display is updated
       for every command (Bruce)
      </para>

      <para>
       On platforms where it is expensive to update the <application>ps</application>
       display, it might be worthwhile to turn this off and rely solely on
       <structname>pg_stat_activity</structname> for status information.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow units to be specified in configuration settings
       (Peter)
      </para>

      <para>
       For example, you can now set <link
       linkend="guc-shared-buffers"><varname>shared_buffers</varname></link>
       to <literal>32MB</literal> rather than mentally converting sizes.
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for <link linkend="config-setting">include
       directives</link> in <filename>postgresql.conf</filename> (Joachim
       Wieland)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve logging of protocol-level prepare/bind/execute
       messages (Bruce, Tom)
      </para>

      <para>
       Such logging now shows statement names, bind parameter
       values, and the text of the query being executed.  Also,
       the query text is properly included in logged error messages
       when enabled by <varname>log_min_error_statement</varname>.
      </para>
     </listitem>

     <listitem>
      <para>
       Prevent <link
       linkend="guc-max-stack-depth"><varname>max_stack_depth</varname></link>
       from being set to unsafe values
      </para>

      <para>
       On platforms where we can determine the actual kernel stack depth
       limit (which is most), make sure that the initial default value of
       <varname>max_stack_depth</varname> is safe, and reject attempts to set it
       to unsafely large values.
      </para>
     </listitem>

     <listitem>
      <para>
       Enable highlighting of error location in query in more
       cases (Tom)
      </para>

      <para>
       The server is now able to report a specific error location for
       some semantic errors (such as unrecognized column name), rather
       than just for basic syntax errors as before.
      </para>
     </listitem>

     <listitem>
      <para>
       Fix <quote>failed to re-find parent key</quote> errors in
       <command>VACUUM</command> (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Clean out <filename>pg_internal.init</filename> cache files during server
       restart (Simon)
      </para>

      <para>
       This avoids a hazard that the cache files might contain stale
       data after PITR recovery.
      </para>
     </listitem>

     <listitem>
      <para>
       Fix race condition for truncation of a large relation across a
       gigabyte boundary by <command>VACUUM</command> (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Fix bug causing needless deadlock errors on row-level locks (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Fix bugs affecting multi-gigabyte hash indexes (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Each backend process is now its own process group leader (Tom)
      </para>

      <para>
       This allows query cancel to abort subprocesses invoked from a
       backend or archive/recovery process.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Query Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <link linkend="sql-insert"><command>INSERT</command></link>/<link
       linkend="sql-update"><command>UPDATE</command></link>/<link
       linkend="sql-delete"><command>DELETE</command></link>
       <literal>RETURNING</literal> (Jonah Harris, Tom)
      </para>

      <para>
       This allows these commands to return values, such as the
       computed serial key for a new row.  In the <command>UPDATE</command>
       case, values from the updated version of the row are returned.
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for multiple-row <link
       linkend="queries-values"><literal>VALUES</literal></link> clauses,
       per SQL standard (Joe, Tom)
      </para>

      <para>
       This allows <command>INSERT</command> to insert multiple rows of
       constants, or queries to generate result sets using constants.
       For example, <literal>INSERT ...  VALUES (...), (...),
       ....</literal>, and <literal>SELECT * FROM (VALUES (...), (...),
       ....) AS alias(f1, ...)</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-update"><command>UPDATE</command></link>
       and <link linkend="sql-delete"><command>DELETE</command></link>
       to use an alias for the target table (Atsushi Ogawa)
      </para>

      <para>
       The SQL standard does not permit an alias in these commands, but
       many database systems allow one anyway for notational convenience.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-update"><command>UPDATE</command></link>
       to set multiple columns with a list of values (Susanne
       Ebrecht)
      </para>

      <para>
       This is basically a short-hand for assigning the columns
       and values in pairs.  The syntax is <literal>UPDATE tab
       SET (<replaceable>column</replaceable>, ...) = (<replaceable>val</replaceable>, ...)</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Make row comparisons work per standard (Tom)
      </para>

      <para>
       The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
       that is, compare the first elements, if equal compare the second
       elements, and so on.  Formerly they expanded to an AND condition
       across all the elements, which was neither standard nor very useful.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-truncate"><literal>CASCADE</literal></link>
       option to <command>TRUNCATE</command> (Joachim Wieland)
      </para>

      <para>
       This causes <command>TRUNCATE</command> to automatically include all tables
       that reference the specified table(s) via foreign keys.  While
       convenient, this is a dangerous tool &mdash; use with caution!
      </para>
     </listitem>

     <listitem>
      <para>
       Support <literal>FOR UPDATE</literal> and <literal>FOR SHARE</literal>
       in the same <link linkend="sql-insert"><literal>SELECT</literal></link>
       command (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="functions-comparisons"><literal>IS NOT
       DISTINCT FROM</literal></link> (Pavel Stehule)
      </para>

      <para>
       This operator is similar to equality (<literal>=</literal>), but
       evaluates to true when both left and right operands are
       <literal>NULL</literal>, and to false when just one is, rather than
       yielding <literal>NULL</literal> in these cases.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve the length output used by <link
       linkend="queries-union"><literal>UNION</literal></link>/<literal>INTERSECT</literal>/<literal>EXCEPT</literal>
       (Tom)
      </para>

      <para>
       When all corresponding columns are of the same defined length, that
       length is used for the result, rather than a generic length.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="functions-like"><literal>ILIKE</literal></link>
       to work for multi-byte encodings (Tom)
      </para>

      <para>
       Internally, <literal>ILIKE</literal> now calls <function>lower()</function>
       and then uses <literal>LIKE</literal>.  Locale-specific regular
       expression patterns still do not work in these encodings.
      </para>
     </listitem>

     <listitem>
      <para>
       Enable <link
       linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</varname></link>
       to be turned <literal>on</literal> (Kevin Grittner)
      </para>

      <para>
       This allows backslash escaping in strings to be disabled,
       making <productname>PostgreSQL</productname> more
       standards-compliant.  The default is <literal>off</literal> for backwards
       compatibility, but future releases will default this to <literal>on</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Do not flatten subqueries that contain <literal>volatile</literal>
       functions in their target lists (Jaime Casanova)
      </para>

      <para>
       This prevents surprising behavior due to multiple evaluation
       of a <literal>volatile</literal> function (such as <function>random()</function>
       or <function>nextval()</function>).  It might cause performance
       degradation in the presence of functions that are unnecessarily
       marked as <literal>volatile</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add system views <link
       linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</literal></link>
       and <link
       linkend="view-pg-cursors"><literal>pg_cursors</literal></link>
       to show prepared statements and open cursors (Joachim Wieland, Neil)
      </para>

      <para>
       These are very useful in pooled connection setups.
      </para>
     </listitem>

     <listitem>
      <para>
       Support portal parameters in <link
       linkend="sql-explain"><command>EXPLAIN</command></link> and <link
       linkend="sql-execute"><command>EXECUTE</command></link> (Tom)
      </para>

      <para>
       This allows, for example, <acronym>JDBC</acronym> <literal>?</literal> parameters to
       work in these commands.
      </para>
     </listitem>

     <listitem>
      <para>
       If <acronym>SQL</acronym>-level <link
       linkend="sql-prepare"><command>PREPARE</command></link> parameters
       are unspecified, infer their types from the content of the
       query (Neil)
      </para>

      <para>
       Protocol-level <command>PREPARE</command> already did this.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <literal>LIMIT</literal> and <literal>OFFSET</literal> to exceed
       two billion (Dhanaraj M)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Object Manipulation Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <literal>TABLESPACE</literal> clause to <link
       linkend="sql-createtableas"><command>CREATE TABLE AS</command></link>
       (Neil)
      </para>

      <para>
       This allows a tablespace to be specified for the new table.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>ON COMMIT</literal> clause to <link
       linkend="sql-createtableas"><command>CREATE TABLE AS</command></link>
       (Neil)
      </para>

      <para>
       This allows temporary tables to be truncated or dropped on
       transaction commit.  The default behavior is for the table
       to remain until the session ends.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>INCLUDING CONSTRAINTS</literal> to <link
       linkend="sql-createtable"><command>CREATE TABLE LIKE</command></link>
       (Greg Stark)
      </para>

      <para>
       This allows easy copying of <literal>CHECK</literal> constraints to a new
       table.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow the creation of placeholder (shell) <link
       linkend="sql-createtype">types</link> (Martijn van Oosterhout)
      </para>

      <para>
       A shell type declaration creates a type name, without specifying
       any of the details of the type.  Making a shell type is useful
       because it allows cleaner declaration of the type's input/output
       functions, which must exist before the type can be defined <quote>for
       real</quote>.  The syntax is <command>CREATE TYPE <replaceable
       class="parameter">typename</replaceable></command>.
      </para>
     </listitem>

     <listitem>
      <para>
       <link linkend="sql-createaggregate">Aggregate functions</link>
       now support multiple input parameters (Sergey Koposov, Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Add new aggregate creation <link
       linkend="sql-createaggregate">syntax</link> (Tom)
      </para>

      <para>
       The new syntax is <command>CREATE AGGREGATE
       <replaceable>aggname</replaceable> (<replaceable>input_type</replaceable>)
       (<replaceable>parameter_list</replaceable>)</command>.  This more
       naturally supports the new multi-parameter aggregate
       functionality.  The previous syntax is still supported.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="sql-alterrole"><command>ALTER ROLE PASSWORD NULL</command></link>
       to remove a previously set role password (Peter)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <command>DROP</command> object <literal>IF EXISTS</literal> for many
       object types (Andrew)
      </para>

      <para>
       This allows <command>DROP</command> operations on non-existent
       objects without generating an error.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-drop-owned"><literal>DROP OWNED</literal></link>
       to drop all objects owned by a role (Alvaro)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-reassign-owned"><literal>REASSIGN
       OWNED</literal></link> to reassign ownership of all objects owned
       by a role (Alvaro)
      </para>

      <para>
       This, and <literal>DROP OWNED</literal> above, facilitate dropping
       roles.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-grant"><command>GRANT ON SEQUENCE</command></link>
       syntax (Bruce)
      </para>

      <para>
       This was added for setting sequence-specific permissions.
       <literal>GRANT ON TABLE</literal> for sequences is still supported
       for backward compatibility.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-grant"><literal>USAGE</literal></link>
       permission for sequences that allows only <function>currval()</function>
       and <function>nextval()</function>, not <function>setval()</function>
       (Bruce)
      </para>

      <para>
       <literal>USAGE</literal> permission allows more fine-grained
       control over sequence access.  Granting <literal>USAGE</literal>
       allows users to increment
       a sequence, but prevents them from setting the sequence to
       an arbitrary value using <function>setval()</function>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-altertable"><literal>ALTER TABLE
       [ NO ] INHERIT</literal></link> (Greg Stark)
      </para>

      <para>
       This allows inheritance to be adjusted dynamically, rather than
       just at table creation and destruction.  This is very valuable
       when using inheritance to implement table partitioning.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-comment">comments</link> on global
       objects to be stored globally (Kris Jurka)
      </para>

      <para>
       Previously, comments attached to databases were stored in individual
       databases, making them ineffective, and there was no provision
       at all for comments on roles or tablespaces.  This change adds a new
       shared catalog <link
       linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
       and stores comments on databases, roles, and tablespaces therein.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Utility Command Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add option to allow indexes to be created without blocking
       concurrent writes to the table (Greg Stark, Tom)
      </para>

      <para>
       The new syntax is <link linkend="sql-createindex"><command>CREATE
       INDEX CONCURRENTLY</command></link>.  The default behavior is
       still to block table modification while an index is being
       created.
      </para>
     </listitem>

     <listitem>
      <para>
       Provide <link linkend="functions-advisory-locks">advisory
       locking</link> functionality (Abhijit Menon-Sen, Tom)
      </para>

      <para>
       This is a new locking API designed to replace what used to be
       in /contrib/userlock.  The userlock code is now on pgfoundry.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-copy"><command>COPY</command></link> to
       dump a <command>SELECT</command> query (Zoltan Boszormenyi, Karel
       Zak)
      </para>

      <para>
       This allows <command>COPY</command> to dump arbitrary <acronym>SQL</acronym>
       queries. The syntax is <literal>COPY (SELECT ...) TO</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Make the <link linkend="sql-copy"><command>COPY</command></link>
       command return a command tag that includes the number of
       rows copied (Volkan YAZICI)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-vacuum"><command>VACUUM</command></link>
       to expire rows without being affected by other concurrent
       <command>VACUUM</command> operations (Hannu Krossing, Alvaro, Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Make <link linkend="app-initdb"><application>initdb</application></link>
       detect the operating system locale and set the default
       <varname>DateStyle</varname> accordingly (Peter)
      </para>

      <para>
       This makes it more likely that the installed
       <filename>postgresql.conf</filename> <varname>DateStyle</varname> value will
       be as desired.
      </para>
     </listitem>

     <listitem>
      <para>
       Reduce number of progress messages displayed by <application>initdb</application> (Tom)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Date/Time Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow full timezone names in <link
       linkend="datatype-datetime"><type>timestamp</type></link> input values
       (Joachim Wieland)
      </para>

      <para>
       For example, <literal>'2006-05-24 21:11
       America/New_York'::timestamptz</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Support configurable timezone abbreviations (Joachim Wieland)
      </para>

      <para>
       A desired set of timezone abbreviations can be chosen via the
       configuration parameter <link
       linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</varname></link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</varname></link>
       and <link
       linkend="view-pg-timezone-names"><varname>pg_timezone_names</varname></link>
       views to show supported timezones (Magnus Hagander)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="functions-datetime-table"><function>clock_timestamp()</function></link>,
       <link
       linkend="functions-datetime-table"><function>statement_timestamp()</function></link>,
       and <link
       linkend="functions-datetime-table"><function>transaction_timestamp()</function></link>
       (Bruce)
      </para>

      <para>
       <function>clock_timestamp()</function> is the current wall-clock time,
       <function>statement_timestamp()</function> is the time the current
       statement arrived at the server, and
       <function>transaction_timestamp()</function> is an alias for
       <function>now()</function>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link
       linkend="functions-formatting"><function>to_char()</function></link>
       to print localized month and day names (Euler Taveira de
       Oliveira)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link
       linkend="functions-formatting"><function>to_char(time)</function></link>
       and <link
       linkend="functions-formatting"><function>to_char(interval)</function></link>
       to output <acronym>AM</acronym>/<acronym>PM</acronym> specifications
       (Bruce)
      </para>

      <para>
       Intervals and times are treated as 24-hour periods, e.g.
       <literal>25 hours</literal> is considered <acronym>AM</acronym>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add new function <link
       linkend="functions-datetime-table"><function>justify_interval()</function></link>
       to adjust interval units (Mark Dilger)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow timezone offsets up to 14:59 away from GMT
      </para>

      <para>
       Kiribati uses GMT+14, so we'd better accept that.
      </para>
     </listitem>

     <listitem>
      <para>
       Interval computation improvements (Michael Glaesemann, Bruce)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Other Data Type and Function Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow arrays to contain <literal>NULL</literal> elements (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow assignment to array elements not contiguous with the existing
       entries (Tom)
      </para>

      <para>
       The intervening array positions will be filled with nulls.
       This is per SQL standard.
      </para>
     </listitem>

     <listitem>
      <para>
       New built-in <link linkend="functions-array">operators</link>
       for array-subset comparisons (<literal>@&gt;</literal>,
       <literal>&lt;@</literal>, <literal>&amp;&amp;</literal>) (Teodor, Tom)
      </para>

      <para>
       These operators can be indexed for many data types using
       <acronym>GiST</acronym> or <acronym>GIN</acronym> indexes.
      </para>
     </listitem>

     <listitem>
      <para>
       Add convenient arithmetic <link
       linkend="cidr-inet-operators-table">operations</link> on
       <type>INET</type>/<type>CIDR</type> values (Stephen R. van den
       Berg)
      </para>

      <para>
       The new operators are <literal>&amp;</literal> (and), <literal>|</literal>
       (or), <literal>~</literal> (not), <type>inet</type> <literal>+</literal> <type>int8</type>,
       <type>inet</type> <literal>-</literal> <type>int8</type>, and
       <type>inet</type> <literal>-</literal> <type>inet</type>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add new <link
       linkend="functions-aggregate-statistics-table">aggregate functions</link>
       from SQL:2003 (Neil)
      </para>

      <para>
       The new functions are <function>var_pop()</function>,
       <function>var_samp()</function>, <function>stddev_pop()</function>, and
       <function>stddev_samp()</function>.  <function>var_samp()</function> and
       <function>stddev_samp()</function> are merely renamings of the
       existing aggregates <function>variance()</function> and
       <function>stddev()</function>.  The latter names remain available
       for backward compatibility.
      </para>
     </listitem>

     <listitem>
      <para>
       Add SQL:2003 statistical <link
       linkend="functions-aggregate-statistics-table">aggregates</link>
       (Sergey Koposov)
      </para>

      <para>
       New functions:  <function>regr_intercept()</function>,
       <function>regr_slope()</function>, <function>regr_r2()</function>,
       <function>corr()</function>, <function>covar_samp()</function>,
       <function>covar_pop()</function>, <function>regr_avgx()</function>,
       <function>regr_avgy()</function>, <function>regr_sxy()</function>,
       <function>regr_sxx()</function>, <function>regr_syy()</function>,
       <function>regr_count()</function>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="sql-createdomain">domains</link> to be
       based on other domains (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Properly enforce domain <link
       linkend="ddl-constraints"><literal>CHECK</literal></link> constraints
       everywhere (Neil, Tom)
      </para>

      <para>
       For example, the result of a user-defined function that is
       declared to return a domain type is now checked against the
       domain's constraints. This closes a significant hole in the domain
       implementation.
      </para>
     </listitem>

     <listitem>
      <para>
       Fix problems with dumping renamed <link
       linkend="datatype-serial"><type>SERIAL</type></link> columns
       (Tom)
      </para>

      <para>
       The fix is to dump a <type>SERIAL</type> column by explicitly
       specifying its <literal>DEFAULT</literal> and sequence elements,
       and reconstructing the <type>SERIAL</type> column on reload
       using a new <link linkend="sql-altersequence"><command>ALTER
       SEQUENCE OWNED BY</command></link> command.  This also allows
       dropping a <type>SERIAL</type> column specification.
      </para>
     </listitem>

     <listitem>
      <para>
       Add a server-side sleep function <link
       linkend="functions-datetime-delay"><function>pg_sleep()</function></link>
       (Joachim Wieland)
      </para>
     </listitem>

     <listitem>
      <para>
       Add all comparison operators for the <link
       linkend="datatype-oid"><type>tid</type></link> (tuple id) data
       type (Mark Kirkwood, Greg Stark, Tom)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>PL/pgSQL Server-Side Language Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <literal>TG_table_name</literal> and <literal>TG_table_schema</literal> to
       trigger parameters (Andrew)
      </para>

      <para>
       <literal>TG_relname</literal> is now deprecated.  Comparable
       changes have been made in the trigger parameters for the other
       PLs as well.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <literal>FOR</literal> statements to return values to scalars
       as well as records and row types (Pavel Stehule)
      </para>
     </listitem>

     <listitem>
      <para>
       Add a <literal>BY</literal> clause to the <literal>FOR</literal> loop,
       to control the iteration increment (Jaime Casanova)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>STRICT</literal> to <link
       linkend="plpgsql-statements-sql-onerow"><command>SELECT
       INTO</command></link> (Matt Miller)
      </para>

      <para>
       <literal>STRICT</literal> mode throws an exception if more or less
       than one row is returned by the <command>SELECT</command>, for
       <productname>Oracle PL/SQL</productname> compatibility.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>PL/Perl Server-Side Language Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <literal>table_name</literal> and <literal>table_schema</literal> to
       trigger parameters (Adam Sj&oslash;gren)
      </para>
     </listitem>

     <listitem>
      <para>
       Add prepared queries (Dmitry Karasik)
      </para>
     </listitem>

     <listitem>
      <para>
       Make <literal>$_TD</literal> trigger data a global variable (Andrew)
      </para>

      <para>
       Previously, it was lexical, which caused unexpected sharing
       violations.
      </para>
     </listitem>

     <listitem>
      <para>
       Run PL/Perl and PL/PerlU in separate interpreters, for security
       reasons (Andrew)
      </para>
      <para>
       In consequence, they can no longer share data nor loaded modules.
       Also, if Perl has not been compiled with the requisite flags to
       allow multiple interpreters, only one of these languages can be used
       in any given backend process.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>PL/Python Server-Side Language Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Named parameters are passed as ordinary variables, as well as in the
       <literal>args[]</literal> array (Sven Suursoho)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>table_name</literal> and <literal>table_schema</literal> to
       trigger parameters (Andrew)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow returning of composite types and result sets (Sven Suursoho)
      </para>
     </listitem>

     <listitem>
      <para>
       Return result-set as <literal>list</literal>, <literal>iterator</literal>,
       or <literal>generator </literal>(Sven Suursoho)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow functions to return <literal>void</literal> (Neil)
      </para>
     </listitem>

     <listitem>
      <para>
       Python 2.5 is now supported (Tom)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="app-psql"><application>psql</application></link> Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add new command <literal>\password</literal> for changing role
       password with client-side password encryption (Peter)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <literal>\c</literal> to connect to a new host and port
       number (David, Volkan YAZICI)
      </para>
     </listitem>

     <listitem>
      <para>
       Add tablespace display to <literal>\l+</literal> (Philip Yarra)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve <literal>\df</literal> slash command to include the argument
       names and modes (<literal>OUT</literal> or <literal>INOUT</literal>) of
       the function (David Fetter)
      </para>
     </listitem>

     <listitem>
      <para>
       Support binary <command>COPY</command> (Andreas Pflug)
      </para>
     </listitem>

     <listitem>
      <para>
       Add option to run the entire session in a single transaction
       (Simon)
      </para>

      <para>
       Use option <literal>-1</literal> or <literal>--single-transaction</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Support for automatically retrieving <command>SELECT</command>
       results in batches using a cursor (Chris Mair)
      </para>

      <para>
       This is enabled using <command>\set FETCH_COUNT
       <replaceable>n</replaceable></command>. This
       feature allows large result sets to be retrieved in
       <application>psql</application> without attempting to buffer the entire
       result set in memory.
      </para>
     </listitem>

     <listitem>
      <para>
       Make multi-line values align in the proper column
       (Martijn van Oosterhout)
      </para>

      <para>
       Field values containing newlines are now displayed in a more
       readable fashion.
      </para>
     </listitem>

     <listitem>
      <para>
       Save multi-line statements as a single entry, rather than
       one line at a time (Sergey E. Koposov)
      </para>

      <para>
       This makes up-arrow recall of queries easier.  (This is
       not available on Windows, because that platform uses the native
       command-line editing present in the operating system.)
      </para>
     </listitem>

     <listitem>
      <para>
       Make the line counter 64-bit so it can handle files with more
       than two billion lines (David Fetter)
      </para>
     </listitem>

     <listitem>
      <para>
       Report both the returned data and the command status tag
       for <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE
       RETURNING</command> (Tom)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="app-pgdump"><application>pg_dump</application></link> Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow complex selection of objects to be included or excluded
       by <application>pg_dump</application> (Greg Sabino Mullane)
      </para>

      <para>
       <application>pg_dump</application> now supports multiple <literal>-n</literal>
       (schema) and <literal>-t</literal> (table) options, and adds
       <literal>-N</literal> and <literal>-T</literal> options to exclude objects.
       Also, the arguments of these switches can now be wild-card expressions
       rather than single object names, for example
       <literal>-t 'foo*'</literal>, and a schema can be part of
       a <literal>-t</literal> or <literal>-T</literal> switch, for example
       <literal>-t schema1.table1</literal>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="app-pgrestore"><application>pg_restore</application></link>
       <literal>--no-data-for-failed-tables</literal> option to suppress
       loading data if table creation failed (i.e., the table already
       exists) (Martin Pitt)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="app-pgrestore"><application>pg_restore</application></link>
       option to run the entire session in a single transaction
       (Simon)
      </para>

      <para>
       Use option <literal>-1</literal> or <literal>--single-transaction</literal>.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="libpq"><application>libpq</application></link> Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <link
       linkend="libpq-misc"><function>PQencryptPassword()</function></link>
       to encrypt passwords (Tom)
      </para>

      <para>
       This allows passwords to be sent pre-encrypted for commands
       like <link linkend="sql-alterrole"><command>ALTER ROLE ...
       PASSWORD</command></link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add function <link
       linkend="libpq-threading"><function>PQisthreadsafe()</function></link>
       (Bruce)
      </para>

      <para>
       This allows applications to query the thread-safety status
       of the library.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="libpq-exec-main"><function>PQdescribePrepared()</function></link>,
       <link
       linkend="libpq-exec-main"><function>PQdescribePortal()</function></link>,
       and related functions to return information about previously
       prepared statements and open cursors (Volkan YAZICI)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="libpq-ldap"><acronym>LDAP</acronym></link> lookups
       from <link
       linkend="libpq-pgservice"><filename>pg_service.conf</filename></link>
       (Laurenz Albe)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow a hostname in <link
       linkend="libpq-pgpass"><filename>~/.pgpass</filename></link>
       to match the default socket directory (Bruce)
      </para>

      <para>
       A blank hostname continues to match any Unix-socket connection,
       but this addition allows entries that are specific to one of
       several postmasters on the machine.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><link linkend="ecpg"><application>ecpg</application></link> Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow <link linkend="sql-show"><command>SHOW</command></link> to
       put its result into a variable (Joachim Wieland)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="sql-copy"><command>COPY TO STDOUT</command></link>
       (Joachim Wieland)
      </para>
     </listitem>

     <listitem>
      <para>
       Add regression tests (Joachim Wieland, Michael)
      </para>
     </listitem>

     <listitem>
      <para>
       Major source code cleanups (Joachim Wieland, Michael)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title><application>Windows</application> Port</title>
    <itemizedlist>

     <listitem>
      <para>
       Allow <acronym>MSVC</acronym> to compile the <productname>PostgreSQL</productname>
       server (Magnus, Hiroshi Saito)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <acronym>MSVC</acronym> support for utility commands and <link
       linkend="app-pgdump"><application>pg_dump</application></link> (Hiroshi
       Saito)
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for Windows code pages <literal>1253</literal>,
       <literal>1254</literal>, <literal>1255</literal>, and <literal>1257</literal>
       (Kris Jurka)
      </para>
     </listitem>

     <listitem>
      <para>
       Drop privileges on startup, so that the server can be started from
       an administrative account (Magnus)
      </para>
     </listitem>

     <listitem>
      <para>
       Stability fixes (Qingqing Zhou, Magnus)
      </para>
     </listitem>

     <listitem>
      <para>
       Add native semaphore implementation (Qingqing Zhou)
      </para>

      <para>
       The previous code mimicked SysV semaphores.
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Source Code Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Add <link linkend="gin"><acronym>GIN</acronym></link> (Generalized
       Inverted iNdex) index access method (Teodor, Oleg)
      </para>
     </listitem>

     <listitem>
      <para>
       Remove R-tree indexing (Tom)
      </para>

      <para>
       Rtree has been re-implemented using <link
       linkend="gist"><acronym>GiST</acronym></link>. Among other
       differences, this means that rtree indexes now have support
       for crash recovery via write-ahead logging (WAL).
      </para>
     </listitem>

     <listitem>
      <para>
       Reduce libraries needlessly linked into the backend (Martijn
       van Oosterhout, Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Add a configure flag to allow libedit to be preferred over
       <acronym>GNU</acronym> readline (Bruce)
      </para>

      <para>
       Use configure <link
       linkend="configure"><literal>--with-libedit-preferred</literal></link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow installation into directories containing spaces
       (Peter)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve ability to relocate installation directories (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for <productname>Solaris x86_64</productname> using the
       <productname>Solaris</productname> compiler (Pierre Girard, Theo
       Schlossnagle, Bruce)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <application>DTrace</application> support (Robert Lor)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>PG_VERSION_NUM</literal> for use by third-party
       applications wanting to test the backend version in C using &gt;
       and &lt; comparisons (Bruce)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>XLOG_BLCKSZ</literal> as independent from <literal>BLCKSZ</literal>
       (Mark Wong)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <literal>LWLOCK_STATS</literal> define to report locking
       activity (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Emit warnings for unknown <application>configure</application> options
       (Martijn van Oosterhout)
      </para>
     </listitem>

     <listitem>
      <para>
       Add server support for <quote>plugin</quote> libraries
       that can be used for add-on tasks such as debugging and performance
       measurement (Korry Douglas)
      </para>

      <para>
       This consists of two features: a table of <quote>rendezvous
       variables</quote> that allows separately-loaded shared libraries to
       communicate, and a new configuration parameter <link
       linkend="guc-local-preload-libraries"><varname>local_preload_libraries</varname></link>
       that allows libraries to be loaded into specific sessions without
       explicit cooperation from the client application.  This allows
       external add-ons to implement features such as a PL/pgSQL debugger.
      </para>
     </listitem>

     <listitem>
      <para>
       Rename existing configuration parameter
       <varname>preload_libraries</varname> to <link
       linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</varname></link>
       (Tom)
      </para>

      <para>
       This was done for clarity in comparison to
       <varname>local_preload_libraries</varname>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add new configuration parameter <link
       linkend="guc-server-version-num"><varname>server_version_num</varname></link>
       (Greg Sabino Mullane)
      </para>

      <para>
       This is like <varname>server_version</varname>, but is an
       integer, e.g.  <literal>80200</literal>. This allows applications to
       make version checks more easily.
      </para>
     </listitem>

     <listitem>
      <para>
       Add a configuration parameter <link
       linkend="guc-seq-page-cost"><varname>seq_page_cost</varname></link>
       (Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Re-implement the <link linkend="regress">regression test</link> script as a C program
       (Magnus, Tom)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow loadable modules to allocate shared memory and
       lightweight locks (Marc Munro)
      </para>
     </listitem>

     <listitem>
      <para>
       Add automatic initialization and finalization of dynamically
       loaded libraries (Ralf Engelschall, Tom)
      </para>

      <para>
       New <link linkend="xfunc-c-dynload">functions</link>
       <function>_PG_init()</function> and <function>_PG_fini()</function> are
       called if the library defines such symbols.  Hence we no
       longer need to specify an initialization function in
       <varname>shared_preload_libraries</varname>; we can assume that
       the library used the <function>_PG_init()</function> convention
       instead.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</literal></link>
       header block to all shared object files (Martijn van
       Oosterhout)
      </para>

      <para>
       The magic block prevents version mismatches between loadable object
       files and servers.
      </para>
     </listitem>

     <listitem>
      <para>
        Add shared library support for AIX (Laurenz Albe)
      </para>
     </listitem>

     <listitem>
      <para>
       New <link linkend="datatype-xml"><acronym>XML</acronym></link>
       documentation section (Bruce)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

   <sect3>
    <title>Contrib Changes</title>
    <itemizedlist>

     <listitem>
      <para>
       Major tsearch2 improvements (Oleg, Teodor)
      </para>

      <itemizedlist>

       <listitem>
        <para>
         multibyte encoding support, including <acronym>UTF8</acronym>
        </para>
       </listitem>
       <listitem>
        <para>
         query rewriting support
        </para>
       </listitem>
       <listitem>
        <para>
         improved ranking functions
        </para>
       </listitem>
       <listitem>
        <para>
         thesaurus dictionary support
        </para>
       </listitem>
       <listitem>
        <para>
         Ispell dictionaries now recognize <application>MySpell</application>
         format, used by <application>OpenOffice</application>
        </para>
       </listitem>
       <listitem>
        <para>
         <acronym>GIN</acronym> support
        </para>
       </listitem>

      </itemizedlist>

     </listitem>

     <listitem>
      <para>
       Add adminpack module containing <application>Pgadmin</application> administration
       functions (Dave)
      </para>

      <para>
       These functions provide additional file system access
       routines not present in the default <productname>PostgreSQL</productname>
       server.
      </para>
     </listitem>

     <listitem>
      <para>
       Add sslinfo module (Victor Wagner)
      </para>

      <para>
       Reports information about the current connection's <acronym>SSL</acronym>
       certificate.
      </para>
     </listitem>

     <listitem>
      <para>
       Add pgrowlocks module (Tatsuo)
      </para>

      <para>
       This shows row locking information for a specified table.
      </para>
     </listitem>

     <listitem>
      <para>
       Add hstore module (Oleg, Teodor)
      </para>
     </listitem>

     <listitem>
      <para>
       Add isn module, replacing isbn_issn (Jeremy Kronuz)
      </para>

      <para>
       This new implementation supports <acronym>EAN13</acronym>, <acronym>UPC</acronym>,
       <acronym>ISBN</acronym> (books), <acronym>ISMN</acronym> (music), and
       <acronym>ISSN</acronym> (serials).
      </para>
     </listitem>

     <listitem>
      <para>
       Add index information functions to pgstattuple (ITAGAKI Takahiro,
       Satoshi Nagayasu)
      </para>
     </listitem>

     <listitem>
      <para>
       Add pg_freespacemap module to display free space map information
       (Mark Kirkwood)
      </para>
     </listitem>

     <listitem>
      <para>
       pgcrypto now has all planned functionality (Marko Kreen)
      </para>
      <itemizedlist>
       <listitem>
        <para>
         Include iMath library in pgcrypto to have the public-key encryption
         functions always available.
        </para>
       </listitem>
       <listitem>
        <para>
         Add SHA224 algorithm that was missing in OpenBSD code.
        </para>
       </listitem>
       <listitem>
        <para>
         Activate builtin code for SHA224/256/384/512 hashes on older
         OpenSSL to have those algorithms always available.
        </para>
       </listitem>
       <listitem>
        <para>
         New function gen_random_bytes() that returns cryptographically strong
         randomness.  Useful for generating encryption keys.
        </para>
       </listitem>
       <listitem>
        <para>
         Remove digest_exists(), hmac_exists() and cipher_exists() functions.
        </para>
       </listitem>
      </itemizedlist>
     </listitem>

     <listitem>
      <para>
       Improvements to cube module (Joshua Reich)
      </para>

      <para>
       New functions are <function>cube(float[])</function>,
       <function>cube(float[], float[])</function>, and
       <function>cube_subset(cube, int4[])</function>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add async query capability to dblink (Kai Londenberg,
       Joe Conway)
      </para>
     </listitem>

     <listitem>
      <para>
       New operators for array-subset comparisons (<literal>@&gt;</literal>,
       <literal>&lt;@</literal>, <literal>&amp;&amp;</literal>) (Tom)
      </para>

      <para>
       Various contrib packages already had these operators for their
       datatypes, but the naming wasn't consistent.  We have now added
       consistently named array-subset comparison operators to the core code
       and all the contrib packages that have such functionality.
       (The old names remain available, but are deprecated.)
      </para>
     </listitem>

     <listitem>
      <para>
       Add uninstall scripts for all contrib packages that have install
       scripts (David, Josh Drake)
      </para>
     </listitem>

    </itemizedlist>

   </sect3>

  </sect2>
 </sect1>
