]> granicus.if.org Git - postgresql/commitdiff
First cut at 8.3 release notes. SGML markup is nonexistent, and
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Oct 2007 03:32:31 +0000 (03:32 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Oct 2007 03:32:31 +0000 (03:32 +0000)
the 'overview' and 'incompatibilities' summary lists remain to be
written.  But I think all the raw info is there (indeed maybe too
verbose).

doc/src/sgml/release.sgml

index e287770a6024e83fbc51fe2a472f8c5be079d45d..e0573ae45994c469f952ea1d43f8bdead9c95df1 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.508 2007/09/24 03:12:23 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.509 2007/10/03 03:32:31 tgl Exp $ -->
 <!--
 
 Typical markup:
@@ -35,6 +35,2256 @@ do it for earlier branch release files.
 <appendix id="release">
  <title>Release Notes</title>
 
+  <sect1 id="release-8-3">
+   <title>Release 8.3</title>
+
+   <note>
+    <title>Release date</title>
+    <simpara>2007-??-??</simpara>
+   </note>
+
+   <sect2>
+    <title>Overview</title>
+
+    <para>
+     This release adds many functionality and performance improvements that
+     were requested by users, including:
+
+    <itemizedlist>
+
+      <listitem>
+       <para>
+        ... to be filled in ...
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </para>
+
+   </sect2>
+
+   <sect2>
+    <title>Migration to version 8.3</title>
+
+    <para>
+     A dump/restore using <application>pg_dump</application> is
+     required for those wishing to migrate data from any previous
+     release.
+    </para>
+
+    <para>
+     Observe the following incompatibilities:
+    </para>
+
+    <itemizedlist>
+
+      <listitem>
+       <para>
+        ... to be filled in ...
+       </para>
+      </listitem>
+
+    </itemizedlist>
+   </sect2>
+
+   <sect2>
+    <title>Changes</title>
+
+    <para>
+     Below you will find a detailed account of the
+     changes between <productname>PostgreSQL</productname> 8.3 and
+     the previous major release.
+    </para>
+
+    <sect3>
+     <title>Performance Improvements</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Implement an optional asynchronous commit mode (Simon)
+       </para>
+
+       <para>
+        When synchronous_commit is off, we don't flush WAL before reporting
+        a transaction committed.  Data consistency is still guaranteed
+        (unlike turning fsync off), but a crash may lose the effects of the
+        last few transactions.  In many applications this is an acceptable
+        tradeoff for improved performance.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement "distributed" checkpoints (Itagaki Takahiro and Heikki
+        Linnakangas)
+       </para>
+
+       <para>
+        The I/O needed for a checkpoint is now spread over a fairly long
+        period of time, rather than being spat out in a burst.  This happens
+        only for background checkpoints carried out by the bgwriter; other
+        cases, such as a shutdown checkpoint, are still
+        done at full speed.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Heap-Only Tuples (Pavan Deolasee, with ideas from many others)
+       </para>
+
+       <para>
+        When we update a tuple without changing any of its indexed columns,
+        and the new version can be stored on the same heap page, we no
+        longer generate extra index entries for the new version.  Instead,
+        index searches follow the HOT-chain links to ensure they find the
+        correct tuple version.  In addition, this patch introduces the
+        ability to "prune" dead tuples on a per-page basis, without having
+        to do a complete VACUUM pass to recover space. VACUUM is still
+        needed to clean up dead index entries, however.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Lazy XID allocation (Florian Pflug)
+       </para>
+
+       <para>
+        Formerly, every transaction obtained a transaction ID (XID).  Now,
+        transactions that do not modify any database rows will typically
+        never obtain an XID at all.  We already did things this way for
+        subtransactions, but this patch extends the concept to top-level
+        transactions.  In applications where there are lots of short
+        read-only transactions, this should improve performance noticeably;
+        not so much from removal of the actual XID-assignments, as from
+        reduction of overhead that's driven by the rate of XID consumption.
+        We add a concept of a "virtual transaction ID" so that active
+        transactions can be uniquely identified even if they don't have a
+        regular XID.  This is a much lighter-weight concept: uniqueness of
+        VXIDs is only guaranteed over the short term, and no on-disk record
+        is made about them.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Reduce contention for the ProcArrayLock (Florian Pflug, Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Just-in-time background writing strategy (Greg Smith, Itagaki
+        Takahiro)
+       </para>
+
+       <para>
+        This patch avoids re-scanning buffers that cannot possibly need to
+        be cleaned, and estimates how many buffers it should try to clean
+        based on moving averages of recent allocation requests and density
+        of reusable buffers.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support varlena fields with single-byte headers and unaligned
+        storage (Greg Stark)
+       </para>
+
+       <para>
+        This change allows a significant percentage reduction in the on-disk
+        size of short character-string fields.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Combine cmin and cmax fields of HeapTupleHeaders into a single field
+        (Heikki)
+       </para>
+
+       <para>
+        We do this by keeping private state in each backend that has
+        inserted and deleted the same tuple during its current top-level
+        transaction.  This is sufficient since there is no need to be able
+        to determine the cmin/cmax from any other transaction. This gets us
+        back down to 23-byte tuple headers, removing a space penalty paid in
+        8.0 to support subtransactions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement "top N" sorting in ORDER BY ... LIMIT queries (Greg Stark)
+       </para>
+
+       <para>
+        We keep a heap of the current best N tuples and sift-up new tuples
+        into it as we scan the input.  For M input tuples this means only
+        about M*log(N) comparisons instead of M*log(M), not to mention a lot
+        less workspace when N is small --- avoiding spill-to-disk for large
+        M is actually the most attractive thing about it.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Skip writing WAL in CLUSTER and COPY in cases where it's not needed
+        (Simon)
+       </para>
+
+       <para>
+        If WAL archiving is not enabled, it's possible to ensure
+        transactional safety by fsync'ing the destination table before
+        commit, rather than emitting WAL records for all inserted tuples.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Avoid rewriting pg_control at every WAL segment switch (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Reduce WAL output size for page splits in btree indexes (Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve hash join for cases with many input NULLs (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Avoid computing X^2 at each row in avg(bigint) and avg(numeric)
+        (Mark Kirkwood)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Suppress useless searches for unused line pointers in PageAddItem
+        (Heikki, improving on an idea from Hiroki Kataoka)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve interlocking between checkpoint start and transaction commit
+        (Heikki)
+       </para>
+
+       <para>
+        The new method both speeds up commit (less for it to do) and
+        prevents the problem of checkpoint being delayed indefinitely when
+        there's a constant flow of commits.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Put a rate limit on messages sent by backends to the stats collector
+        (Tom)
+       </para>
+
+       <para>
+        This reduces the overhead for short transactions by combining
+        reports for successive short transactions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Avoid unnecessary disk reads during WAL recovery (Heikki)
+       </para>
+
+       <para>
+        Aside from speeding up recovery, this change eliminates a potential
+        data loss risk when restoring a WAL log that was written with
+        full_page_writes off.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve performance of mergejoin with a large sort operation as
+        inner input (Greg Stark)
+       </para>
+
+       <para>
+        This change uses a Materialize node between the mergejoin and the
+        sort to prevent the sort from having to "back up", which allows a
+        more efficient sort.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make large sequential scans and VACUUMs work in a limited-size
+        "ring" of buffers (Simon, Heikki, Tom)
+       </para>
+
+       <para>
+        Aside from avoiding cache spoliation, this fixes the problem that
+        VACUUM formerly tended to cause a WAL flush for every page it
+        modified, because we had it hacked to use only a single buffer.
+        Those flushes will now occur only once per ring-ful.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Synchronize sequential scans (Jeff Davis)
+       </para>
+
+       <para>
+        Large sequential scans now synchronize with each other, so that when
+        multiple backends are scanning the same relation concurrently, each
+        page is (ideally) read only once.  Note that a backend joining such
+        a scan starts in the middle of the relation and "wraps around" to
+        cover all blocks; this may affect the order in which rows are
+        returned.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create a dedicated "wal writer" process to offload WAL-writing work
+        from backends (Simon)
+       </para>
+
+       <para>
+        This process is also responsible for guaranteeing a maximum delay
+        before asynchronously-committed transactions will be flushed to
+        disk.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Server Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Autovacuum is now enabled by default (Alvaro)
+       </para>
+
+       <para>
+        Considerable work was done to make autovacuum less intrusive,
+        allowing this to become a reasonable default.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support multiple concurrent autovacuum processes (Alvaro, Itagaki
+        Takahiro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Set the default autovacuum vacuum_cost_delay value to 20ms, and
+        reduce the default autovacuum vacuum and analyze threshold values to
+        50 tuples (Alvaro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make autovacuum report the start time of its current activity in
+        pg_stat_activity (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Provide for logfiles in machine readable CSV format (Arul Shaji,
+        Greg Smith, Andrew Dunstan)
+       </para>
+
+       <para>
+        In consequence, rename redirect_stderr to logging_collector.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add log_autovacuum_min_duration parameter to support configurable
+        logging of autovacuum actions (Simon, Alvaro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add log_lock_waits parameter to log long wait times (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add log_temp_files parameter to log usage of temporary files (Bill
+        Moran)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add log_checkpoints parameter to improve logging of checkpoints
+        (Greg Smith, Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Use our own timezone support for formatting timestamps displayed in
+        the server log (Tom)
+       </para>
+
+       <para>
+        This avoids Windows-specific problems with localized time zone names
+        that are in the wrong encoding.  There is a new log_timezone
+        parameter that controls the timezone used in log messages,
+        separately from the client-visible timezone parameter.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        %s and %c escapes in log_line_prefix can now be used in all
+        processes (Andrew)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support a global SSL configuration file (Victor Wagner)
+       </para>
+
+       <para>
+        Add ssl_ciphers parameter to control allowed ciphers (Victor Wagner)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Invalidate and rebuild cached plans whenever there is a schema
+        change or statistics update to referenced relations (Tom)
+       </para>
+
+       <para>
+        Aside from improving performance (for example, by being able to make
+        use of newly-added indexes), this finally fixes the ancient gotcha
+        that you can't drop and recreate a temp table that's used by a
+        PL/PgSQL function, unless you use EXECUTE for all references to it.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Split the archive_command parameter into separate archive_mode and
+        archive_command parameters (Simon)
+       </para>
+
+       <para>
+        This avoids some problems that occur if the user wishes to stop
+        archiving temporarily.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a %r option in recovery.conf to provide last restartpoint to
+        recovery_command (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add log_restartpoints recovery option to emit LOG message at each
+        restartpoint (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Last transaction end time is now logged at end of recovery and at
+        each logged restartpoint (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        New system view pg_stat_bgwriter displays statistics about the
+        background writer process's performance (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new columns for database-wide tuple statistics to
+        pg_stat_database (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add an xact_start column to pg_stat_activity (Neil)
+       </para>
+
+       <para>
+        This makes it easier to identify long-running transactions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add n_live_tuples and n_dead_tuples columns to pg_stat_all_tables
+        and related views (Glen Parker)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new encoding EUC_JIS_2004 and SHIFT_JIS_2004, along with new
+        conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make JOHAB encoding client-only (Tatsuo)
+       </para>
+
+       <para>
+        It was found that JOHAB does not meet the assumptions needed to be
+        used safely as a server-side encoding.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make configuration parameters fall back to their default values when
+        they are removed from the configuration file (Joachim Wieland)
+       </para>
+
+       <para>
+        This fixes an ancient gotcha that returning a configuration file
+        line to its original commented-out state did not undo the change.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Change the timestamps recorded in transaction commit/abort xlog
+        records from time_t to TimestampTz representation (Tom)
+       </para>
+
+       <para>
+        This provides full gettimeofday() resolution for the timestamps,
+        which might be useful when attempting to do point-in-time recovery
+        --- previously it was not possible to specify the stop point with
+        sub-second resolution.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Limit the amount of information reported when a user is dropped
+        (Alvaro)
+       </para>
+
+       <para>
+        Previously, dropping (or attempting to drop) a user who owned many
+        objects could result in extremely large NOTICE or ERROR messages
+        listing all these objects; this caused problems for some client
+        applications.  The length of the list is now limited, although a
+        full list is still sent to the server log.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create a temp_tablespaces parameter to allow selection of the
+        tablespace(s) in which to store temp tables and temporary files
+        (Jaime Casanova, Albert Cervera, Bernd Helmle)
+       </para>
+
+       <para>
+        This is a list to allow spreading the load across multiple
+        tablespaces; a random list element is chosen each time a temp object
+        is to be created.  Temp files are not stored in per-database
+        pgsql_tmp/ directories anymore, but per-tablespace directories.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Arrange to put TOAST tables belonging to temporary tables into
+        special schemas named pg_toast_temp_nnn (Tom)
+       </para>
+
+       <para>
+        This allows low-level code such as the relcache to recognize that
+        these tables are indeed temporary, which enables various
+        optimizations such as not WAL-logging changes and using local rather
+        than shared buffers for access.  Aside from obvious performance
+        benefits, this provides a solution to bug #3483, in which other
+        backends unexpectedly held open file references to temporary tables.
+        The scheme preserves the property that TOAST tables are not in any
+        schema that's normally in the search path, so they don't conflict
+        with user table names.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add support for GSSAPI authentication (Henry Hotz, Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support SSPI authentication on Windows (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix problem that a constant flow of new connection requests could
+        indefinitely delay the postmaster from completing a shutdown or
+        crash restart (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow CREATE INDEX CONCURRENTLY to disregard transactions in other
+        databases (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove stats_start_collector parameter (Tom)
+       </para>
+
+       <para>
+        We now always start the collector process, unless prevented by a
+        problem with setting up the stats UDP socket.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove stats_reset_on_server_start parameter (Tom)
+       </para>
+
+       <para>
+        This seemed useless in view of the availability of pg_stat_reset().
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Merge stats_block_level and stats_row_level parameters into a single
+        parameter track_counts, which controls all reports sent to the
+        collector process (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Rename stats_command_string parameter to track_activities (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Query Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Text search capability is now in core Postgres (Teodor, Oleg)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support ORDER BY ... NULLS FIRST/LAST, and add ASC/DESC/NULLS
+        FIRST/NULLS LAST per-column options for btree indexes (Tom, Teodor)
+       </para>
+
+       <para>
+        Note incompatible change from prior behavior: ORDER BY ... USING
+        will now be rejected if the operator is not a less-than or
+        greater-than member of some btree opclass.  This prevents
+        less-than-sane behavior if an operator that doesn't actually define
+        a proper sort ordering is selected.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support UPDATE/DELETE WHERE CURRENT OF cursor_name (Arul Shaji, Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow FOR UPDATE in cursors (Arul Shaji, Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add support for cross-type hashing (Tom)
+       </para>
+
+       <para>
+        This allows hash joins, hash indexes, hashed subplans, and hash
+        aggregation to be used in situations involving cross-data-type
+        comparisons, if the data types have compatible hash functions.  That
+        is currently the case for smallint/integer/bigint, and also for
+        float4/float8.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Downgrade implicit casts to text to be assignment-only, except for
+        the ones from the other string-category types (Peter, Tom)
+       </para>
+
+       <para>
+        This change eliminates a lot of surprising interpretations that the
+        parser could formerly make in cases when there was no directly
+        applicable operator.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create a general mechanism that supports casts to and from the
+        standard string types (text,varchar,bpchar) for *every* datatype, by
+        invoking the datatype's I/O functions (Tom)
+       </para>
+
+       <para>
+        These new casts are assignment-only in the to-string direction,
+        explicit-only in the other, and therefore should create no
+        surprising behavior.  Remove a bunch of thereby-obsoleted
+        datatype-specific casting functions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make ARRAY(SELECT ...) return an empty array, rather than a NULL,
+        when the sub-select returns zero rows (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix some issues with user tables and views that are named similarly
+        to system catalogs (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove the undocumented "not in" operator (!!=) (Tom)
+       </para>
+
+       <para>
+        This operator was obsoleted long ago by IN (sub-SELECT) queries.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Planner Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Improve handling of "equivalence classes" of variables that are
+        constrained to be equal within a query's WHERE clause (Tom)
+       </para>
+
+       <para>
+        Among other things, this change allows mergejoins to work with
+        descending sort orders, and improves recognition of redundant sort
+        columns.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix problems with selectivity estimation for partial indexes (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve performance for planning large inheritance trees that are
+        mostly excluded by constraints (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix cost estimates for EXISTS subqueries that are evaluated as
+        initPlans (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Object Manipulation Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support arrays of composite types, including the rowtypes of regular
+        tables and views (but not system catalogs, nor sequences or toast
+        tables) (David Fetter, Andrew, Tom)
+       </para>
+
+       <para>
+        This change also removes the hardwired convention that a type's
+        array type is named exactly "_type", instead using a new column
+        pg_type.typarray to provide the linkage.  (It still will be named
+        "_type", though, except in odd corner cases such as maximum-length
+        type names or collisions with a pre-existing type named with a
+        leading underscore.)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support per-function GUC parameter settings (Tom)
+       </para>
+
+       <para>
+        This provides a simple solution for functions that need local
+        settings for parameters; in particular, security definer functions
+        that must set search_path to avoid security loopholes.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add COST and ROWS options to CREATE/ALTER FUNCTION (Tom)
+       </para>
+
+       <para>
+        This change allows simple user adjustment of the estimated cost of a
+        function call, as well as control of the estimated number of rows
+        returned by a set-returning function.  We might eventually wish to
+        extend this to allow function-specific estimation routines, but
+        there seems to be consensus that we should try a simple constant
+        estimate first.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow triggers and rules to be defined with different, per session
+        controllable, behaviors for replication purposes (Jan)
+       </para>
+
+       <para>
+        This will allow replication systems to control the firing mechanism
+        of triggers and rewrite rules without modifying the system catalogs
+        directly.  The behavior is controlled by a new superuser-only
+        parameter session_replication_role.
+
+        psql's \d command as well as pg_dump are extended in a backward
+        compatible fashion.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Invent "operator families" to allow improved handling of
+        cross-data-type operators (Tom)
+       </para>
+
+       <para>
+        This change allows significantly better planning of queries
+        involving cross-data-type comparisons.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support type modifiers for user-defined types (Teodor, Tom)
+       </para>
+
+       <para>
+        User-defined types can now use parameters, similar to the maximum
+        length and precision parameters used by some built-in types.  Any
+        simple constant (numeric or string) or identifier can be used as a
+        parameter value.  A type-specific function must be provided to
+        validate this information and pack it into a 32-bit "typmod" value
+        for storage.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Clean up semantic assumptions for foreign keys (Tom)
+       </para>
+
+       <para>
+        There is now a sound semantic basis for the equality checks applied
+        by foreign-key constraints; formerly the system tended to assume
+        that any operator named "=" was the right thing.  The equality
+        operators will now be selected from the opfamily of the unique index
+        that the FK constraint depends on to enforce uniqueness of the
+        referenced columns; therefore they are certain to be consistent with
+        that index's notion of equality.  Among other things this should fix
+        the problem noted awhile back that pg_dump may fail for foreign-key
+        constraints on user-defined types when the required operators aren't
+        in the search path.  This also means that the former warning
+        condition about "foreign key constraint will require costly
+        sequential scans" is gone: if the comparison condition isn't
+        indexable then we'll reject the constraint entirely.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Utility Command Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE,
+        ALTER ROLE (Tom)
+       </para>
+
+       <para>
+        This provides a convenient way of applying a session's current
+        parameter setting as the default for future sessions or function
+        calls.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Arrange for SET LOCAL's effects to persist until the end of the
+        current top transaction, unless rolled back or overridden by a SET
+        clause for the same variable attached to a surrounding function call
+        (Tom)
+       </para>
+
+       <para>
+        This is an INCOMPATIBLE CHANGE: in 8.0 through 8.2, SET LOCAL's
+        effects disappeared at subtransaction commit (leading to behavior
+        that made little sense at the SQL level).
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add ALTER VIEW ... RENAME TO and ALTER SEQUENCE ... RENAME TO (David
+        Fetter, Neil)
+       </para>
+
+       <para>
+        While it's (still) possible to perform these operations using ALTER
+        TABLE, users were often surprised that they couldn't say ALTER VIEW
+        or ALTER SEQUENCE as appropriate.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement CREATE TABLE LIKE ...  INCLUDING INDEXES (Trevor
+        Hardcastle, Nikhil S, Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix EXPLAIN so it can always print the correct referent of an upper
+        plan level expression (Tom)
+       </para>
+
+       <para>
+        This fix banishes the old hack of showing "?columnN?" when things
+        got too complicated.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make EXPLAIN ANALYZE show which sort method was used by a Sort node
+        (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make PreventTransactionChain reject commands submitted as part of a
+        multi-statement simple-Query message (Tom)
+       </para>
+
+       <para>
+        For example, "BEGIN; DROP DATABASE; COMMIT" will now be rejected
+        even if submitted as a single Query message.  This is a potential
+        incompatibility since some clients expected such strings to work;
+        but it was always unsafe.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow non-superuser database owners to create procedural languages
+        (Jeremy Drake)
+       </para>
+
+       <para>
+        A database owner is now allowed to create a language in his database
+        if it's marked "tmpldbacreate" in pg_pltemplate.  The factory
+        default is that this is set for all standard trusted languages, but
+        of course a superuser may adjust the settings.  In service of this,
+        add the long-foreseen owner column to pg_language; renaming,
+        dropping, and altering owner of a PL now follow normal ownership
+        rules instead of being superuser-only.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make NOTIFY/LISTEN/UNLISTEN only accept simple relation names
+        (Bruce)
+       </para>
+
+       <para>
+        Formerly, these commands accepted "schema.relation" but then ignored
+        the schema part, leading to confusion.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support syntax "CLUSTER table USING index", which is more logical
+        than the old CLUSTER syntax (Holger Schurig)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make CLUSTER MVCC-safe (Heikki Linnakangas)
+       </para>
+
+       <para>
+        Formerly, a CLUSTER command would discard all tuples that were
+        committed dead, even if there were still transactions that should be
+        able to see them under the MVCC snapshot rules.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement new commands DISCARD ALL, DISCARD PLANS, DISCARD TEMP,
+        CLOSE ALL, and DEALLOCATE ALL (Marko Kreen, Neil)
+       </para>
+
+       <para>
+        These commands simplify resetting a database session to initial
+        state, and are particularly handy for connection-pooling software.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make CLUSTER freeze tuples where possible (Heikki, Alvaro)
+       </para>
+
+       <para>
+        This is nearly free and may avoid the need for a subsequent VACUUM
+        of the table.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make CLUSTER and TRUNCATE advance the table's relfrozenxid to
+        RecentXmin (Alvaro)
+       </para>
+
+       <para>
+        This may avoid the need for a subsequent VACUUM of the table.  The
+        table-rewriting variants of ALTER TABLE do it too.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make CREATE/DROP/RENAME DATABASE wait a little bit to see if other
+        backends will exit before failing because of conflicting DB usage
+        (Tom)
+       </para>
+
+       <para>
+        This helps mask the fact that backend exit takes nonzero time.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Data Type and Function Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        SQL/XML support (Nikolay Samokhvalov, Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support enum data types (Tom Dunstan)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a "uuid" data type similar to that defined in RFC 4122 (Gevik
+        Babakhani)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Widen the money data type to 64 bits (D'Arcy Cain)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add "isodow" option to EXTRACT() and date_part() (Bruce)
+       </para>
+
+       <para>
+        This is day of the week, with Sunday = 7.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Check for overflow when converting far-future date values to
+        timestamp (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make to_timestamp() and to_date() assume "TM" for potentially
+        variable-width fields (Bruce)
+       </para>
+
+       <para>
+        This matches Oracle behavior.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix off-by-one conversion in to_date()/to_timestamp() 'D' fields
+        (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add ID (ISO day of week) and IDDD (ISO day of year) format types for
+        to_char(), to_date() and to_timestamp() (Brendan Jurd)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add lo_truncate() function for large object truncation (Kris Jurka)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix float4/float8 to handle Infinity and Nan consistently (Bruce)
+       </para>
+
+       <para>
+        The code formerly was not consistent about distinguishing Infinity
+        symbols from overflow conditions.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement width_bucket() for the float8 data type (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make setseed() return void, rather than a useless integer value
+        (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a function pg_stat_clear_snapshot() that discards any statistics
+        snapshot already collected in the current transaction (Tom)
+       </para>
+
+       <para>
+        This allows plpgsql functions to watch for stats updates even though
+        they are confined to a single transaction.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add new regexp functions regexp_matches(), regexp_split_to_array(),
+        and regexp_split_to_table() (Jeremy Drake, Neil)
+       </para>
+
+       <para>
+        These functions provide access to the capture groups resulting from
+        a POSIX regular expression match, and provide the ability to split a
+        string on a POSIX regular expression.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a hash function for "numeric" (Neil)
+       </para>
+
+       <para>
+        This enables use of hash indexes and hash-based plans with
+        the numeric datatype.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve efficiency of LIKE/ILIKE code, especially for multi-byte
+        charsets, and most especially for UTF8 (Andrew, Itagaki Takahiro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow leading and trailing
+        whitespace in the input to the boolean type (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add explicit casts between boolean and text/varchar (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add additional checks for invalidly-encoded data (Andrew)
+       </para>
+
+       <para>
+        This change plugs some holes that formerly existed in SQL literal
+        backslash escape processing and COPY escape processing: the
+        de-escaped string is rechecked if it might have resulted in creating
+        invalid multi-byte characters.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Ensure that chr() cannot create invalidly encoded text (Andrew)
+       </para>
+
+       <para>
+        In UTF8-encoded databases the argument is treated as a Unicode code
+        point.  In other multi-byte encodings the argument must designate a
+        7-bit ASCII character, or an error is raised, as is also the case if
+        the argument is 0.
+
+        ascii() is adjusted so that it remains the inverse of chr().
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Adjust convert() behavior to ensure encoding validity (Andrew)
+       </para>
+
+       <para>
+        The two argument form of convert() is gone, and the three argument
+        form now takes a bytea first argument and returns a bytea. To cover
+        this loss three new functions are introduced: . convert_from(bytea,
+        name) returns text - converts the first argument from the named
+        encoding to the database encoding . convert_to(text, name) returns
+        bytea - converts the first argument from the database encoding to
+        the named encoding . length(bytea, name) returns int - gives the
+        length of the first argument in characters in the named encoding.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove CONVERT(argument USING conversion_name) (Andrew)
+       </para>
+
+       <para>
+        Although this syntax is required by the SQL standard, it's not clear
+        what the standard expects it to do, except that it's most likely not
+        what we were doing.  The former behavior was an encoding security
+        hole, too.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Put some security restrictions on the dbsize functions (Tom)
+       </para>
+
+       <para>
+        Restrict pg_database_size() to users who can connect to the target
+        database (note that CONNECT privilege is granted by default, so this
+        does not change the default behavior).  Restrict
+        pg_tablespace_size() to users who have CREATE privilege on the
+        tablespace (which is *not* granted by default), except when the
+        tablespace is the default tablespace for the current database (since
+        we treat that as implicitly allowing use of the tablespace).
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Make currtid() functions require SELECT privileges on the target
+        table (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>PL/PgSQL Server-Side Language Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support scrollable cursors (ie, add a "direction" clause in FETCH)
+        in plpgsql (Pavel Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add support for IN as alternative to FROM in PL/PgSQL's FETCH
+        statement, for consistency with the backend's FETCH command (Pavel
+        Stehule)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support MOVE in PL/PgSQL (Magnus, Pavel Stehule, Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Implement RETURN QUERY for PL/PgSQL (Pavel Stehule, Tom)
+       </para>
+
+       <para>
+        This provides some convenient syntax sugar for PL/PgSQL
+        set-returning functions that want to return the result of evaluating
+        a query; it should also be more efficient than repeated RETURN NEXT
+        statements.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow plpgsql function parameter names to be qualified with the
+        function's name (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Reject zero or negative BY step in plpgsql integer FOR-loops, and
+        behave sanely if the loop value overflows int32 on the way to the
+        end value (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve accuracy of error locations in PL/PgSQL syntax errors (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>PL/Perl Server-Side Language Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow type-name arguments to spi_prepare() to be standard type
+        aliases as well as the names given in pg_type (Andrew)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>PL/Python Server-Side Language Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow type-name arguments to plpy.prepare() to be standard type
+        aliases as well as the names given in pg_type (Andrew)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support true boolean type in Python versions that have it, i.e.,
+        version 2.3 and later (Marko Kreen)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>PL/Tcl Server-Side Language Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow type-name arguments to spi_prepare to be standard type aliases
+        as well as the names given in pg_type (Andrew)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix problems with thread-enabled libtcl spawning multiple threads
+        within the backend (Steve Marshall, Paul Bayer, Doug Knight)
+       </para>
+
+       <para>
+        This caused all sorts of unpleasantness.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        List disabled triggers separately in "\d" output
+        (Brendan Jurd)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Identify schema of inherited table in "\d" output (Bernd Helmle)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Show aggregate return types in "\da" output (Greg Sabino Mullane)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add the function's volatility to the output of \df+ (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        In \d patterns, always match $ literally, whether quoted or not
+        (Tom)
+       </para>
+
+       <para>
+        Since we allow $ as a character within identifiers, this behavior is
+        useful, whereas the previous behavior of treating it as the regexp
+        ending anchor was nearly useless given that the pattern is
+        automatically anchored anyway.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add \prompt command (Chad Wagner)
+       </para>
+
+       <para>
+        This lets a psql script prompt the user for input.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow \pset and \x, \t to use boolean constants on/off, rather than
+        always toggling (Chad Wagner)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add \sleep command to allow delays in psql scripts (Jan)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Enable \timing output for \copy commands (Andrew)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow \timing to have better resolution than ~15ms on Windows
+        (Itagaki Takahiro)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Flush the \o file, if any, after each backslash command (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add output-file option for pg_dumpall (Dave Page)
+       </para>
+
+       <para>
+        This is primarily useful on Windows, where output redirection of
+        child pg_dump processes doesn't work.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow pg_dumpall to accept an initial-connection database name
+        rather than the default "template1" (Dave Page)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add --tablespaces-only and --roles-only options to pg_dumpall (Dave
+        Page)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        In -n and -t switches, always match $ literally, whether quoted or
+        not (Tom)
+       </para>
+
+       <para>
+        Since we allow $ as a character within identifiers, this behavior is
+        useful, whereas the previous behavior of treating it as the regexp
+        ending anchor was nearly useless given that the pattern is
+        automatically anchored anyway.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Replace linear searches with binary searches in pg_dump's code to
+        lookup objects by OID (Tom)
+       </para>
+
+       <para>
+        This can improve speed materially in databases with thousands of
+        objects of the same kind (for instances, thousands of functions).
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Other Client Application Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Allow a nondefault pg_xlog directory location to be specified to
+        initdb (Euler Taveira de Oliveira)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Call setrlimit if possible in pg_regress to allow core file
+        generation, and provide a switch for similar behavior in pg_ctl
+        (Andrew)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add cancel handlers so it's possible to Ctrl-C clusterdb, reindexdb
+        and vacuumdb (Itagaki Takahiro, Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove gratuitous response messages from utility programs (Peter)
+       </para>
+
+       <para>
+        The --quiet option is now obsolete and without effect in createdb,
+        createuser, dropdb, dropuser; kept for compatibility but marked for
+        removal in 8.4.
+
+        Progress messages when acting on all databases now go to stdout
+        instead of stderr, since they are not in fact errors.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title><link linkend="libpq"><application>libpq</></link> Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support a global SSL configuration file (Victor Wagner)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add libpq environment variable PGSSLKEY to control SSL hardware keys
+        (Victor Wagner)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Interpret the dbName parameter of PQsetdbLogin as a conninfo string
+        if it contains an = sign (Andrew)
+       </para>
+
+       <para>
+        This allows use of all the options of conninfo strings through
+        client programs that still use PQsetdbLogin.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add lo_truncate() function for large object truncation (Kris Jurka)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Provide PQconnectionUsedPassword() function that returns true if the
+        server demanded a password during authentication (Joe Conway)
+       </para>
+
+       <para>
+        If this is true after a failed connection, and the user did not give
+        a password, clients may choose to prompt for a password and retry.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Get rid of client-code dependencies on the exact text of the
+        no-password error message, by using PQconnectionUsedPassword()
+        instead (Tom)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Major rewrite to use V3 frontend/backend protocol (Michael)
+       </para>
+
+       <para>
+        Among other things, prepared statements can now be prepared on the
+        server side.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Use native threads, instead of pthreads, on Windows (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Improve thread-safety of ecpglib (Itagaki Takahiro)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title><application>Windows</> Port</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Support building the entire Postgres system with Visual C++ (Magnus
+        and others)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove old-style client-only Visual C++ build infrastructure for
+        everything except libpq (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow regression tests to be started by an admin user (Magnus)
+       </para>
+
+       <para>
+        This uses the same privilege-dropping method that's used by pg_ctl
+        and initdb.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Native shared memory implementation for Windows (Magnus)
+       </para>
+
+       <para>
+        Same underlying tech as before, but removes the useless SysV
+        emulation layer.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Source Code Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Improve smgr/md API (Tom)
+       </para>
+
+       <para>
+        This improves error detection and reporting, both for external
+        problems and for coding errors inside the backend.  Notably,
+        disallow mdread() beyond EOF, and enforce that mdwrite() is to be
+        used for rewriting existing blocks while mdextend() is to be used
+        for extending the relation EOF.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Support "gmake draft" in doc/src/sgml/Makefile (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Allow GIN's extractQuery method to signal that nothing can satisfy
+        the query (Teodor)
+       </para>
+
+       <para>
+        This changes prototype of extractQuery method to use int32* instead
+        of uint32* for nentries argument.  A -1 result means that no search
+        is needed.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
+        meant to describe the maximum size of index tuples (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove the xlog-centric "database system is ready" message and
+        replace it with "database system is ready to accept connections"
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Provide strlcpy() and strlcat() on all platforms, and replace
+        error-prone uses of strncpy(), strncat(), etc (Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Move NAMEDATALEN definition from postgres_ext.h to
+        pg_config_manual.h (Peter)
+       </para>
+
+       <para>
+        It used to be part of libpq's exported interface many releases ago,
+        but now it's no longer necessary to make it accessible to clients.
+        We may eventually make it configurable via a configure switch, but
+        we should first flush out any client-side code that thinks it needs
+        to know the value.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Restructure planner-to-executor API (Tom)
+       </para>
+
+       <para>
+        Notably, the executor no longer sees the Query structure at all, but
+        gets a new node type called PlannedStmt that is more suitable as
+        executor input.  This allows us to stop storing mostly-redundant
+        Query trees in prepared statements, portals, etc.  Also, the
+        rangetable used by the executor is now a flat list with no
+        unnecessary substructure --- this simplifies many things.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add configure --enable-profiling switch to enable code profiling
+        (works with gcc only, for now) (Korry Douglas and Nikhil S)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
+        len) (Greg Stark, Tom)
+       </para>
+
+       <para>
+        Third-party code that manipulates varlena datums *must* convert to
+        this convention, since the varvarlena patch changes the
+        representation of length words on some architectures.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Preserve typmod information in Const, Param, ArrayRef, ArrayExpr,
+        and EXPR and ARRAY SubLink nodes (Tom)
+       </para>
+
+       <para>
+        This seems like a good idea in view of the expected increase in
+        typmod usage from Teodor's work to allow user-defined types to have
+        typmods.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove advertising clause from Berkeley BSD-licensed files, per
+        instructions from Berkeley (Bruce)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Replace 4-clause licensed blf.[ch] in contrib/pgcrypto with blowfish
+        implementation from PuTTY which is under minimal BSD/MIT license
+        (Marko Kreen)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Decouple the values of TOAST_TUPLE_THRESHOLD and
+        TOAST_MAX_CHUNK_SIZE, and adjust them to avoid wasting two bytes per
+        toast chunk (Tom)
+       </para>
+
+       <para>
+        This forces initdb because the value of TOAST_MAX_CHUNK_SIZE
+        determines the content of toast tables.  Add TOAST_MAX_CHUNK_SIZE to
+        the values checked in pg_control, since it can't be changed without
+        invalidating toast table content.
+
+        Note: while TOAST_TUPLE_THRESHOLD can now be changed without
+        initdb, some thought still needs to be given to needs_toast_table()
+        in toasting.c before unleashing random changes.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove the prohibition on executing cursor commands through
+        SPI_execute (Tom)
+       </para>
+
+       <para>
+        The macro definition of SPI_ERROR_CURSOR still exists, so as not to
+        needlessly break any SPI callers that are checking for it, but that
+        code will never actually be returned anymore.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Clean up SPI's API a little bit by declaring SPI plan pointers as
+        "SPIPlanPtr" instead of "void *" (Tom)
+       </para>
+
+       <para>
+        This does not break any existing code, but switching is recommended
+        to help catch simple programming mistakes.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Expose more cursor-related functionality in SPI (Pavel Stehule)
+       </para>
+
+       <para>
+        Allow access to the planner's cursor-related planning options, and
+        provide new FETCH/MOVE routines that allow access to the full power
+        of those commands.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add tas() support for Renesas' M32R processor (Kazuhiro Inaoka)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add a flag bit to WAL records that shows whether it is safe to
+        remove full-page images (Koichi Suzuki)
+       </para>
+
+       <para>
+        This supports implementation of external WAL-compression filters
+        that remove such images.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix pgstats counting of live and dead tuples to recognize that
+        committed and aborted transactions have different effects (Tom)
+       </para>
+
+       <para>
+        This should result in noticeably more accurate tracking of
+        n_live_tuples and n_dead_tuples.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create hooks to let a loadable plugin monitor (or even replace) the
+        planner and/or create plans for hypothetical situations (Gurjeet
+        Singh, Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create a function variable "join_search_hook" to let plugins
+        override the join search order portion of the planner (Julius
+        Stroffek)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Downgrade some low-level startup messages to DEBUG1 (Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix several hash functions that were taking chintzy shortcuts
+        instead of delivering a well-randomized hash value (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Redefine IsTransactionState() to only return true for
+        TRANS_INPROGRESS state (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Arrange for quote_identifier() and pg_dump to not quote keywords
+        that are unreserved according to the grammar (Tom)
+       </para>
+
+       <para>
+        Should this be flagged as a potential incompatibility?
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Fix PGXS conventions so that extensions can be built against
+        Postgres installations whose pg_config program does not appear first
+        in the PATH (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
+        party includes (like tcl) that define DLLIMPORT (Magnus)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Adjust the output of MemoryContextStats() so that the line for a
+        child memory context is indented two spaces to the right of its
+        parent context (Neil)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add configure option --with-system-tzdata to use operating system
+        time zone database (Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Change on-disk representation of NUMERIC datatype so that the
+        sign_dscale word comes before the weight instead of after (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Use SYSV semaphores rather than POSIX on Darwin &gt;= 6.0, i.e., OS X
+        10.2 and up (Chris Marcellino)
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+    <sect3>
+     <title>Contrib Changes</title>
+     <itemizedlist>
+
+      <listitem>
+       <para>
+        Add /contrib/pageinspect module for low-level page inspection
+        (Simon, Heikki)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add /contrib/pg_standby module for warm standby operation (Simon)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add /contrib/uuid-ossp module for generating UUID values using the OSSP
+        UUID library (Peter)
+       </para>
+
+       <para>
+        Use configure option --with-ossp-uuid to activate.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add pgbench option to set fillfactor (Pavan Deolasee)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Enhance pgbench -l option to add timestamp (Greg Smith)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add usage count statistics to the information available from
+        contrib/pgbuffercache (Greg Smith)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add GIN support for hstore (Guillaume Smet, Teodor)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Add GIN support for pg_trgm (Guillaume Smet, Teodor0
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Update /contrib/start-scripts OS/X startup files, and move to a
+        separate OS/X directory (Mark Cotner, David Fetter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Restrict pgrowlocks() and dblink_get_pkey() to users who have SELECT
+        privilege on the target table (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Restrict contrib/pgstattuple functions to superusers (Tom)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        contrib/xml2 is deprecated and planned for removal in 8.4 (Peter)
+       </para>
+
+       <para>
+        The new XML support in core Postgres supersedes this module.
+       </para>
+      </listitem>
+
+     </itemizedlist>
+
+    </sect3>
+
+   </sect2>
+  </sect1>
+
   <sect1 id="release-8-2-5">
    <title>Release 8.2.5</title>