]> granicus.if.org Git - postgresql/commitdiff
Fix SGML sect1-3 alignment in the 8.0.X series.
authorBruce Momjian <bruce@momjian.us>
Tue, 23 Aug 2005 01:22:53 +0000 (01:22 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 23 Aug 2005 01:22:53 +0000 (01:22 +0000)
doc/src/sgml/release.sgml

index 345a5b3404226a9e36e718ae36051c615ee5f8ab..fb3dec68d34075e82a3ce83467589c1d2bfd53de 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.336 2005/05/09 00:09:45 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.337 2005/08/23 01:22:53 momjian Exp $
 -->
 
 <appendix id="release">
@@ -275,8 +275,8 @@ statistics collector</para>
  addresses in <type>INET</> data types (Tom)</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-8-0-1">
    <title>Release 8.0.1</title>
@@ -342,2354 +342,2354 @@ pg_dump/pg_restore</para></listitem>
 typedefs (Michael)</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
-
- <sect1 id="release-8-0">
-  <title>Release 8.0</title>
-
-  <note>
-   <title>Release date</title>
-   <simpara>2005-01-19</simpara>
-  </note>
-
-  <sect2>
-   <title>Overview</title>
-
-   <para>
-    Major changes in this release:
+   </sect2>
+  </sect1>
 
-    <variablelist>
-     <varlistentry>
-      <term>
-       Microsoft Windows Native Server
-      </term>
+  <sect1 id="release-8-0">
+   <title>Release 8.0</title>
 
+   <note>
+    <title>Release date</title>
+    <simpara>2005-01-19</simpara>
+   </note>
+   <sect2>
+    <title>Overview</title>
+    <para>
+     Major changes in this release:
+     <variablelist>
+      <varlistentry>
+       <term>
+        Microsoft Windows Native Server
+       </term>
+       <listitem>
+        <para>
+         This is the first <productname>PostgreSQL</productname> release
+         to run natively on <trademark class=registered>Microsoft Windows</> as
+         a server. It can run as a <productname>Windows</> service. This
+         release supports NT-based Windows releases like
+         <productname>Windows 2000</>, <productname>Windows XP</>, and
+         <productname>Windows 2003</>. Older releases like
+         <productname>Windows 95</>, <productname>Windows 98</>, and
+         <productname>Windows ME</> are not supported because these operating
+         systems do not have the infrastructure to support
+         <productname>PostgreSQL</productname>. A separate installer
+         project has been created to ease installation on
+         <productname>Windows</> &mdash; see <ulink
+         url="http://www.postgresql.org/ftp/win32/"></ulink>.
+        </para>
+        <para>
+         Although tested throughout our release cycle, the Windows port
+         does not have the benefit of years of use in production
+         environments that <productname>PostgreSQL</productname> has on
+         Unix platforms.  Therefore it should be treated with the same
+         level of caution as you would a new product.
+        </para>
+        <para>
+         Previous releases required the Unix emulation toolkit
+         <productname>Cygwin</> in order to run the server on Windows
+         operating systems.  <productname>PostgreSQL</productname> has
+         supported native clients on Windows for many years.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        Savepoints
+       </term>
+       <listitem>
+        <para>
+         Savepoints allow specific parts of a transaction to be aborted
+         without affecting the remainder of the transaction. Prior
+         releases had no such capability; there was no way to recover
+         from a statement failure within a transaction except by
+         aborting the whole transaction. This feature is valuable for
+         application writers who require error recovery within a
+         complex transaction.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        Point-In-Time Recovery
+       </term>
+       <listitem>
+        <para>
+         In previous releases there was no way to recover from disk
+         drive failure except to restore from a previous backup or use
+         a standby replication server.  Point-in-time recovery allows
+         continuous backup of the server.  You can recover either to
+         the point of failure or to some transaction in the past.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        Tablespaces
+       </term>
+       <listitem>
+        <para>
+         Tablespaces allow administrators to select different file systems
+         for storage of individual tables, indexes, and databases.
+         This improves performance and control over disk space
+         usage. Prior releases used <application>initlocation</> and
+         manual symlink management for such tasks.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        Improved Buffer Management, <command>CHECKPOINT</command>,
+        <command>VACUUM</command>
+       </term>
+       <listitem>
+        <para>
+         This release has a more intelligent buffer replacement strategy,
+         which will make better use of available shared buffers and
+         improve performance. The performance impact of vacuum and
+         checkpoints is also lessened.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        Change Column Types
+       </term>
+       <listitem>
+        <para>
+         A column's data type can now be changed with <command>ALTER
+         TABLE</command>.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+        New Perl Server-Side Language
+       </term>
+       <listitem>
+        <para>
+         A new version of the <application>plperl</> server-side language now
+         supports a persistent shared storage area, triggers, returning records
+         and arrays of records, and SPI calls to access the database.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         Comma-separated-value (CSV) support in <command>COPY</command>
+       </term>
+       <listitem>
+        <para>
+         <command>COPY</command> can now read and write
+         comma-separated-value files. It has the flexibility to
+         interpret non-standard quoting and separation characters too.
+        </para>
+       </listitem>
+      </varlistentry>
+     </variablelist>
+    </para>
+   </sect2>
+   <sect2>
+    <title>Migration to version 8.0</title>
+                                       
+    <para>
+     A dump/restore using <application>pg_dump</application> is
+     required for those wishing to migrate data from any previous
+     release.
+    </para>
+    
+    <para>
+     Observe the following incompatibilities:
+     <itemizedlist>
       <listitem>
        <para>
-        This is the first <productname>PostgreSQL</productname> release
-        to run natively on <trademark class=registered>Microsoft Windows</> as
-        a server. It can run as a <productname>Windows</> service. This
-        release supports NT-based Windows releases like
-        <productname>Windows 2000</>, <productname>Windows XP</>, and
-        <productname>Windows 2003</>. Older releases like
-        <productname>Windows 95</>, <productname>Windows 98</>, and
-        <productname>Windows ME</> are not supported because these operating
-        systems do not have the infrastructure to support
-        <productname>PostgreSQL</productname>. A separate installer
-        project has been created to ease installation on
-        <productname>Windows</> &mdash; see <ulink
-        url="http://www.postgresql.org/ftp/win32/"></ulink>.
+        In <option>READ COMMITTED</> serialization mode, volatile functions
+        now see the results of concurrent transactions committed up to the
+        beginning of each statement within the function, rather than up to the
+        beginning of the interactive command that called the function.
        </para>
-
+      </listitem>
+      <listitem>
        <para>
-        Although tested throughout our release cycle, the Windows port
-        does not have the benefit of years of use in production
-        environments that <productname>PostgreSQL</productname> has on
-        Unix platforms.  Therefore it should be treated with the same
-        level of caution as you would a new product.
+        Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
+        use the snapshot of the calling query, and therefore do not see the
+        effects of actions taken after the calling query starts, whether in
+        their own transaction or other transactions.  Such a function must be
+        read-only, too, meaning that it cannot use any SQL commands other than
+        <command>SELECT</>.
        </para>
-
+      </listitem>
+      <listitem>
        <para>
-        Previous releases required the Unix emulation toolkit
-        <productname>Cygwin</> in order to run the server on Windows
-        operating systems.  <productname>PostgreSQL</productname> has
-        supported native clients on Windows for many years.
+        Non-deferred <option>AFTER</> triggers are now fired immediately
+        after completion of the triggering query, rather than upon
+        finishing the current interactive command. This makes a
+        difference when the triggering query occurred within a function:
+        the trigger is invoked before the function proceeds to its next
+        operation.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Savepoints
-      </term>
-
       <listitem>
        <para>
-        Savepoints allow specific parts of a transaction to be aborted
-        without affecting the remainder of the transaction. Prior
-        releases had no such capability; there was no way to recover
-        from a statement failure within a transaction except by
-        aborting the whole transaction. This feature is valuable for
-        application writers who require error recovery within a
-        complex transaction.
+        Server configuration parameters <varname>virtual_host</> and
+        <varname>tcpip_socket</> have been replaced with a more general
+        parameter <varname>listen_addresses</>. Also, the server now listens on
+        <literal>localhost</> by default, which eliminates the need for the
+        <literal>-i</> postmaster switch in many scenarios.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Point-In-Time Recovery
-      </term>
-
       <listitem>
        <para>
-        In previous releases there was no way to recover from disk
-        drive failure except to restore from a previous backup or use
-        a standby replication server.  Point-in-time recovery allows
-        continuous backup of the server.  You can recover either to
-        the point of failure or to some transaction in the past.
+        Server configuration parameters <varname>SortMem</> and
+        <varname>VacuumMem</> have been renamed to <varname>work_mem</>
+        and <varname>maintenance_work_mem</> to better reflect their
+        use. The original names are still supported in
+        <command>SET</command> and <command>SHOW</command>.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Tablespaces
-      </term>
-
       <listitem>
        <para>
-        Tablespaces allow administrators to select different file systems
-        for storage of individual tables, indexes, and databases.
-        This improves performance and control over disk space
-        usage. Prior releases used <application>initlocation</> and
-        manual symlink management for such tasks.
+        Server configuration parameters <varname>log_pid</>,
+        <varname>log_timestamp</>, and <varname>log_source_port</> have been
+        replaced with a more general parameter <varname>log_line_prefix</>.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Improved Buffer Management, <command>CHECKPOINT</command>,
-       <command>VACUUM</command>
-      </term>
-
       <listitem>
        <para>
-        This release has a more intelligent buffer replacement strategy,
-        which will make better use of available shared buffers and
-        improve performance. The performance impact of vacuum and
-        checkpoints is also lessened.
+        Server configuration parameter <varname>syslog</> has been
+        replaced with a more logical <varname>log_destination</> variable to
+        control the log output destination.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       Change Column Types
-      </term>
-
       <listitem>
        <para>
-        A column's data type can now be changed with <command>ALTER
-        TABLE</command>.
+        Server configuration parameter <varname>log_statement</> has been
+        changed so it can selectively log just database modification or
+        data definition statements.  Server configuration parameter
+        <varname>log_duration</> now prints only when <varname>log_statement</>
+        prints the query.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-       New Perl Server-Side Language
-      </term>
-
       <listitem>
        <para>
-        A new version of the <application>plperl</> server-side language now
-        supports a persistent shared storage area, triggers, returning records
-        and arrays of records, and SPI calls to access the database.
+        Server configuration parameter <varname>max_expr_depth</> parameter has
+        been replaced with <varname>max_stack_depth</> which measures the
+        physical stack size rather than the expression nesting depth. This
+        helps prevent session termination due to stack overflow caused by
+        recursive functions.
        </para>
       </listitem>
-     </varlistentry>
-
-     <varlistentry>
-      <term>
-        Comma-separated-value (CSV) support in <command>COPY</command>
-      </term>
-
       <listitem>
        <para>
-        <command>COPY</command> can now read and write
-        comma-separated-value files. It has the flexibility to
-        interpret non-standard quoting and separation characters too.
+        The <function>length()</> function no longer counts trailing spaces in
+        <type>CHAR(n)</> values.
        </para>
       </listitem>
-     </varlistentry>
-
-    </variablelist>
-   </para>
-  </sect2>
-
-  <sect2>
-   <title>Migration to version 8.0</title>
-                                      
-   <para>
-    A dump/restore using <application>pg_dump</application> is
-    required for those wishing to migrate data from any previous
-    release.
-   </para>
-   
-   <para>
-    Observe the following incompatibilities:
-
-    <itemizedlist>
-
-     <listitem>
-      <para>
-       In <option>READ COMMITTED</> serialization mode, volatile functions
-       now see the results of concurrent transactions committed up to the
-       beginning of each statement within the function, rather than up to the
-       beginning of the interactive command that called the function.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
-       use the snapshot of the calling query, and therefore do not see the
-       effects of actions taken after the calling query starts, whether in
-       their own transaction or other transactions.  Such a function must be
-       read-only, too, meaning that it cannot use any SQL commands other than
-       <command>SELECT</>.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Non-deferred <option>AFTER</> triggers are now fired immediately
-       after completion of the triggering query, rather than upon
-       finishing the current interactive command. This makes a
-       difference when the triggering query occurred within a function:
-       the trigger is invoked before the function proceeds to its next
-       operation.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Server configuration parameters <varname>virtual_host</> and
-       <varname>tcpip_socket</> have been replaced with a more general
-       parameter <varname>listen_addresses</>. Also, the server now listens on
-       <literal>localhost</> by default, which eliminates the need for the
-       <literal>-i</> postmaster switch in many scenarios.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Server configuration parameters <varname>SortMem</> and
-       <varname>VacuumMem</> have been renamed to <varname>work_mem</>
-       and <varname>maintenance_work_mem</> to better reflect their
-       use. The original names are still supported in
-       <command>SET</command> and <command>SHOW</command>.
-      </para>
-     </listitem>
-
      <listitem>
       <para>
-       Server configuration parameters <varname>log_pid</>,
-       <varname>log_timestamp</>, and <varname>log_source_port</> have been
-       replaced with a more general parameter <varname>log_line_prefix</>.
+       Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
+       integer, not the leftmost N bits as before.
       </para>
      </listitem>
-
      <listitem>
       <para>
-       Server configuration parameter <varname>syslog</> has been
-       replaced with a more logical <varname>log_destination</> variable to
-       control the log output destination.
+       Updating an element or slice of a NULL array value now produces
+       a non-NULL array result, namely an array containing
+       just the assigned-to positions.
       </para>
      </listitem>
-
+      <listitem>
+       <para>
+        Syntax checking of array input values has been tightened up
+        considerably. Junk that was previously allowed in odd places with
+        odd results now causes an error. Empty-string element values
+        must now be written as <literal>""</>, rather than writing nothing.
+        Also changed behavior with respect to whitespace surrounding
+        array elements: trailing whitespace is now ignored, for symmetry
+        with leading whitespace (which has always been ignored).
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        Overflow in integer arithmetic operations is now detected and
+        reported as an error.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        The arithmetic operators associated with the single-byte
+        <type>"char"</> data type have been removed.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        The <function>extract()</> function (also called
+        <function>date_part</>) now returns the proper year for BC dates.
+        It previously returned one less than the correct year. The
+        function now also returns the proper values for millennium and
+        century.
+       </para>
+      </listitem>
      <listitem>
       <para>
-       Server configuration parameter <varname>log_statement</> has been
-       changed so it can selectively log just database modification or
-       data definition statements.  Server configuration parameter
-       <varname>log_duration</> now prints only when <varname>log_statement</>
-       prints the query.
+       <type>CIDR</> values now must have their non-masked bits be zero.
+       For example, we no longer allow
+       <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
+       values should never have been accepted by
+       <productname>PostgreSQL</productname> and will now be rejected.
       </para>
      </listitem>
-
+      <listitem>
+       <para>
+        <command>EXECUTE</command> now returns a completion tag that
+        matches the executed statement.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        <application>psql</>'s <command>\copy</> command now reads or
+        writes to the query's <literal>stdin/stdout</>, rather than
+        <application>psql</>'s <literal>stdin/stdout</>. The previous
+        behavior can be accessed via new
+        <option>pstdin</>/<option>pstdout</> parameters.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+       The JDBC client interface has been removed from the core
+       distribution, and is now hosted at <ulink url=
+       "http://jdbc.postgresql.org"></ulink>.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+       The Tcl client interface has also been removed. There are several
+       Tcl interfaces now hosted at <ulink url=
+       "http://gborg.postgresql.org"></ulink>.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        The server now uses its own time zone database, rather than the
+        one supplied by the operating system. This will provide consistent
+        behavior across all platforms.  In most cases, there should be
+        little noticeable difference in time zone behavior, except that
+        the time zone names used by <command>SET</>/<command>SHOW</>
+        <varname>TimeZone</> may
+        be different from what your platform provides.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        <application>Configure</>'s threading option no longer requires
+        users to run tests or edit configuration files; threading options
+        are now detected automatically.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        Now that tablespaces have been implemented,
+        <application>initlocation</> has been removed.
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+        The API for user-defined GiST indexes has been changed. The
+        Union and PickSplit methods are now passed a pointer to a
+        special <structname>GistEntryVector</structname> structure,
+        rather than a <type>bytea</type>.
+       </para>
+      </listitem>
+     </itemizedlist>
+    </para>
+   </sect2>
+   <sect2>
+    <title>Deprecated Features</title>
+    <para>
+     Some aspects of <productname>PostgreSQL</productname>'s behavior
+     have been determined to be suboptimal. For the sake of backward
+     compatibility these have not been removed in 8.0, but they are
+     considered deprecated and will be removed in the next major
+     release.
+     </para>
+    <itemizedlist>
      <listitem>
       <para>
-       Server configuration parameter <varname>max_expr_depth</> parameter has
-       been replaced with <varname>max_stack_depth</> which measures the
-       physical stack size rather than the expression nesting depth. This
-       helps prevent session termination due to stack overflow caused by
-       recursive functions.
+       The 8.1 release will remove the <function>to_char()</> function
+       for intervals.
       </para>
      </listitem>
-
+      <listitem>
+       <para>
+        The server now warns of empty strings passed to
+        <type>oid</type>/<type>float4</type>/<type>float8</type> data
+        types, but continues to interpret them as zeroes as before.
+        In the next major release, empty strings will be considered
+        invalid input for these data types.
+       </para>
+      </listitem>
      <listitem>
       <para>
-       The <function>length()</> function no longer counts trailing spaces in
-       <type>CHAR(n)</> values.
+       By default, tables in <productname>PostgreSQL</productname> 8.0
+       and earlier are created with <type>OID</>s. In the next release,
+       this will <emphasis>not</emphasis> be the case: to create a table
+       that contains <type>OID</>s, the <option>WITH OIDS</> clause must
+       be specified or the <varname>default_with_oids</varname>
+       configuration parameter must be set. Users are encouraged to
+       explicitly specify <option>WITH OIDS</> if their tables
+       require OIDs for compatibility with future releases of
+       <productname>PostgreSQL</productname>.
       </para>
      </listitem>
-
-    <listitem>
-     <para>
-      Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
-      integer, not the leftmost N bits as before.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Updating an element or slice of a NULL array value now produces
-      a non-NULL array result, namely an array containing
-      just the assigned-to positions.
-     </para>
-    </listitem>
-
-     <listitem>
-      <para>
-       Syntax checking of array input values has been tightened up
-       considerably. Junk that was previously allowed in odd places with
-       odd results now causes an error. Empty-string element values
-       must now be written as <literal>""</>, rather than writing nothing.
-       Also changed behavior with respect to whitespace surrounding
-       array elements: trailing whitespace is now ignored, for symmetry
-       with leading whitespace (which has always been ignored).
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Overflow in integer arithmetic operations is now detected and
-       reported as an error.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       The arithmetic operators associated with the single-byte
-       <type>"char"</> data type have been removed.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       The <function>extract()</> function (also called
-       <function>date_part</>) now returns the proper year for BC dates.
-       It previously returned one less than the correct year. The
-       function now also returns the proper values for millennium and
-       century.
-      </para>
-     </listitem>
-
-    <listitem>
-     <para>
-      <type>CIDR</> values now must have their non-masked bits be zero.
-      For example, we no longer allow
-      <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
-      values should never have been accepted by
-      <productname>PostgreSQL</productname> and will now be rejected.
-     </para>
-    </listitem>
-
-     <listitem>
-      <para>
-       <command>EXECUTE</command> now returns a completion tag that
-       matches the executed statement.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       <application>psql</>'s <command>\copy</> command now reads or
-       writes to the query's <literal>stdin/stdout</>, rather than
-       <application>psql</>'s <literal>stdin/stdout</>. The previous
-       behavior can be accessed via new
-       <option>pstdin</>/<option>pstdout</> parameters.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-      The JDBC client interface has been removed from the core
-      distribution, and is now hosted at <ulink url=
-      "http://jdbc.postgresql.org"></ulink>.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-      The Tcl client interface has also been removed. There are several
-      Tcl interfaces now hosted at <ulink url=
-      "http://gborg.postgresql.org"></ulink>.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       The server now uses its own time zone database, rather than the
-       one supplied by the operating system. This will provide consistent
-       behavior across all platforms.  In most cases, there should be
-       little noticeable difference in time zone behavior, except that
-       the time zone names used by <command>SET</>/<command>SHOW</>
-       <varname>TimeZone</> may
-       be different from what your platform provides.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       <application>Configure</>'s threading option no longer requires
-       users to run tests or edit configuration files; threading options
-       are now detected automatically.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Now that tablespaces have been implemented,
-       <application>initlocation</> has been removed.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       The API for user-defined GiST indexes has been changed. The
-       Union and PickSplit methods are now passed a pointer to a
-       special <structname>GistEntryVector</structname> structure,
-       rather than a <type>bytea</type>.
-      </para>
-     </listitem>
-
     </itemizedlist>
-   </para>
-  </sect2>
-
-  <sect2>
-   <title>Deprecated Features</title>
-
-   <para>
-    Some aspects of <productname>PostgreSQL</productname>'s behavior
-    have been determined to be suboptimal. For the sake of backward
-    compatibility these have not been removed in 8.0, but they are
-    considered deprecated and will be removed in the next major
-    release.
+   </sect2>
+   <sect2>
+    <title>Changes</title>
+    <para>
+     Below you will find a detailed account of the changes between
+     release 8.0 and the previous major release.
     </para>
-
-   <itemizedlist>
-    <listitem>
-     <para>
-      The 8.1 release will remove the <function>to_char()</> function
-      for intervals.
-     </para>
-    </listitem>
-
-     <listitem>
-      <para>
-       The server now warns of empty strings passed to
-       <type>oid</type>/<type>float4</type>/<type>float8</type> data
-       types, but continues to interpret them as zeroes as before.
-       In the next major release, empty strings will be considered
-       invalid input for these data types.
-      </para>
-     </listitem>
-
-    <listitem>
-     <para>
-      By default, tables in <productname>PostgreSQL</productname> 8.0
-      and earlier are created with <type>OID</>s. In the next release,
-      this will <emphasis>not</emphasis> be the case: to create a table
-      that contains <type>OID</>s, the <option>WITH OIDS</> clause must
-      be specified or the <varname>default_with_oids</varname>
-      configuration parameter must be set. Users are encouraged to
-      explicitly specify <option>WITH OIDS</> if their tables
-      require OIDs for compatibility with future releases of
-      <productname>PostgreSQL</productname>.
-     </para>
-    </listitem>
-   </itemizedlist>
-  </sect2>
-
-  <sect2>
-   <title>Changes</title>
-
-   <para>
-    Below you will find a detailed account of the changes between
-    release 8.0 and the previous major release.
-   </para>
-
-  <sect3>
-   <title>Performance Improvements</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Support cross-data-type index usage (Tom)
-     </para>
-     <para>
-      Before this change, many queries would not use an index if the data
-      types did not match exactly. This improvement makes index usage more
-      intuitive and consistent.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New buffer replacement strategy that improves caching (Jan)
-     </para>
-     <para>
-      Prior releases used a least-recently-used (LRU) cache to keep
-      recently referenced pages in memory. The LRU algorithm
-      did not consider the number of times a specific cache entry was
-      accessed, so large table scans could force out useful cache pages.
-      The new cache algorithm uses four separate lists to track most
-      recently used and most frequently used cache pages and dynamically 
-      optimize their replacement based on the work load. This should
-      lead to much more efficient use of the shared buffer cache.
-      Administrators who have tested shared buffer sizes in the past
-      should retest with this new cache replacement policy.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add subprocess to write dirty buffers periodically to reduce
-      checkpoint writes (Jan)
-     </para>
-     <para>
-      In previous releases, the checkpoint process, which runs every few
-      minutes, would write all dirty buffers to the operating system's
-      buffer cache then flush all dirty operating system buffers to
-      disk. This resulted in a periodic spike in disk usage that often
-      hurt performance. The new code uses a background writer to trickle
-      disk writes at a steady pace so checkpoints have far fewer dirty
-      pages to write to disk. Also, the new code does not issue a global
-      <function>sync()</> call, but instead <function>fsync()</>s just
-      the files written since the last checkpoint. This should improve
-      performance and minimize degradation during checkpoints.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add ability to prolong vacuum to reduce performance impact (Jan)
-     </para>
-     <para>
-      On busy systems, <command>VACUUM</command> performs many I/O
-      requests which can hurt performance for other users. This
-      release allows you to slow down <command>VACUUM</command> to
-      reduce its impact on other users, though this increases the
-      total duration of <command>VACUUM</command>.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
-     </para>
-     <para>
-      This improves the way indexes are scanned when many duplicate
-      values exist in the index.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Use dynamically-generated table size estimates while planning (Tom)
-     </para>
-     <para>
-      Formerly the planner estimated table sizes using the values seen
-      by the last <command>VACUUM</command> or <command>ANALYZE</command>,
-      both as to physical table size (number of pages) and number of rows.
-      Now, the current physical table size is obtained from the kernel,
-      and the number of rows is estimated by multiplying the table size
-      by the row density (rows per page) seen by the last
-      <command>VACUUM</command> or <command>ANALYZE</command>.  This should
-      produce more reliable estimates in cases where the table size has
-      changed significantly since the last housekeeping command.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improved index usage with <literal>OR</> clauses (Tom)
-     </para>
-     <para>
-      This allows the optimizer to use indexes in statements with many OR
-      clauses that would not have been indexed in the past.  It can also use
-      multi-column indexes where the first column is specified and the second
-      column is part of an <literal>OR</> clause.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve matching of partial index clauses (Tom)
-     </para>
-     <para>
-      The server is now smarter about using partial indexes in queries
-      involving complex <option>WHERE</> clauses.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve performance of the GEQO optimizer (Tom)
-     </para>
-     <para>
-      The GEQO optimizer is used to plan queries involving many tables (by
-      default, twelve or more). This release speeds up the way queries are
-      analyzed to decrease time spent in optimization.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Miscellaneous optimizer improvements
-     </para>
-     <para>
-      There is not room here to list all the minor improvements made, but
-      numerous special cases work better than in prior releases.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve lookup speed for C functions (Tom)
-     </para>
-     <para>
-      This release uses a hash table to lookup information for dynamically
-      loaded C functions. This improves their speed so they perform nearly as
-      quickly as functions that are built into the server executable.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add type-specific <command>ANALYZE</command> statistics
-      capability (Mark Cave-Ayland)
-     </para>
-     <para>
-      This feature allows more flexibility in generating statistics
-      for non-standard data types.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <command>ANALYZE</command> now collects statistics for
-      expression indexes (Tom)
-     </para>
-     <para>
-      Expression indexes (also called functional indexes) allow users to
-      index not just columns but the results of expressions and function
-      calls. With this release, the optimizer can gather and use statistics
-      about the contents of expression indexes.  This will greatly improve
-      the quality of planning for queries in which an expression index is
-      relevant.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New two-stage sampling method for <command>ANALYZE</command>
-      (Manfred Koizar)
-     </para>
-     <para>
-      This gives better statistics when the density of valid rows is very
-      different in different regions of a table.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Speed up <command>TRUNCATE</command> (Tom)
-     </para>
-     <para>
-      This buys back some of the performance loss observed in 7.4, while still
-      keeping <command>TRUNCATE</command> transaction-safe.
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Server Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Add WAL file archiving and point-in-time recovery (Simon Riggs)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add tablespaces so admins can control disk layout (Gavin)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add a built-in log rotation program (Andreas Pflug)
-     </para>
-     <para>
-      It is now possible to log server messages conveniently without
-      relying on either <application>syslog</> or an external log
-      rotation program.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add new read-only server configuration parameters to show server
-      compile-time settings: <varname>block_size</>,
-      <varname>integer_datetimes</>, <varname>max_function_args</>,
-      <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
-      <literal>all</> remove special meaning of these terms in
-      <filename>pg_hba.conf</> (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Use clearer IPv6 name <literal>::1/128</> for
-      <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Rename server configuration parameters <varname>SortMem</> and
-      <varname>VacuumMem</> to <varname>work_mem</> and
-      <varname>maintenance_work_mem</> (Old names still supported) (Tom)
-     </para>
-     <para>
-      This change was made to clarify that bulk operations such as index and
-      foreign key creation use <varname>maintenance_work_mem</>, while
-      <varname>work_mem</> is for workspaces used during query execution.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow logging of session disconnections using server configuration
-      <varname>log_disconnections</> (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add new server configuration parameter <varname>log_line_prefix</> to
-      allow control of information emitted in each log line (Andrew)
-     </para>
-     <para>
-      Available information includes user name, database name, remote IP
-      address, and session start time.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove server configuration parameters <varname>log_pid</>,
-      <varname>log_timestamp</>, <varname>log_source_port</>; functionality
-      superseded by <varname>log_line_prefix</> (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
-      parameters with a unified <varname>listen_addresses</> parameter
-      (Andrew, Tom)
-     </para>
-     <para>
-      <varname>virtual_host</> could only specify a single IP address to
-      listen on.  <varname>listen_addresses</> allows multiple addresses
-      to be specified.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Listen on localhost by default, which eliminates the need for the
-      <option>-i</> postmaster switch in many scenarios (Andrew)
-     </para>
-     <para>
-      Listening on localhost (<literal>127.0.0.1</>) opens no new
-      security holes but allows configurations like Windows and JDBC,
-      which do not support local sockets, to work without special
-      adjustments.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove <varname>syslog</> server configuration parameter, and add more
-      logical <varname>log_destination</> variable to control log output
-      location (Magnus)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Change server configuration parameter <varname>log_statement</> to take
-      values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
-      <varname>none</> to select which queries are logged (Bruce)
-     </para>
-     <para>
-      This allows administrators to log only data definition changes or
-      only data modification statements.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Some logging-related configuration parameters could formerly be adjusted
-      by ordinary users, but only in the <quote>more verbose</> direction.
-      They are now treated more strictly: only superusers can set them.
-      However, a superuser may use <command>ALTER USER</> to provide per-user
-      settings of these values for non-superusers.  Also, it is now possible
-      for superusers to set values of superuser-only configuration parameters
-      via <literal>PGOPTIONS</>.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow configuration files to be placed outside the data directory (mlw)
-     </para>
-     <para>
-      By default, configuration files are kept in the cluster's top directory.
-      With this addition, configuration files can be placed outside the
-      data directory, easing administration.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Plan prepared queries only when first executed so constants can be
-      used for statistics (Oliver Jowett)
-     </para>
-     <para>
-      Prepared statements plan queries once and execute them many
-      times. While prepared queries avoid the overhead of re-planning
-      on each use, the quality of the plan suffers from not knowing the exact
-      parameters to be used in the query.  In this release, planning of
-      unnamed prepared statements is delayed until the first execution,
-      and the actual parameter values of that execution are used as
-      optimization hints.  This allows use of out-of-line parameter passing
-      without incurring a performance penalty.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>DECLARE CURSOR</command> to take parameters
-      (Oliver Jowett)
-     </para>
-     <para>
-      It is now useful to issue <command>DECLARE CURSOR</command> in a
-      <function>Parse</> message with parameters. The parameter values
-      sent at <function>Bind</> time will be substituted into the
-      execution of the cursor's query.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix hash joins and aggregates of <type>inet</type> and
-      <type>cidr</type> data types (Tom)
-     </para>
-     <para>
-      Release 7.4 handled hashing of mixed <type>inet</type> and
-      <type>cidr</type> values incorrectly.  (This bug did not exist
-      in prior releases because they wouldn't try to hash either
-      data type.)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <varname>log_duration</> print only when <varname>log_statement</>
-      prints the query (Ed L.)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Query Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Add savepoints (nested transactions) (Alvaro)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Unsupported isolation levels are now accepted and promoted to the
-      nearest supported level (Peter)
-     </para>
-     <para>
-      The SQL specification states that if a database doesn't support a
-      specific isolation level, it should use the next more restrictive level.
-      This change complies with that recommendation.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>BEGIN WORK</command> to specify transaction
-      isolation levels like <command>START TRANSACTION</command> does
-      (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix table permission checking for cases in which rules generate
-      a query type different from the originally submitted query (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Implement dollar quoting to simplify single-quote usage (Andrew, Tom, 
-      David Fetter)
-     </para>
-     <para>
-      In previous releases, because single quotes had to be used to
-      quote a function's body, the use of single quotes inside the
-      function text required use of two single quotes or other error-prone
-      notations. With this release we add the ability to use "dollar
-      quoting" to quote a block of text.  The ability to use different
-      quoting delimiters at different nesting levels greatly simplifies
-      the task of quoting correctly, especially in complex functions.
-      Dollar quoting can be used anywhere quoted text is needed.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
-     </para>
-     <para>
-      <option>CASE</> no longer evaluates the tested expression multiple
-      times. This has benefits when the expression is complex or is
-      volatile.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Test <option>HAVING</> before computing target list of an
-      aggregate query (Tom)
-     </para>
-     <para>
-      Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
-      ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
-      could fail with divide-by-zero.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Replace <varname>max_expr_depth</> parameter with
-      <varname>max_stack_depth</> parameter, measured in kilobytes of stack
-      size (Tom)
-     </para>
-     <para>
-     This gives us a fairly bulletproof defense against crashing due to 
-     runaway recursive functions. Instead of measuring the depth of expression
-     nesting, we now directly measure the size of the execution stack.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow arbitrary row expressions (Tom)
-     </para>
-     <para>
-      This release allows SQL expressions to contain arbitrary composite
-      types, that is, row values. It also allows functions to more easily
-      take rows as arguments and return row values.
-     </para>
-    </listitem>
-      
-    <listitem>
-     <para>
-      Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
-      in row and subselect comparisons (Fabien Coelho)
-     </para>
-    </listitem>
-      
-    <listitem>
-     <para>
-      Avoid locale-specific case conversion of basic ASCII letters in
-      identifiers and keywords (Tom)
-     </para>
-     <para>
-      This solves the <quote>Turkish problem</> with mangling of words
-      containing <literal>I</> and  <literal>i</>.  Folding of characters
-      outside the 7-bit-ASCII set is still locale-aware.
-     </para>
-    </listitem>
-      
-    <listitem>
-     <para>
-      Improve syntax error reporting (Fabien, Tom)
-     </para>
-     <para>
-      Syntax error reports are more useful than before.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Change <command>EXECUTE</command> to return a completion tag
-      matching the executed statement (Kris Jurka)
-     </para>
-     <para>
-      Previous releases return an <command>EXECUTE</command> tag for
-      any <command>EXECUTE</command> call. In this release, the tag
-      returned will reflect the command executed.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
-     </para>
-     <para>
-      Such a clause makes no logical sense, but in some cases the rule
-      decompiler formerly produced this syntax.
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Object Manipulation Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Add <command>COMMENT ON</> for casts, conversions, languages,
-      operator classes, and large objects (Christopher)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add new server configuration parameter <varname>default_with_oids</> to
-      control whether tables are created with <type>OID</>s by default (Neil)
-     </para>
-     <para>
-      This allows administrators to control whether <command>CREATE
-      TABLE</command> commands create tables with or without <type>OID</>
-      columns by default.  (Note: the current factory default setting for
-      <varname>default_with_oids</> is <literal>TRUE</>, but the default
-      will become <literal>FALSE</> in future releases.)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
-      <command>CREATE TABLE AS</command> (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
-      column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
-      (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow composite types as table columns (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>ALTER ... ADD COLUMN</> with defaults and
-      <option>NOT NULL</> constraints; works per SQL spec (Rod)
-     </para>
-     <para>
-      It is now possible for <option>ADD COLUMN</> to create a column
-      that is not initially filled with NULLs, but with a specified
-      default value.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
-     </para>
-     <para>
-      It is now possible to alter a column's data type without dropping
-      and re-adding the column.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow multiple <command>ALTER</> actions in a single <command>ALTER
-      TABLE</command> command (Rod)
-     </para>
-     <para>
-      This is particularly useful for <command>ALTER</> commands that
-      rewrite the table (which include <option>ALTER COLUMN TYPE</> and
-      <option>ADD COLUMN</> with a default). By grouping
-      <command>ALTER</> commands together, the table need be rewritten
-      only once.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
-      columns (Tom)
-     </para>
-     <para>
-      This falls out from the new capability of specifying defaults for new
-      columns.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow changing the owners of aggregates, conversions, databases,
-      functions, operators, operator classes, schemas, types, and tablespaces
-      (Christopher, Euler Taveira de Oliveira)
-     </para>
-     <para>
-      Previously this required modifying the system tables directly.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow temporary object creation to be limited to <option>SECURITY
-      DEFINER</> functions (Sean Chittenden)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
-     </para>
-     <para>
-      Prior to this release, there was no way to clear an auto-cluster
-      specification except to modify the system tables.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Constraint/Index/<type>SERIAL</> names are now
-      <replaceable>table_column_type</>
-      with numbers appended to guarantee uniqueness within the schema
-      (Tom)
-     </para>
-     <para>
-      The SQL specification states that such names should be unique
-      within a schema.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>pg_get_serial_sequence()</> to return a
-      <type>SERIAL</> column's sequence name (Christopher)
-     </para>
-     <para>
-      This allows automated scripts to reliably find the <type>SERIAL</>
-      sequence name.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Warn when primary/foreign key data type mismatch requires costly lookup
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <command>ALTER INDEX</> command to allow moving of indexes
-      between tablespaces (Gavin)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <command>ALTER TABLE OWNER</> change dependent sequence
-      ownership too (Alvaro)
-     </para>
-    </listitem>
-
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Utility Command Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Allow <command>CREATE SCHEMA</command> to create triggers,
-      indexes, and sequences (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
-      Coelho)
-     </para>
-     <para>
-      This allows <option>ALSO</> to be added to rule creation to contrast it with
-      <option>INSTEAD</> rules.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
-     </para>
-     <para>
-      This allows the <command>LOCK</command> command to fail if it
-      would have to wait for the requested lock.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <command>COPY</command> to read and write
-      comma-separated-value (CSV) files (Andrew, Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Generate error if the <command>COPY</command> delimiter and NULL
-      string conflict (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <command>GRANT</command>/<command>REVOKE</command> behavior
-      follows the SQL spec more closely
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Avoid locking conflict between <command>CREATE INDEX</command>
-      and <command>CHECKPOINT</command> (Tom)
-     </para>
-     <para>
-      In 7.3 and 7.4, a long-running B-tree index build could block concurrent
-      <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
-      WAL log could not be recycled.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Database-wide <command>ANALYZE</command> does not hold locks
-      across tables (Tom)
-     </para>
-     <para>
-      This reduces the potential for deadlocks against other backends
-      that want exclusive locks on tables.  To get the benefit of this
-      change, do not execute database-wide <command>ANALYZE</command>
-      inside a transaction block (<command>BEGIN</command> block); it
-      must be able to commit and start a new transaction for each
-      table.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <command>REINDEX</command> does not exclusively lock the index's
-      parent table anymore
-     </para>
-     <para>
-      The index itself is still exclusively locked, but readers of the
-      table can continue if they are not using the particular index
-      being rebuilt.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Erase MD5 user passwords when a user is renamed (Bruce)
-     </para>
-     <para>
-      <productname>PostgreSQL</productname> uses the user name as salt
-      when encrypting passwords via MD5. When a user's name is changed,
-      the salt will no longer match the stored MD5 password, so the
-      stored password becomes useless.  In this release a notice is
-      generated and the password is cleared.  A new password must then
-      be assigned if the user is to be able to log in with a password.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
-     </para>
-     <para>
-      Windows does not have a <literal>kill</> command to send signals to
-      backends so this capability was added to <application>pg_ctl</>.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Information schema improvements
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>--pwfile</> option to
-      <application>initdb</application> so the initial password can be
-      set by GUI tools (Magnus)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Detect locale/encoding mismatch in
-      <application>initdb</application> (Peter)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>register</> command to <application>pg_ctl</> to
-      register Windows operating system service (Dave Page)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Data Type and Function Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      More complete support for composite types (row types)  (Tom)
-     </para>
-     <para>
-      Composite values can be used in many places where only scalar values
-      worked before.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Reject non-rectangular array values as erroneous (Joe)
-     </para>
-     <para>
-      Formerly, <function>array_in</> would silently build a
-      surprising result.
-     </para>
-    </listitem>
-
-     <listitem>
-      <para>
-       Overflow in integer arithmetic operations is now detected (Tom)
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       The arithmetic operators associated with the single-byte
-       <type>"char"</> data type have been removed.
-      </para>
-      <para>
-       Formerly, the parser would select these operators in many situations
-       where an <quote>unable to select an operator</> error would be more
-       appropriate, such as <literal>null * null</>.  If you actually want
-       to do arithmetic on a <type>"char"</> column, you can cast it to
-       integer explicitly.
-      </para>
-     </listitem>
-
-    <listitem>
-      <para>
-       Syntax checking of array input values considerably tightened up (Joe)
-      </para>
-     <para>
-       Junk that was previously allowed in odd places with odd results
-       now causes an <literal>ERROR</>, for example, non-whitespace
-       after the closing right brace.
-      </para>
-    </listitem>
-
-    <listitem>
-      <para>
-       Empty-string array element values must now be written as
-       <literal>""</>, rather than writing nothing (Joe)
-      </para>
-     <para>
-       Formerly, both ways of writing an empty-string element value were
-       allowed, but now a quoted empty string is required.  The case where
-       nothing at all appears will probably be considered to be a NULL
-       element value in some future release.
-      </para>
-    </listitem>
-
-    <listitem>
-      <para>
-       Array element trailing whitespace is now ignored (Joe)
-      </para>
-     <para>
-       Formerly leading whitespace was ignored, but trailing whitespace
-       between an element value and the delimiter or right brace was
-       significant.  Now trailing whitespace is also ignored.
-      </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Emit array values with explicit array bounds when lower bound is not one
-      (Joe)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <function>netmask</> and <function>hostmask</> functions
-      return maximum-length mask length (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Change factorial function to return <type>numeric</type> (Gavin)
-     </para>
-     <para>
-      Returning <type>numeric</type> allows the factorial function to
-      work for a wider range of input values.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <function>to_char</>/<function>to_date()</> date conversion
-      improvements (Kurt Roeckx, Fabien Coelho)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <function>length()</> disregard trailing spaces in
-      <type>CHAR(n)</> (Gavin)
-     </para>
-     <para>
-      This change was made to improve consistency: trailing spaces are
-      semantically insignificant in <type>CHAR(n)</> data, so they
-      should not be counted by <function>length()</>.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Warn about empty string being passed to
-      <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
-     </para>
-     <para>
-      8.1 will throw an error instead.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow leading or trailing whitespace in
-      <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
-      input routines
-      (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Better support for IEEE <literal>Infinity</> and <literal>NaN</>
-      values in <type>float4</type>/<type>float8</type> (Neil)
-     </para>
-     <para>
-      These should now work on all platforms that support IEEE-compliant
-      floating point arithmetic.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix <function>to_char</function> for <literal>1 BC</>
-      (previously it returned <literal>1 AD</>) (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix <function>date_part(year)</> for BC dates (previously it
-      returned one less than the correct year) (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix <function>date_part()</> to return the proper millennium and
-      century (Fabien Coelho)
-     </para>
-     <para>
-      In previous versions, the century and millennium results had a wrong
-      number and started in the wrong year, as compared to standard
-      reckoning of such things.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>ceiling()</> as an alias for <function>ceil()</>,
-      and <function>power()</> as an alias for <function>pow()</> for
-      standards compliance (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Change <function>ln()</>, <function>log()</>,
-      <function>power()</>, and <function>sqrt()</> to emit the correct
-      <literal>SQLSTATE</> error codes for certain error conditions, as
-      specified by SQL:2003 (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>generate_series()</> functions to simplify working
-      with numeric sets (Joe)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Fix <function>upper/lower/initcap()</> functions to work with
-      multibyte encodings (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add boolean and bitwise integer <option>AND</>/<option>OR</>
-      aggregates (Fabien Coelho)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New session information functions to return network addresses for client
-      and server (Sean Chittenden)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add function to determine the area of a closed path (Sean Chittenden)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add function to send cancel request to other backends (Magnus)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <type>interval</> plus <type>datetime</> operators (Tom)
-     </para>
-     <para>
-      The reverse ordering, <type>datetime</> plus <type>interval</>,
-      was already supported, but both are required by the SQL standard.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Casting an integer to <type>BIT(N)</> selects the rightmost N bits
-      of the integer
-      (Tom)
-     </para>
-     <para>
-      In prior releases, the leftmost N bits were selected, but this was
-      deemed unhelpful, not to mention inconsistent with casting from bit
-      to int.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Require <type>CIDR</> values to have all non-masked bits be zero
-      (Kevin Brintnall)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Server-Side Language Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      In <literal>READ COMMITTED</> serialization mode, volatile functions
-      now see the results of concurrent transactions committed up to the
-      beginning of each statement within the function, rather than up to the
-      beginning of the interactive command that called the function.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
-      use the snapshot of the calling query, and therefore do not see the
-      effects of actions taken after the calling query starts, whether in
-      their own transaction or other transactions.  Such a function must be
-      read-only, too, meaning that it cannot use any SQL commands other than
-      <command>SELECT</>.  There is a considerable performance gain from
-      declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
-      rather than <literal>VOLATILE</>.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Non-deferred <option>AFTER</> triggers are now fired immediately
-      after completion of the triggering query, rather than upon
-      finishing the current interactive command. This makes a difference
-      when the triggering query occurred within a function: the trigger
-      is invoked before the function proceeds to its next operation. For
-      example, if a function inserts a new row into a table, any
-      non-deferred foreign key checks occur before proceeding with the
-      function.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow function parameters to be declared with names (Dennis Bjorklund)
-     </para>
-     <para>
-      This allows better documentation of functions.  Whether the names
-      actually do anything depends on the specific function language
-      being used.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bjorklund)
-     </para>
-     <para>
-      This basically creates an automatic alias for each named parameter.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
-     </para>
-     <para>
-      This allows us to catch simple syntax errors sooner.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      More support for composite types (row and record variables) in PL/pgSQL
-     </para>
-     <para>
-      For example, it now works to pass a rowtype variable to another function
-      as a single variable.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Default values for PL/pgSQL variables can now reference previously
-      declared variables
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve parsing of PL/pgSQL FOR loops (Tom)
-     </para>
-     <para>
-      Parsing is now driven by presence of <literal>".."</> rather than
-      data type of <option>FOR</> variable. This makes no difference for
-      correct functions, but should result in more understandable error
-      messages when a mistake is made.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      In PL/Tcl, SPI commands are now run in subtransactions.  If an error
-      occurs, the subtransaction is cleaned up and the error is reported
-      as an ordinary Tcl error, which can be trapped with <literal>catch</>.
-      Formerly, it was not possible to catch such errors.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Accept <command>ELSEIF</> in PL/pgSQL (Neil)
-     </para>
-     <para>
-      Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
-      are accustomed to spelling this keyword <command>ELSEIF</>.
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title><application>psql</> Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Improve <application>psql</> information display about database
-      objects (Christopher)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <application>psql</> to display group membership in
-      <command>\du</> and <command>\dg</> (Markus Bertheau)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Prevent <application>psql</> <command>\dn</command> from showing
-      temporary schemas (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <application>psql</> to handle tilde user expansion for file
-      names (Zach Irmen)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <application>psql</> to display fancy prompts, including
-      color, via <application>readline</> (Reece Hart, Chet Ramey)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
-      fully (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Show the location of syntax errors (Fabien Coelho, Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <command>CLUSTER</command> information to <application>psql</>
-      <command>\d</> display
-      (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Change <application>psql</> <command>\copy stdin/stdout</> to read
-      from command input/output (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>pstdin</>/<option>pstdout</> to read from
-      <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
-      Feit)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
-      (Bruce)
-     </para>
-     <para>
-      This allows a central file where global <application>psql</> startup commands can
-      be stored.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Have <application>psql</> <command>\d+</> indicate if the table
-      has an <type>OID</> column (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      On Windows, use binary mode in <application>psql</> when reading files so control-Z
-      is not seen as end-of-file
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Have <command>\dn+</> show permissions and description for schemas (Dennis
-      Bjorklund)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow boolean settings to be set using upper or lower case (Michael Paesold)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title><application>pg_dump</> Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Use dependency information to improve the reliability of
-      <application>pg_dump</> (Tom)
-     </para>
-     <para>
-      This should solve the longstanding problems with related objects
-      sometimes being dumped in the wrong order.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
-     </para>
-     <para>
-      This should make it easier to identify changes between
-      dump files.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
-     </para>
-     <para>
-      This makes <application>pg_restore</>'s behavior similar to the
-      results of feeding a <application>pg_dump</> output script to
-      <application>psql</>. In most cases, ignoring errors and plowing
-      ahead is the most useful thing to do. Also added was a pg_restore
-      option to give the old behavior of exiting on an error.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <application>pg_restore</> <option>-l</> display now includes
-      objects' schema names
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New begin/end markers in <application>pg_dump</> text output (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add start/stop times for
-      <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
-      (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow most <application>pg_dump</> options in
-      <application>pg_dumpall</> (Christopher)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Have <application>pg_dump</> use <command>ALTER OWNER</> rather
-      than <command>SET SESSION AUTHORIZATION</> by default
-      (Christopher)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>libpq Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>PQmbdsplen()</> which returns the display length
-      of a character (Tatsuo)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add thread locking to <application>SSL</> and
-      <application>Kerberos</> connections (Manfred Spraul)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
-      <function>PQoidStatus()</> to work on <command>EXECUTE</command>
-      commands (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>PQserverVersion()</> to provide more convenient
-      access to the server version number (Greg Sabino Mullane)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <function>PQprepare/PQsendPrepared()</> functions to support
-      preparing statements without necessarily specifying the data types
-      of their parameters (Abhijit Menon-Sen)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Source Code Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Shell script commands converted to C versions for Windows support (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Create an extension makefile framework (Fabien Coelho, Peter)
-     </para>
-     <para>
-      This simplifies the task of building extensions outside the original
-      source tree.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Support relocatable installations (Bruce)
-     </para>
-     <para>
-      Directory paths for installed files (such as the
-      <filename>/share</> directory) are now computed relative to the
-      actual location of the executables, so that an installation tree
-      can be moved to another place without reconfiguring and
-      rebuilding.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Use <option>--with-docdir</> to choose installation location of documentation; also
-      allow <option>--infodir</> (Peter)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add <option>--without-docdir</> to prevent installation of documentation (Peter)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Upgrade to <application>DocBook</> V4.2 SGML (Peter)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
-     </para>
-     <para>
-      This was done to make it easier for organizations to manage their
-      own copies of the <productname>PostgreSQL</productname>
-      <application>CVS</> repository. File version stamps from the master
-      repository will not get munged by checking into or out of a copied
-      repository.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Clarify locking code (Manfred Koizar)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Buffer manager cleanup (Neil)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Decouple platform tests from CPU spinlock code (Bruce, Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add inlined test-and-set code on PA-RISC for <application>gcc</>
-      (ViSolve, Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improve i386 spinlock code (Manfred Spraul)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Clean up spinlock assembly code to avoid warnings from newer
-      <application>gcc</> releases (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove JDBC from source tree; now a separate project
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove the libpgtcl client interface; now a separate project
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      More accurately estimate memory and file descriptor usage (Tom)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Improvements to the Mac OS X startup scripts (Ray A.)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <function>fsync()</> test program (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Major documentation improvements (Neil, Peter)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove <application>pg_encoding</application>; not needed
-      anymore
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove <application>pg_id</application>; not needed anymore
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Remove <application>initlocation</application>; not needed
-      anymore
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Auto-detect thread flags (no more manual testing) (Bruce)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Use Olson's public domain <application>timezone</> library (Magnus)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      With threading enabled, use thread flags on Unixware for 
-      backend executables too (Bruce)
-     </para>
-     <para>
-      Unixware cannot mix threaded and non-threaded object files in the
-      same executable, so everything must be compiled as threaded.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <application>psql</> now uses a <application>flex</>-generated
-      lexical analyzer to process command strings
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Reimplement the linked list data structure used throughout the
-      backend (Neil)
-     </para>
-     <para>
-      This improves performance by allowing list append and length
-      operations to be more efficient.
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow dynamically loaded modules to create their own server configuration
-      parameters (Thomas Hallgren)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New Brazilian version of FAQ (Euler Taveira de Oliveira)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add French FAQ (Guillaume Lelarge)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <application>pgevent</> for Windows logging
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Make libpq and ECPG build as proper shared libraries on OS X (Tom)
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-
-  <sect3>
-   <title>Contrib Changes</title>
-   <itemizedlist>
-
-    <listitem>
-     <para>
-      Overhaul of <filename>contrib/dblink</> (Joe)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      <filename>contrib/dbmirror</> improvements (Steven Singer)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <filename>contrib/xml2</> (John Gray, Torchbox)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Updated <filename>contrib/mysql</filename>
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New version of <filename>contrib/btree_gist</> (Teodor)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      New <filename>contrib/trgm</>, trigram matching for
-      <productname>PostgreSQL</productname> (Teodor)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Many <filename>contrib/tsearch2</> improvements (Teodor)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
-      subprocess
-     </para>
-    </listitem>
-
-    <listitem>
-     <para>
-      Removed <filename>contrib/rserv</>: obsoleted by various separate projects
-     </para>
-    </listitem>
-
-   </itemizedlist>
-  </sect3>
-
-  </sect2>
- </sect1>
-
+    <sect3>
+     <title>Performance Improvements</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Support cross-data-type index usage (Tom)
+       </para>
+       <para>
+        Before this change, many queries would not use an index if the data
+        types did not match exactly. This improvement makes index usage more
+        intuitive and consistent.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New buffer replacement strategy that improves caching (Jan)
+       </para>
+       <para>
+        Prior releases used a least-recently-used (LRU) cache to keep
+        recently referenced pages in memory. The LRU algorithm
+        did not consider the number of times a specific cache entry was
+        accessed, so large table scans could force out useful cache pages.
+        The new cache algorithm uses four separate lists to track most
+        recently used and most frequently used cache pages and dynamically 
+        optimize their replacement based on the work load. This should
+        lead to much more efficient use of the shared buffer cache.
+        Administrators who have tested shared buffer sizes in the past
+        should retest with this new cache replacement policy.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add subprocess to write dirty buffers periodically to reduce
+        checkpoint writes (Jan)
+       </para>
+       <para>
+        In previous releases, the checkpoint process, which runs every few
+        minutes, would write all dirty buffers to the operating system's
+        buffer cache then flush all dirty operating system buffers to
+        disk. This resulted in a periodic spike in disk usage that often
+        hurt performance. The new code uses a background writer to trickle
+        disk writes at a steady pace so checkpoints have far fewer dirty
+        pages to write to disk. Also, the new code does not issue a global
+        <function>sync()</> call, but instead <function>fsync()</>s just
+        the files written since the last checkpoint. This should improve
+        performance and minimize degradation during checkpoints.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add ability to prolong vacuum to reduce performance impact (Jan)
+       </para>
+       <para>
+        On busy systems, <command>VACUUM</command> performs many I/O
+        requests which can hurt performance for other users. This
+        release allows you to slow down <command>VACUUM</command> to
+        reduce its impact on other users, though this increases the
+        total duration of <command>VACUUM</command>.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
+       </para>
+       <para>
+        This improves the way indexes are scanned when many duplicate
+        values exist in the index.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Use dynamically-generated table size estimates while planning (Tom)
+       </para>
+       <para>
+        Formerly the planner estimated table sizes using the values seen
+        by the last <command>VACUUM</command> or <command>ANALYZE</command>,
+        both as to physical table size (number of pages) and number of rows.
+        Now, the current physical table size is obtained from the kernel,
+        and the number of rows is estimated by multiplying the table size
+        by the row density (rows per page) seen by the last
+        <command>VACUUM</command> or <command>ANALYZE</command>.  This should
+        produce more reliable estimates in cases where the table size has
+        changed significantly since the last housekeeping command.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improved index usage with <literal>OR</> clauses (Tom)
+       </para>
+       <para>
+        This allows the optimizer to use indexes in statements with many OR
+        clauses that would not have been indexed in the past.  It can also use
+        multi-column indexes where the first column is specified and the second
+        column is part of an <literal>OR</> clause.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve matching of partial index clauses (Tom)
+       </para>
+       <para>
+        The server is now smarter about using partial indexes in queries
+        involving complex <option>WHERE</> clauses.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve performance of the GEQO optimizer (Tom)
+       </para>
+       <para>
+        The GEQO optimizer is used to plan queries involving many tables (by
+        default, twelve or more). This release speeds up the way queries are
+        analyzed to decrease time spent in optimization.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Miscellaneous optimizer improvements
+       </para>
+       <para>
+        There is not room here to list all the minor improvements made, but
+        numerous special cases work better than in prior releases.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve lookup speed for C functions (Tom)
+       </para>
+       <para>
+        This release uses a hash table to lookup information for dynamically
+        loaded C functions. This improves their speed so they perform nearly as
+        quickly as functions that are built into the server executable.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add type-specific <command>ANALYZE</command> statistics
+        capability (Mark Cave-Ayland)
+       </para>
+       <para>
+        This feature allows more flexibility in generating statistics
+        for non-standard data types.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <command>ANALYZE</command> now collects statistics for
+        expression indexes (Tom)
+       </para>
+       <para>
+        Expression indexes (also called functional indexes) allow users to
+        index not just columns but the results of expressions and function
+        calls. With this release, the optimizer can gather and use statistics
+        about the contents of expression indexes.  This will greatly improve
+        the quality of planning for queries in which an expression index is
+        relevant.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New two-stage sampling method for <command>ANALYZE</command>
+        (Manfred Koizar)
+       </para>
+       <para>
+        This gives better statistics when the density of valid rows is very
+        different in different regions of a table.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Speed up <command>TRUNCATE</command> (Tom)
+       </para>
+       <para>
+        This buys back some of the performance loss observed in 7.4, while still
+        keeping <command>TRUNCATE</command> transaction-safe.
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Server Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Add WAL file archiving and point-in-time recovery (Simon Riggs)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add tablespaces so admins can control disk layout (Gavin)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add a built-in log rotation program (Andreas Pflug)
+       </para>
+       <para>
+        It is now possible to log server messages conveniently without
+        relying on either <application>syslog</> or an external log
+        rotation program.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add new read-only server configuration parameters to show server
+        compile-time settings: <varname>block_size</>,
+        <varname>integer_datetimes</>, <varname>max_function_args</>,
+        <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
+        <literal>all</> remove special meaning of these terms in
+        <filename>pg_hba.conf</> (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Use clearer IPv6 name <literal>::1/128</> for
+        <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Rename server configuration parameters <varname>SortMem</> and
+        <varname>VacuumMem</> to <varname>work_mem</> and
+        <varname>maintenance_work_mem</> (Old names still supported) (Tom)
+       </para>
+       <para>
+        This change was made to clarify that bulk operations such as index and
+        foreign key creation use <varname>maintenance_work_mem</>, while
+        <varname>work_mem</> is for workspaces used during query execution.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow logging of session disconnections using server configuration
+        <varname>log_disconnections</> (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add new server configuration parameter <varname>log_line_prefix</> to
+        allow control of information emitted in each log line (Andrew)
+       </para>
+       <para>
+        Available information includes user name, database name, remote IP
+        address, and session start time.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove server configuration parameters <varname>log_pid</>,
+        <varname>log_timestamp</>, <varname>log_source_port</>; functionality
+        superseded by <varname>log_line_prefix</> (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
+        parameters with a unified <varname>listen_addresses</> parameter
+        (Andrew, Tom)
+       </para>
+       <para>
+        <varname>virtual_host</> could only specify a single IP address to
+        listen on.  <varname>listen_addresses</> allows multiple addresses
+        to be specified.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Listen on localhost by default, which eliminates the need for the
+        <option>-i</> postmaster switch in many scenarios (Andrew)
+       </para>
+       <para>
+        Listening on localhost (<literal>127.0.0.1</>) opens no new
+        security holes but allows configurations like Windows and JDBC,
+        which do not support local sockets, to work without special
+        adjustments.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove <varname>syslog</> server configuration parameter, and add more
+        logical <varname>log_destination</> variable to control log output
+        location (Magnus)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Change server configuration parameter <varname>log_statement</> to take
+        values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
+        <varname>none</> to select which queries are logged (Bruce)
+       </para>
+       <para>
+        This allows administrators to log only data definition changes or
+        only data modification statements.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Some logging-related configuration parameters could formerly be adjusted
+        by ordinary users, but only in the <quote>more verbose</> direction.
+        They are now treated more strictly: only superusers can set them.
+        However, a superuser may use <command>ALTER USER</> to provide per-user
+        settings of these values for non-superusers.  Also, it is now possible
+        for superusers to set values of superuser-only configuration parameters
+        via <literal>PGOPTIONS</>.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow configuration files to be placed outside the data directory (mlw)
+       </para>
+       <para>
+        By default, configuration files are kept in the cluster's top directory.
+        With this addition, configuration files can be placed outside the
+        data directory, easing administration.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Plan prepared queries only when first executed so constants can be
+        used for statistics (Oliver Jowett)
+       </para>
+       <para>
+        Prepared statements plan queries once and execute them many
+        times. While prepared queries avoid the overhead of re-planning
+        on each use, the quality of the plan suffers from not knowing the exact
+        parameters to be used in the query.  In this release, planning of
+        unnamed prepared statements is delayed until the first execution,
+        and the actual parameter values of that execution are used as
+        optimization hints.  This allows use of out-of-line parameter passing
+        without incurring a performance penalty.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>DECLARE CURSOR</command> to take parameters
+        (Oliver Jowett)
+       </para>
+       <para>
+        It is now useful to issue <command>DECLARE CURSOR</command> in a
+        <function>Parse</> message with parameters. The parameter values
+        sent at <function>Bind</> time will be substituted into the
+        execution of the cursor's query.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix hash joins and aggregates of <type>inet</type> and
+        <type>cidr</type> data types (Tom)
+       </para>
+       <para>
+        Release 7.4 handled hashing of mixed <type>inet</type> and
+        <type>cidr</type> values incorrectly.  (This bug did not exist
+        in prior releases because they wouldn't try to hash either
+        data type.)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <varname>log_duration</> print only when <varname>log_statement</>
+        prints the query (Ed L.)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Query Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Add savepoints (nested transactions) (Alvaro)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Unsupported isolation levels are now accepted and promoted to the
+        nearest supported level (Peter)
+       </para>
+       <para>
+        The SQL specification states that if a database doesn't support a
+        specific isolation level, it should use the next more restrictive level.
+        This change complies with that recommendation.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>BEGIN WORK</command> to specify transaction
+        isolation levels like <command>START TRANSACTION</command> does
+        (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix table permission checking for cases in which rules generate
+        a query type different from the originally submitted query (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Implement dollar quoting to simplify single-quote usage (Andrew, Tom, 
+        David Fetter)
+       </para>
+       <para>
+        In previous releases, because single quotes had to be used to
+        quote a function's body, the use of single quotes inside the
+        function text required use of two single quotes or other error-prone
+        notations. With this release we add the ability to use "dollar
+        quoting" to quote a block of text.  The ability to use different
+        quoting delimiters at different nesting levels greatly simplifies
+        the task of quoting correctly, especially in complex functions.
+        Dollar quoting can be used anywhere quoted text is needed.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
+       </para>
+       <para>
+        <option>CASE</> no longer evaluates the tested expression multiple
+        times. This has benefits when the expression is complex or is
+        volatile.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Test <option>HAVING</> before computing target list of an
+        aggregate query (Tom)
+       </para>
+       <para>
+        Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
+        ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
+        could fail with divide-by-zero.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Replace <varname>max_expr_depth</> parameter with
+        <varname>max_stack_depth</> parameter, measured in kilobytes of stack
+        size (Tom)
+       </para>
+       <para>
+       This gives us a fairly bulletproof defense against crashing due to 
+       runaway recursive functions. Instead of measuring the depth of expression
+       nesting, we now directly measure the size of the execution stack.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow arbitrary row expressions (Tom)
+       </para>
+       <para>
+        This release allows SQL expressions to contain arbitrary composite
+        types, that is, row values. It also allows functions to more easily
+        take rows as arguments and return row values.
+       </para>
+      </listitem>
+        
+      <listitem>
+       <para>
+        Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
+        in row and subselect comparisons (Fabien Coelho)
+       </para>
+      </listitem>
+        
+      <listitem>
+       <para>
+        Avoid locale-specific case conversion of basic ASCII letters in
+        identifiers and keywords (Tom)
+       </para>
+       <para>
+        This solves the <quote>Turkish problem</> with mangling of words
+        containing <literal>I</> and  <literal>i</>.  Folding of characters
+        outside the 7-bit-ASCII set is still locale-aware.
+       </para>
+      </listitem>
+        
+      <listitem>
+       <para>
+        Improve syntax error reporting (Fabien, Tom)
+       </para>
+       <para>
+        Syntax error reports are more useful than before.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Change <command>EXECUTE</command> to return a completion tag
+        matching the executed statement (Kris Jurka)
+       </para>
+       <para>
+        Previous releases return an <command>EXECUTE</command> tag for
+        any <command>EXECUTE</command> call. In this release, the tag
+        returned will reflect the command executed.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
+       </para>
+       <para>
+        Such a clause makes no logical sense, but in some cases the rule
+        decompiler formerly produced this syntax.
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Object Manipulation Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Add <command>COMMENT ON</> for casts, conversions, languages,
+        operator classes, and large objects (Christopher)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add new server configuration parameter <varname>default_with_oids</> to
+        control whether tables are created with <type>OID</>s by default (Neil)
+       </para>
+       <para>
+        This allows administrators to control whether <command>CREATE
+        TABLE</command> commands create tables with or without <type>OID</>
+        columns by default.  (Note: the current factory default setting for
+        <varname>default_with_oids</> is <literal>TRUE</>, but the default
+        will become <literal>FALSE</> in future releases.)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
+        <command>CREATE TABLE AS</command> (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
+        column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
+        (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow composite types as table columns (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>ALTER ... ADD COLUMN</> with defaults and
+        <option>NOT NULL</> constraints; works per SQL spec (Rod)
+       </para>
+       <para>
+        It is now possible for <option>ADD COLUMN</> to create a column
+        that is not initially filled with NULLs, but with a specified
+        default value.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
+       </para>
+       <para>
+        It is now possible to alter a column's data type without dropping
+        and re-adding the column.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow multiple <command>ALTER</> actions in a single <command>ALTER
+        TABLE</command> command (Rod)
+       </para>
+       <para>
+        This is particularly useful for <command>ALTER</> commands that
+        rewrite the table (which include <option>ALTER COLUMN TYPE</> and
+        <option>ADD COLUMN</> with a default). By grouping
+        <command>ALTER</> commands together, the table need be rewritten
+        only once.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
+        columns (Tom)
+       </para>
+       <para>
+        This falls out from the new capability of specifying defaults for new
+        columns.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow changing the owners of aggregates, conversions, databases,
+        functions, operators, operator classes, schemas, types, and tablespaces
+        (Christopher, Euler Taveira de Oliveira)
+       </para>
+       <para>
+        Previously this required modifying the system tables directly.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow temporary object creation to be limited to <option>SECURITY
+        DEFINER</> functions (Sean Chittenden)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
+       </para>
+       <para>
+        Prior to this release, there was no way to clear an auto-cluster
+        specification except to modify the system tables.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Constraint/Index/<type>SERIAL</> names are now
+        <replaceable>table_column_type</>
+        with numbers appended to guarantee uniqueness within the schema
+        (Tom)
+       </para>
+       <para>
+        The SQL specification states that such names should be unique
+        within a schema.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>pg_get_serial_sequence()</> to return a
+        <type>SERIAL</> column's sequence name (Christopher)
+       </para>
+       <para>
+        This allows automated scripts to reliably find the <type>SERIAL</>
+        sequence name.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Warn when primary/foreign key data type mismatch requires costly lookup
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <command>ALTER INDEX</> command to allow moving of indexes
+        between tablespaces (Gavin)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <command>ALTER TABLE OWNER</> change dependent sequence
+        ownership too (Alvaro)
+       </para>
+      </listitem>
+  
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Utility Command Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Allow <command>CREATE SCHEMA</command> to create triggers,
+        indexes, and sequences (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
+        Coelho)
+       </para>
+       <para>
+        This allows <option>ALSO</> to be added to rule creation to contrast it with
+        <option>INSTEAD</> rules.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
+       </para>
+       <para>
+        This allows the <command>LOCK</command> command to fail if it
+        would have to wait for the requested lock.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <command>COPY</command> to read and write
+        comma-separated-value (CSV) files (Andrew, Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Generate error if the <command>COPY</command> delimiter and NULL
+        string conflict (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <command>GRANT</command>/<command>REVOKE</command> behavior
+        follows the SQL spec more closely
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Avoid locking conflict between <command>CREATE INDEX</command>
+        and <command>CHECKPOINT</command> (Tom)
+       </para>
+       <para>
+        In 7.3 and 7.4, a long-running B-tree index build could block concurrent
+        <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
+        WAL log could not be recycled.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Database-wide <command>ANALYZE</command> does not hold locks
+        across tables (Tom)
+       </para>
+       <para>
+        This reduces the potential for deadlocks against other backends
+        that want exclusive locks on tables.  To get the benefit of this
+        change, do not execute database-wide <command>ANALYZE</command>
+        inside a transaction block (<command>BEGIN</command> block); it
+        must be able to commit and start a new transaction for each
+        table.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <command>REINDEX</command> does not exclusively lock the index's
+        parent table anymore
+       </para>
+       <para>
+        The index itself is still exclusively locked, but readers of the
+        table can continue if they are not using the particular index
+        being rebuilt.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Erase MD5 user passwords when a user is renamed (Bruce)
+       </para>
+       <para>
+        <productname>PostgreSQL</productname> uses the user name as salt
+        when encrypting passwords via MD5. When a user's name is changed,
+        the salt will no longer match the stored MD5 password, so the
+        stored password becomes useless.  In this release a notice is
+        generated and the password is cleared.  A new password must then
+        be assigned if the user is to be able to log in with a password.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
+       </para>
+       <para>
+        Windows does not have a <literal>kill</> command to send signals to
+        backends so this capability was added to <application>pg_ctl</>.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Information schema improvements
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>--pwfile</> option to
+        <application>initdb</application> so the initial password can be
+        set by GUI tools (Magnus)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Detect locale/encoding mismatch in
+        <application>initdb</application> (Peter)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>register</> command to <application>pg_ctl</> to
+        register Windows operating system service (Dave Page)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Data Type and Function Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        More complete support for composite types (row types)  (Tom)
+       </para>
+       <para>
+        Composite values can be used in many places where only scalar values
+        worked before.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Reject non-rectangular array values as erroneous (Joe)
+       </para>
+       <para>
+        Formerly, <function>array_in</> would silently build a
+        surprising result.
+       </para>
+      </listitem>
+  
+       <listitem>
+        <para>
+         Overflow in integer arithmetic operations is now detected (Tom)
+        </para>
+       </listitem>
+  
+       <listitem>
+        <para>
+         The arithmetic operators associated with the single-byte
+         <type>"char"</> data type have been removed.
+        </para>
+        <para>
+         Formerly, the parser would select these operators in many situations
+         where an <quote>unable to select an operator</> error would be more
+         appropriate, such as <literal>null * null</>.  If you actually want
+         to do arithmetic on a <type>"char"</> column, you can cast it to
+         integer explicitly.
+        </para>
+       </listitem>
+  
+      <listitem>
+        <para>
+         Syntax checking of array input values considerably tightened up (Joe)
+        </para>
+       <para>
+         Junk that was previously allowed in odd places with odd results
+         now causes an <literal>ERROR</>, for example, non-whitespace
+         after the closing right brace.
+        </para>
+      </listitem>
+  
+      <listitem>
+        <para>
+         Empty-string array element values must now be written as
+         <literal>""</>, rather than writing nothing (Joe)
+        </para>
+       <para>
+         Formerly, both ways of writing an empty-string element value were
+         allowed, but now a quoted empty string is required.  The case where
+         nothing at all appears will probably be considered to be a NULL
+         element value in some future release.
+        </para>
+      </listitem>
+  
+      <listitem>
+        <para>
+         Array element trailing whitespace is now ignored (Joe)
+        </para>
+       <para>
+         Formerly leading whitespace was ignored, but trailing whitespace
+         between an element value and the delimiter or right brace was
+         significant.  Now trailing whitespace is also ignored.
+        </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Emit array values with explicit array bounds when lower bound is not one
+        (Joe)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <function>netmask</> and <function>hostmask</> functions
+        return maximum-length mask length (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Change factorial function to return <type>numeric</type> (Gavin)
+       </para>
+       <para>
+        Returning <type>numeric</type> allows the factorial function to
+        work for a wider range of input values.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <function>to_char</>/<function>to_date()</> date conversion
+        improvements (Kurt Roeckx, Fabien Coelho)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <function>length()</> disregard trailing spaces in
+        <type>CHAR(n)</> (Gavin)
+       </para>
+       <para>
+        This change was made to improve consistency: trailing spaces are
+        semantically insignificant in <type>CHAR(n)</> data, so they
+        should not be counted by <function>length()</>.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Warn about empty string being passed to
+        <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
+       </para>
+       <para>
+        8.1 will throw an error instead.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow leading or trailing whitespace in
+        <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
+        input routines
+        (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Better support for IEEE <literal>Infinity</> and <literal>NaN</>
+        values in <type>float4</type>/<type>float8</type> (Neil)
+       </para>
+       <para>
+        These should now work on all platforms that support IEEE-compliant
+        floating point arithmetic.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix <function>to_char</function> for <literal>1 BC</>
+        (previously it returned <literal>1 AD</>) (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix <function>date_part(year)</> for BC dates (previously it
+        returned one less than the correct year) (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix <function>date_part()</> to return the proper millennium and
+        century (Fabien Coelho)
+       </para>
+       <para>
+        In previous versions, the century and millennium results had a wrong
+        number and started in the wrong year, as compared to standard
+        reckoning of such things.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>ceiling()</> as an alias for <function>ceil()</>,
+        and <function>power()</> as an alias for <function>pow()</> for
+        standards compliance (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Change <function>ln()</>, <function>log()</>,
+        <function>power()</>, and <function>sqrt()</> to emit the correct
+        <literal>SQLSTATE</> error codes for certain error conditions, as
+        specified by SQL:2003 (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>generate_series()</> functions to simplify working
+        with numeric sets (Joe)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Fix <function>upper/lower/initcap()</> functions to work with
+        multibyte encodings (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add boolean and bitwise integer <option>AND</>/<option>OR</>
+        aggregates (Fabien Coelho)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New session information functions to return network addresses for client
+        and server (Sean Chittenden)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add function to determine the area of a closed path (Sean Chittenden)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add function to send cancel request to other backends (Magnus)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <type>interval</> plus <type>datetime</> operators (Tom)
+       </para>
+       <para>
+        The reverse ordering, <type>datetime</> plus <type>interval</>,
+        was already supported, but both are required by the SQL standard.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Casting an integer to <type>BIT(N)</> selects the rightmost N bits
+        of the integer
+        (Tom)
+       </para>
+       <para>
+        In prior releases, the leftmost N bits were selected, but this was
+        deemed unhelpful, not to mention inconsistent with casting from bit
+        to int.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Require <type>CIDR</> values to have all non-masked bits be zero
+        (Kevin Brintnall)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Server-Side Language Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        In <literal>READ COMMITTED</> serialization mode, volatile functions
+        now see the results of concurrent transactions committed up to the
+        beginning of each statement within the function, rather than up to the
+        beginning of the interactive command that called the function.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
+        use the snapshot of the calling query, and therefore do not see the
+        effects of actions taken after the calling query starts, whether in
+        their own transaction or other transactions.  Such a function must be
+        read-only, too, meaning that it cannot use any SQL commands other than
+        <command>SELECT</>.  There is a considerable performance gain from
+        declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
+        rather than <literal>VOLATILE</>.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Non-deferred <option>AFTER</> triggers are now fired immediately
+        after completion of the triggering query, rather than upon
+        finishing the current interactive command. This makes a difference
+        when the triggering query occurred within a function: the trigger
+        is invoked before the function proceeds to its next operation. For
+        example, if a function inserts a new row into a table, any
+        non-deferred foreign key checks occur before proceeding with the
+        function.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow function parameters to be declared with names (Dennis Bjorklund)
+       </para>
+       <para>
+        This allows better documentation of functions.  Whether the names
+        actually do anything depends on the specific function language
+        being used.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bjorklund)
+       </para>
+       <para>
+        This basically creates an automatic alias for each named parameter.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
+       </para>
+       <para>
+        This allows us to catch simple syntax errors sooner.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        More support for composite types (row and record variables) in PL/pgSQL
+       </para>
+       <para>
+        For example, it now works to pass a rowtype variable to another function
+        as a single variable.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Default values for PL/pgSQL variables can now reference previously
+        declared variables
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve parsing of PL/pgSQL FOR loops (Tom)
+       </para>
+       <para>
+        Parsing is now driven by presence of <literal>".."</> rather than
+        data type of <option>FOR</> variable. This makes no difference for
+        correct functions, but should result in more understandable error
+        messages when a mistake is made.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        In PL/Tcl, SPI commands are now run in subtransactions.  If an error
+        occurs, the subtransaction is cleaned up and the error is reported
+        as an ordinary Tcl error, which can be trapped with <literal>catch</>.
+        Formerly, it was not possible to catch such errors.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Accept <command>ELSEIF</> in PL/pgSQL (Neil)
+       </para>
+       <para>
+        Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
+        are accustomed to spelling this keyword <command>ELSEIF</>.
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title><application>psql</> Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Improve <application>psql</> information display about database
+        objects (Christopher)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <application>psql</> to display group membership in
+        <command>\du</> and <command>\dg</> (Markus Bertheau)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Prevent <application>psql</> <command>\dn</command> from showing
+        temporary schemas (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <application>psql</> to handle tilde user expansion for file
+        names (Zach Irmen)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <application>psql</> to display fancy prompts, including
+        color, via <application>readline</> (Reece Hart, Chet Ramey)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
+        fully (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Show the location of syntax errors (Fabien Coelho, Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <command>CLUSTER</command> information to <application>psql</>
+        <command>\d</> display
+        (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Change <application>psql</> <command>\copy stdin/stdout</> to read
+        from command input/output (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>pstdin</>/<option>pstdout</> to read from
+        <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
+        Feit)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
+        (Bruce)
+       </para>
+       <para>
+        This allows a central file where global <application>psql</> startup commands can
+        be stored.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Have <application>psql</> <command>\d+</> indicate if the table
+        has an <type>OID</> column (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        On Windows, use binary mode in <application>psql</> when reading files so control-Z
+        is not seen as end-of-file
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Have <command>\dn+</> show permissions and description for schemas (Dennis
+        Bjorklund)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow boolean settings to be set using upper or lower case (Michael Paesold)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title><application>pg_dump</> Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Use dependency information to improve the reliability of
+        <application>pg_dump</> (Tom)
+       </para>
+       <para>
+        This should solve the longstanding problems with related objects
+        sometimes being dumped in the wrong order.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
+       </para>
+       <para>
+        This should make it easier to identify changes between
+        dump files.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
+       </para>
+       <para>
+        This makes <application>pg_restore</>'s behavior similar to the
+        results of feeding a <application>pg_dump</> output script to
+        <application>psql</>. In most cases, ignoring errors and plowing
+        ahead is the most useful thing to do. Also added was a pg_restore
+        option to give the old behavior of exiting on an error.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <application>pg_restore</> <option>-l</> display now includes
+        objects' schema names
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New begin/end markers in <application>pg_dump</> text output (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add start/stop times for
+        <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
+        (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow most <application>pg_dump</> options in
+        <application>pg_dumpall</> (Christopher)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Have <application>pg_dump</> use <command>ALTER OWNER</> rather
+        than <command>SET SESSION AUTHORIZATION</> by default
+        (Christopher)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>libpq Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>PQmbdsplen()</> which returns the display length
+        of a character (Tatsuo)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add thread locking to <application>SSL</> and
+        <application>Kerberos</> connections (Manfred Spraul)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
+        <function>PQoidStatus()</> to work on <command>EXECUTE</command>
+        commands (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>PQserverVersion()</> to provide more convenient
+        access to the server version number (Greg Sabino Mullane)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <function>PQprepare/PQsendPrepared()</> functions to support
+        preparing statements without necessarily specifying the data types
+        of their parameters (Abhijit Menon-Sen)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Source Code Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Shell script commands converted to C versions for Windows support (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Create an extension makefile framework (Fabien Coelho, Peter)
+       </para>
+       <para>
+        This simplifies the task of building extensions outside the original
+        source tree.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Support relocatable installations (Bruce)
+       </para>
+       <para>
+        Directory paths for installed files (such as the
+        <filename>/share</> directory) are now computed relative to the
+        actual location of the executables, so that an installation tree
+        can be moved to another place without reconfiguring and
+        rebuilding.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Use <option>--with-docdir</> to choose installation location of documentation; also
+        allow <option>--infodir</> (Peter)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add <option>--without-docdir</> to prevent installation of documentation (Peter)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Upgrade to <application>DocBook</> V4.2 SGML (Peter)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
+       </para>
+       <para>
+        This was done to make it easier for organizations to manage their
+        own copies of the <productname>PostgreSQL</productname>
+        <application>CVS</> repository. File version stamps from the master
+        repository will not get munged by checking into or out of a copied
+        repository.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Clarify locking code (Manfred Koizar)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Buffer manager cleanup (Neil)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Decouple platform tests from CPU spinlock code (Bruce, Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add inlined test-and-set code on PA-RISC for <application>gcc</>
+        (ViSolve, Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improve i386 spinlock code (Manfred Spraul)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Clean up spinlock assembly code to avoid warnings from newer
+        <application>gcc</> releases (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove JDBC from source tree; now a separate project
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove the libpgtcl client interface; now a separate project
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        More accurately estimate memory and file descriptor usage (Tom)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Improvements to the Mac OS X startup scripts (Ray A.)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <function>fsync()</> test program (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Major documentation improvements (Neil, Peter)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove <application>pg_encoding</application>; not needed
+        anymore
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove <application>pg_id</application>; not needed anymore
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Remove <application>initlocation</application>; not needed
+        anymore
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Auto-detect thread flags (no more manual testing) (Bruce)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Use Olson's public domain <application>timezone</> library (Magnus)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        With threading enabled, use thread flags on Unixware for 
+        backend executables too (Bruce)
+       </para>
+       <para>
+        Unixware cannot mix threaded and non-threaded object files in the
+        same executable, so everything must be compiled as threaded.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <application>psql</> now uses a <application>flex</>-generated
+        lexical analyzer to process command strings
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Reimplement the linked list data structure used throughout the
+        backend (Neil)
+       </para>
+       <para>
+        This improves performance by allowing list append and length
+        operations to be more efficient.
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow dynamically loaded modules to create their own server configuration
+        parameters (Thomas Hallgren)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New Brazilian version of FAQ (Euler Taveira de Oliveira)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add French FAQ (Guillaume Lelarge)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <application>pgevent</> for Windows logging
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Make libpq and ECPG build as proper shared libraries on OS X (Tom)
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+  
+    <sect3>
+     <title>Contrib Changes</title>
+     <itemizedlist>
+  
+      <listitem>
+       <para>
+        Overhaul of <filename>contrib/dblink</> (Joe)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        <filename>contrib/dbmirror</> improvements (Steven Singer)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <filename>contrib/xml2</> (John Gray, Torchbox)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Updated <filename>contrib/mysql</filename>
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New version of <filename>contrib/btree_gist</> (Teodor)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        New <filename>contrib/trgm</>, trigram matching for
+        <productname>PostgreSQL</productname> (Teodor)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Many <filename>contrib/tsearch2</> improvements (Teodor)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
+        subprocess
+       </para>
+      </listitem>
+  
+      <listitem>
+       <para>
+        Removed <filename>contrib/rserv</>: obsoleted by various separate projects
+       </para>
+      </listitem>
+  
+     </itemizedlist>
+    </sect3>
+  
+   </sect2>
+  </sect1>
   <sect1 id="release-7-4-8">
    <title>Release 7.4.8</title>
 
@@ -2869,8 +2869,8 @@ holder of the lock released it within a very narrow window.
 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-7">
    <title>Release 7.4.7</title>
@@ -2927,8 +2927,8 @@ datestyles</para></listitem>
 GMT</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-6">
    <title>Release 7.4.6</title>
@@ -2997,8 +2997,8 @@ This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
 ECPG prepare statement</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-5">
    <title>Release 7.4.5</title>
@@ -3033,8 +3033,8 @@ still worth a re-release.  The bug does not exist in pre-7.4 releases.
 </para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-4">
    <title>Release 7.4.4</title>
@@ -3083,8 +3083,8 @@ aggregate plan</para></listitem>
 <listitem><para>Translation updates (various contributors)</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-3">
    <title>Release 7.4.3</title>
@@ -3139,8 +3139,8 @@ names from outer query levels.
 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-2">
    <title>Release 7.4.2</title>
@@ -3280,8 +3280,8 @@ inconveniences associated with the <literal>i/I</> problem.</para></listitem>
 <listitem><para>Various JDBC fixes</para></listitem>
 </itemizedlist>
 
-  </sect2>
- </sect1>
+   </sect2>
 </sect1>
 
   <sect1 id="release-7-4-1">
    <title>Release 7.4.1</title>
@@ -11226,4 +11226,3 @@ sgml-local-catalogs:("/usr/lib/sgml/catalog")
 sgml-local-ecat-files:nil
 End:
 -->
-