Make an editorial pass over the 9.0 release notes.
authorTom Lane
Mon, 23 Aug 2010 02:43:25 +0000 (02:43 +0000)
committerTom Lane
Mon, 23 Aug 2010 02:43:25 +0000 (02:43 +0000)
This is mostly about grammar, style, and presentation, though I did find
a few small factual errors.

doc/src/sgml/config.sgml
doc/src/sgml/ddl.sgml
doc/src/sgml/release-9.0.sgml

index 8e91a744d71f0c285e5876a5e3980898501258b7..06ff79a41723d8a3ff60549d8f0c3bc8d42c4f25 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
 
   Server Configuration
@@ -3507,7 +3507,7 @@ local0.*    /var/log/postgresql
             
             
              %e
-             SQL state
+             SQLSTATE error code
              no
             
             
@@ -3578,7 +3578,7 @@ FROM pg_stat_activity;
         
          Syslog produces its own 
          time stamp and process ID information, so you probably do not want to
-         use those escapes if you are logging to syslog.
+         include those escapes if you are logging to syslog.
         
        
       
@@ -3705,7 +3705,7 @@ FROM pg_stat_activity;
         virtual transaction ID,
         regular transaction ID,
         error severity,
-        SQL state code,
+        SQLSTATE code,
         error message,
         error message detail,
         hint,
index 1f96cd1eeb0773fed577ecb8bb4a07a31cc1f87a..8f42a8d6304bf906dde81594416a019ef57d66a4 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
 
  Data Definition
