]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
First pass over release documentation. I trimmed down some of the
authorBruce Momjian <bruce@momjian.us>
Thu, 18 Oct 2007 05:15:48 +0000 (05:15 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 18 Oct 2007 05:15:48 +0000 (05:15 +0000)
entries and removed a few.

doc/src/sgml/release.sgml

index 395f96bbe2cbcf69f626887d38221357cccdd8d6..a0278759a66606c0e0791d806136f6a4bda7e840 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.520 2007/10/11 20:35:56 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.521 2007/10/18 05:15:48 momjian Exp $ -->
 <!--
 
 Typical markup:
@@ -48,15 +48,11 @@ do it for earlier branch release files.
     <title>Overview</title>
 
     <para>
-     This release represents a major leap forward by adding significant
-     new functionality and performance enhancements to
-     <productname>PostgreSQL</>. Many complex ideas that normally take
-     years to implement were added rapidly to this release by our
-     development team. This release starts <productname>PostgreSQL</> on
-     a trajectory moving beyond feature-parity with other database
-     systems to a time when <productname>PostgreSQL</> will be a
-     technology leader in the database field. Major new capabilities
-     in this release include:
+     This release represents a major leap forward for
+     <productname>PostgreSQL</> by adding significant new functionality
+     and performance enhancements. This was made possible by a growing
+     community that has dramatically accelerated the pace of
+     development. This release adds the follow major capabilities:
 
     <itemizedlist>
 
@@ -69,8 +65,8 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Support for the SQL/XML standard, including a new <type>XML</type> builtin
-        data type
+        Support for the SQL/XML standard, including a operators and a
+        new <type>XML</type> builtin
        </para>
       </listitem>
 
@@ -78,18 +74,12 @@ do it for earlier branch release files.
        <para>
         Enumerated (<type>ENUM</>) data type support
        </para>
-
-       <para>
-        This is accomplished by creating a new data type with an
-        <literal>ENUM</> clause, e.g.
-        <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
-       </para>
       </listitem>
 
       <listitem>
        <para>
-        Universally Unique Identifier (UUID) data type, similar to that
-        defined by RFC 4122
+        Universally Unique Identifier (<type>UUID</>) data type, similar
+        to that defined by RFC 4122
        </para>
       </listitem>
 
@@ -101,7 +91,7 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Control of whether <literal>NULL</>s sort first or last, using
+        Control over whether <literal>NULL</>s sort first or last, using
         <literal>ORDER BY ... NULLS FIRST/LAST</>
        </para>
       </listitem>
@@ -110,11 +100,6 @@ do it for earlier branch release files.
        <para>
         Updatable cursors using <literal>UPDATE/DELETE WHERE CURRENT OF</>
        </para>
-
-       <para>
-        This eliminates the need to reference a primary key to update or
-        delete rows returned by a cursor.
-       </para>
       </listitem>
 
       <listitem>
@@ -134,26 +119,12 @@ do it for earlier branch release files.
        <para>
         User-defined types can now have type modifiers
        </para>
-
-       <para>
-        This allows a user type to take a modifier when
-        being referenced, e.g. <type>SSNUM(7)</>.  Previously only
-        predefined system data types would allow this, e.g.
-        <type>CHAR(4)</>.
-       </para>
       </listitem>
 
       <listitem>
        <para>
         Automatically invalidate cached function code when table
-        definitions change
-       </para>
-
-       <para>
-        Previously PL/PgSQL functions that referenced temporary tables
-        would fail if the temporary table was dropped and recreated
-        between function invocations, unless <literal>EXECUTE</> was
-        used.
+        definitions change or statistics are updated
        </para>
       </listitem>
 
@@ -168,12 +139,8 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        SSPI/GSSAPI authentication support
-       </para>
-
-       <para>
-        This adds native Security Service Provider Interface (SSPI) for
-        Windows.
+        Support Security Service Provider Interface (SSPI) on
+        authentication for Windows and GSSAPI
        </para>
       </listitem>
 
@@ -181,13 +148,6 @@ do it for earlier branch release files.
        <para>
         Multiple autovacuum worker processes, and other autovacuum improvements
        </para>
-
-       <para>
-        This allows multiple vacuums to run concurrently, meaning
-        vacuuming of a large table will not prevent smaller tables from
-        being vacuumed at the same time. Autovacuum is now considered
-        mature and thus enabled by default.
-       </para>
       </listitem>
 
       <listitem>
@@ -217,18 +177,6 @@ do it for earlier branch release files.
         Asynchronous commit option allows transactions to be committed
         but on-disk changes to be delayed
        </para>
-
-       <para>
-        This feature dramatically increases performance for data
-        modification queries. The disadvantage is that because on-disk
-        changes are delayed, if the operating system crashes before data
-        is written to the disk, committed data will be lost. This is
-        useful only for applications that can accept some data loss.
-        Unlike <varname>fsync</varname>, asynchronous commit does not
-        risk database corruption; the worst case is that after an
-        operating system crash the last few reportedly-committed
-        transactions will be missing.
-       </para>
       </listitem>
 
       <listitem>
@@ -236,13 +184,6 @@ do it for earlier branch release files.
         <quote>Distributed</> checkpoints prevent I/O spikes during
         checkpoints
        </para>
-
-       <para>
-        Previously all modified buffers were forced to disk at
-        checkpoint time, causing an I/O spike and decreasing server
-        performance. This new capability spreads checkpoint activity out
-        between checkpoints, reducing peak I/O usage.
-       </para>
       </listitem>
 
       <listitem>
@@ -250,15 +191,6 @@ do it for earlier branch release files.
         Heap-Only Tuples (<acronym>HOT</>) improves <command>UPDATE</>
         space usage
        </para>
-
-       <para>
-        To allow high concurrency <productname>PostgreSQL</> retains old
-        versions of updated rows. Previously only <command>VACUUM</>
-        could reuse space taken by dead rows. With <acronym>HOT</> dead
-        row space can be reused at the time of <command>UPDATE</> or
-        <command>INSERT</>. This allows for more consistent performance.
-        <acronym>HOT</> also improved deleted row space reuse.
-       </para>
       </listitem>
 
       <listitem>
@@ -266,24 +198,12 @@ do it for earlier branch release files.
         Just-in-time background writer strategy to improve disk write
         efficiency
        </para>
-
-       <para>
-        This basically makes the background writer self-tuning.
-       </para>
-
       </listitem>
 
       <listitem>
        <para>
         Reduction of both per-field and per-row storage requirements
        </para>
-
-       <para>
-        Variable-length data types with data values less then 128 bytes
-        will see a decrease of 3-6 bytes. For example, two
-        <type>CHAR(1)</type> fields now take 4 bytes instead of 16. Rows
-        are also 4 bytes shorter.
-       </para>
       </listitem>
 
       <listitem>
@@ -298,35 +218,18 @@ do it for earlier branch release files.
         Allow large sequential scans to use cached pages from other
         concurrent sequential scans
        </para>
-
-       <para>
-        This is accomplished by starting the new sequential scan in the
-        middle of the table (where the other sequential scan is already
-        in-progress) and wrapping around to the beginning to finish.
-       </para>
       </listitem>
 
       <listitem>
        <para>
         Allow <literal>ORDER BY ... LIMIT</> to be done without sorting
        </para>
-
-       <para>
-        This is done by scanning the table and using a filter to find
-        the few requested rows, rather than sorting the entire table.
-       </para>
       </listitem>
 
       <listitem>
        <para>
         Use pseudo-transaction ids in read-only transactions
        </para>
-
-       <para>
-        This reduces transaction overhead for read-only transactions,
-        and reduces the need for vacuuming for transaction id
-        wrap-around.
-       </para>
       </listitem>
 
      </itemizedlist>
@@ -366,15 +269,6 @@ do it for earlier branch release files.
         Queries that previously automatically cast values to
         <type>TEXT</type> might now need explicit casts
        </para>
-
-       <para>
-        Data types other than <type>CHAR</> and <type>VARCHAR</> no
-        longer automatically cast to <type>TEXT</>, except in the
-        limited case of concatenation (<literal>||</>) where the other
-        input is textual. While this change will require additional
-        casts for some queries it also eliminates some unusual
-        behavior.
-       </para>
       </listitem>
 
       <listitem>
@@ -394,10 +288,8 @@ do it for earlier branch release files.
         <varname>track_activities</>.
         <varname>stats_block_level</> and <varname>stats_row_level</>
         are merged into <varname>track_counts</>.
-        Previously <varname>archive_command</> controlled whether
-        archiving was performed. Now a new boolean configuration
-        parameter, <varname>archive_mode</>, controls this. Autovacuum's
-        default settings have changed.
+        A new boolean configuration parameter, <varname>archive_mode</>,
+        controls archiving. Autovacuum's default settings have changed.
        </para>
       </listitem>
 
@@ -406,11 +298,6 @@ do it for earlier branch release files.
         Commenting out a parameter in <filename>postgresql.conf</> now
         causes it to revert to its default value
        </para>
-
-       <para>
-        Previously commenting out a value kept the value unchanged until
-        the next server restart.
-       </para>
       </listitem>
 
       <listitem>
@@ -437,11 +324,6 @@ do it for earlier branch release files.
         The array name for a base data type is no longer required to
         be the data type name with an underscore prefix
        </para>
-
-       <para>
-        The old naming convention is still honored when possible, but
-        client code should no longer depending on it.
-       </para>
       </listitem>
 
       <listitem>
@@ -449,12 +331,6 @@ do it for earlier branch release files.
         Non-superuser database owners now have privileges to add trusted
         procedural languages in their databases by default
        </para>
-
-       <para>
-        While this is reasonably safe, some administrators may wish to
-        revoke the privilege. It is controlled by
-        <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
-       </para>
       </listitem>
 
       <listitem>
@@ -463,10 +339,6 @@ do it for earlier branch release files.
         the end of the top-most transaction, unless rolled back
        </para>
 
-       <para>
-        Previously <command>SET LOCAL</command>'s effects reverted
-        during subtransaction commit and <command>RELEASE</>.
-       </para>
       </listitem>
 
       <listitem>
@@ -474,11 +346,6 @@ do it for earlier branch release files.
         Commands that are disallowed in transaction blocks are now also
         disallowed in multiple-statement query strings
        </para>
-
-       <para>
-        For example, <literal>BEGIN; DROP DATABASE; COMMIT</> will now be
-        rejected even if submitted as a single query message.
-       </para>
       </listitem>
 
       <listitem>
@@ -508,25 +375,12 @@ do it for earlier branch release files.
         Restrict object size functions to users who have reasonable
         permissions to view such information
        </para>
-
-       <para>
-        For example, database size now requires <literal>CONNECT</>
-        permission, and tablespaces size requires <literal>CREATE</>
-        permission.
-       </para>
       </listitem>
 
       <listitem>
        <para>
         New C macros for handling variable-length data values
        </para>
-
-       <para>
-        The new <function>SET_VARSIZE()</> macro <emphasis>must</> be
-        used to set the length of generated values. Also, it might be
-        necessary to expand (<quote>de-TOAST</quote>) input values in
-        additional places.
-       </para>
       </listitem>
 
     </itemizedlist>
@@ -547,275 +401,158 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Implement an optional asynchronous commit mode (Simon)
-       </para>
-
-       <para>
-        When <varname>synchronous_commit</varname> is off, we don't flush
-        WAL before reporting a transaction committed.  Data consistency is
-        still guaranteed (unlike turning <varname>fsync</varname> 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 <quote>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.)
-        This reduces the impact of checkpoints on query processing.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Heap-Only Tuples (Pavan Deolasee, with ideas from many others)
+        Asynchronous commit option allows transactions to be committed
+        but on-disk changes to be delayed (Simon)
        </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
-        <quote>prune</quote> dead tuples on a per-page basis, without having
-        to do a complete <command>VACUUM</command> pass to recover space.
-        <command>VACUUM</command> is still needed to clean up dead index
-        entries, however.
+        This feature dramatically increases performance for data
+        modification queries. The disadvantage is that because on-disk
+        changes are delayed, if the operating system crashes before data
+        is written to the disk, committed data will be lost. This is
+        useful only for applications that can accept some data loss.
+        Unlike <varname>fsync</varname>, asynchronous commit does not
+        risk database corruption; the worst case is that after an
+        operating system crash the last few reportedly-committed
+        transactions will be missing.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Just-in-time background writing strategy (Greg Smith, Itagaki
-        Takahiro)
+        <quote>Distributed</> checkpoints prevent I/O spikes during
+        checkpoints (Itagaki Takahiro and Heikki Linnakangas)
        </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.
+        Previously all modified buffers were forced to disk at
+        checkpoint time, causing an I/O spike and decreasing server
+        performance. This new capability spreads checkpoint activity out
+        between checkpoints, reducing peak I/O usage. (User-requested
+        and shutdown checkpoints are still immediately written to disk.)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support varlena fields with single-byte headers and unaligned
-        storage (Greg Stark)
+        Heap-Only Tuples (<acronym>HOT</>) improves <command>UPDATE</>
+        space usage (Pavan Deolasee, with ideas from many others)
        </para>
 
        <para>
-        This significantly reduces the on-disk size of short
-        character-string fields.
+        To allow high concurrency <productname>PostgreSQL</> retains old
+        versions of updated rows. Previously only <command>VACUUM</>
+        could reuse space taken by dead rows. With <acronym>HOT</> dead
+        row space can be reused at the time of <command>UPDATE</> or
+        <command>INSERT</>. This allows for more consistent performance.
+        <acronym>HOT</> even allows deleted row space reuse.
+        <command>UPDATE</> space reuse is only possible if no modified
+        columns are indexed.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Combine cmin and cmax fields of HeapTupleHeaders into a single field
-        (Heikki)
+        Just-in-time background writer strategy to improve disk write
+        efficiency (Greg Smith, Itagaki Takahiro)
        </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.
+        This basically makes the background writer self-tuning.
        </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 <quote>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.
+        Reduction of both per-field and per-row storage requirements
+        (Greg Stark)
        </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Reduce contention for the ProcArrayLock (Florian Pflug, Heikki)
+        Variable-length data types with data values less then 128 bytes
+        will see a decrease of 3-6 bytes. For example, two
+        <type>CHAR(1)</type> fields now take 4 bytes instead of 16. Rows
+        are also 4 bytes shorter.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Improve interlocking between checkpoint start and transaction commit
-        (Heikki)
+        Use pseudo-transaction ids in read-only transactions (Florian Pflug)
        </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.
+        This reduces transaction overhead for read-only transactions,
+        and reduces the necessity of vacuuming for transaction id
+        wrap-around. Other transaction performance improvements were
+        also made that should improve concurrency.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Create a dedicated <quote>wal writer</quote> process to offload
+        Create a dedicated <acronym>WAL</> writer process to off-load
         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>
-
-      <listitem>
-       <para>
-        Skip writing WAL in <command>CLUSTER</command> and
-        <command>COPY</command> 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 <filename>pg_control</filename> 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>
-        Avoid unnecessary disk reads during WAL recovery (Heikki)
+        Skip unnecessary WAL writes for <command>CLUSTER</command> and
+        <command>COPY</command> (Simon)
        </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.
+        Unless WAL archiving is enabled, it is possible to just
+        <function>fsync()</> the table at the end of the command,
+        increasing performance. Additional WAL efficiencies were also
+        added.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Make large sequential scans and <command>VACUUM</command>s work in a
-        limited-size <quote>ring</quote> of buffers (Simon, Heikki, Tom)
-       </para>
-
-       <para>
-        Aside from avoiding cache spoliation, this fixes the problem that
-        <command>VACUUM</command> 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 <quote>wraps
-        around</quote> to cover all blocks; this may affect the order in which
-        rows are returned.
-       </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>
-        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.
+        Prevent large sequential scans from forcing out more frequently
+        used cached pages (Simon, Heikki, Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Implement <quote>top N</quote> sorting in <literal>ORDER BY
-        ... LIMIT</literal> queries (Greg Stark)
+        Allow large sequential scans to use cached pages from other
+        concurrent sequential scans (Jeff Davis)
        </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 &mdash; avoiding spill-to-disk for large
-        M is actually the most attractive thing about it.
+        This is accomplished by starting the new sequential scan in the
+        middle of the table (where the other sequential scan is already
+        in-progress) and wrapping around to the beginning to finish.
+        This may affect the order in which rows are returned in a
+        non-<literal>ORDER BY</> query.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Improve hash join performance for cases with many input NULLs (Tom)
+        Reduce overhead of populating the statistics tables. (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Improve performance of mergejoin with a large sort operation as
-        inner input (Greg Stark)
+        Allow <literal>ORDER BY ... LIMIT</> to be done without sorting
+        (Greg Stark)
        </para>
 
        <para>
-        This change uses a Materialize node between the mergejoin and the
-        sort to prevent the sort from having to <quote>back up</>, which
-        allows a more efficient sort.  The Materialize node keeps a circular
-        buffer of only the prior tuples that the mergejoin may actually
-        need again, so it usually won't need to spill to disk, resulting
-        in net I/O savings.
+        This is done by scanning the table and using a filter to save
+        the few requested rows, rather than sorting the entire table.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Avoid computing X^2 at each row in <function>avg(bigint)</function>
-        and <function>avg(numeric)</function> (Mark Kirkwood)
+        Improve hash join performance for cases with many NULLs (Tom)
        </para>
       </listitem>
 
@@ -829,74 +566,67 @@ do it for earlier branch release files.
 
       <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.
+        Support multiple concurrent autovacuum processes (Alvaro, Itagaki
+        Takahiro)
        </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Support multiple concurrent autovacuum processes (Alvaro, Itagaki
-        Takahiro)
+        This allows multiple vacuums to run concurrently, meaning
+        vacuuming of a large table will not prevent smaller tables from
+        being vacuumed at the same time. Autovacuum is now considered
+        mature and thus enabled by default. Several autovacuum
+        default parameter values were also updated.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Set the default autovacuum <varname>vacuum_cost_delay</varname>
-        value to 20ms, and reduce the default autovacuum vacuum and analyze
-        threshold values to 50 tuples (Alvaro)
+        Autovacuum is now enabled by default (Alvaro)
        </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Make autovacuum report the start time of its current activity in
+        Also, autovacuum now reports its activity start time in
         <literal>pg_stat_activity</literal> (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Make configuration parameters fall back to their default values when
-        they are removed from the configuration file (Joachim Wieland)
+        Commenting out a parameter in <filename>postgresql.conf</> now
+        causes it to revert to its default value (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.
+        Previously commenting out a value kept the value unchanged until
+        the next server restart.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Invalidate and rebuild cached plans whenever there is a schema
-        change or statistics update to referenced relations (Tom)
+        Automatically invalidate cached function code when table
+        definitions change or statistics are updated (Tom)
        </para>
 
        <para>
-        Aside from improving performance (for example, by being able to make
-        use of newly-added indexes), this finally fixes the problem that you
-        couldn't drop and recreate a temp table that's used by a PL/PgSQL
-        function, unless you used <literal>EXECUTE</literal> for all
-        references to it.  A statement that depends on a temp table will now
-        be replanned automatically if the temp table has been recreated.
+        Previously PL/PgSQL functions that referenced temporary tables
+        would fail if the temporary table was dropped and recreated
+        between function invocations, unless <literal>EXECUTE</> was
+        used.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add support for GSSAPI authentication (Henry Hotz, Magnus)
+        Support Security Service Provider Interface (SSPI)
+        authentication on Windows (Magnus)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support SSPI authentication on Windows (Magnus)
+        Add support for GSSAPI authentication (Henry Hotz, Magnus)
        </para>
       </listitem>
 
@@ -908,7 +638,7 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Add <varname>ssl_ciphers</> parameter to control allowed ciphers
+        Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers
         (Victor Wagner)
        </para>
       </listitem>
@@ -916,7 +646,7 @@ do it for earlier branch release files.
       <listitem>
        <para>
         Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004, along with new
-        conversions among EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
+        conversions between EUC_JIS_2004, SHIFT_JIS_2004 and UTF-8 (Tatsuo)
        </para>
       </listitem>
 
@@ -926,15 +656,14 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        It was found that JOHAB does not meet the assumptions needed to be
-        used safely as a server-side encoding.
+        JOHAB cannot safely be used as a server-side encoding.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Provide for logfiles in machine readable CSV format (Arul Shaji,
-        Greg Smith, Andrew Dunstan)
+        Allow logfile creation in CSV format (Arul Shaji, Greg Smith,
+        Andrew Dunstan)
        </para>
       </listitem>
 
@@ -968,8 +697,8 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        <literal>%s</literal> and <literal>%c</literal> escapes in
-        <varname>log_line_prefix</varname> can now be used in all processes
+        <varname>log_line_prefix</varname> escapes <literal>%s</literal>
+        and <literal>%c</literal> can now be used in all processes
         (Andrew)
        </para>
       </listitem>
@@ -981,84 +710,89 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        This avoids Windows-specific problems with localized time zone names
-        that are in the wrong encoding.  There is a new
-        <varname>log_timezone</> parameter that controls the timezone used
-        in log messages, separately from the client-visible
+        This avoids Windows-specific problems with localized time zone
+        names that are in the wrong encoding. There is a new
+        <varname>log_timezone</> parameter that controls the timezone
+        used in log messages, independent of the client-visible
         <varname>timezone</> parameter.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Change the timestamps recorded in transaction commit/abort xlog
-        records from time_t to TimestampTz representation (Tom)
+        Change the timestamps recorded in transaction WAL 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
-        &mdash; previously it was not possible to specify the stop point with
-        sub-second resolution.
+        This provides sub-second resolution in WAL, which can be useful for
+        point-in-time recovery.
        </para>
       </listitem>
-
       <listitem>
        <para>
-        Split the <varname>archive_command</> parameter into separate
-        <varname>archive_mode</> and <varname>archive_command</> parameters
-        (Simon)
+        New boolean configuration parameter, <varname>archive_mode</>,
+        controls archiving (Simon)
        </para>
 
        <para>
-        This avoids some problems that occur if the user wishes to stop
-        archiving temporarily.
+        Previously setting <varname>archive_command</> to an empty
+        string turned off archiving. Now <varname>archive_mode</> turns
+        archiving on and off. This is useful for stopping archiving
+        temporarily.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add a <literal>%r</> option in <filename>recovery.conf</filename> to
-        provide last restartpoint to <varname>restore_command</varname>
+        Improve ability to create warm standby servers using archiving
         (Simon)
        </para>
+      
+       <para>
+        Allow the warm standby server to pass the earliest needed WAL
+        file to the recovery script to allow automatic removal of
+        unneeded WAL files. This is done using
+        <varname>restore_command</varname> <literal>%r</> in
+        <filename>recovery.conf</filename>.
+       </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <varname>log_restartpoints</varname> recovery option to emit a
-        log message at each restartpoint (Simon)
+        Add <varname>log_restartpoints</varname> archive recovery option
+        to emit a log message at each recovery restart point (Simon)
        </para>
       </listitem>
 
       <listitem>
        <para>
         Last transaction end time is now logged at end of recovery and at
-        each logged restartpoint (Simon)
+        each logged restart point (Simon)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Create a <varname>temp_tablespaces</varname> parameter to allow
-        selection of one or more tablespaces in which to store temp tables
-        and temporary files (Jaime Casanova, Albert Cervera, Bernd Helmle)
+        Add a <varname>temp_tablespaces</varname> parameter to control
+        the tablespaces for temporary tables and 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
-        <filename>pgsql_tmp/</filename> directories anymore, but in
-        per-tablespace directories.
+        This parameters allows a list of tablespaces to be specified
+        which enables spreading the I/O load across multiple
+        tablespaces. A random tablespace is chosen each time a temporary
+        object is created. Temporary files are not stored in
+        per-database <filename>pgsql_tmp/</filename> directories anymore
+        but in per-tablespace directories.
        </para>
       </listitem>
 
       <listitem>
        <para>
         New system view <literal>pg_stat_bgwriter</literal> displays
-        statistics about the background writer process's performance
-        (Magnus)
+        statistics about the background writer activity (Magnus)
        </para>
       </listitem>
 
@@ -1105,8 +839,8 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        This seemed useless in view of the availability of
-        <function>pg_stat_reset()</function>.
+        This was removed because <function>pg_stat_reset()</function>
+        can be used for this purpose.
        </para>
       </listitem>
 
@@ -1114,7 +848,7 @@ do it for earlier branch release files.
        <para>
         Merge <varname>stats_block_level</> and <varname>stats_row_level</>
         parameters into a single parameter <varname>track_counts</>,
-        which controls all reports sent to the collector process (Tom)
+        which controls all messages sent to the collector process (Tom)
        </para>
       </listitem>
 
@@ -1149,12 +883,11 @@ do it for earlier branch release files.
        </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.
+        This allows low-level code to recognize that these tables are
+        temporary, which enables various optimizations such as not
+        WAL-logging changes and using local rather than shared buffers
+        for access. This also fixes a bug where backends unexpectedly
+        held open file references to temporary tables.
        </para>
       </listitem>
 
@@ -1168,7 +901,7 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Allow <command>CREATE INDEX CONCURRENTLY</command> to disregard
+        Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore
         transactions in other databases (Simon)
        </para>
       </listitem>
@@ -1187,39 +920,43 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        The features previously provided by <filename>contrib/tsearch2</>
-        have been improved and moved into the standard server.
+        This features was previously in <filename>contrib/tsearch2</>.
+        It has been improved, moved into the server, and is now installed
+        by default.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support <literal>ORDER BY ... NULLS FIRST/LAST</literal> (Teodor, Tom)
-       </para>
-
-       <para>
-        Users can now control whether nulls sort before or after
-        other values.
+        Control over whether <literal>NULL</>s sort first or last, using
+        <literal>ORDER BY ... NULLS FIRST/LAST</> (Teodor, Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add ASC/DESC and NULLS FIRST/NULLS LAST per-column options for btree
-        indexes (Teodor, Tom)
+        Allow ascending/descending (<literal>ASC</>/<literal>DESC</>)
+        control during index creation (Teodor, Tom)
        </para>
 
        <para>
-        This is primarily useful for customizing multicolumn indexes to match
-        the ordering needed by a specific query.
+        Previously a query using <literal>ORDER BY</> with mixed
+        <literal>ASC</>/<literal>DESC</> specifiers could not fully use
+        an index. Now an index can be fully used in such cases if the
+        index was created with matching
+        <literal>ASC</>/<literal>DESC</> specifictions.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support <literal>UPDATE/DELETE WHERE CURRENT OF</>
-        <replaceable>cursor_name</>
-        (Arul Shaji, Tom)
+        Updatable cursors using <literal>UPDATE/DELETE WHERE CURRENT
+        OF</> (Arul Shaji, Tom)
+       </para>
+
+       <para>
+        This eliminates the need to reference a primary key to update or
+        delete rows returned by a cursor.
        </para>
       </listitem>
 
@@ -1231,31 +968,31 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Downgrade implicit casts to text to be assignment-only, except for
-        the ones from the other string-category types (Peter, Tom)
+        Queries that previously automatically cast values to
+        <type>TEXT</type> might now need explicit casts (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.  The  <literal>||</> (concatenation) operator
-        has been generalized so that it will still accept non-textual
-        inputs, thus preserving the main useful case for implicit text
-        coercion.  In other cases, if you want something to be treated
-        as text you'll need to say so.
+        Data types other than <type>CHAR</> and <type>VARCHAR</> no
+        longer automatically cast to <type>TEXT</>, except in the
+        limited case of concatenation (<literal>||</>) where the other
+        input is textual. While this change will require additional
+        casts for some queries it also eliminates some unusual
+        behavior.
        </para>
       </listitem>
 
       <listitem>
        <para>
         Create a general mechanism that supports casts to and from the
-        standard string types (<type>text</type>, <type>varchar</type>,
-        <type>bpchar</type>) for <emphasis>every</emphasis> datatype, by
+        standard string types (<type>TEXT</type>, <type>VARCHAR</type>,
+        <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by
         invoking the datatype's I/O functions (Tom)
        </para>
 
        <para>
-        These new casts are assignment-only in the to-string direction,
+        XXX? bjm 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.
@@ -1264,70 +1001,49 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Make <literal>ARRAY(SELECT ...)</literal> return an empty array,
-        rather than a NULL, when the sub-select returns zero rows (Tom)
+        <literal>ARRAY(SELECT ...)</literal>, where <command>SELECT</>
+        returns no rows, now returns an empty array, rather than NULL
+        (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Make 'col IS NULL' clauses be btree-indexable conditions (Teodor)
+        Allow <literal>col IS NULL</> to use an index (Teodor)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add support for cross-type hashing (Tom)
+        Allow limited hashing when using two different data types (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
-        <type>smallint</type>/<type>integer</type>/<type>bigint</type>, and
-        also for <type>float4</type>/<type>float8</type>.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Improve handling of <quote>equivalence classes</quote> of variables
-        that are constrained to be equal within a query's <literal>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.
+        comparisons, if the data types have compatible hash functions.
+        Current cross-data-type hashing support exists for
+        <type>SMALLINT</type>/<type>INTEGER</type>/<type>BIGINT</type>,
+        and for <type>FLOAT4</type>/<type>FLOAT8</type>.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Improve performance for planning large inheritance trees that are
-        mostly excluded by constraints (Tom)
+        Improve optimizer logic for detecting when variables are equal
+        in a <literal>WHERE</> clause (Tom)
        </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Fix problems with selectivity estimation for partial indexes (Tom)
-       </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Fix cost estimates for <literal>EXISTS</literal> subqueries that are
-        evaluated as initPlans (Tom)
+        This allows mergejoins to work with descending sort orders, and
+        improves recognition of redundant sort columns.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Fix some issues with user tables and views that are named similarly
-        to system catalogs (Tom)
+        Improve performance when planning large inheritance trees when
+        most tables are excluded by constraints (Tom)
        </para>
       </listitem>
 
@@ -1337,8 +1053,8 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        This operator was obsoleted long ago by <literal>IN (SELECT
-        ...)</literal> queries.
+        <literal>NOT IN (SELECT ...)</literal> is the proper way to
+        perform this operation.
        </para>
       </listitem>
 
@@ -1351,118 +1067,94 @@ do it for earlier branch release files.
      <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)
+        Support arrays of composite types (David Fetter, Andrew, Tom)
        </para>
 
        <para>
-        This change also removes the hardwired convention that a type's
-        array type is named exactly <quote>_type</quote>, instead using a
-        new column <literal>pg_type.typarray</literal> to provide the
-        linkage.  (It still will be named <quote>_type</quote>, though,
-        except in odd corner cases such as maximum-length type names or
-        collisions with a pre-existing type named with a leading
-        underscore.)
+        Arrays of rowtypes of regular tables and views are now
+        supported, but not for system catalogs, sequences, or TOAST
+        tables.
        </para>
+
       </listitem>
 
       <listitem>
        <para>
-        Support per-function GUC parameter settings (Tom)
+        The array name for a base data type is no longer required to
+        be the data type name with an underscore prefix
        </para>
 
        <para>
-        This provides a simple solution for functions that need local
-        settings for parameters; in particular, security definer functions
-        that must set <varname>search_path</varname> to avoid security
-        loopholes.
+        The old naming convention is still honored when possible, but
+        client code should no longer depending on it. Application code
+        should use the new <literal>pg_type.typarray</literal> column to
+        determine the array data type.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <literal>COST</literal> and <literal>ROWS</literal> options to
-        <command>CREATE/ALTER FUNCTION</command> (Tom)
+        Support per-function GUC parameter settings (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.
+        This provides a simple way for functions to set local
+        parameters. In particular, security definer functions should set
+        <varname>search_path</varname> to avoid security loopholes.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow triggers and rules to be defined with different, per session
-        controllable, behaviors for replication purposes (Jan)
+        Add <literal>COST</literal> and <literal>ROWS</literal> options to
+        <command>CREATE/ALTER FUNCTION</command> (Tom)
        </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 <varname>session_replication_role</varname>.
-      </para>
-
-       <para>
-        <application>psql</application>'s <literal>\d</literal> command as
-        well as <application>pg_dump</application> are extended in a
-        backward compatible fashion.
+        This allows simple control of the estimated cost of a function
+        call and control over the estimated number of rows returned by a
+        set-returning function.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support type modifiers for user-defined types (Teodor, Tom)
+        Allow triggers and rules to be deactivated in groups using a
+        session variable, for replication purposes (Jan)
        </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 <quote>typmod</>
-        value for storage.
+        This allows replication systems to disable triggers and rewrite
+        rules as a group without modifying the system catalogs directly.
+        The behavior is controlled by <command>ALTER TABLE</> and a new
+        parameter <varname>session_replication_role</varname>.
+      </para>
+
+       <para>
+        <application>psql</application>'s <literal>\d</literal> command
+        and <application>pg_dump</application> have been enhanced
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Invent <quote>operator families</quote> to allow improved handling
-        of cross-data-type operators (Tom)
+        User-defined types can now have type modifiers (Teodor, Tom)
        </para>
 
        <para>
-        This change allows significantly better planning of queries
-        involving cross-data-type comparisons.
+        This allows a user type to take a modifier when
+        being created, e.g. <type>SSNUM(7)</>.  Previously only
+        predefined system data types would allow this, e.g.
+        <type>CHAR(4)</>.
        </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 <literal>=</> 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 <quote>foreign key constraint will require costly
-        sequential scans</quote> is gone: if the comparison condition isn't
-        indexable then we'll reject the constraint entirely.
+        Foreign keys now must match indexable conditions for
+        cross-data-type references (Tom)
        </para>
       </listitem>
 
@@ -1476,76 +1168,66 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Allow non-superuser database owners to create procedural languages
-        (Jeremy Drake)
+        Non-superuser database owners now have privileges to add trusted
+        procedural languages in their databases by default (Jeremy Drake)
        </para>
 
+
        <para>
-        A database owner is now allowed to create a language in his database
-        if it's marked <structfield>tmpldbacreate</> in
-        <structname>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 <structname>pg_language</>; renaming, dropping, and altering
-        owner of a PL now follow normal ownership rules instead of being
-        superuser-only.
+        While this is reasonably safe, some administrators may wish to
+        revoke the privilege. It is controlled by
+        <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Arrange for <command>SET LOCAL</command>'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)
+        <command>SET LOCAL</command> changes now persist until
+        the end of the top-most transaction, unless rolled back (Tom)
        </para>
 
        <para>
-        This is an incompatible change: in 8.0 through 8.2, <command>SET
-        LOCAL</command>'s effects disappeared at subtransaction commit
-        (leading to behavior that made little sense at the SQL level).
+        Previously <command>SET LOCAL</command>'s effects reverted
+        during subtransaction commit and <command>RELEASE</>.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support <literal>SET ... FROM CURRENT</literal> in
-        <command>CREATE/ALTER FUNCTION</command>, <command>ALTER DATABASE</command>,
-        <command>ALTER ROLE</command> (Tom)
+        Allow a session's current parameter setting to be used as the
+        default for future sessions (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.
+        This is done with <literal>SET ... FROM CURRENT</literal> in
+        <command>CREATE/ALTER FUNCTION</command>, <command>ALTER
+        DATABASE</command>, or <command>ALTER ROLE</command>.
        </para>
       </listitem>
 
       <listitem>
        <para>
         Implement new commands <command>DISCARD ALL</command>,
-        <command>DISCARD PLANS</command>, <command>DISCARD TEMP</command>,
-        <command>CLOSE ALL</command>, and <command>DEALLOCATE ALL</command>
-        (Marko Kreen, Neil)
+        <command>DISCARD PLANS</command>, <command>DISCARD
+        TEMPORARY</command>, <command>CLOSE ALL</command>, and
+        <command>DEALLOCATE ALL</command> (Marko Kreen, Neil)
        </para>
 
        <para>
         These commands simplify resetting a database session to its initial
-        state, and are particularly handy for connection-pooling software.
+        state, and are particularly useful for connection-pooling software.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
+        Allow <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
         SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
        </para>
 
        <para>
-        While it has long been possible to perform these operations using
-        <command>ALTER TABLE</command>, users were often surprised that they
-        couldn't say <command>ALTER VIEW</command> or <command>ALTER
-        SEQUENCE</command> as appropriate.
+        Previously this could only be done via <command>ALTER TABLE ...
+        RENAME TO</command>.
        </para>
       </listitem>
 
@@ -1562,16 +1244,15 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        Formerly, a <command>CLUSTER</command> 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.
+        Formerly, <command>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 visibility rules.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support new syntax for <command>CLUSTER</command>: <literal>CLUSTER
+        Add new syntax for <command>CLUSTER</command>: <literal>CLUSTER
         <replaceable>table</> USING <replaceable>index</></literal>
         (Holger Schurig)
       </para>
@@ -1584,79 +1265,43 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Make <command>CLUSTER</command> freeze tuples where possible
-        (Heikki, Alvaro)
-       </para>
-
-       <para>
-        This is nearly free and may avoid the need for a subsequent
-        <command>VACUUM</command> of the table.
-       </para>
-      </listitem>
-
-      <listitem>
-       <para>
-        Make <command>CLUSTER</command> and <command>TRUNCATE</command>
-        advance the table's <literal>relfrozenxid</literal> to
-        <literal>RecentXmin</literal> (Alvaro)
-       </para>
-
-       <para>
-        This may avoid the need for a subsequent <command>VACUUM</command>
-        of the table.  The table-rewriting variants of <command>ALTER
-        TABLE</command> do it too.
+        Fix <command>EXPLAIN</command> so it can show more complex plans (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Fix <command>EXPLAIN</command> 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
-        <literal>?column<replaceable>N</>?</literal>
-        when things got too complicated.
+        Commands that are disallowed in transaction blocks are now also
+        disallowed in multiple-statement query strings (Tom)
        </para>
-      </listitem>
 
-      <listitem>
-       <para>
-        Make PreventTransactionChain reject commands submitted as part of a
-        multi-statement simple-Query message (Tom)
-       </para>
 
        <para>
         For example, <literal>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.
+        rejected even if submitted as a single query message.
        </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)
+        Make CREATE/DROP/RENAME DATABASE wait briefly for other backends
+        to exit before failing (Tom)
        </para>
 
        <para>
-        This helps mask the fact that backend exit takes nonzero time.
+        This increases the likelihood that these commands will succeed.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Make
-        <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
-        only accept identifiers without a schema qualifier (Bruce)
+        Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
+        from accepting schema-qualified names (Bruce)
        </para>
 
        <para>
-        Formerly, these commands accepted <quote>schema.relation</> but then
-        ignored the schema part, leading to confusion.
+        Formerly, these commands accepted <quote>schema.relation</> but
+        ignored the schema part, which was confusing.
        </para>
       </listitem>
 
@@ -1670,32 +1315,38 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        SQL/XML support (Nikolay Samokhvalov, Peter)
+        Support for the SQL/XML standard, including a operators and a
+        new <type>XML</type> builtin (Nikolay Samokhvalov, Peter)
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Enumerated (<type>ENUM</>) data type support (Tom Dunstan)
        </para>
 
        <para>
-        There is now an <type>xml</> data type and standard operations
-        on it.
+        This is accomplished by creating a new data type with an
+        <literal>ENUM</> clause, e.g.
+        <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support enum data types
-       (Tom Dunstan)
+        Universally Unique Identifier (<type>UUID</>) data type, similar
+        to that defined by RFC 4122 (Gevik Babakhani, Neil)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add a <type>uuid</type> data type similar to that defined in RFC
-        4122 (Gevik Babakhani, Neil)
+        Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain)
        </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Widen the <type>money</type> data type to 64 bits (D'Arcy Cain)
+        This greatly increases the range of supported <type>MONEY</>
+        values.
        </para>
       </listitem>
 
@@ -1707,9 +1358,9 @@ do it for earlier branch release files.
        </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.
+        These functions provide access to the regex groups,
+        <literal>\(.*\)</> , and allows splitting a string on a POSIX
+        regular expression.
        </para>
       </listitem>
 
@@ -1729,14 +1380,18 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Add a function <function>pg_stat_clear_snapshot()</function> that
-        discards any statistics snapshot already collected in the current
-        transaction (Tom)
+        Add <function>pg_stat_clear_snapshot()</function> to discard
+        statistics snapshots collected during the current transaction
+        (Tom)
        </para>
 
        <para>
-        This allows PL/PgSQL functions to watch for stats updates even
-        though they are confined to a single transaction.
+        The first request for statistics in a transaction takes a
+        statistics snapshot that doesn't change during the transaction.
+        This function allows the snapshot to be discarded and a new
+        snapshot loaded during the next statistics query. This is
+        particularly useful for PL/PgSQL functions which are confined to
+        a single transaction.
        </para>
       </listitem>
 
@@ -1747,28 +1402,25 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        This is day of the week, with Sunday = 7.
-       </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)
+        This is the day of the week, with Sunday as seven.
+        (<literal>dow</> returns Sunday as zero.)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Check for overflow when converting far-future date values to
-        timestamp (Tom)
+        Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO
+        day of year) format types for <function>to_char()</>,
+        <function>to_date()</> and <function>to_timestamp()</> (Brendan
+        Jurd)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Make <function>to_timestamp()</> and <function>to_date()</> assume
-        <quote>TM</quote> for potentially variable-width fields (Bruce)
+        Make <function>to_timestamp()</> and <function>to_date()</>
+        assume <quote>TM</quote> (trim) for potentially variable-width
+        fields (Bruce)
        </para>
 
        <para>
@@ -1785,13 +1437,14 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Fix <type>float4</type>/<type>float8</type> to handle Infinity and
-        Nan consistently (Bruce)
+        Fix <type>float4</type>/<type>float8</type> to handle
+        <literal>Infinity</> and <literal>NAN</> (not a number)
+        consistently (Bruce)
        </para>
 
        <para>
-        The code formerly was not consistent about distinguishing Infinity
-        symbols from overflow conditions.
+        The code formerly was not consistent about distinguishing
+        <literal>Infinity</> from overflow conditions.
        </para>
       </listitem>
 
@@ -1804,61 +1457,57 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Add a hash function for <type>numeric</type> (Neil)
+        Add a hash function for <type>NUMERIC</type> (Neil)
        </para>
 
        <para>
         This allows hash indexes and hash-based plans to be used with
-        the <type>numeric</type> datatype.
+        <type>NUMERIC</type>.
        </para>
       </listitem>
 
       <listitem>
        <para>
         Improve efficiency of
-        <literal>LIKE</literal>/<literal>ILIKE</literal> code, especially
-        for multi-byte charsets, and most especially for UTF8 (Andrew,
-        Itagaki Takahiro)
+        <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for
+        multi-byte character sets like UTF8 (Andrew, Itagaki Takahiro)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow leading and trailing whitespace in the input to the
-        <type>boolean</type> type (Neil)
+        Allow leading and trailing whitespace for <type>BOOLEAN</type>
+        values (Neil)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add additional checks for invalidly-encoded data (Andrew)
+        More checks for invalidly-encoded data (Andrew)
        </para>
 
        <para>
-        This change plugs some holes that formerly existed in SQL literal
-        backslash escape processing and <command>COPY</command> escape
-        processing: the de-escaped string is rechecked if it might have
-        resulted in creating invalid multi-byte characters.
+        This change plugs some holes that existed in literal backslash
+        escape string processing and <command>COPY</command> escape
+        processing. Now the de-escaped string is rechecked to see if the
+        result created an invalid multi-byte character.
        </para>
       </listitem>
 
       <listitem>
        <para>
         Ensure that <function>chr()</function> cannot create invalidly
-        encoded text (Andrew)
+        encoded values (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.
-      </para>
+        In UTF8-encoded databases the argument is processed as a Unicode
+        code point. In other multi-byte encodings the argument must
+        designate a 7-bit ASCII character, or an error is raised. Zero
+        also causes an error. <function>ascii()</function> has been
+        adjusted as well to match this behavior.
 
-      <para>
-        <function>ascii()</function> has been adjusted so that it remains
-        the inverse of <function>chr()</function>.
-       </para>
+      </para>
       </listitem>
 
       <listitem>
@@ -1868,34 +1517,34 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        The two argument form of <function>convert()</function> is gone, and
-        the three argument form now takes a <type>bytea</type> first
-        argument and returns a <type>bytea</type>. To cover this loss three
-        new functions are introduced:
+        The two argument form of <function>convert()</function> has been
+        removed. The three argument form now takes a <type>BYTEA</type>
+        first argument and returns a <type>BYTEA</type>. To cover this
+        loss three new functions are introduced:
        </para>
 
        <itemizedlist>
         <listitem>
          <para>
-          <function>convert_from(bytea, name)</function> returning
-          <type>text</> &mdash; converts the first argument from the named
+          <function>convert_from(bytea, name)</function> returns
+          <type>TEXT</> &mdash; converts the first argument from the named
           encoding to the database encoding.
          </para>
         </listitem>
 
         <listitem>
          <para>
-          <function>convert_to(text, name)</function> returning <type>bytea</>
-          &mdash; converts the first argument from the database encoding to
-          the named encoding.
+          <function>convert_to(text, name)</function> returns
+          <type>BYTEA</> &mdash; converts the first argument from the
+          database encoding to the named encoding.
          </para>
         </listitem>
 
         <listitem>
          <para>
-          <function>length(bytea, name)</function> returning <type>int</>
-          &mdash; gives the length of the first argument in characters in the
-          named encoding.
+          <function>length(bytea, name)</function> returns
+          <type>INTEGER</> &mdash; gives the length of the first
+          argument in characters in the named encoding.
          </para>
         </listitem>
        </itemizedlist>
@@ -1903,32 +1552,28 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Remove <literal>CONVERT(argument USING conversion_name)</literal>
+        Remove <literal>convert(argument USING conversion_name)</literal>
         (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.
+        Its behavior did not match the SQL standard and could not be
+        implemented in this release.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Put some security restrictions on the dbsize functions (Tom)
+        Restrict object size functions to users who have reasonable
+        permissions to view such information (Tom)
        </para>
 
        <para>
-        Restrict <function>pg_database_size()</function> to users who can
-        connect to the target database (note that <literal>CONNECT</literal>
-        privilege is granted by default, so this does not change the default
-        behavior).  Restrict <function>pg_tablespace_size()</function> to
-        users who have <literal>CREATE</literal> privilege on the tablespace
-        (which is <emphasis>not</emphasis> 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).
+        For example, <function>pg_database_size()</function> now
+        requires <literal>CONNECT</> permission, which is granted to
+        everyone by default. <function>pg_tablespace_size()</function>
+        requires <literal>CREATE</> permission in the tablespace, or the
+        tablespace is the default tablespace for the database.
        </para>
       </listitem>
 
@@ -1949,14 +1594,14 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Support scrollable cursors (ie, add a direction clause in
-        <command>FETCH</command>) in PL/PgSQL (Pavel Stehule)
+        Add scrollable cursor support by adding directional control to
+        PL/PgSQL's <command>FETCH</command> (Pavel Stehule)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add support for <literal>IN</literal> as alternative to
+        Add support for <literal>IN</literal> as an alternative to
         <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command>
         statement, for consistency with the backend's
         <command>FETCH</command> command (Pavel Stehule)
@@ -1965,42 +1610,53 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Support <command>MOVE</command> in PL/PgSQL (Magnus, Pavel Stehule,
+        Add <command>MOVE</command> to PL/PgSQL (Magnus, Pavel Stehule,
         Neil)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Implement <command>RETURN QUERY</command> for PL/PgSQL (Pavel Stehule, Neil)
+        Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil)
        </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
-        <command>RETURN NEXT</command> statements.
+        This adds convenient syntax for PL/PgSQL set-returning functions
+        that want to return the result of a query, rather than using
+        <command>RETURN NEXT</command>. <command>RETURN QUERY</command>
+        is more efficient too.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow PL/PgSQL function parameter names to be qualified with the
-        function's name (Tom)
+        Allow function parameter names to be qualified with the
+        function's name(Tom)
+       </para>
+
+       <para>
+        For example, <literal>myfunc.myvar</>. This is particularly
+        useful for specifying variables in a query where the variable
+        name might match a column name.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Reject zero or negative <literal>BY</literal> step in plpgsql
-        integer <literal>FOR</literal>-loops, and behave sanely if the loop
-        value overflows <type>int32</type> on the way to the end value (Tom)
+        Tighten requirements for <literal>FOR</literal> loop
+        <literal>STEP</> values (Tom)
+       </para>
+
+       <para>
+        Prevent non-positive <literal>STEP</> values, and handle
+        loop overflows.
        </para>
+        
       </listitem>
 
       <listitem>
        <para>
-        Improve accuracy of error locations in PL/PgSQL syntax errors (Tom)
+        Improve accuracy when reporting syntax error locations (Tom)
        </para>
       </listitem>
 
@@ -2015,7 +1671,7 @@ do it for earlier branch release files.
       <listitem>
        <para>
         Allow type-name arguments to <function>spi_prepare()</function> to
-        be standard type aliases as well as the names given in
+        be data type aliases in addition to names in
         <literal>pg_type</literal> (Andrew)
        </para>
       </listitem>
@@ -2037,15 +1693,15 @@ do it for earlier branch release files.
       <listitem>
        <para>
         Allow type-name arguments to <function>plpy.prepare()</function> to
-        be standard type aliases as well as the names given in
+        be data type aliases in addition to names in
         <literal>pg_type</literal> (Andrew)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support true boolean type in Python versions that have it, i.e.,
-        version 2.3 and later (Marko Kreen)
+        Support a true boolean type in compatible Python versions
+        (Python 2.3 and later) (Marko Kreen)
        </para>
       </listitem>
 
@@ -2059,16 +1715,17 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Allow type-name arguments to <function>spi_prepare</> to be standard
-        type aliases as well as the names given in <literal>pg_type</>
-        (Andrew)
+        Allow type-name arguments to <function>spi_prepare</> to 
+        be data type aliases in addition to names in
+        <literal>pg_type</literal> (Andrew)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Fix problems with thread-enabled libtcl spawning multiple threads
-        within the backend (Steve Marshall, Paul Bayer, Doug Knight)
+        Fix problems with thread-enabled <filename>libtcl</> spawning
+        multiple threads within the backend (Steve Marshall, Paul Bayer,
+        Doug Knight)
        </para>
 
        <para>
@@ -2091,13 +1748,6 @@ do it for earlier branch release files.
        </para>
       </listitem>
 
-      <listitem>
-       <para>
-        Identify schema of inherited table in <literal>\d</literal> output
-        (Bernd Helmle)
-       </para>
-      </listitem>
-
       <listitem>
        <para>
         Show aggregate return types in <literal>\da</literal> output
@@ -2115,60 +1765,46 @@ do it for earlier branch release files.
       <listitem>
        <para>
         In <literal>\d</literal> patterns, always match <literal>$</literal>
-        literally, whether quoted or not (Tom)
-       </para>
-
-       <para>
-        Since we allow <literal>$</literal> 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.
+        literally (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <literal>\prompt</literal> command (Chad Wagner)
-       </para>
-
-       <para>
-        This lets a <application>psql</application> script prompt the user for input.
+        Add <literal>\prompt</literal> capability (Chad Wagner)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow <literal>\pset</literal>, <literal>\t</literal> and
-        <literal>\x</literal> to use boolean constants on/off, rather than
-        always toggling (Chad Wagner)
+        Allow <literal>\pset</literal>, <literal>\t</literal>, and
+        <literal>\x</literal> to use <literal>on</>/<literal>off</>,
+        rather than just toggling (Chad Wagner)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <literal>\sleep</> command to allow delays in
-        <application>psql</application> scripts (Jan)
+        Add <literal>\sleep</> capability (Jan)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Enable <literal>\timing</> output for <literal>\copy</> commands
-        (Andrew)
+        Enable <literal>\timing</> output for <literal>\copy</> (Andrew)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow <literal>\timing</literal> to have better resolution than
-        ~15ms on Windows (Itagaki Takahiro)
+        Improve <literal>\timing</literal> resolution on Windows
+        (Itagaki Takahiro)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Flush the <literal>\o</> file, if any, after each backslash command
-        (Tom)
+        Flush <literal>\o</> output after each backslash command (Tom)
        </para>
       </listitem>
 
@@ -2182,53 +1818,41 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Add --tablespaces-only and --roles-only options to
-        <application>pg_dumpall</application> (Dave Page)
+        Add <literal>--tablespaces-only</> and <literal>--roles-only</>
+        options to <application>pg_dumpall</application> (Dave Page)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add output-file option for <application>pg_dumpall</application>
-        (Dave Page)
+        Add an output file option to
+        <application>pg_dumpall</application> (Dave Page)
        </para>
 
        <para>
         This is primarily useful on Windows, where output redirection of
-        child <application>pg_dump</application> processes doesn't work.
+        child <application>pg_dump</application> processes does not work.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Allow pg_dumpall to accept an initial-connection database name
-        rather than the default <literal>template1</literal> (Dave Page)
+        Allow <application>pg_dumpall</> to accept an initial-connection
+        database name rather than the default
+        <literal>template1</literal> (Dave Page)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        In -n and -t switches, always match <literal>$</literal> literally,
-        whether quoted or not (Tom)
-       </para>
-
-       <para>
-        Since we allow <literal>$</literal> 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.
+        In <literal>-n</> and <literal>-t</> switches, always match
+        <literal>$</literal> literally (Tom)
        </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).
+        Improve performance when a database has many thousands of objects (Tom)
        </para>
       </listitem>
 
@@ -2242,38 +1866,38 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Allow a nondefault <filename>pg_xlog</filename> directory location
-        to be specified to initdb (Euler Taveira de Oliveira)
+        In <application>initdb</>, allow the location of the
+        <filename>pg_xlog</filename> directory location to be specified
+        (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)
+        Enable core dump generation in <application>pg_regress</> and
+        <application>pg_ctl</>, if possible (Andrew)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add cancel handlers so it's possible to Ctrl-C clusterdb, reindexdb
-        and vacuumdb (Itagaki Takahiro, Magnus)
+        Allow Control-C to cancel <application>clusterdb</>,
+        <application>reindexdb</>, and <application>vacuumdb</> (Itagaki
+        Takahiro, Magnus)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Remove gratuitous response messages from utility programs (Peter)
+        Suppress command tag output for <application>createdb</>,
+        <application>createuser</>, <application>dropdb</>,
+        <application>dropuser</> (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.
-
+        The <literal>--quiet</> option is ignored and will be removed in 8.4.
         Progress messages when acting on all databases now go to stdout
-        instead of stderr, since they are not in fact errors.
+        instead of stderr because they are not actually errors.
        </para>
       </listitem>
 
@@ -2287,46 +1911,47 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Interpret the dbName parameter of PQsetdbLogin as a conninfo string
-        if it contains an = sign (Andrew)
+        Interpret the <literal>dbName</> parameter of
+        <function>PQsetdbLogin()</> as a <literal>conninfo</> string if
+        it contains an equals sign (Andrew)
        </para>
 
        <para>
-        This allows use of all the options of conninfo strings through
-        client programs that still use PQsetdbLogin.
+        This allows use of <literal>conninfo</> strings in client
+        programs that still use <literal>PQsetdbLogin()</>.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support a global SSL configuration file (Victor Wagner)
+        Support a global <acronym>SSL</> configuration file (Victor
+        Wagner)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add libpq environment variable PGSSLKEY to control SSL hardware keys
-        (Victor Wagner)
+        Add environment variable <varname>PGSSLKEY</> to control
+        <acronym>SSL</> hardware keys (Victor Wagner)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add <function>lo_truncate()</function> function for large object
+        Add <function>lo_truncate()</function> for large object
         truncation (Kris Jurka)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Provide <function>PQconnectionUsedPassword()</function> function
-        that returns true if the server demanded a password during
-        authentication (Joe Conway)
+        Add <function>PQconnectionUsedPassword()</function> that returns
+        true if the server required a password (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.
+        If this returns true and the connection failed a client
+        application should prompt the user for a password.
        </para>
       </listitem>
 
@@ -2344,8 +1969,7 @@ do it for earlier branch release files.
        </para>
 
        <para>
-        Among other things, prepared statements can now be prepared on the
-        server side.
+        This adds server-side prepared statements.
        </para>
       </listitem>
 
@@ -2363,8 +1987,8 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Prevent ecpg libraries from exporting any symbols other than
-        their intended API (Michael)
+        Have ecpg libraries exporting only API symbols (Michael)
+        Win32 only?  XXX
        </para>
       </listitem>
 
@@ -2381,23 +2005,16 @@ do it for earlier branch release files.
         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)
+        The client-only C++ build scripts have been removed.
        </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.
+        Allow regression tests to be started by an <literal>admin</>
+        user (Magnus)
        </para>
       </listitem>
 
@@ -2405,11 +2022,6 @@ do it for earlier branch release files.
        <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>
@@ -2422,131 +2034,110 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x,
-        len) (Greg Stark, Tom)
+        New C macros for handling variable-length data values (Greg
+        Stark, Tom)
        </para>
 
        <para>
-        Third-party C code that manipulates varlena datums <emphasis>must</emphasis> convert to
-        this convention, since the varvarlena patch changes the
-        representation of length words on some architectures.  Also, it
-        may be necessary to <quote>detoast</quote> input varlena datums in cases where
-        no toasting could have happened before.
+        The new <function>SET_VARSIZE()</> macro <emphasis>must</> be
+        used to set the length of generated values. Also, it might be
+        necessary to expand (<quote>de-TOAST</quote>) input values in
+        additional places.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Rename DLLIMPORT macro to PGDLLIMPORT to avoid conflict with third
-        party includes (like tcl) that define DLLIMPORT (Magnus)
+        Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
+        avoid conflicting with third party includes (like TCL) that
+        define DLLIMPORT (Magnus)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Remove the prohibition on executing cursor commands through
+        Allow execution of cursor commands through
         <function>SPI_execute</function> (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.
+        The macro <literal>SPI_ERROR_CURSOR</> still exists but will
+        never be returned.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Clean up SPI's API a little bit by declaring SPI plan pointers as
-        <literal>SPIPlanPtr</> instead of <literal>void *</> (Tom)
+        SPI plan pointers are now <literal>SPIPlanPtr</> instead of
+        <literal>void *</> (Tom)
        </para>
 
        <para>
-        This does not break any existing code, but switching is recommended
-        to help catch simple programming mistakes.
+        This does not break application 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.
+        Add cursor-related functionality in SPI (Pavel Stehule)
        </para>
-      </listitem>
 
-      <listitem>
        <para>
-        Add configure --enable-profiling switch to enable code profiling
-        (works with gcc only, for now) (Korry Douglas and Nikhil S)
+        Allow access to the cursor-related planning options, and add
+        <command>FETCH</>/<command>MOVE</> routines.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add configure option --with-system-tzdata to use operating system
-        time zone database (Peter)
+        Add <application>configure</> <literal>--enable-profiling</>
+        to enable code profiling (works only with <application>gcc</>)
+        (Korry Douglas and Nikhil S)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Support <literal>gmake draft</literal> in doc/src/sgml/Makefile (Bruce)
+        Add <application>configure</> <literal>--with-system-tzdata</>
+        to use the operating system time zone database (Peter)
        </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.
+        Create <quote>operator families</quote> improve planning of
+        queries involving cross-data-type comparisons (Tom)
        </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.
+        Support <command>gmake draft</command> when building the
+        <acronym>SGML</> documentation (Bruce)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Get rid of client-code dependencies on the exact text of the
-        no-password error message, by using
-        <function>PQconnectionUsedPassword()</function> instead (Tom)
+        Update GIN <function>extractQuery()</> API to allow signalling
+        that nothing can satisfy the query (Teodor)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Rename MaxTupleSize to MaxHeapTupleSize to clarify that it's not
-        meant to describe the maximum size of index tuples (Tom)
+        Move <literal>NAMEDATALEN</> definition from
+        <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
+        (Peter)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Remove the xlog-centric <quote>database system is ready</quote>
-        message and replace it with <quote>database system is ready to
-        accept connections</quote>
+        Change server startup log message from <quote>database system is
+        ready</quote> to <quote>database system is ready to accept
+        connections</quote>
        </para>
       </listitem>
 
@@ -2559,115 +2150,17 @@ do it for earlier branch release files.
        </para>
       </listitem>
 
-      <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 <function>mdread()</function> beyond EOF, and enforce that
-        <function>mdwrite()</function> is to be used for rewriting existing
-        blocks while <function>mdextend()</function> is to be used for
-        extending the relation EOF.
-       </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 &mdash; this simplifies many things.
-       </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.
-       </para>
-
-       <note>
-        <para>
-         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>
-       </note>
-      </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>
-        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>
         Create hooks to let a loadable plugin monitor (or even replace) the
-        planner and/or create plans for hypothetical situations (Gurjeet
+        planner and create plans for hypothetical situations (Gurjeet
         Singh, Tom)
        </para>
       </listitem>
@@ -2688,65 +2181,32 @@ do it for earlier branch release files.
 
       <listitem>
        <para>
-        Downgrade some boring startup messages to <literal>DEBUG1</literal>
-        (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 <function>quote_identifier()</function> and
-        <application>pg_dump</application> to not quote keywords that are
+        Have <function>quote_identifier()</function> and
+        <application>pg_dump</application> 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>
-        Adjust the output of <function>MemoryContextStats()</function> so
-        that the line for a child memory context is indented two spaces to
-        the right of its parent context (Neil)
+        Fix <acronym>PGXS</> so extensions can be built against Postgres
+        installations whose <application>pg_config</> program does not
+        appear first in the <varname>PATH</> (Tom)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Change the on-disk representation of the <type>numeric</type>
-        datatype so that the sign_dscale word comes before the weight
-        instead of after (Tom)
+        Change the on-disk representation of the <type>NUMERIC</type>
+        data type so that the <structfield>sign_dscale</> word comes
+        before the weight (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)
+        Use <acronym>SYSV</> semaphores rather than POSIX on Darwin
+        &gt;= 6.0, i.e., OS X 10.2 and up (Chris Marcellino)
        </para>
       </listitem>
 
@@ -2775,51 +2235,52 @@ do it for earlier branch release files.
       <listitem>
        <para>
         Add <filename>/contrib/uuid-ossp</filename> module for generating
-        UUID values using the OSSP UUID library (Peter)
+        <type>UUID</> values using the OSSP UUID library (Peter)
        </para>
 
        <para>
-        Use configure option <literal>--with-ossp-uuid</literal> to
-        activate. This takes advantage of the new <type>uuid</type> builtin
-        type.
+        Use <application>configure</>
+        <literal>--with-ossp-uuid</literal> to activate. This takes
+        advantage of the new <type>UUID</type> builtin type.
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add pgbench option to set fillfactor (Pavan Deolasee)
+        Allow <application>pgbench</> to set the fillfactor (Pavan Deolasee)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Enhance pgbench -l option to add timestamp (Greg Smith)
+        Add timestamps to <application>pgbench</> <literal>-l</> (Greg
+        Smith)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add usage count statistics to the information available from
+        Add usage count statistics to
         <filename>contrib/pgbuffercache</filename> (Greg Smith)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add GIN support for hstore (Teodor)
+        Add GIN support for <filename>hstore</> (Teodor)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Add GIN support for pg_trgm (Guillaume Smet, Teodor)
+        Add GIN support for <filename>pg_trgm</> (Guillaume Smet, Teodor)
        </para>
       </listitem>
 
       <listitem>
        <para>
-        Update <filename>/contrib/start-scripts</filename> OS/X startup
-        files, and move to a separate OS/X directory (Mark Cotner, David
+        Update OS/X startup scripts in
+        <filename>/contrib/start-scripts</filename> (Mark Cotner, David
         Fetter)
        </para>
       </listitem>