@@ -846,7 +846,7 @@ CREATE TABLE order_items (
    
   
 
-  
+   id="ddl-constraints-exclusion">
    Exclusion constraints
 
    
index ba03c0aca3ae4d06e51d372bc052b216acad07c2..7ef141297d57301f5833517ece1d9001e8aebef9 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
  
   Release 9.0
    Overview
 
    
-    Based on overwhelming user demand, this release of
+    This release of
     PostgreSQL adds features that have been requested
-    for years, like easy-to-use replication, a mass permission
-    facility, and anonymous blocks. While past major releases have
+    for years, such as easy-to-use replication, a mass permission-changing
+    facility, and anonymous code blocks. While past major releases have
     been conservative in their scope, this release shows a
     bold new desire to provide facilities that new and existing
     users of PostgreSQL will embrace. This has all
-    been done with few incompatibilities. Major enhancements are:
+    been done with few incompatibilities. Major enhancements include:
    
 
    
     
 
      
-      Built-in, binary, log-based replication.  This advance consists of two
-      features: Hot Standby allows continuous archive standby database servers
-      to accept read-only queries, and Streaming Replication allows continuous
-      archive (WAL) files to be streamed over a network port to a
-      standby database server.
+      Built-in replication based on log shipping.  This advance consists of
+      two features: Streaming Replication, allowing continuous archive
+      (WAL) files to be streamed over a network connection to a
+      standby server, and Hot Standby, allowing continuous archive standby
+      servers to execute read-only queries.  The net effect is to support a
+      single master with multiple read-only slave servers.
      
     
 
     
      
       Easier database object permissions management. 
-      linkend="SQL-GRANT">GRANT/REVOKE
-      IN SCHEMA supports mass permissions changes, and
-      the ALTER
-      DEFAULT PRIVILEGES command controls privileges
-      of all newly-created objects.  Large object permissions now
-      support GRANT/REVOKE as well.
-     
-    
-
-    
-     
-      Add support for compiling on 
-      linkend="install-win32-full">64-bit
-      Windows and running in 64-bit
-      mode.
+      linkend="SQL-GRANT">GRANT/REVOKE IN
+      SCHEMA supports mass permissions changes on existing objects,
+      while ALTER DEFAULT
+      PRIVILEGES allows control of privileges for objects created in
+      the future.  Large objects (BLOBs) now support privilege management as
+      well.
      
     
 
@@ -64,7 +56,8 @@
      
       Broadly enhanced stored procedure support.
       The DO statement permits
-      anonymous code blocks.  Functions can now be called using named
+      execution of anonymous code blocks, without having to
+      define a function first.  Functions can now be called using named
       parameters.  PL/pgSQL is now installed by default, and PL/Perl and
       PL/Python have been enhanced in several ways, including support for
       Python3.
 
     
      
-      More advanced reporting queries with additional windowing functions
-      (PRECEDING and FOLLOWING) and the ability to ORDER BY inside aggregate
-      functions.
+      Full support for 64-bit
+      Windows.
      
     
 
     
      
-      Triggers now support two new features,
-      SQL-compliant 
-      linkend="SQL-CREATETRIGGER">per-column triggers, and
+      More advanced reporting queries, including additional windowing options
+      (PRECEDING and FOLLOWING) and the ability to
+      control the order in which values are fed to aggregate functions.
+     
+    
+
+    
+     
+      New trigger features, including
+      SQL-standard-compliant 
+      linkend="SQL-CREATETRIGGER">per-column triggers and
       conditional trigger execution.
      
     
 
     
      
-      New and enhanced security features, including RADIUS authentication,
-      LDAP authentication improvements, and the new checkpassword optional module
-      for testing password strength.
+      Exclusion constraints.
+      These provide a generalized version of unique constraints, allowing
+      enforcement of complex conditions.
      
     
 
     
      
-      The LISTEN/
-      linkend="SQL-NOTIFY">NOTIFY
-      feature has been overhauled to make it into
-      a high-performance event queuing system.  It now stores
-      events in a memory-based queue, and it now allows delivery
-      of a string payload to listeners with each event.
+      New and enhanced security features, including RADIUS authentication,
+      LDAP authentication improvements, and a new contrib module
+      passwordcheck
+      for testing password strength.
      
     
 
     
      
-      Add contrib/pg_upgrade
-      to support in-place upgrades from 8.3 or 8.4 to 9.0.
+      New high-performance implementation of the
+      LISTEN/
+      linkend="SQL-NOTIFY">NOTIFY feature.
+      Pending events are now stored in a memory-based queue rather than
+      a table.  Also, a payload string can be sent with each
+      event, rather than transmitting just an event name as before.
      
     
 
     
      
-      Multiple performance enhancements for specific types of queries,
-      including join elimination, which optimizes automatically generated
-      queries, such as those produced by object-relational mappers (ORMs).
+      New implementation of
+      VACUUM FULL.
+      This command now rewrites the entire table and indexes, rather than
+      moving individual rows to compact space.  It is substantially faster
+      in most cases, and no longer results in index bloat.
      
     
 
     
      
-      Exclusion constraints let database designers define uniqueness
-      based on complex criteria, including for non-scalar data such
-      as time periods, ranges and arrays.
+      New contrib module
+      pg_upgrade
+      to support in-place upgrades from 8.3 or 8.4 to 9.0.
      
     
 
     
      
-      As part of our decade-long effort to eliminate the pain of VACUUM,
-      VACUUM FULL is now substantially faster by
-      rewriting the entire table and
-      indexes, rather than moving around single rows to compact space.
+      Multiple performance enhancements for specific types of queries,
+      including elimination of unnecessary joins.  This helps optimize some
+      automatically-generated queries, such as those produced by
+      object-relational mappers (ORMs).
      
     
 
     
      
-      EXPLAIN plans are now available in JSON, XML, and YAML format, and include
+      EXPLAIN enhancements.
+      The output is now available in JSON, XML, or YAML format, and includes
       buffer utilization and other data not previously available.
      
     
 
     
      
-      The hstore optional module has been improved with new functions and greater
-      data capacity to make it a high-performance key-value store.
+      hstore improvements,
+      including new functions and greater data capacity.
      
     
 
   Migration to Version 9.0
 
   
-   A dump/restore using pg_dump
-   or use of pg_upgrade is required
+   A dump/restore using pg_dump,
+   or use of pg_upgrade, is required
    for those wishing to migrate data from any previous
    release.
   
 
   
-   Version 9.0 contains a number of changes which selectively break backwards
+   Version 9.0 contains a number of changes that selectively break backwards
    compatibility in order to support new features and code quality
    improvements.  Particularly, users who make extensive use of PL/pgSQL
    and/or PITR and Warm Standby should test their solutions for breakage.
 
     
      
-      Remove server variable add_missing_from, which was
+      Remove server parameter add_missing_from, which was
       defaulted to off for many years (Tom Lane)
      
     
 
     
      
-      Remove server variable regex_flavor, which
+      Remove server parameter regex_flavor, which
       was defaulted to 
       linkend="posix-syntax-details">advanced
-      (i.e., Perl compatible) for many years. (Tom Lane)
+      for many years (Tom Lane)
      
     
 
     
      
-      It is now necessary to set 
-      linkend="guc-wal-level">wal_level to
-      archive to do continuous archiving.
-      (Heikki Linnakangas)
+      wal_level should now be
+      set to archive, not on, to do continuous
+      archiving (Heikki Linnakangas)
      
     
 
     
      
-      Adjust 
-      linkend="guc-log-temp-files">log_temp_files to
-      use default file size units of kilobytes (Robert Haas)
+      log_temp_files
+      now uses default file size units of kilobytes (Robert Haas)
      
     
 
 
   
    Queries
+
    
 
    
     
      When querying a parent table,
-     do not do additional permission checks on child tables
-     returned as part of the query (Peter Eisentraut)
+     do not do any separate permission checks on child tables
+     scanned as part of the query (Peter Eisentraut)
     
 
     
-     The SQL standard specifies this behavior.
+     The SQL standard specifies this behavior, and it is also much more
+     convenient in practice than the former behavior of checking permissions
+     on each child as well as the parent.
     
    
 
    
     
-     Have fractional seconds conversion truncate rather than
-     round when using float-based dates/times (Tom Lane)
+     Make date_trunc truncate rather than round when reducing
+     fractional-seconds precision (Tom Lane)
+    
+
+    
+     The code always acted this way for integer-based dates/times.
+     Now float-based dates/times behave similarly.
     
    
 
   
 
   
-   String Handling
+   Data Types
+
    
 
+    
+     
+      bytea output now
+      appears in hex format by default (Peter Eisentraut)
+     
+
+     
+      The server parameter 
+      linkend="guc-bytea-output">bytea_output can be
+      used to select the traditional output format if needed for
+      compatibility.
+     
+    
+
    
     
      Improve standards compliance of 
 
   
    Object Renaming
+
    
 
     
      
-      Tighten enforcement of column renaming when a child table inherits
-      the renamed column from an unrelated parent (KaiGai Kohei)
+      Tighten enforcement of column name consistency during RENAME
+      when a child table inherits the same column from multiple unrelated
+      parents (KaiGai Kohei)
      
     
 
     
      
-      No longer rename index names and index column names when table
-      columns are renamed (Tom Lane)
+      No longer automatically rename indexes and index columns when the
+      underlying table columns are renamed (Tom Lane)
      
 
      
-      Administrators still can rename such columns manually.  This change
-      will require an update of the JDBC driver and possibly other drivers
-      so that unique indexes are correctly recognized.
+      Administrators can still rename such indexes and columns manually.
+      This change will require an update of the JDBC driver, and possibly other
+      drivers, so that unique indexes are correctly recognized after a rename.
      
     
 
      
 
      
-      In order to support named-parameter calls, it is
-      no longer allowed to change the aliases for input variables
-      in the declaration of an existing function.  You now have to
-      DROP and recreate the function.
+      In order to avoid creating ambiguity in named-parameter calls, it is
+      no longer allowed to change the aliases for input parameters
+      in the declaration of an existing function (although names can still
+      be assigned to previously unnamed parameters).  You now have to
+      DROP and recreate the function to do that.
      
     
 
 
   
    PL/pgSQL
+
    
 
     
      
 
      
-      The former behavior was to bind to variable names in preference to
-      query column names, which often resulted in surprising misbehavior.
-      Throwing an error allows easy detection of ambiguous situations.
-      Although it's recommended that functions encountering this type of
-      error be modified to remove the conflict, the old behavior can be
-      restored if necessary via the configuration parameter 
+      The former behavior was to bind ambiguous names to PL/pgSQL variables
+      in preference to query columns, which often resulted in surprising
+      misbehavior. Throwing an error allows easy detection of ambiguous
+      situations.  Although it's recommended that functions encountering this
+      type of error be modified to remove the conflict, the old behavior can
+      be restored if necessary via the configuration parameter 
       linkend="plpgsql-var-subst">plpgsql.variable_conflict,
       or via the per-function option #variable_conflict.
      
 
     
      
-      PL/pgSQL no longer allows variable names that match SQL
+      PL/pgSQL no longer allows variable names that match certain SQL
       reserved words (Tom Lane)
      
 
 
     
      
-      Remove PL/pgSQL's RENAME declaration option (Tom Lane)
+      Remove PL/pgSQL's RENAME declaration (Tom Lane)
      
 
      
       Instead of RENAME, use 
       linkend="plpgsql-declaration-alias">ALIAS,
-      which can now alias any variable, not just dollar sign
-      parameter names (such as $1).
+      which can now create an alias for any variable, not only dollar sign
+      parameter names (such as $1) as before.
      
     
    
 
   
    Other Incompatibilities
+
    
+
+    
+     
+      Deprecate use of => as an operator name (Robert Haas)
+     
+
+     
+      Future versions of PostgreSQL will probably reject
+      this operator name entirely, in order to support the SQL-standard
+      notation for named function parameters.  For the moment, it is
+      still allowed, but a warning is emitted when such an operator is
+      defined.
+     
+    
+
     
      
       Remove support for platforms that don't have a working 64-bit
    Server
 
    
-    Continuous Archiving and <span class="marked">Binary</span> Replication
+    Continuous Archiving and <span class="marked">Streaming</span> Replication
 
     
-     PostgreSQL's native standby capability has been expanded both to
-     support read-only queries on standby slaves and to greatly reduce
+     PostgreSQL's existing standby-server capability has been expanded both to
+     support read-only queries on standby servers and to greatly reduce
      the lag between master and standby servers.  For many users, this
      will be a useful and low-administration form of replication, either
      for high availability or for horizontal scalability.
     
      
       
-       Allow a standby system to accept read-only queries
+       Allow a standby server to accept read-only queries
        (Simon Riggs, Heikki Linnakangas)
       
 
       
        This feature is called Hot Standby. There are new
        postgresql.conf and recovery.conf
-       settings to enable this feature, as well as extensive
+       settings to control this feature, as well as extensive
        documentation.
       
      
 
      
       
-       Allow write-ahead log (WAL) files to be streamed to a
-       standby system (Fujii Masao, Heikki Linnakangas)
+       Allow write-ahead log (WAL) data to be streamed to a
+       standby server (Fujii Masao, Heikki Linnakangas)
       
 
       
        This feature is called Streaming Replication.
-       Previously WAL files could be sent to standby systems only
-       as 16 megabytes files; Streaming Replication allows master changes to be sent to the
-       standby with very little delay. There are new postgresql.conf
-       and recovery.conf settings to enable this
-       feature, as well as extensive 
-       linkend="streaming-replication">documentation.
+       Previously WAL data could be sent to standby servers only
+       in units of entire WAL files (normally 16 megabytes each).
+       Streaming Replication eliminates this inefficiency and allows updates
+       on the master to be propagated to standby servers with very little
+       delay.  There are new postgresql.conf and
+       recovery.conf settings to control this feature, as well as
+       extensive documentation.
       
      
 
    
     Performance
 
-    
-     Version 9.0 also contains several performance and optimizer enhancements
-     to improve specific uses of PostgreSQL and remedy certain poor-performing
-     cases.
-    
-
     
 
      
       
-       Improve performance of finding inherited child tables (Tom Lane)
+       Allow per-tablespace values to be set for sequential and random page
+       cost estimates (seq_page_cost/random_page_cost)
+       via ALTER TABLESPACE
+       ... SET/RESET (Robert Haas)
       
      
 
      
       
-       Allow per-tablespace sequential and random page cost variables
-       (seq_page_cost/random_page_cost) via
-       ALTER TABLESPACE
-       ... SET/RESET (Robert Haas)
+       Improve performance of 
+       linkend="SQL-TRUNCATE">TRUNCATE when
+       used in the same transaction as table creation (Tom Lane)
       
      
 
      
       
-       Improve performance of 
-       linkend="SQL-TRUNCATE">TRUNCATE when
-       used in the same transaction as table creation (Tom Lane)
+       Improve performance of finding inheritance child tables (Tom Lane)
       
      
 
        Outer joins where the inner side is unique and not referenced in
        the query are unnecessary and are therefore now removed.  This will
        accelerate many automatically generated queries, such as those created
-       by object-relational mappers (ORM).
+       by object-relational mappers (ORMs).
       
      
 
 
       
        This is particularly useful for finding
-       MAX()/MIN() values in indexes that also
-       contain null values.
+       MAX()/MIN() values in indexes that
+       contain many null values.
       
      
 
      
       
-       Improve optimizer equivalence detection of <> boolean
-       tests (Tom Lane)
+       Improve the optimizer's equivalence detection for expressions involving
+       boolean <> operators (Tom Lane)
       
      
     
 
    
     <link linkend="geqo">GEQO</link>
+
     
 
      
 
       
        While the Genetic Query Optimizer (GEQO) still selects
-       random plans, it now selects the same random plans for
-       identical queries. You can modify 
-       linkend="guc-geqo-seed">geqo_seed to randomize
-       the starting value of the random plan generator.
+       random plans, it now always selects the same random plans for identical
+       queries, thus giving more consistent performance. You can modify 
+       linkend="guc-geqo-seed">geqo_seed to experiment with
+       alternative plans.
       
-
-      
-       This gives GEQO query response times and resource usage
-       repeatability and predictability.
-      
-
      
 
      
       
-       Improve GEQO plan selection (Tom Lane).
+       Improve GEQO plan selection (Tom Lane)
       
 
       
-       This avoids the rare error, "failed to make a valid plan".
+       This avoids the rare error failed to make a valid plan.
       
      
 
 
    
     Optimizer Statistics
+
     
 
      
 
       
        This is particularly useful for partitioned tables.  However,
-       autovacuum does not yet properly analyze parent tables based on
-       child table changes.
+       autovacuum does not yet automatically re-analyze parent tables
+       when child tables change.
       
      
 
      
       
-       Improve autovacuum
+       Improve autovacuum's
        detection of when re-analyze is necessary (Tom Lane)
       
      
 
      
       
-       Improve optimizer statistics for greater/less-than comparisons
+       Improve optimizer's estimation for greater/less-than comparisons
        (Tom Lane)
       
 
       
-       When looking up optimizer statistics for greater/less-than comparisons,
+       When looking up statistics for greater/less-than comparisons,
        if the comparison value is in the first or last histogram bucket,
-       use an index to generate the actual statistics. This is particularly
-       useful for columns that are always increasing, and hence often have
-       inaccurate statistics.
+       use an index (if available) to fetch the current actual column
+       minimum or maximum.  This greatly improves the accuracy of estimates
+       for comparison values near the ends of the data range, particularly
+       if the range is constantly changing due to addition of new data.
       
      
 
       
 
       
-       This allows user-override of the number or percentage of distinct
-       values for a column and optionally its child tables. This value
-       is normally computed by ANALYZE.  Database administrators
-       can use this feature to fix some poor statistics, especially on
-       tables with millions or billions of rows.
+       This allows users to override the estimated number or percentage of
+       distinct values for a column. This statistic is normally computed by
+       ANALYZE, but the estimate can be poor, especially on tables
+       with very large numbers of rows.
       
      
 
 
    
     Authentication
-    
-     Version 9.0 further extends PostgreSQL's support for multiple
-     authentication methods, including RADIUS and improved LDAP support.
-    
 
     
 
       
        Allow LDAP
        (Lightweight Directory Access Protocol) authentication
-       to operate in "search/bind" mode (Robert Fleming, Magnus)
+       to operate in search/bind mode
+       (Robert Fleming, Magnus Hagander)
       
 
       
       
 
       
-       These match the server's IP address and network address
+       These match the server's IP address and subnet address
        respectively.
       
      
 
    
     Monitoring
-    
-     With increased use of PostgreSQL in high-end production systems,
-     users need increased monitoring.  PostgreSQL 9.0 continues to add
-     more ways to monitor PostgreSQL applications.
-    
 
     
 
       
 
       
-       This allows DBAs to characterize database traffic
+       This allows administrators to characterize database traffic
        and troubleshoot problems by source application.
       
      
 
      
       
-       Add an SQL state option (%e) to 
+       Add a SQLSTATE option (%e) to 
        linkend="guc-log-line-prefix">log_line_prefix
        (Guillaume Smet)
       
 
       
        This allows users to compile statistics on errors and messages
-       by type.
+       by error code number.
       
 
      
 
    
     Statistics Counters
+
     
 
      
       
        Add 
        linkend="monitoring-stats-funcs-table">pg_stat_reset_shared('bgwriter')
-       to reset the cluster-wide shared statistics of the
+       to reset the cluster-wide shared statistics for the
        background writer (Greg Smith)
       
      
        Add 
        linkend="monitoring-stats-funcs-table">pg_stat_reset_single_table_counters()
        and pg_stat_reset_single_function_counters()
-       to allow the resetting of statistics counters for individual
+       to allow resetting of the statistics counters for individual
        tables and indexes (Magnus Hagander)
       
      
 
    
     Server Settings
+
     
 
      
       
-       Allow setting of configuration variables based on 
-       linkend="sql-alterrole">database/role
-       combinations (Alvaro Herrera)
+       Allow setting of configuration parameters based on 
+       linkend="sql-alterrole">database/role combinations
+       (Alvaro Herrera)
       
 
       
-       Previously only per-database and per-role setting were possible,
+       Previously only per-database and per-role settings were possible,
        not combinations. All role and database settings are now stored
        in the new pg_db_role_setting system table. A new
-       psql \drds command shows these settings.
-       Backwards-compatible system views do not show this information.
-       The primary use of this feature is setting schema
-       search_path.
+       psql command \drds shows these settings.
+       Backwards-compatible system views do not show combination settings.
       
 
      
 
      
       
-       Add Boolean variable 
+       Add server parameter 
        linkend="guc-bonjour">bonjour, which
-       controls whether a Bonjour-enabled binary advertises
+       controls whether a Bonjour-enabled server advertises
        itself via Bonjour (Tom Lane)
       
 
       
-       The default is off, meaning it does not advertise.
+       The default is off, meaning it does not advertise.  This allows
+       packagers to distribute Bonjour-enabled builds without worrying
+       that individual users might not want the feature.
       
      
 
      
       
-       Add Boolean variable 
+       Add server parameter 
        linkend="guc-enable-material">enable_material, which
        controls the use of materialize nodes in the optimizer
        (Robert Haas)
       
 
       
-       The default is on.
+       The default is on.  When off, the optimizer will not add
+       materialize nodes purely for performance reasons, though they
+       will still be used when necessary for correctness.
       
      
 
      
       
-       Log changed parameter values when postgresql.conf is
+       Log changes of parameter values when postgresql.conf is
        reloaded (Peter Eisentraut)
       
 
       
-       This lets DBAs and security staff audit when database settings
-       were changed.
+       This lets administrators and security staff audit changes of database
+       settings, and is also very convenient for checking the effects of
+       postgresql.conf edits.
       
 
      
 
      
       
-       Add proper permissions for custom variables (Tom Lane)
+       Add proper permissions for custom server parameters (Tom Lane)
       
 
       
-       Custom variables can now only be created by super-users,
-       but can be modified by ordinary users if variable
-       permissions allow it. This makes custom variables
-       appropriate for security settings. Previously, any user
-       could create or modify custom variables.
+       Custom parameters can now only be created by super-users,
+       but then can be modified by ordinary users if the parameter's
+       permissions allow it. This makes custom parameters
+       appropriate for security-related settings. Previously, any user
+       could create or modify custom parameters.
       
      
 
     
      
-      Adjust 
+      Change server parameter 
       linkend="guc-log-temp-files">log_temp_files to
-      use default file sizes units of kilobytes (Robert Haas)
+      use default file size units of kilobytes (Robert Haas)
      
 
      
-      Previously this setting defaulted to bytes if no units were
+      Previously this setting was interpreted in bytes if no units were
       specified.
      
     
 
   
    Queries
+
    
 
     
      
-      Do SELECT
+      Perform SELECT
       FOR UPDATE/SHARE processing after
       applying LIMIT, so the number of rows returned
       is always predictable (Tom Lane)
      
 
      
-      Previously, concurrent transactions could potentially cause
-      SELECT to return fewer rows than specified by
-      LIMIT. FOR UPDATE can still affect
-      ORDER BY ordering, but this can be corrected by using
-      FOR UPDATE in a subquery.
+      Previously, changes made by concurrent transactions could cause a
+      SELECT FOR UPDATE to unexpectedly return fewer rows than
+      specified by its LIMIT. FOR UPDATE in combination
+      with ORDER BY can still produce surprising results, but that
+      can be corrected by placing FOR UPDATE in a subquery.
      
     
 
 
     
      
-      Increase the supported frame options in 
+      Extend the supported frame options in 
       linkend="SQL-WINDOW">window functions (Hitoshi
       Harada)
      
 
      
-      This allows frames (RANGE or ROWS) to start
-      with CURRENT ROW, and to use the ROWS n
-      PRECEDING/FOLLOWING clause.
+      Frames can now start with CURRENT ROW, and the ROWS
+      n PRECEDING/FOLLOWING options are now
+      supported.
      
     
 
     
      
-      Have SELECT and CREATE TABLE AS return
-      row counts to the client
+      Make SELECT INTO and CREATE TABLE AS return
+      row counts to the client in their command tags
       (Boszormenyi Zoltan)
      
 
      
-      For drivers that support this feature, this saves an entire
-      round-trip to the client, allowing result counts and pagination
-      to be calculated without a second COUNT query.
-     
-
-     
-      psql does not display these counts.
+      This can save an entire round-trip to the client, allowing result counts
+      and pagination to be calculated without an additional
+      COUNT query.
      
     
 
 
    
     Unicode Strings
+
     
 
      
 
      
       
-       Allow Unicode escapes in 
+       Support Unicode escapes in 
        linkend="sql-syntax-strings-escape">E'...'
        strings (Marko Kreen)
       
 
   
    Object Manipulation
+
    
 
     
     
      
       Allow comments on
-      columns only of tables, views, and composite types, not other
-      objects like indexes and TOAST tables (Tom Lane)
+      columns of tables, views, and composite types only, not other
+      relation types such as indexes and TOAST tables (Tom Lane)
      
     
 
     
      
       Allow the creation of 
-      linkend="SQL-CREATETYPE-enum">enumerate types with
-      no labels (Bruce Momjian)
-     
-
-     
-      This is useful for supporting binary upgrades.
+      linkend="SQL-CREATETYPE-enum">enumerated types containing
+      no values (Bruce Momjian)
      
     
 
     
      
-      Have columns defined with storage type MAIN remain on
-      the main heap page unless it cannot fit (Kevin Grittner)
+      Let values of columns having storage type MAIN remain on
+      the main heap page unless the row cannot fit on a page (Kevin Grittner)
      
 
      
-      Previously MAIN values were forced to TOAST
-      tables until the row size was one-quarter of the page size.
+      Previously MAIN values were forced out to TOAST
+      tables until the row size was less than one-quarter of the page size.
      
     
 
 
    
     <command>ALTER</>
+
     
 
      
       
        Add ALTER
        DEFAULT PRIVILEGES command to control privileges
-       of newly-created objects (Petr Jelinek)
+       of objects created later (Petr Jelinek)
       
 
       
-       This greatly simplifies the assignment of object privileges in
-       a complex database application.  Defaults currently support tables,
-       views, sequences, and functions. Defaults may be assigned on a
-       per-schema basis or database-wide.
+       This greatly simplifies the assignment of object privileges in a
+       complex database application.  Default privileges can be set for
+       tables, views, sequences, and functions. Defaults may be assigned on a
+       per-schema basis, or database-wide.
       
      
 
 
      
       
-       Allow ALTER TABLE commands which rewrite tables to skip
+       Allow ALTER TABLE commands that rewrite tables to skip
        WAL logging (Itagaki Takahiro)
       
 
       
-       Such operations either complete fully or are rolled back, so
-       WAL archiving can be skipped, unless running in continuous
-       archiving mode.  This reduces I/O overhead and improves performance.
+       Such operations either produce a new copy of the table or are rolled
+       back, so WAL archiving can be skipped, unless running in
+       continuous archiving mode.  This reduces I/O overhead and improves
+       performance.
       
      
 
 
    
     <link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link>
+
     
 
      
       
        Add support for copying COMMENTS and STORAGE
-       to the CREATE TABLE ... LIKE INCLUDING command (Itagaki
-       Takahiro)
+       settings in CREATE TABLE ... LIKE commands
+       (Itagaki Takahiro)
       
      
 
      
       
-       Add support for copying all attributes to the CREATE
-       TABLE LIKE INCLUDING command (Itagaki Takahiro)
+       Add support for copying all attributes in CREATE
+       TABLE ... LIKE commands (Itagaki Takahiro)
       
      
 
      
       
-       Add the SQL-standard CREATE TABLE ... OF type command
+       Add the SQL-standard
+       CREATE TABLE ... OF type command
        (Peter Eisentraut)
       
 
       
-       This allows the creation of a table to match an existing composite
+       This allows creation of a table that matches an existing composite
        type. Additional constraints and defaults can be specified in the
        command.
       
 
    
     Constraints
+
     
 
      
       
 
       
-       This allows UPDATE tab SET col = col + 1 to work reliably
+       This allows mass updates, such as
+       UPDATE tab SET col = col + 1,
+       to work reliably
        on columns that have unique indexes or are marked as primary keys.
        If the constraint is specified as DEFERRABLE it will be
        checked at the end of the statement, rather than after each row is
-       updated. The constraint check may also be deferred until the end of the
-       current transaction, allowing updates to be spread over multiple SQL
-       commands.
+       updated. The constraint check can also be deferred until the end of the
+       current transaction, allowing such updates to be spread over multiple
+       SQL commands.
       
      
 
      
       
-       Exclusion Constraints: generalize uniqueness constraints by allowing arbitrary operator
-       comparisons, not just equality (Jeff Davis)
-      
-
-      
-       This is enabled with the 
-       linkend="SQL-CREATETABLE-EXCLUDE">CREATE
-       TABLE CONSTRAINT ... EXCLUDE clause. While
-       uniqueness checks could be specified using this syntax,
-       the real value of this feature is in using complex
-       operators that do not have built-in constraints.
+       Add
+       exclusion constraints
+       (Jeff Davis)
       
 
       
-       The primary use of exclusion constraints is to allow defining
-       non-overlapping uniqueness, such as for time periods, arrays
-       or ranges of values. This supports data integrity at the
-       table level for calendaring, time-management, and scientific
-       applications.
+       Exclusion constraints generalize uniqueness constraints by allowing
+       arbitrary comparison operators, not just equality.  They are created
+       with the CREATE
+       TABLE CONSTRAINT ... EXCLUDE clause.
+       The most common use of exclusion constraints is to specify that column
+       entries must not overlap, rather than simply not be equal.  This is
+       useful for time periods and other ranges, as well as arrays.
+       This feature enhances checking of data integrity for many
+       calendaring, time-management, and scientific applications.
       
-
      
 
      
       
-       Improve the constraint violation error message to report the values
-       causing the failure (Itagaki Takahiro)
+       Improve uniqueness-constraint violation error messages to
+       report the values causing the failure (Itagaki Takahiro)
       
 
       
-       For example, a uniqueness constraint violation now reports Key
-       (x)=(2) already exists.
+       For example, a uniqueness constraint violation might now report
+       Key (x)=(2) already exists.
       
      
 
 
    
     Object Permissions
+
     
 
      
       
-       Add the ability to make mass permission changes per
+       Add the ability to make mass permission changes across a whole
        schema using the new 
        linkend="SQL-GRANT">GRANT/REVOKE
        IN SCHEMA clause (Petr Jelinek)
       
 
       
-       This simplifies the assignment of object permissions
+       This simplifies management of object permissions
        and makes it easier to utilize database roles for application
        data security.
       
 
      
       
-       Add the ability to control large object permissions with
+       Add the ability to control large object (BLOB) permissions with
        GRANT/REVOKE (KaiGai Kohei)
       
+
+      
+       Formerly, any database user could read or modify any large object.
+       Read and write permissions can now be granted and revoked per
+       large object.
+      
      
 
     
 
     
      
-      HavLISTEN/
-      linkend="SQL-NOTIFY">NOTIFY store events
-      in a memory queue, rather than a system table (Joachim
+      MakLISTEN/
+      linkend="SQL-NOTIFY">NOTIFY store pending events
+      in a memory queue, rather than in a system table (Joachim
       Wieland)
      
 
      
-      LISTEN/NOTIFY may now be used as a full-featured, high-performance
-      event queue system for PostgreSQL, with transactional support
-      and guaranteed delivery.
+      This substantially improves performance, while retaining the existing
+      features of transactional support and guaranteed delivery.
      
     
 
     
      
       Allow NOTIFY
-      to pass an optional string to listeners (Joachim Wieland)
+      to pass an optional payload string to listeners
+      (Joachim Wieland)
+     
+
+     
+      This greatly improves the usefulness of
+      LISTEN/NOTIFY as a
+      general-purpose event queue system.
      
     
 
     
      
       Allow CLUSTER
-      on all system tables (Tom Lane)
+      on all per-database system catalogs (Tom Lane)
      
 
      
-      Global system tables still cannot be clustered.
+      Global catalogs still cannot be clustered.
      
     
 
 
    
     <link linkend="SQL-COPY"><command>COPY</></link>
+
     
 
      
       
-       Allow * as a parameter in FORCE QUOTE for
-       COPY CSV (Itagaki Takahiro)
+       Accept COPY ... CSV FORCE QUOTE *
+       (Itagaki Takahiro)
       
 
       
-       This forces quotes for all CSV output columns.
+       Now * can be used as shorthand for all columns
+       in the FORCE QUOTE clause.
       
      
 
      
       
-       Add new COPY syntax that allows parameters to be
-       specified in parentheses (Robert Haas, Emmanuel Cecchet)
+       Add new COPY syntax that allows options to be
+       specified inside parentheses (Robert Haas, Emmanuel Cecchet)
       
 
       
        This allows greater flexibility for future COPY options.
-       The old syntax is still supported.
+       The old syntax is still supported, but only for pre-existing options.
       
      
 
 
    
     <link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link>
+
     
 
      
       
-       Allow EXPLAIN output in XML, JSON,
-       and YAML formats (Robert Haas, Greg Sabino Mullane)
+       Allow EXPLAIN to output in XML,
+       JSON, or YAML format (Robert Haas, Greg
+       Sabino Mullane)
       
 
       
-       The new output formats will support the development of new tools
-       for analysis of EXPLAIN output.
+       The new output formats are easily machine-readable, supporting the
+       development of new tools for analysis of EXPLAIN output.
       
      
 
      
       
-       Add new <command>EXPLAIN (BUFFERS) to report query buffer
-       activity (Itagaki Takahiro)
+       Add new <literal>BUFFERS option to report query
+       buffer usage during EXPLAIN ANALYZE (Itagaki Takahiro)
       
 
       
        This allows better query profiling for individual queries.
-       log_*_stats log output, e.g. 
-       linkend="runtime-config-statistics-monitor">log_statement_stats,
-       no longer shows this information.
+       Buffer usage is no longer reported in the output for 
+       linkend="runtime-config-statistics-monitor">log_statement_stats
+       and related settings.
       
      
 
 
      
       
-       Allow EXPLAIN options to be specified inside parentheses
-       (Robert Haas)
+       Add new EXPLAIN syntax that allows options to be
+       specified inside parentheses (Robert Haas)
       
 
       
-       This allows for the expansion of EXPLAIN options. The
-       old syntax is still supported.
+       This allows greater flexibility for future EXPLAIN options.
+       The old syntax is still supported, but only for pre-existing options.
       
      
 
 
    
     <link linkend="SQL-VACUUM"><command>VACUUM</></link>
+
     
 
      
       
        Change VACUUM FULL to rewrite the entire table and
-       indexes, rather than moving around single rows to compact space
-       (Itagaki Takahiro, Tom Lane)
+       rebuild its indexes, rather than moving individual rows around to
+       compact space (Itagaki Takahiro, Tom Lane)
       
 
       
        The previous method was usually slower and caused index bloat.
-       Note that the new method may use more disk space during VACUUM
-       FULL.
+       Note that the new method will use more disk space transiently
+       during VACUUM FULL; potentially as much as twice
+       the space normally occupied by the table and its indexes.
       
 
      
 
      
       
-       Add new VACUUM syntax that allows parameters to be
-       specified in parentheses (Itagaki Takahiro)
+       Add new VACUUM syntax that allows options to be
+       specified inside parentheses (Itagaki Takahiro)
       
 
       
-       This allows greater flexibility for future VACUUM
-       options. The old syntax is still supported.
+       This allows greater flexibility for future VACUUM options.
+       The old syntax is still supported, but only for pre-existing options.
       
      
 
 
    
     Indexes
+
     
 
      
       
-       Allow an index to be auto-named by not supplying an index name to
-       CREATE INDEX (Tom Lane)
+       Allow an index to be named automatically by omitting the index name in
+       CREATE INDEX
+       (Tom Lane)
       
      
 
      
       
-       Allow REINDEX
-       on system indexes (Tom Lane)
+       Reindexing shared system catalogs is now fully transactional
+       and crash-safe (Tom Lane)
       
 
       
-       WAS THIS POSSIBLE ON ANY SYSTEM TABLE BEFORE? NON-HARDWIRED ONES?
+       Formerly, reindexing a shared index was only allowed in standalone
+       mode, and a crash during the operation could leave the index in
+       worse condition than it was before.
       
      
 
      
       
-       Add point_ops operator class for GiST (Teodor Sigaev)
+       Add point_ops operator class for GiST
+      (Teodor Sigaev)
       
 
       
-       This feature supports GiST indexing of point operations on polygons,
-       circles, and other points, such as "point is in polygon".  Previously
-       indexing only worked for bounding boxes.  This should make many
-       PostGIS queries faster.
+       This feature permits GiST indexing of point
+       columns.  The index can be used for several types of queries
+       such as point <@ polygon
+       (point is in polygon).  This should make many
+       PostGIS queries faster.
       
      
 
      
       
-       Use red-black trees for GIN index creation
+       Use red-black binary trees for GIN index creation
        (Teodor Sigaev)
       
 
       
-       Red-black trees are self-balanced.  This means much faster
-       GIN index creation.
+       Red-black trees are self-balancing.  This avoids slowdowns in
+       cases where the input is in nonrandom order.
       
 
      
 
   
    Data Types
+
    
 
     
      
-      Allow hex values to be specified in 
-      linkend="datatype-binary">bytea strings
-      (Peter Eisentraut)
+      Allow bytea values
+      to be written in hex notation (Peter Eisentraut)
      
 
      
-      The variable 
+      The server parameter 
       linkend="guc-bytea-output">bytea_output controls
-      if hex (default) or octal escapes are used for bytea
-      output. (SWITCH DEFAULT FOR BETA? PETER) Libpq's
-      PQescapeByteaConn() now uses the hex format
-      for PostgreSQL 9.0 servers.
+      whether hex or traditional format is used for bytea
+      output.  Libpq's PQescapeByteaConn() function automatically
+      uses the hex format when connected to PostgreSQL 9.0
+      or newer servers.
      
 
      
       The new hex format will be directly compatible with more applications
-      which use binary data, allowing them to store and retrieve
-      it without conversion.
+      that use binary data, allowing them to store and retrieve it without
+      extra conversion.  It is also significantly faster to read and write
+      than the traditional format.
      
-
     
 
     
      
-      Allow 
+      Allow server parameter 
       linkend="guc-extra-float-digits">extra_float_digits
       to be increased to 3 (Tom Lane)
      
 
      
-      The previous maximum extra_float_digits was 2.
+      The previous maximum extra_float_digits setting was
+      2.  There are cases where 3 digits are needed to dump and
+      restore float4 values exactly.  pg_dump will
+      now use the setting of 3 when dumping from a server that allows it.
+     
+    
+
+    
+     
+      Tighten input requirements for int2vector input (Caleb
+      Welton)
      
     
 
 
    
     <link linkend="textsearch">Full Text Search</link>
+
     
 
      
       
-       Add prefix support for the full text search synonym dictionary
+       Add prefix support in synonym dictionaries
        (Teodor Sigaev)
       
      
 
      
       
-       Add full text search filtering dictionaries (Teodor Sigaev)
+       Add filtering dictionaries (Teodor Sigaev)
       
 
       
-       Filtering dictionaries allow tokens to be modified and passed to
+       Filtering dictionaries allow tokens to be modified then passed to
        subsequent dictionaries.
       
      
 
      
       
-       Allow underscores in full text email addresses (Teodor Sigaev)
+       Allow underscores in email-address tokens (Teodor Sigaev)
       
      
 
      
       
-       Use more standards-compliant rules for URL
-       parsing (Tom Lane)
+       Use more standards-compliant rules for parsing URL tokens
+       (Tom Lane)
       
      
 
 
   
    Functions
+
    
 
     
      
-      Allow case-insensitive 
+      Support locale-specific 
       linkend="functions-posix-regexp">regular expression
-      matching with UTF-8 server encodings.
+      processing with UTF-8 server encoding (Tom Lane)
      
 
      
-      Previously, only ASCII characters and single-byte
-      encodings worked properly. Multibyte encodings other than UTF-8
-      are still broken for case-insensitive regular expression
-      matching.
+      Locale-specific regular expression functionality includes
+      case-insensitive matching and locale-specific character classes.
+      Previously, these features only worked correctly for
+      non-ASCII characters when using a single-byte server
+      encoding (such as LATIN1).  They will still misbehave in multi-byte
+      encodings other than UTF-8.
      
     
 
 
     
      
-      Add support for 
+      Add support for scientific notation in 
       linkend="functions-formatting">to_char()
-      scientific notation output (
-      linkend="functions-formatting-numeric-table">'EEEE')
+      (EEEE
+      specification)
       (Pavel Stehule, Brendan Jurd)
      
     
 
     
      
-      Havto_char() honor 
-      linkend="functions-formatting-datetimemod-table">'FM'
-      (fill mode) in 'Y', 'YY', and
-      'YYY' specifications (Bruce Momjian, Tom Lane)
+      Makto_char() honor 
+      linkend="functions-formatting-datetimemod-table">FM
+      (fill mode) in Y, YY, and
+      YYY specifications (Bruce Momjian, Tom Lane)
      
 
      
-      It was already honored by 'YYYY'.
+      It was already honored by YYYY.
      
     
 
     
      
       Correct calculations of 
-      linkend="functions-geometry-op-table">"overlap"
-      and "contains" operations over polygons (Teodor Sigaev)
+      linkend="functions-geometry-op-table">overlap
+      and contains operations over polygons (Teodor Sigaev)
      
     
 
 
    
     Aggregates
+
     
 
      
       
 
       
-       For example, this is now supported, array_agg(a ORDER BY
-       b). This is useful for aggregates where the order of values is
-       significant, and eliminates the need to have a subquery for
-       the ordering.
+       For example, this is now supported: array_agg(a ORDER BY
+       b).  This is useful with aggregates for which the order of input
+       values is significant, and eliminates the need to use a nonstandard
+       subquery to determine the ordering.
       
      
 
       
        Add the 
        linkend="functions-aggregate-table">string_agg()
-       aggregate function which aggregates values into a single
+       aggregate function to combine values into a single
        string (Pavel Stehule)
       
-
-      
-       An optional second argument allows specification of a delimiter.
-      
      
 
      
       
 
       
-       For example, agg(DISTINCT x) might pass NULL x
-       values to agg().
+       For example, agg(DISTINCT x) might pass a NULL x
+       value to agg().  This is more consistent with the behavior
+       in non-DISTINCT cases.
       
      
 
 
    
     Bit Strings
+
     
 
      
 
    
     Object Information Functions
+
     
 
      
 
      
       
-       Have information
-       schema properly display date type octet lengths
-       (Peter Eisentraut)
-      
-
-      
-       The reported length is now the maximum octet length; previously,
-       a huge value was reported.
+       Make the information_schema
+       views properly display maximum octet lengths for char and
+       varchar columns, as well as the proper precision for datetime
+       columns (Peter Eisentraut)
       
      
 
      
       
-       Speed up information schema privilege views (Joachim Wieland)
+       Speed up information_schema privilege views (Joachim Wieland)
       
      
 
 
    
     Function and Trigger Creation
+
     
 
      
       
-       Implement anonymous functions using the 
-       linkend="SQL-DO">DO statement, a.k.a anonymous
-       blocks (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
+       Support execution of anonymous code blocks using the 
+       linkend="SQL-DO">DO statement
+       (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
       
 
       
        This allows execution of server-side code without the need to create
-       a new function and execute it.
+       and delete a temporary function definition.  Code can be executed in
+       any language for which the user has permissions to define a function.
       
      
 
      
       
-       Allow SQL-compliant 
+       Implement SQL-standard-compliant 
        linkend="SQL-CREATETRIGGER">per-column triggers
        (Itagaki Takahiro)
       
 
       
-       Such triggers are fired only if the specified columns are affected
-       by the query, e.g. in UPDATE's SET list.
-       information_schema now also shows this information.
+       Such triggers are fired only when the specified column(s) are affected
+       by the query, e.g. appear in an UPDATE's SET
+       list.
       
      
 
      
       
-       Add WHEN clause to 
+       Add the WHEN clause to 
        linkend="SQL-CREATETRIGGER">CREATE TRIGGER
-       to allow control over whether a trigger is fired (Takahiro
-       Itagaki)
+       to allow control over whether a trigger is fired (Itagaki
+       Takahiro)
       
 
       
-       While a check can be performed inside the trigger, doing it in an
-       external WHEN clause has performance benefits.
+       While the same type of check can always be performed inside the
+       trigger, doing it in an external WHEN clause can have
+       performance benefits.
       
      
 
       
        Install PL/pgSQL by default (Bruce Momjian)
       
+
+      
+       The language can still be removed from a particular database if the
+       administrator has security or performance concerns about making it
+       available.
+      
+     
+
+     
+      
+       Improve handling of cases where PL/pgSQL variable names conflict with
+       identifiers used in queries within a function
+       (Tom Lane)
+      
+
+      
+       The default behavior is now to throw an error when there is a conflict,
+       so as to avoid surprising behaviors.  This can be modified, via the
+       configuration parameter 
+       linkend="plpgsql-var-subst">plpgsql.variable_conflict
+       or the per-function option #variable_conflict, to allow
+       either the variable or the query-supplied column to be used.  In any
+       case PL/pgSQL will no longer attempt to substitute variables in places
+       where they would not be syntactically valid.
+      
+     
+
+     
+      
+       Make PL/pgSQL use the main lexer, rather than its own version
+       (Tom Lane)
+      
+
+      
+       This ensures accurate tracking of the main system's behavior for details
+       such as string escaping.  Some user-visible details, such as the set
+       of keywords considered reserved in PL/pgSQL, have changed in
+       consequence.
+      
      
 
      
 
       
        Formerly, input parameters were treated as being declared
-       CONST.  This restriction has been removed to simplify
+       CONST, so the function's code could not change their
+       values.  This restriction has been removed to simplify
        porting of functions from other DBMSes that do not impose the
        equivalent restriction.  An input parameter now acts like a local
        variable initialized to the passed-in value.
       
      
 
-     
-      
-       Make PL/pgSQL use the main lexer, rather than its own version
-       (Tom Lane)
-      
-
-      
-       This ensures accurate tracking of the main system's behavior for details
-       such as string escaping.
-      
-     
-
      
       
        Add count and ALL options to MOVE
 
    
     <link linkend="plperl">PL/Perl</link> Server-Side Language
+
     
 
      
 
      
       
-       Add server variable 
+       Add server parameter 
        linkend="guc-plperl-on-init">plperl.on_init to
-       specify a PL/Perl Perl initialization function (Tim
+       specify a PL/Perl initialization function (Tim
        Bunce)
       
 
       
        
        linkend="guc-plperl-on-plperl-init">plperl.on_plperl_init
-       and plperl.on_plperlu_init are also available
-       for trusted/untrusted-specific initialization.
-      
-     
-
-     
-      
-       Improve error context support in PL/Perl (Alexey Klyukin)
+       and 
+       linkend="guc-plperl-on-plperl-init">plperl.on_plperlu_init
+       are also available for initialization that is specific to the trusted
+       or untrusted language respectively.
       
      
 
       
 
       
-       This can be globally enabled with the server variable 
+       Perl strict checks can also be globally enabled with the
+       new server parameter 
        linkend="guc-plperl-use-strict">plperl.use_strict.
       
      
 
       
        This basically tests to see if the module is loaded, and if not,
-       generates an error.
+       generates an error.  It will not allow loading of modules that
+       the administrator has not preloaded via the initialization parameters.
       
      
 
       
      
 
-     
-      
-       Improve PL/Perl code structure (Tim Bunce)
-      
-     
-
     
 
    
 
    
     <link linkend="plpython">PL/Python</link> Server-Side Language
+
     
 
      
       
 
       
-       Bytea values passed into PL/Python now are represented as
+       Bytea values passed into PL/Python are now represented as
        binary, rather than the PostgreSQL bytea text format. Null
        bytes are now also output properly from PL/Python. boolean
        and numeric value passing in PL/Python was also improved.
       
        The new server-side language is called 
        linkend="plpython-python23">plpython3u.  This
-       cannot be used in the same backend with the usual
+       cannot be used in the same session with the
        Python 2 server-side language.
       
      
 
   
    Client Applications
+
    
 
     
     
      Add vacuumdb
-     
+     
+     (Bruce Momjian)
      
     
 
 
    
     <link linkend="APP-PSQL"><application>psql</></link>
+
     
 
      
       
-       Properly escape psql 
-       linkend="APP-PSQL-variables">variables and
+       Add support for quoting/escaping the values of psql
+       variables as SQL strings or
        identifiers (Pavel Stehule, Robert Haas)
       
 
       
-       For example, :'var' will be escaped as a literal string, and
-       :"var" will be escaped as an SQL identifier.
+       For example, :'var' will produce the value of
+       var quoted and properly escaped as a literal string, while
+       :"var" will produce its value quoted and escaped as an
+       identifier.
       
      
 
      
       
-       Ignore leading UTF-8-encoded Unicode byte-order marker in
-       psql (Itagaki Takahiro)
+       Ignore leading UTF-8-encoded Unicode byte-order marker in
+       script files read by psql (Itagaki Takahiro)
       
 
       
        This is enabled when the client encoding is UTF-8.
+       It improves compatibility with certain editors, mostly on Windows,
+       that insist on inserting such markers.
       
      
 
 
      
       
-       Prevent overwriting of psql's command-line history
-       if two psql sessions are run simultaneously (Tom Lane)
+       Avoid overwriting of psql's command-line history when
+       two psql sessions are run concurrently (Tom Lane)
       
      
 
 
      
       
-       Show \timing output when enabled, regardless of
+       Show \timing output when it is enabled, regardless of
        quiet mode (Peter Eisentraut)
       
      
 
     
     <application>psql</> Display
-     
 
-      
-       
-        Allow psql to use fancy Unicode line-drawing
-        characters via \pset linestyle unicode (Roger Leigh)
-       
-      
+     
 
       
        
        
 
        
-        The previous format is available by using \pset linestyle
+        This behavior is now the default.
+        The previous formatting is available by using \pset linestyle
         old-ascii.
        
       
 
+      
+       
+        Allow psql to use fancy Unicode line-drawing
+        characters via \pset linestyle unicode (Roger Leigh)
+       
+      
+
      
 
     
      <application>psql</> <link</div> <div class="diff ctx">      linkend="APP-PSQL-meta-commands"><command>\d</></link></div> <div class="diff ctx">      Commands
+
      
 
       
        
-        Hav\d show child tables that inherit from the specified
+        Mak\d show child tables that inherit from the specified
         parent (Damien Clochard)
        
 
 
       
        
-        Show definition of indexes in \d index_name (Khee Chin)
+        Show definitions of index columns in \d index_name
+        (Khee Chin)
        
 
        
 
       
        
-        In psql, show the view definition only with \d+,
-        not with \d (Peter Eisentraut)
+        Show a view's defining query only in
+        \d+, not in \d (Peter Eisentraut)
+       
+
+       
+        Always including the query was deemed overly verbose.
        
       
 
 
    
     <link linkend="APP-PGDUMP"><application>pg_dump</></link>
+
     
 
      
       
-       Havpg_dump/pg_restore
+       Makpg_dump/pg_restore
        
        also remove large objects (Itagaki Takahiro)
       
 
      
       
-       Fix pg_dump to properly dump large objects if
-       standard_conforming_strings is enabled (Tom Lane)
+       Fix pg_dump to properly dump large objects when
+       standard_conforming_strings is enabled (Tom Lane)
       
 
       
-       Large objects dumps now use hex format for output. (SWITCH DEFAULT
-       FOR BETA? TOM)
+       The previous coding could fail when dumping to an archive file
+       and then generating script output from pg_restore.
+      
+     
+
+     
+      
+       pg_restore now emits large-object data in hex format
+       when generating script output (Tom Lane)
+      
+
+      
+       This could cause compatibility problems if the script is then
+       loaded into a pre-9.0 server.  To work around that, restore
+       directly to the server, instead.
       
      
 
 
      
       
-       Havpg_dump 
+       Makpg_dump 
        linkend="pg-dump-options">
        output the pg_dump and server versions
        in text output mode (Jim Cox, Tom Lane)
       
 
       
-       These were already present in custom output mode.
+       These were already provided in custom output mode.
       
      
 
    
     <link</div> <div class="diff ctx">     linkend="app-pg-ctl"><application>pg_ctl</></link>
+
     
 
      
       
-       Allow pg_ctl to be safely used to start the
-       postmaster at boot-time (Tom Lane)
+       Allow pg_ctl to be used safely to start the
+       postmaster during a system reboot (Tom Lane)
       
 
       
        Previously the pg_ctl process could have been mistakenly
        identified as a running postmaster based on a stale
-       postmaster lock file.
+       postmaster lock file, resulting in a transient failure
+       to start the database.
       
      
 
      
       
        Give pg_ctl the ability to initialize the database
-       (like initdb) (Zdenek Kotala)
+       (by invoking initdb) (Zdenek Kotala)
       
      
 
-
     
 
    
 
       
        These functions are similar to PQconnectdb() and
-       PQconnectStart() except they allow a null-terminated
+       PQconnectStart() except that they accept a null-terminated
        array of connection options, rather than requiring all options to
-       be sent in a single string.
+       be provided in a single string.
       
      
 
       
 
       
-       These functions return appropriately quoted and escaped literal
-       strings and identifiers. The caller is not required to pre-allocate
+       These functions return appropriately quoted and escaped SQL string
+       literals and identifiers. The caller is not required to pre-allocate
        the string result, as is required by PQescapeStringConn().
       
      
 
      
       
-       Add checking for a per-user service file (
+       Add support for a per-user service file (
        linkend="libpq-pgservice">.pg_service.conf),
        which is checked before the site-wide service file
        (Peter Eisentraut)
       
+     
 
+     
       
-       The file .pg_service.conf is assumed to be in the
-       user's home directory.
+       Properly report an error if the specified libpq service
+       cannot be found (Peter Eisentraut)
       
      
 
      
       
-       Add keepalive settings
+       Add TCP keepalive settings
        in libpq (Tollef Fog Heen, Fujii Masao, Robert Haas)
       
 
 
      
       
-       Properly report an error if the specified libpq service
-       cannot be found (Peter Eisentraut)
-      
-     
-
-     
-      
-       Issue a warning if the 
-       linkend="libpq-pgpass">.pgpass-retrieved
-       password fails (Bruce Momjian)
+       When a .pgpass-supplied
+       password fails, mention where the password came from in the error
+       message (Bruce Momjian)
       
      
 
       
 
       
-       This improves handling of indirectly-signed SSL client
-       certificates.
+       This improves support for indirectly-signed SSL certificates.
       
      
 
 
    
     <link linkend="ecpg"><application>ecpg</></link>
+
     
 
      
 
      
       
-       Add an ecpg 
-       linkend="ecpg-library">function to return the
+       Add an ecpg function 
+       linkend="ecpg-library">ECPGtransactionStatus to return the
        current transaction status (Bernd Helmle)
       
      
      
       
        Allow ecpg to use variable names in
-       free()(Michael Meskes)
+       free() (Michael Meskes)
       
      
 
      
       
-       Have ecpg return zero for non-SQL3 data types
-       (Michael Meskes))
+       Make ecpg_dynamic_type() return zero for non-SQL3 data
+       types (Michael Meskes)
       
 
       
-       Previously it returned the negative of the data type oid.
+       Previously it returned the negative of the data type OID.
+       This could be confused with valid type OIDs, however.
       
      
 
      
       
        Support long long types on platforms that already have 64-bit
-       longs (Michael Meskes))
+       long (Michael Meskes)
       
      
 
 
      
       <application>ecpg</> Cursors
+
       
 
       
 
   
    Build Options
+
    
 
     
 
      
       Thread-safe builds can be disabled with 
-      linkend="configure"><application>configure
+      linkend="configure"><literal>configure
       
      
     
 
     
      
-      Add a compile-time option to allow the Linux out-of-memory killer
-      to kill backends (Alex Hunsaker, Tom Lane)
+      Add support for controlling the Linux out-of-memory killer
+      (Alex Hunsaker, Tom Lane)
      
 
      
       Now that /proc/self/oom_adj allows disabling
       of the Linux out-of-memory (OOM)
-      killer for the postmaster and its children, the new
-      compile-time option 
-      linkend="linux-memory-overcommit">-DLINUX_OOM_ADJ=0
-      allows the killer to be enabled for postmaster
-      children. pg_config shows if this flag
-      was used during compilation.
-     
-    
-
-    
-     
-      Use DocBook XSL stylesheets for man page
-      building (Peter Eisentraut)
+      killer, it's recommendable to disable OOM kills for the postmaster.
+      It may then be desirable to re-enable OOM kills for the postmaster's
+      child processes.  The new compile-time option 
+      linkend="linux-memory-overcommit">LINUX_OOM_ADJ
+      allows the killer to be reactivated for child processes.
      
     
 
 
    
     Makefiles
+
     
 
      
       
      
 
-     
-      
-       Restructure the HTML documentation build
-       Makefile rules (Peter Eisentraut)
-      
-     
-
     
      
       Add a Makefile rule to build documentation as a single text file
      
     
 
-    
-     
-      Restructure use of LDFLAGS to be more consistent
-      across platforms (Tom Lane)
-     
-    
-
-    
-
-   
-
-   
-    New Requirements
-    
-
-     
-      
-       Require Autoconf 2.63 for building from source (Peter Eisentraut)
-      
-     
-
-     
-      
-       Require Flex 2.5.31 or later to build from source
-       (Tom Lane)
-      
-     
-
-     
-      
-       Require Perl version 5.8 or greater to build the server
-       from a CVS copy (John Naylor, Andrew Dunstan)
-      
-     
-
     
 
    
 
    
     Windows
+
     
 
      
       
-       Add support for compiling on 
-       linkend="install-win32-full">64-bit
+       Support compiling on 
+       linkend="install-win32">64-bit
        Windows and running in 64-bit
-       mode (Tsutomu Yamada, Magnus)
+       mode (Tsutomu Yamada, Magnus Hagander)
       
 
       
 
      
       
-       Allow server builds using 
+       Support server builds using 
        linkend="install-win32-full">Visual Studio
        2008 (Magnus Hagander)
       
 
      
       
-       Allow multiprocessor compilation using Microsoft Visual
+       Support multiprocessor compilation using Microsoft Visual
        C (Magnus Hagander)
       
      
 
   
    Source Code
+
    
 
     
      
-      Distribute documentation in a proper directory tree, rather than
-      as tar archive files inside the main distribution tarball (Peter Eisentraut)
+      Distribute prebuilt documentation in a subdirectory tree, rather than
+      as tar archive files inside the distribution tarball
+      (Peter Eisentraut)
      
 
      
-      For example, the HTML documentation is now in
-      doc/src/sgml/html; the manual pages are packaged
+      For example, the prebuilt HTML documentation is now in
+      doc/src/sgml/html/; the manual pages are packaged
       similarly.
      
     
 
     
      
-      Enable the server's lexer to be reentrant (Tom Lane)
+      Make the server's lexer reentrant (Tom Lane)
      
 
      
 
     
      
-      Add system columns to better document the use of indexes for constraint
+      User-defined constraint triggers now have entries in
+      pg_constraint as well as pg_trigger
+      (Tom Lane)
+     
+
+     
+      Because of this change,
+      pg_constraint.pgconstrname is now
+      redundant and has been removed.
+     
+    
+
+    
+     
+      Add system catalog columns
+      pg_constraint.conindid and
+      pg_trigger.tgconstrindid
+      to better document the use of indexes for constraint
       enforcement (Tom Lane)
      
     
 
     
      
-      Allow multiple actions to be communicated using the same operating
-      system signal (Fujii Masao)
+      Allow multiple conditions to be communicated to backends using a single
+      operating system signal (Fujii Masao)
      
 
      
-      This allows improved backend communication as new features are
-      added.
+      This allows new features to be added without a platform-specific
+      constraint on the number of signal conditions.
      
     
 
      
 
      
-      This also improves performance when using millions of users and
-      databases.
+      This improves performance when using many roles or
+      databases, and eliminates some possible failure conditions.
      
     
 
 
     
      
-      Reduce the length of some file names so file paths are less than
-      100 characters (Tom Lane)
+      Reduce the length of some file names so that all file paths in the
+      distribution tarball are less than 100 characters (Tom Lane)
      
 
      
-      Some decompression programs have problems with long file names.
-     
-    
-
-    
-     
-      Tighten input requirements for int2 vector input (Caleb
-      Welton)
+      Some decompression programs have problems with longer file paths.
      
     
 
 
     
      
-      Properly remove the few remaining personal source code copyright
-      entries (Bruce Momjian)
+      With authors' permissions, remove the few remaining personal source code
+      copyright notices (Bruce Momjian)
      
 
      
 
     
      
-      New documentation section
-      about running PostgreSQL in non-durable mode,
-      to improve performance  (Bruce Momjian)
+      Add new documentation section
+      about running PostgreSQL in non-durable mode
+      to improve performance (Bruce Momjian)
+     
+    
+
+    
+     
+      Restructure the HTML documentation build
+      Makefile rules (Peter Eisentraut)
+     
+    
+
+    
+     
+      Use DocBook XSL stylesheets for man page
+      building (Peter Eisentraut)
+     
+    
+
+    
+     
+      Improve PL/Perl code structure (Tim Bunce)
+     
+    
+
+    
+     
+      Improve error context support in PL/Perl (Alexey Klyukin)
      
     
 
    
 
    
-    Feature Support
+    New Build Requirements
+
+     
+      Note that these requirements do not apply when building from a
+      distribution tarball, since tarballs include the files that these
+      programs are used to build.
+     
+
+    
+     
+      
+       Require Autoconf 2.63 to build
+       configure (Peter Eisentraut)
+      
+     
+
+     
+      
+       Require Flex 2.5.31 or later to build
+       from a CVS checkout (Tom Lane)
+      
+     
+
+     
+      
+       Require Perl version 5.8 or later to build
+       from a CVS checkout (John Naylor, Andrew Dunstan)
+      
+     
+
+    
+
+   
+
+   
+    Portability
+
     
 
      
       
 
       
-       Bonjour now requires OS X 10.3 or later.
+       Bonjour support now requires OS X 10.3 or later.
+       The older API has been deprecated by Apple.
       
      
 
      
       
-       Add processor test-and-test lock support for the SuperH
+       Add spinlock support for the SuperH
        architecture (Nobuhiro Iwamatsu)
       
      
      
       
        Remove support for platforms that don't have a working 64-bit
-       integer data types (Tom Lane)
+       integer data type (Tom Lane)
       
+     
 
+     
       
-       It is believed all supported platforms have working 64-bit integer
-       data types.
+       Restructure use of LDFLAGS to be more consistent
+       across platforms (Tom Lane)
       
      
 
-
     
 
    
 
    
     Server Programming
+
     
 
      
       
 
       
-       While this removes keyword conflicts that previously made
-       C++ usage difficult in backend code, there are
-       still other complexities when using C++ for backend
+       These changes remove keyword conflicts that previously made
+       C++ usage difficult in backend code.  However, there
+       are still other complexities when using C++ for backend
        functions. extern "C" { } is still necessary in
-       appropriate places.
+       appropriate places, and memory management and error handling are
+       still problematic.
       
      
 
 
      
       
-       Require fastgetattr() and heap_getattr()
-       backend macros to use a non-NULL fourth argument (Robert Haas)
-       KEEP?
+       Require calls of fastgetattr() and
+       heap_getattr() backend macros to use a non-NULL fourth
+       argument (Robert Haas)
       
      
 
 
    
     Server Hooks
+
     
 
      
 
      
       
-       Add a hook so loadable modules can control utility commands (Itagaki
-       Takahiro)
+       Allow the calling of parser hooks from SPI and cached
+       plans (Tom Lane)
       
      
 
      
       
-       Allow the calling of parser hooks from SPI and cached
-       plans (Tom Lane)
+       Add a ProcessUtility hook so loadable modules can control utility
+       commands (Itagaki Takahiro)
       
      
 
 
    
     Binary Upgrade Support
+
     
 
     
 
      
       This avoids the requirement of dumping/reloading the database when
-      upgrading to a new major release of PostgreSQL and speeds up offline
-      upgrades by orders of magnitude. It supports upgrades to 9.0
+      upgrading to a new major release of PostgreSQL, thus reducing downtime
+      by orders of magnitude. It supports upgrades to 9.0
       from PostgreSQL 8.3 and 8.4.
      
     
 
      
       
-       Add support for preservation of all 
-       linkend="catalog-pg-class">relfilenodes,
-       for use during binary upgrades (Bruce Momjian)
+       Add support for preserving relation 
+       linkend="catalog-pg-class">relfilenode values
+       during binary upgrades (Bruce Momjian)
       
      
 
      
       
-       Add support for binary upgrades to preserve pg_type
-       and pg_enum oids (Bruce Momjian)
-      
-
-      
-       This is needed to allow binary upgrades of user-defined composite
-       types, arrays, and enums (enumerated types).
+       Add support for preserving pg_type
+       and pg_enum OIDs during binary upgrades
+       (Bruce Momjian)
       
      
 
      
       
-       Move tablespace data directories into their own
-       PostgreSQL version-specific subdirectory (Bruce Momjian)
+       Move data files within tablespaces into
+       PostgreSQL-version-specific subdirectories
+       (Bruce Momjian)
       
 
       
 
   
    Contrib
+
    
 
     
      
-      Add multithreaded option (