head	2.57;
access;
symbols
	REL9_0_0:2.39.2.14
	REL9_1_ALPHA1:2.55
	REL9_0_RC1:2.39.2.11
	REL9_0_BETA4:2.39.2.2
	REL9_0_STABLE:2.39.0.2
	REL9_0_BETA3:2.39
	REL9_0_BETA2:2.27
	REL9_0_BETA1:2.19
	REL9_0_ALPHA5_BRANCH:2.13.0.2
	REL9_0_ALPHA5:2.13
	REL9_0_ALPHA4:2.2
	REL9_0_ALPHA4_BRANCH:2.2.0.2;
locks; strict;
comment	@# @;


2.57
date	2010.09.16.18.15.21;	author tgl;	state Exp;
branches;
next	2.56;

2.56
date	2010.09.15.17.45.57;	author tgl;	state Exp;
branches;
next	2.55;

2.55
date	2010.09.01.15.14.42;	author tgl;	state Exp;
branches;
next	2.54;

2.54
date	2010.08.25.19.41.38;	author momjian;	state Exp;
branches;
next	2.53;

2.53
date	2010.08.25.00.47.57;	author tgl;	state Exp;
branches;
next	2.52;

2.52
date	2010.08.24.23.45.32;	author tgl;	state Exp;
branches;
next	2.51;

2.51
date	2010.08.24.14.46.29;	author momjian;	state Exp;
branches;
next	2.50;

2.50
date	2010.08.23.02.43.25;	author tgl;	state Exp;
branches;
next	2.49;

2.49
date	2010.08.17.04.37.21;	author petere;	state Exp;
branches;
next	2.48;

2.48
date	2010.08.07.13.07.06;	author momjian;	state Exp;
branches;
next	2.47;

2.47
date	2010.08.06.19.13.13;	author tgl;	state Exp;
branches;
next	2.46;

2.46
date	2010.08.06.18.55.24;	author tgl;	state Exp;
branches;
next	2.45;

2.45
date	2010.08.06.17.56.43;	author rhaas;	state Exp;
branches;
next	2.44;

2.44
date	2010.07.29.21.18.11;	author tgl;	state Exp;
branches;
next	2.43;

2.43
date	2010.07.27.19.01.16;	author petere;	state Exp;
branches;
next	2.42;

2.42
date	2010.07.12.18.30.36;	author momjian;	state Exp;
branches;
next	2.41;

2.41
date	2010.07.12.18.25.21;	author momjian;	state Exp;
branches;
next	2.40;

2.40
date	2010.07.12.17.47.39;	author momjian;	state Exp;
branches;
next	2.39;

2.39
date	2010.07.08.22.26.14;	author momjian;	state Exp;
branches
	2.39.2.1;
next	2.38;

2.38
date	2010.07.01.02.33.21;	author momjian;	state Exp;
branches;
next	2.37;

2.37
date	2010.06.30.14.25.24;	author adunstan;	state Exp;
branches;
next	2.36;

2.36
date	2010.06.29.21.20.19;	author tgl;	state Exp;
branches;
next	2.35;

2.35
date	2010.06.24.18.33.05;	author rhaas;	state Exp;
branches;
next	2.34;

2.34
date	2010.06.16.18.46.18;	author momjian;	state Exp;
branches;
next	2.33;

2.33
date	2010.06.16.18.31.39;	author momjian;	state Exp;
branches;
next	2.32;

2.32
date	2010.06.16.14.50.34;	author adunstan;	state Exp;
branches;
next	2.31;

2.31
date	2010.06.14.02.18.43;	author rhaas;	state Exp;
branches;
next	2.30;

2.30
date	2010.06.14.01.07.41;	author rhaas;	state Exp;
branches;
next	2.29;

2.29
date	2010.06.10.21.48.28;	author momjian;	state Exp;
branches;
next	2.28;

2.28
date	2010.06.07.02.01.08;	author itagaki;	state Exp;
branches;
next	2.27;

2.27
date	2010.06.03.21.23.02;	author tgl;	state Exp;
branches;
next	2.26;

2.26
date	2010.06.03.19.38.39;	author momjian;	state Exp;
branches;
next	2.25;

2.25
date	2010.06.03.16.33.36;	author momjian;	state Exp;
branches;
next	2.24;

2.24
date	2010.06.01.13.43.39;	author momjian;	state Exp;
branches;
next	2.23;

2.23
date	2010.06.01.03.19.36;	author momjian;	state Exp;
branches;
next	2.22;

2.22
date	2010.05.17.17.46.13;	author adunstan;	state Exp;
branches;
next	2.21;

2.21
date	2010.05.13.12.47.50;	author momjian;	state Exp;
branches;
next	2.20;

2.20
date	2010.05.13.01.57.01;	author momjian;	state Exp;
branches;
next	2.19;

2.19
date	2010.04.29.22.03.41;	author momjian;	state Exp;
branches;
next	2.18;

2.18
date	2010.04.29.21.02.50;	author momjian;	state Exp;
branches;
next	2.17;

2.17
date	2010.04.29.20.54.28;	author momjian;	state Exp;
branches;
next	2.16;

2.16
date	2010.04.29.20.43.22;	author momjian;	state Exp;
branches;
next	2.15;

2.15
date	2010.04.05.02.46.42;	author tgl;	state Exp;
branches;
next	2.14;

2.14
date	2010.04.03.07.22.55;	author petere;	state Exp;
branches;
next	2.13;

2.13
date	2010.04.01.00.32.53;	author momjian;	state Exp;
branches;
next	2.12;

2.12
date	2010.04.01.00.18.21;	author momjian;	state Exp;
branches;
next	2.11;

2.11
date	2010.03.23.22.37.14;	author momjian;	state Exp;
branches;
next	2.10;

2.10
date	2010.03.23.02.28.48;	author momjian;	state Exp;
branches;
next	2.9;

2.9
date	2010.03.22.22.56.52;	author momjian;	state Exp;
branches;
next	2.8;

2.8
date	2010.03.21.22.12.27;	author momjian;	state Exp;
branches;
next	2.7;

2.7
date	2010.03.21.02.24.29;	author momjian;	state Exp;
branches;
next	2.6;

2.6
date	2010.03.21.00.43.40;	author momjian;	state Exp;
branches;
next	2.5;

2.5
date	2010.03.20.16.31.09;	author momjian;	state Exp;
branches;
next	2.4;

2.4
date	2010.03.20.14.03.31;	author momjian;	state Exp;
branches;
next	2.3;

2.3
date	2010.03.20.03.30.12;	author momjian;	state Exp;
branches;
next	2.2;

2.2
date	2010.02.19.00.35.18;	author petere;	state Exp;
branches;
next	2.1;

2.1
date	2010.02.17.04.19.37;	author tgl;	state Exp;
branches;
next	;

2.39.2.1
date	2010.07.27.19.01.04;	author petere;	state Exp;
branches;
next	2.39.2.2;

2.39.2.2
date	2010.07.29.21.18.16;	author tgl;	state Exp;
branches;
next	2.39.2.3;

2.39.2.3
date	2010.08.06.17.57.03;	author rhaas;	state Exp;
branches;
next	2.39.2.4;

2.39.2.4
date	2010.08.06.18.55.30;	author tgl;	state Exp;
branches;
next	2.39.2.5;

2.39.2.5
date	2010.08.06.19.13.18;	author tgl;	state Exp;
branches;
next	2.39.2.6;

2.39.2.6
date	2010.08.17.04.37.17;	author petere;	state Exp;
branches;
next	2.39.2.7;

2.39.2.7
date	2010.08.23.02.43.35;	author tgl;	state Exp;
branches;
next	2.39.2.8;

2.39.2.8
date	2010.08.24.14.46.35;	author momjian;	state Exp;
branches;
next	2.39.2.9;

2.39.2.9
date	2010.08.24.23.45.37;	author tgl;	state Exp;
branches;
next	2.39.2.10;

2.39.2.10
date	2010.08.25.00.48.06;	author tgl;	state Exp;
branches;
next	2.39.2.11;

2.39.2.11
date	2010.08.25.19.41.51;	author momjian;	state Exp;
branches;
next	2.39.2.12;

2.39.2.12
date	2010.09.01.15.14.48;	author tgl;	state Exp;
branches;
next	2.39.2.13;

2.39.2.13
date	2010.09.15.17.46.02;	author tgl;	state Exp;
branches;
next	2.39.2.14;

2.39.2.14
date	2010.09.16.18.15.28;	author tgl;	state Exp;
branches;
next	;


desc
@@


2.57
log
@Stamp 9.0 release notes with expected release date; also some last-minute
copy-editing.
@
text
@<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.56 2010/09/15 17:45:57 tgl Exp $ -->
<!-- See header comment in release.sgml about typical markup -->

 <sect1 id="release-9-0">
  <title>Release 9.0</title>

  <note>
   <title>Release date</title>
   <simpara>2010-09-20</simpara>
  </note>

  <sect2>
   <title>Overview</title>

   <para>
    This release of
    <productname>PostgreSQL</> adds features that have been requested
    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 <productname>PostgreSQL</> will embrace. This has all
    been done with few incompatibilities. Major enhancements include:
   </para>

   <itemizedlist>

    <!-- This list duplicates items below, but without authors or details-->

    <listitem>

     <para>
      Built-in replication based on log shipping.  This advance consists of
      two features: Streaming Replication, allowing continuous archive
      (<acronym>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.
     </para>
    </listitem>

    <listitem>
     <para>
      Easier database object permissions management. <link
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE IN
      SCHEMA</></link> supports mass permissions changes on existing objects,
      while <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT
      PRIVILEGES</></link> allows control of privileges for objects created in
      the future.  Large objects (BLOBs) now support permissions management as
      well.
     </para>
    </listitem>

    <listitem>
     <para>
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement supports
      ad-hoc or <quote>anonymous</> code blocks.
      Functions can now be called using named parameters.
      <link linkend="plpgsql">PL/pgSQL</link> is now installed by default, and
      <link linkend="plperl">PL/Perl</link> and <link
      linkend="plpython">PL/Python</link> have been enhanced in several ways,
      including support for Python3.
     </para>
    </listitem>

    <listitem>
     <para>
      Full support for <link linkend="install-win32">64-bit
      <productname>Windows</></link>.
     </para>
    </listitem>

    <listitem>
     <para>
      More advanced reporting queries, including additional windowing options
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability to
      control the order in which values are fed to aggregate functions.
     </para>
    </listitem>

    <listitem>
     <para>
      New trigger features, including
      SQL-standard-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link> and
      conditional trigger execution.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="SQL-CREATETABLE-compatibility">Deferrable
      unique constraints</link>. Mass updates to unique keys are now possible
      without trickery.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>.
      These provide a generalized version of unique constraints, allowing
      enforcement of complex conditions.
     </para>
    </listitem>

    <listitem>
     <para>
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and a new contrib module
      <link linkend="passwordcheck"><filename>passwordcheck</></link>
      for testing password strength.
     </para>
    </listitem>

    <listitem>
     <para>
      New high-performance implementation of the
      <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> feature.
      Pending events are now stored in a memory-based queue rather than
      a table.  Also, a <quote>payload</> string can be sent with each
      event, rather than transmitting just an event name as before.
     </para>
    </listitem>

    <listitem>
     <para>
      New implementation of
      <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link>.
      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.
     </para>
    </listitem>

    <listitem>
     <para>
      New contrib module
      <link linkend="pgupgrade"><filename>pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
     </para>
    </listitem>

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

    <listitem>
     <para>
      <link linkend="SQL-EXPLAIN "><command>EXPLAIN</></link> enhancements.
      The output is now available in JSON, XML, or YAML format, and includes
      buffer utilization and other data not previously available.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="hstore"><filename>hstore</></link> improvements,
      including new functions and greater data capacity.
     </para>
    </listitem>

   </itemizedlist>

   <para>
    The above items are explained in more detail in the sections below.
   </para>

  </sect2>

  <sect2>

  <title>Migration to Version 9.0</title>

  <para>
   A dump/restore using <application>pg_dump</application>,
   or use of <application>pg_upgrade</application>, is required
   for those wishing to migrate data from any previous
   release.
  </para>

  <para>
   Version 9.0 contains a number of changes that selectively break backwards
   compatibility in order to support new features and code quality
   improvements.  In particular, users who make extensive use of PL/pgSQL,
   Point-In-Time Recovery (PITR), or Warm Standby should test their
   applications because of slight user-visible changes in those areas.
   Observe the following incompatibilities:
  </para>

  <sect3>
   <title>Server Settings</title>

   <itemizedlist>

    <listitem>
     <para>
      Remove server parameter <varname>add_missing_from</>, which was
      defaulted to off for many years (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Remove server parameter <varname>regex_flavor</>, which
      was defaulted to <link
      linkend="posix-syntax-details"><literal>advanced</></link>
      for many years (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="guc-archive-mode"><varname>archive_mode</></link>
      now only affects <link
      linkend="guc-archive-command"><varname>archive_command</></link>;
      a new setting, <link
      linkend="guc-wal-level"><varname>wal_level</></link>, affects
      the contents of the write-ahead log (Heikki Linnakangas)
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="guc-log-temp-files"><varname>log_temp_files</></link>
      now uses default file size units of kilobytes (Robert Haas)
     </para>
    </listitem>

   </itemizedlist>

  </sect3>

  <sect3>
   <title>Queries</title>

   <itemizedlist>

   <listitem>
    <para>
     When querying a <link linkend="ddl-inherit">parent table</link>,
     do not do any separate permission checks on child tables
     scanned as part of the query (Peter Eisentraut)
    </para>

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

   </itemizedlist>

  </sect3>

  <sect3>
   <title>Data Types</title>

   <itemizedlist>

    <listitem>
     <para>
      <link linkend="datatype-binary"><type>bytea</></link> output now
      appears in hex format by default (Peter Eisentraut)
     </para>

     <para>
      The server parameter <link
      linkend="guc-bytea-output"><varname>bytea_output</></link> can be
      used to select the traditional output format if needed for
      compatibility.
     </para>
    </listitem>

    <listitem>
     <para>
      Array input now considers only plain ASCII whitespace characters
      to be potentially ignorable; it will never ignore non-ASCII characters,
      even if they are whitespace according to some locales (Tom Lane)
     </para>

     <para>
      This avoids some corner cases where array values could be interpreted
      differently depending on the server's locale settings.
     </para>
    </listitem>

   <listitem>
    <para>
     Improve standards compliance of <link
     linkend="functions-similarto-regexp"><literal>SIMILAR TO</></link>
     patterns and SQL-style <function>substring()</> patterns (Tom Lane)
    </para>

    <para>
     This includes treating <literal>?</> and <literal>{...}</> as
     pattern metacharacters, while they were simple literal characters
     before; that corresponds to new features added in SQL:2008.
     Also, <literal>^</> and <literal>$</> are now treated as simple
     literal characters; formerly they were treated as metacharacters,
     as if the pattern were following POSIX rather than SQL rules.
     Also, in SQL-standard <function>substring()</>, use of parentheses
     for nesting no longer interferes with capturing of a substring.
     Also, processing of bracket expressions (character classes) is
     now more standards-compliant.
    </para>
   </listitem>

   <listitem>
    <para>
     Reject negative length values in 3-parameter <link
     linkend="functions-string-sql"><function>substring()</></link>
     for bit strings, per the SQL standard (Tom Lane)
    </para>
   </listitem>

   <listitem>
    <para>
     Make <function>date_trunc</> truncate rather than round when reducing
     precision of fractional seconds (Tom Lane)
    </para>

    <para>
     The code always acted this way for integer-based dates/times.
     Now float-based dates/times behave similarly.
    </para>
   </listitem>

  </itemizedlist>

  </sect3>

  <sect3>
   <title>Object Renaming</title>

   <itemizedlist>

    <listitem>
     <para>
      Tighten enforcement of column name consistency during <command>RENAME</>
      when a child table inherits the same column from multiple unrelated
      parents (KaiGai Kohei)
     </para>
    </listitem>

    <listitem>
     <para>
      No longer automatically rename indexes and index columns when the
      underlying table columns are renamed (Tom Lane)
     </para>

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

    <listitem>
     <para>
      <command>CREATE OR REPLACE FUNCTION</command> can no longer change
      the declared names of function parameters (Pavel Stehule)
     </para>

     <para>
      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
      <command>DROP</command> and recreate the function to do that.
     </para>
    </listitem>

   </itemizedlist>

  </sect3>

  <sect3>
   <title>PL/pgSQL</title>

   <itemizedlist>

    <listitem>
     <para>
      PL/pgSQL now throws an error if a variable name conflicts with a
      column name used in a query (Tom Lane)
     </para>

     <para>
      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 <link
      linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>,
      or via the per-function option <literal>#variable_conflict</>.
     </para>
    </listitem>

    <listitem>
     <para>
      PL/pgSQL no longer allows variable names that match certain SQL
      reserved words (Tom Lane)
     </para>

     <para>
      This is a consequence of aligning the PL/pgSQL parser to match the
      core SQL parser more closely.  If necessary,
      variable names can be double-quoted to avoid this restriction.
     </para>
    </listitem>

    <listitem>
     <para>
      PL/pgSQL now requires columns of composite results to match the
      expected type modifier as well as base type (Pavel Stehule, Tom Lane)
     </para>

     <para>
      For example, if a column of the result type is declared as
      <literal>NUMERIC(30,2)</>, it is no longer acceptable to return a
      <literal>NUMERIC</> of some other precision in that column.  Previous
      versions neglected to check the type modifier and would thus allow
      result rows that didn't actually conform to the declared restrictions.
     </para>
    </listitem>

    <listitem>
     <para>
      PL/pgSQL now treats selection into composite fields more consistently
      (Tom Lane)
     </para>

     <para>
      Formerly, a statement like
      <literal>SELECT ... INTO <replaceable>rec</>.<replaceable>fld</> FROM ...</literal>
      was treated as a scalar assignment even if the record field
      <replaceable>fld</> was of composite type.  Now it is treated as a
      record assignment, the same as when the <literal>INTO</> target is a
      regular variable of composite type.  So the values to be assigned to the
      field's subfields should be written as separate columns of the
      <command>SELECT</> list, not as a <literal>ROW(...)</> construct as in
      previous versions.
     </para>

     <para>
      If you need to do this in a way that will work in both 9.0 and previous
      releases, you can write something like
      <literal><replaceable>rec</>.<replaceable>fld</> := ROW(...) FROM ...</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
      Remove PL/pgSQL's <literal>RENAME</> declaration (Tom Lane)
     </para>

     <para>
      Instead of <literal>RENAME</>, use <link
      linkend="plpgsql-declaration-alias"><literal>ALIAS</></link>,
      which can now create an alias for any variable, not only dollar sign
      parameter names (such as <literal>$1</>) as before.
     </para>
    </listitem>
   </itemizedlist>

  </sect3>

  <sect3>
   <title>Other Incompatibilities</title>

   <itemizedlist>

    <listitem>
     <para>
      Deprecate use of <literal>=&gt;</> as an operator name (Robert Haas)
     </para>

     <para>
      Future versions of <productname>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.
     </para>
    </listitem>

    <listitem>
     <para>
      Remove support for platforms that don't have a working 64-bit
      integer data type (Tom Lane)
     </para>

     <para>
      It is believed all still-supported platforms have working 64-bit
      integer data types.
     </para>
    </listitem>

   </itemizedlist>
  </sect3>
 </sect2>

 <sect2>
  <title>Changes</title>
   <para>
    Version 9.0 has an unprecedented number of new major features,
    and over 200 enhancements, improvements, new commands,
    new functions, and other changes.
   </para>

  <sect3>
   <title>Server</title>

   <sect4>
    <title>Continuous Archiving and Streaming Replication</title>

    <para>
     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.
    </para>

    <itemizedlist>
     <listitem>
      <para>
       Allow a standby server to accept read-only queries
       (Simon Riggs, Heikki Linnakangas)
      </para>

      <para>
       This feature is called Hot Standby. There are new
       <filename>postgresql.conf</> and <filename>recovery.conf</>
       settings to control this feature, as well as extensive
       <link linkend="hot-standby">documentation</link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow write-ahead log (<acronym>WAL</>) data to be streamed to a
       standby server (Fujii Masao, Heikki Linnakangas)
      </para>

      <para>
       This feature is called Streaming Replication.
       Previously <acronym>WAL</> data could be sent to standby servers only
       in units of entire <acronym>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 <filename>postgresql.conf</> and
       <filename>recovery.conf</> settings to control this feature, as well as
       extensive <link linkend="streaming-replication">documentation</link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="functions-recovery-info-table"><function>pg_last_xlog_receive_location()</></link>
       and <function>pg_last_xlog_replay_location()</>, which
       can be used to monitor standby server <acronym>WAL</>
       activity (Simon Riggs, Fujii Masao, Heikki Linnakangas)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Performance</title>

    <itemizedlist>

     <listitem>
      <para>
       Allow per-tablespace values to be set for sequential and random page
       cost estimates (<varname>seq_page_cost</>/<varname>random_page_cost</>)
       via <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE
       ... SET/RESET</></link> (Robert Haas)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve performance and reliability of EvalPlanQual rechecks in join
       queries (Tom Lane)
      </para>

      <para>
       <command>UPDATE</>, <command>DELETE</>, and <command>SELECT FOR
       UPDATE/SHARE</> queries that involve joins will now behave much better
       when encountering freshly-updated rows.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve performance of <link
       linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
       the table was created or truncated earlier in the same transaction
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve performance of finding inheritance child tables (Tom Lane)
      </para>
     </listitem>

     </itemizedlist>

   </sect4>

   <sect4>
    <title>Optimizer</title>

    <itemizedlist>

     <listitem>
      <para>
       Remove unnecessary <link linkend="queries-join">outer
       joins</link> (Robert Haas)
      </para>

      <para>
       Outer joins where the inner side is unique and not referenced above
       the join are unnecessary and are therefore now removed.  This will
       accelerate many automatically generated queries, such as those created
       by object-relational mappers (ORMs).
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <literal>IS NOT NULL</> restrictions to use indexes (Tom Lane)
      </para>

      <para>
       This is particularly useful for finding
       <function>MAX()</>/<function>MIN()</> values in indexes that
       contain many null values.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve the optimizer's choices about when to use materialize nodes,
       and when to use sorting versus hashing for <literal>DISTINCT</>
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve the optimizer's equivalence detection for expressions involving
       <type>boolean</> <literal>&lt;&gt;</> operators (Tom Lane)
      </para>
     </listitem>
    </itemizedlist>
   </sect4>

   <sect4>
    <title><link linkend="geqo">GEQO</link></title>

    <itemizedlist>

     <listitem>
      <para>
       Use the same random seed every time GEQO plans a query (Andres
       Freund)
      </para>

      <para>
       While the Genetic Query Optimizer (GEQO) still selects
       random plans, it now always selects the same random plans for identical
       queries, thus giving more consistent performance. You can modify <link
       linkend="guc-geqo-seed"><varname>geqo_seed</></link> to experiment with
       alternative plans.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve GEQO plan selection (Tom Lane)
      </para>

      <para>
       This avoids the rare error <quote>failed to make a valid plan</>,
       and should also improve planning speed.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Optimizer Statistics</title>

    <itemizedlist>

     <listitem>
      <para>
       Improve <link linkend="SQL-ANALYZE"><command>ANALYZE</></link>
       to support inheritance-tree statistics (Tom Lane)
      </para>

      <para>
       This is particularly useful for partitioned tables.  However,
       autovacuum does not yet automatically re-analyze parent tables
       when child tables change.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve <link linkend="routine-vacuuming">autovacuum</link>'s
       detection of when re-analyze is necessary (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve optimizer's estimation for greater/less-than comparisons
       (Tom Lane)
      </para>

      <para>
       When looking up statistics for greater/less-than comparisons,
       if the comparison value is in the first or last histogram bucket,
       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.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow setting of number-of-distinct-values statistics using <link
       linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>
       (Robert Haas)
      </para>

      <para>
       This allows users to override the estimated number or percentage of
       distinct values for a column. This statistic is normally computed by
       <command>ANALYZE</>, but the estimate can be poor, especially on tables
       with very large numbers of rows.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Authentication</title>

    <itemizedlist>

     <listitem>
      <para>
       Add support for <link
       linkend="auth-radius"><acronym>RADIUS</></link> (Remote
       Authentication Dial In User Service) authentication
       (Magnus Hagander)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <link linkend="auth-ldap"><acronym>LDAP</></link>
       (Lightweight Directory Access Protocol) authentication
       to operate in <quote>search/bind</> mode
       (Robert Fleming, Magnus Hagander)
      </para>

      <para>
       This allows the user to be looked up first, then the system uses
       the <acronym>DN</> (Distinguished Name) returned for that user.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="auth-pg-hba-conf"><literal>samehost</></link>
       and <literal>samenet</> designations to
       <filename>pg_hba.conf</> (Stef Walter)
      </para>

      <para>
       These match the server's <acronym>IP</> address and subnet address
       respectively.
      </para>
     </listitem>

     <listitem>
      <para>
       Pass trusted SSL root certificate names to the client so the client
       can return an appropriate client certificate (Craig Ringer)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Monitoring</title>

    <itemizedlist>

     <listitem>
      <para>
       Add the ability for clients to set an <link
       linkend="libpq-connect-application-name">application
       name</link>, which is displayed in
       <structname>pg_stat_activity</> (Dave Page)
      </para>

      <para>
       This allows administrators to characterize database traffic
       and troubleshoot problems by source application.
      </para>
     </listitem>

     <listitem>
      <para>
       Add a SQLSTATE option (<literal>%e</>) to <link
       linkend="guc-log-line-prefix"><varname>log_line_prefix</></link>
       (Guillaume Smet)
      </para>

      <para>
       This allows users to compile statistics on errors and messages
       by error code number.
      </para>

     </listitem>

     <listitem>
      <para>
       Write to the Windows event log in <acronym>UTF16</> encoding
       (Itagaki Takahiro)
      </para>

      <para>
       Now there is true multilingual support for PostgreSQL log messages
       on Windows.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Statistics Counters</title>

    <itemizedlist>

     <listitem>
      <para>
       Add <link
       linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared('bgwriter')</></link>
       to reset the cluster-wide shared statistics for the
       background writer (Greg Smith)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</></link>
       and <function>pg_stat_reset_single_function_counters()</>
       to allow resetting the statistics counters for individual
       tables and functions (Magnus Hagander)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Server Settings</title>

    <itemizedlist>

     <listitem>
      <para>
       Allow setting of configuration parameters based on <link
       linkend="sql-alterrole">database/role combinations</link>
       (Alvaro Herrera)
      </para>

      <para>
       Previously only per-database and per-role settings were possible,
       not combinations. All role and database settings are now stored
       in the new <structname>pg_db_role_setting</> system catalog. A new
       <application>psql</> command <literal>\drds</> shows these settings.
       The legacy system views <structname>pg_roles</>,
       <structname>pg_shadow</>, and <structname>pg_user</>
       do not show combination settings, and therefore no longer
       completely represent the configuration for a user or database.
      </para>
     </listitem>

     <listitem>
      <para>
       Add server parameter <link
       linkend="guc-bonjour"><varname>bonjour</></link>, which
       controls whether a Bonjour-enabled server advertises
       itself via <productname>Bonjour</> (Tom Lane)
      </para>

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

     <listitem>
      <para>
       Add server parameter <link
       linkend="guc-enable-material"><varname>enable_material</></link>, which
       controls the use of materialize nodes in the optimizer
       (Robert Haas)
      </para>

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

     <listitem>
      <para>
       Change server parameter <link
       linkend="guc-log-temp-files"><varname>log_temp_files</></link> to
       use default file size units of kilobytes (Robert Haas)
      </para>

      <para>
       Previously this setting was interpreted in bytes if no units were
       specified.
      </para>
     </listitem>

     <listitem>
      <para>
       Log changes of parameter values when <filename>postgresql.conf</> is
       reloaded (Peter Eisentraut)
      </para>

      <para>
       This lets administrators and security staff audit changes of database
       settings, and is also very convenient for checking the effects of
       <filename>postgresql.conf</> edits.
      </para>
     </listitem>

     <listitem>
      <para>
       Properly enforce superuser permissions for custom server parameters
       (Tom Lane)
      </para>

      <para>
       Non-superusers can no longer issue <command>ALTER
       ROLE</>/<command>DATABASE SET</> for parameters that are not currently
       known to the server.  This allows the server to correctly check that
       superuser-only parameters are only set by superusers.  Previously,
       the <literal>SET</> would be allowed and then ignored at session start,
       making superuser-only custom parameters much less useful than they
       should be.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Queries</title>

   <itemizedlist>

    <listitem>
     <para>
      Perform <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT
      FOR UPDATE</>/<literal>SHARE</></link> processing after
      applying <literal>LIMIT</>, so the number of rows returned
      is always predictable (Tom Lane)
     </para>

     <para>
      Previously, changes made by concurrent transactions could cause a
      <command>SELECT FOR UPDATE</> to unexpectedly return fewer rows than
      specified by its <literal>LIMIT</>. <literal>FOR UPDATE</> in combination
      with <literal>ORDER BY</> can still produce surprising results, but that
      can be corrected by placing <literal>FOR UPDATE</> in a subquery.
     </para>
    </listitem>

    <listitem>
     <para>
      Allow mixing of traditional and SQL-standard <link
      linkend="SQL-LIMIT"><literal>LIMIT</>/<literal>OFFSET</></link>
      syntax (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Extend the supported frame options in <link
      linkend="SQL-WINDOW">window functions</link> (Hitoshi
      Harada)
     </para>

     <para>
      Frames can now start with <literal>CURRENT ROW</>, and the <literal>ROWS
      <replaceable>n</> PRECEDING</>/<literal>FOLLOWING</> options are now
      supported.
     </para>
    </listitem>

    <listitem>
     <para>
      Make <command>SELECT INTO</> and <command>CREATE TABLE AS</> return
      row counts to the client in their command tags
      (Boszormenyi Zoltan)
     </para>

     <para>
      This can save an entire round-trip to the client, allowing result counts
      and pagination to be calculated without an additional
      <command>COUNT</command> query.
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title>Unicode Strings</title>

    <itemizedlist>

     <listitem>
      <para>
       Support Unicode surrogate pairs (dual 16-bit representation) in
       <link
       linkend="sql-syntax-strings-uescape"><literal>U&amp;</></link>
       strings and identifiers (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Support Unicode escapes in <link
       linkend="sql-syntax-strings-escape"><literal>E'...'</></link>
       strings (Marko Kreen)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Object Manipulation</title>

   <itemizedlist>

    <listitem>
     <para>
      Speed up <link linkend="SQL-CREATEDATABASE"><command>CREATE
      DATABASE</></link> by deferring flushes to disk (Andres
      Freund, Greg Stark)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow <link linkend="SQL-COMMENT">comments</link> on
      columns of tables, views, and composite types only, not other
      relation types such as indexes and <acronym>TOAST</> tables (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow the creation of <link
      linkend="SQL-CREATETYPE-enum">enumerated types</link> containing
      no values (Bruce Momjian)
     </para>
    </listitem>

    <listitem>
     <para>
      Let values of columns having storage type <literal>MAIN</> remain on
      the main heap page unless the row cannot fit on a page (Kevin Grittner)
     </para>

     <para>
      Previously <literal>MAIN</> values were forced out to <acronym>TOAST</>
      tables until the row size was less than one-quarter of the page size.
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title><command>ALTER TABLE</></title>

    <itemizedlist>

     <listitem>
      <para>
       Implement <literal>IF EXISTS</> for <literal>ALTER TABLE DROP COLUMN</>
       and <literal>ALTER TABLE DROP CONSTRAINT </> (Andres Freund)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <command>ALTER TABLE</> commands that rewrite tables to skip
       <acronym>WAL</> logging (Itagaki Takahiro)
      </para>

      <para>
       Such operations either produce a new copy of the table or are rolled
       back, so <acronym>WAL</> archiving can be skipped, unless running in
       continuous archiving mode.  This reduces I/O overhead and improves
       performance.
      </para>
     </listitem>

     <listitem>
      <para>
       Fix failure of <literal>ALTER TABLE <replaceable>table</> ADD COLUMN
       <replaceable>col</> serial</literal> when done by non-owner of table
       (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Add support for copying <literal>COMMENTS</> and <literal>STORAGE</>
       settings in <command>CREATE TABLE ... LIKE</> commands
       (Itagaki Takahiro)
      </para>
     </listitem>

     <listitem>
      <para>
       Add a shortcut for copying all properties in <command>CREATE
       TABLE ... LIKE</> commands (Itagaki Takahiro)
      </para>
     </listitem>

     <listitem>
      <para>
       Add the SQL-standard
       <literal>CREATE TABLE ... OF <replaceable>type</></literal> command
       (Peter Eisentraut)
      </para>

      <para>
       This allows creation of a table that matches an existing composite
       type. Additional constraints and defaults can be specified in the
       command.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Constraints</title>

    <itemizedlist>

     <listitem>
      <para>
       Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
       unique constraints</link> (Dean Rasheed)
      </para>

      <para>
       This allows mass updates, such as
       <literal>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 <literal>DEFERRABLE</> it will be
       checked at the end of the statement, rather than after each row is
       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.
      </para>
     </listitem>

     <listitem>
      <para>
       Add
       <link linkend="ddl-constraints-exclusion">exclusion constraints</link>
       (Jeff Davis)
      </para>

      <para>
       Exclusion constraints generalize uniqueness constraints by allowing
       arbitrary comparison operators, not just equality.  They are created
       with the <link linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
       TABLE CONSTRAINT ... EXCLUDE</></link> 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.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve uniqueness-constraint violation error messages to
       report the values causing the failure (Itagaki Takahiro)
      </para>

      <para>
       For example, a uniqueness constraint violation might now report
       <literal>Key (x)=(2) already exists</>.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Object Permissions</title>

    <itemizedlist>

     <listitem>
      <para>
       Add the ability to make mass permission changes across a whole
       schema using the new <link
       linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
       IN SCHEMA</></link> clause (Petr Jelinek)
      </para>

      <para>
       This simplifies management of object permissions
       and makes it easier to utilize database roles for application
       data security.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
       DEFAULT PRIVILEGES</></link> command to control privileges
       of objects created later (Petr Jelinek)
      </para>

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

     <listitem>
      <para>
       Add the ability to control large object (BLOB) permissions with
       <command>GRANT</>/<command>REVOKE</> (KaiGai Kohei)
      </para>

      <para>
       Formerly, any database user could read or modify any large object.
       Read and write permissions can now be granted and revoked per
       large object, and the ownership of large objects is tracked.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Utility Operations</title>

   <itemizedlist>

    <listitem>
     <para>
      Make <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> store pending events
      in a memory queue, rather than in a system table (Joachim
      Wieland)
     </para>

     <para>
      This substantially improves performance, while retaining the existing
      features of transactional support and guaranteed delivery.
     </para>
    </listitem>

    <listitem>
     <para>
      Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
      to pass an optional <quote>payload</> string to listeners
      (Joachim Wieland)
     </para>

     <para>
      This greatly improves the usefulness of
      <command>LISTEN</>/<command>NOTIFY</> as a
      general-purpose event queue system.
     </para>
    </listitem>

    <listitem>
     <para>
      Allow <link linkend="SQL-CLUSTER"><command>CLUSTER</></link>
      on all per-database system catalogs (Tom Lane)
     </para>

     <para>
      Shared catalogs still cannot be clustered.
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title><link linkend="SQL-COPY"><command>COPY</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Accept <literal>COPY ... CSV FORCE QUOTE *</>
       (Itagaki Takahiro)
      </para>

      <para>
       Now <literal>*</> can be used as shorthand for <quote>all columns</>
       in the <literal>FORCE QUOTE</> clause.
      </para>
     </listitem>

     <listitem>
      <para>
       Add new <command>COPY</> syntax that allows options to be
       specified inside parentheses (Robert Haas, Emmanuel Cecchet)
      </para>

      <para>
       This allows greater flexibility for future <command>COPY</> options.
       The old syntax is still supported, but only for pre-existing options.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Allow <command>EXPLAIN</> to output in <acronym>XML</>,
       <acronym>JSON</>, or <acronym>YAML</> format (Robert Haas, Greg
       Sabino Mullane)
      </para>

      <para>
       The new output formats are easily machine-readable, supporting the
       development of new tools for analysis of <command>EXPLAIN</> output.
      </para>
     </listitem>

     <listitem>
      <para>
       Add new <literal>BUFFERS</> option to report query
       buffer usage during <command>EXPLAIN ANALYZE</> (Itagaki Takahiro)
      </para>

      <para>
       This allows better query profiling for individual queries.
       Buffer usage is no longer reported in the output for <link
       linkend="runtime-config-statistics-monitor">log_statement_stats</link>
       and related settings.
      </para>
     </listitem>

     <listitem>
      <para>
       Add hash usage information to <command>EXPLAIN</> output (Robert
       Haas)
      </para>
     </listitem>

     <listitem>
      <para>
       Add new <command>EXPLAIN</> syntax that allows options to be
       specified inside parentheses (Robert Haas)
      </para>

      <para>
       This allows greater flexibility for future <command>EXPLAIN</> options.
       The old syntax is still supported, but only for pre-existing options.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="SQL-VACUUM"><command>VACUUM</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Change <command>VACUUM FULL</> to rewrite the entire table and
       rebuild its indexes, rather than moving individual rows around to
       compact space (Itagaki Takahiro, Tom Lane)
      </para>

      <para>
       The previous method was usually slower and caused index bloat.
       Note that the new method will use more disk space transiently
       during <command>VACUUM FULL</>; potentially as much as twice
       the space normally occupied by the table and its indexes.
      </para>

     </listitem>

     <listitem>
      <para>
       Add new <command>VACUUM</> syntax that allows options to be
       specified inside parentheses (Itagaki Takahiro)
      </para>

      <para>
       This allows greater flexibility for future <command>VACUUM</> options.
       The old syntax is still supported, but only for pre-existing options.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Indexes</title>

    <itemizedlist>

     <listitem>
      <para>
       Allow an index to be named automatically by omitting the index name in
       <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link>
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       By default, multicolumn indexes are now named after all their columns;
       and index expression columns are now named based on their expressions
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Reindexing shared system catalogs is now fully transactional
       and crash-safe (Tom Lane)
      </para>

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

     <listitem>
      <para>
       Add <literal>point_ops</> operator class for <acronym>GiST</>
      (Teodor Sigaev)
      </para>

      <para>
       This feature permits <acronym>GiST</> indexing of <type>point</>
       columns.  The index can be used for several types of queries
       such as <replaceable>point</> <literal>&lt;@@</> <replaceable>polygon</>
       (point is in polygon).  This should make many
       <productname>PostGIS</> queries faster.
      </para>
     </listitem>

     <listitem>
      <para>
       Use red-black binary trees for <acronym>GIN</> index creation
       (Teodor Sigaev)
      </para>

      <para>
       Red-black trees are self-balancing.  This avoids slowdowns in
       cases where the input is in nonrandom order.
      </para>

     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Data Types</title>

   <itemizedlist>

    <listitem>
     <para>
      Allow <link linkend="datatype-binary"><type>bytea</></link> values
      to be written in hex notation (Peter Eisentraut)
     </para>

     <para>
      The server parameter <link
      linkend="guc-bytea-output"><varname>bytea_output</></link> controls
      whether hex or traditional format is used for <type>bytea</>
      output.  Libpq's <function>PQescapeByteaConn()</> function automatically
      uses the hex format when connected to <productname>PostgreSQL</> 9.0
      or newer servers.
     </para>

     <para>
      The new hex format will be directly compatible with more applications
      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.
     </para>
    </listitem>

    <listitem>
     <para>
      Allow server parameter <link
      linkend="guc-extra-float-digits">extra_float_digits</link>
      to be increased to <literal>3</> (Tom Lane)
     </para>

     <para>
      The previous maximum <varname>extra_float_digits</> setting was
      <literal>2</>.  There are cases where 3 digits are needed to dump and
      restore <type>float4</> values exactly.  <application>pg_dump</> will
      now use the setting of 3 when dumping from a server that allows it.
     </para>
    </listitem>

    <listitem>
     <para>
      Tighten input checking for <type>int2vector</> values (Caleb
      Welton)
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title><link linkend="textsearch">Full Text Search</link></title>

    <itemizedlist>

     <listitem>
      <para>
       Add prefix support in <literal>synonym</> dictionaries
       (Teodor Sigaev)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <firstterm>filtering</> dictionaries (Teodor Sigaev)
      </para>

      <para>
       Filtering dictionaries allow tokens to be modified then passed to
       subsequent dictionaries.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow underscores in email-address tokens (Teodor Sigaev)
      </para>
     </listitem>

     <listitem>
      <para>
       Use more standards-compliant rules for parsing <acronym>URL</> tokens
       (Tom Lane)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Functions</title>

   <itemizedlist>

    <listitem>
     <para>
      Allow function calls to supply parameter names and match them to named
      parameters in the function definition (Pavel Stehule)
     </para>

     <para>
      For example, if a function is defined to take parameters <literal>a</>
      and <literal>b</>, it can be called with <literal>func(a := 7, b
      := 12)</> or <literal>func(b := 12, a := 7)</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Support locale-specific <link
      linkend="functions-posix-regexp">regular expression</link>
      processing with <acronym>UTF-8</> server encoding (Tom Lane)
     </para>

     <para>
      Locale-specific regular expression functionality includes
      case-insensitive matching and locale-specific character classes.
      Previously, these features worked correctly for non-<acronym>ASCII</>
      characters only if the database used a single-byte server encoding (such
      as LATIN1).  They will still misbehave in multi-byte encodings other
      than <acronym>UTF-8</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Add support for scientific notation in <link
      linkend="functions-formatting"><function>to_char()</></link>
      (<link linkend="functions-formatting-numeric-table"><literal>EEEE</>
      specification</link>)
      (Pavel Stehule, Brendan Jurd)
     </para>
    </listitem>

    <listitem>
     <para>
      Make <function>to_char()</> honor <link
      linkend="functions-formatting-datetimemod-table"><literal>FM</></link>
      (fill mode) in <literal>Y</>, <literal>YY</>, and
      <literal>YYY</> specifications (Bruce Momjian, Tom Lane)
     </para>

     <para>
      It was already honored by <literal>YYYY</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Fix <function>to_char()</> to output localized numeric and monetary
      strings in the correct encoding on <productname>Windows</>
      (Hiroshi Inoue, Itagaki Takahiro, Bruce Momjian)
     </para>
    </listitem>

    <listitem>
     <para>
      Correct calculations of <link
      linkend="functions-geometry-op-table"><quote>overlaps</quote></link>
      and <quote>contains</quote> operations for polygons (Teodor Sigaev)
     </para>

     <para>
      The polygon <literal>&amp;&amp;</> (overlaps) operator formerly just
      checked to see if the two polygons' bounding boxes overlapped.  It now
      does a more correct check.  The polygon <literal>@@&gt;</> and
      <literal>&lt;@@</> (contains/contained by) operators formerly checked
      to see if one polygon's vertexes were all contained in the other;
      this can wrongly report <quote>true</> for some non-convex polygons.
      Now they check that all line segments of one polygon are contained in
      the other.
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title>Aggregates</title>

    <itemizedlist>

     <listitem>
      <para>
       Allow aggregate functions to use <link
       linkend="syntax-aggregates"><literal>ORDER BY</></link> (Andrew Gierth)
      </para>

      <para>
       For example, this is now supported: <literal>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.
      </para>
     </listitem>

     <listitem>
      <para>
       Multi-argument aggregate functions can now use <literal>DISTINCT</>
       (Andrew Gierth)
      </para>
     </listitem>

     <listitem>
      <para>
       Add the <link
       linkend="functions-aggregate-table"><function>string_agg()</></link>
       aggregate function to combine values into a single
       string (Pavel Stehule)
      </para>
     </listitem>

     <listitem>
      <para>
       Aggregate functions that are called with <literal>DISTINCT</> are
       now passed NULL values if the aggregate transition function is
       not marked as <literal>STRICT</> (Andrew Gierth)
      </para>

      <para>
       For example, <literal>agg(DISTINCT x)</> might pass a NULL <literal>x</>
       value to <function>agg()</>.  This is more consistent with the behavior
       in non-<literal>DISTINCT</> cases.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Bit Strings</title>

    <itemizedlist>

     <listitem>
      <para>
       Add <link
       linkend="functions-binarystring-other"><function>get_bit()</></link>
       and <function>set_bit()</> functions for <type>bit</>
       strings, mirroring those for <type>bytea</> (Leonardo
       F)
      </para>
     </listitem>

     <listitem>
      <para>
       Implement <link
       linkend="functions-string-sql"><function>OVERLAY()</></link>
       (replace) for <type>bit</> strings and <type>bytea</>
       (Leonardo F)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Object Information Functions</title>

    <itemizedlist>

     <listitem>
      <para>
       Add <link
       linkend="functions-admin-dbsize"><function>pg_table_size()</></link>
       and <function>pg_indexes_size()</> to provide a more
       user-friendly interface to the <function>pg_relation_size()</>
       function (Bernd Helmle)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="functions-info-access-table"><function>has_sequence_privilege()</></link>
       for sequence permission checking (Abhijit Menon-Sen)
      </para>
     </listitem>

     <listitem>
      <para>
       Update the <link linkend="information-schema">information_schema</link>
       views to conform to SQL:2008
       (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Make the <literal>information_schema</> views correctly display maximum
       octet lengths for <type>char</> and <type>varchar</> columns (Peter
       Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Speed up <literal>information_schema</> privilege views
       (Joachim Wieland)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Function and Trigger Creation</title>

    <itemizedlist>

     <listitem>
      <para>
       Support execution of anonymous code blocks using the <link
       linkend="SQL-DO"><command>DO</></link> statement
       (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
      </para>

      <para>
       This allows execution of server-side code without the need to create
       and delete a temporary function definition.  Code can be executed in
       any language for which the user has permissions to define a function.
      </para>
     </listitem>

     <listitem>
      <para>
       Implement SQL-standard-compliant <link
       linkend="SQL-CREATETRIGGER">per-column triggers</link>
       (Itagaki Takahiro)
      </para>

      <para>
       Such triggers are fired only when the specified column(s) are affected
       by the query, e.g. appear in an <command>UPDATE</>'s <literal>SET</>
       list.
      </para>
     </listitem>

     <listitem>
      <para>
       Add the <literal>WHEN</> clause to <link
       linkend="SQL-CREATETRIGGER"><command>CREATE TRIGGER</></link>
       to allow control over whether a trigger is fired (Itagaki
       Takahiro)
      </para>

      <para>
       While the same type of check can always be performed inside the
       trigger, doing it in an external <literal>WHEN</> clause can have
       performance benefits.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Server-Side Languages</title>

   <itemizedlist>

    <listitem>
     <para>
      Add the <literal>OR REPLACE</> clause to <link
      linkend="SQL-CREATELANGUAGE"><command>CREATE LANGUAGE</></link>
      (Tom Lane)
     </para>

     <para>
      This is helpful to optionally install a language if it does not
      already exist, and is particularly helpful now that PL/pgSQL is
      installed by default.
     </para>
    </listitem>

    </itemizedlist>

    <sect4>
    <title><link linkend="plpgsql">PL/PgSQL</link> Server-Side
    Language</title>

    <itemizedlist>

     <listitem>
      <para>
       Install PL/pgSQL by default (Bruce Momjian)
      </para>

      <para>
       The language can still be removed from a particular database if the
       administrator has security or performance concerns about making it
       available.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve handling of cases where PL/pgSQL variable names conflict with
       identifiers used in queries within a function
       (Tom Lane)
      </para>

      <para>
       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 <link
       linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>
       or the per-function option <literal>#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.
      </para>
     </listitem>

     <listitem>
      <para>
       Make PL/pgSQL use the main lexer, rather than its own version
       (Tom Lane)
      </para>

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

     <listitem>
      <para>
       Avoid throwing an unnecessary error for an invalid record reference
       (Tom Lane)
      </para>

      <para>
       An error is now thrown only if the reference is actually fetched,
       rather than whenever the enclosing expression is reached.  For
       example, many people have tried to do this in triggers:
<programlisting>
if TG_OP = 'INSERT' and NEW.col1 = ... then
</programlisting>
       This will now actually work as expected.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve PL/pgSQL's ability to handle row types with dropped columns
       (Pavel Stehule)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow input parameters to be assigned values within
       PL/pgSQL functions (Steve Prentice)
      </para>

      <para>
       Formerly, input parameters were treated as being declared
       <literal>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.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve error location reporting in PL/pgSQL (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <replaceable>count</> and <literal>ALL</> options to <command>MOVE
       FORWARD</>/<literal>BACKWARD</> in PL/pgSQL (Pavel Stehule)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow PL/pgSQL's <literal>WHERE CURRENT OF</> to use a cursor
       variable (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow PL/pgSQL's <command>OPEN <replaceable>cursor</> FOR EXECUTE</> to
       use parameters (Pavel Stehule, Itagaki Takahiro)
      </para>

      <para>
       This is accomplished with a new <literal>USING</> clause.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="plperl">PL/Perl</link> Server-Side Language</title>

    <itemizedlist>

     <listitem>
      <para>
       Add new PL/Perl functions: <link
       linkend="plperl-utility-functions"><function>quote_literal()</></link>,
       <function>quote_nullable()</>, <function>quote_ident()</>,
       <function>encode_bytea()</>, <function>decode_bytea()</>,
       <function>looks_like_number()</>,
       <function>encode_array_literal()</>,
       <function>encode_array_constructor()</> (Tim Bunce)
      </para>
     </listitem>

     <listitem>
      <para>
       Add server parameter <link
       linkend="guc-plperl-on-init"><varname>plperl.on_init</></link> to
       specify a PL/Perl initialization function (Tim
       Bunce)
      </para>

      <para>
       <link
       linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperl_init</></link>
       and <link
       linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperlu_init</></link>
       are also available for initialization that is specific to the trusted
       or untrusted language respectively.
      </para>
     </listitem>

     <listitem>
      <para>
       Support <command>END</> blocks in PL/Perl (Tim Bunce)
      </para>

      <para>
       <command>END</> blocks do not currently allow database access.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <command>use strict</> in PL/Perl (Tim Bunce)
      </para>

      <para>
       Perl <literal>strict</> checks can also be globally enabled with the
       new server parameter <link
       linkend="guc-plperl-use-strict"><varname>plperl.use_strict</></link>.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <command>require</> in PL/Perl (Tim Bunce)
      </para>

      <para>
       This basically tests to see if the module is loaded, and if not,
       generates an error.  It will not allow loading of modules that
       the administrator has not preloaded via the initialization parameters.
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <command>use feature</> in PL/Perl if Perl version 5.10 or
       later is used (Tim Bunce)
      </para>
     </listitem>

     <listitem>
      <para>
       Verify that PL/Perl return values are valid in the server encoding
       (Andrew Dunstan)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="plpython">PL/Python</link> Server-Side Language</title>

    <itemizedlist>

     <listitem>
      <para>
       Add Unicode support in PL/Python (Peter Eisentraut)
      </para>

      <para>
       Strings are automatically converted from/to the server encoding as
       necessary.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve <type>bytea</> support in PL/Python (Caleb Welton)
      </para>

      <para>
       <type>Bytea</> values passed into PL/Python are now represented as
       binary, rather than the PostgreSQL <type>bytea</> text format.
       <type>Bytea</> values containing null bytes are now also output
       properly from PL/Python.  Passing of boolean, integer, and float
       values was also improved.
      </para>
     </listitem>

     <listitem>
      <para>
       Support <link linkend="plpython-arrays">arrays</link> as parameters and
       return values in PL/Python (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve mapping of SQL domains to Python types (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <application>Python</> 3 support to PL/Python (Peter Eisentraut)
      </para>

      <para>
       The new server-side language is called <link
       linkend="plpython-python23"><literal>plpython3u</></link>.  This
       cannot be used in the same session with the
       <application>Python</> 2 server-side language.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve error location and exception reporting in PL/Python (Peter Eisentraut)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Client Applications</title>

   <itemizedlist>

    <listitem>
    <para>
     Add an <option>--analyze-only</> option to <link
     linkend="APP-VACUUMDB"><command>vacuumdb</></link>, to analyze without
     vacuuming (Bruce Momjian)
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title><link linkend="APP-PSQL"><application>psql</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Add support for quoting/escaping the values of <application>psql</>
       <link linkend="APP-PSQL-variables">variables</link> as SQL strings or
       identifiers (Pavel Stehule, Robert Haas)
      </para>

      <para>
       For example, <literal>:'var'</> will produce the value of
       <literal>var</> quoted and properly escaped as a literal string, while
       <literal>:"var"</> will produce its value quoted and escaped as an
       identifier.
      </para>
     </listitem>

     <listitem>
      <para>
       Ignore a leading UTF-8-encoded Unicode byte-order marker in
       script files read by <application>psql</> (Itagaki Takahiro)
      </para>

      <para>
       This is enabled when the client encoding is <acronym>UTF-8</>.
       It improves compatibility with certain editors, mostly on Windows,
       that insist on inserting such markers.
      </para>
     </listitem>

     <listitem>
      <para>
       Fix <command>psql --file -</> to properly honor <link
       linkend="R1-APP-PSQL-3"><option>--single-transaction</></link>
       (Bruce Momjian)
      </para>
     </listitem>

     <listitem>
      <para>
       Avoid overwriting of <application>psql</>'s command-line history when
       two <application>psql</> sessions are run concurrently (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Improve <application>psql</>'s tab completion support (Itagaki
       Takahiro)
      </para>
     </listitem>

     <listitem>
      <para>
       Show <literal>\timing</> output when it is enabled, regardless of
       <quote>quiet</> mode (Peter Eisentraut)
      </para>
     </listitem>

    </itemizedlist>

    <sect5>
    <title><application>psql</> Display</title>

     <itemizedlist>

      <listitem>
       <para>
        Improve display of wrapped columns in <application>psql</> (Roger
        Leigh)
       </para>

       <para>
        This behavior is now the default.
        The previous formatting is available by using <command>\pset linestyle
        old-ascii</>.
       </para>
      </listitem>

      <listitem>
       <para>
        Allow <application>psql</> to use fancy Unicode line-drawing
        characters via <command>\pset linestyle unicode</> (Roger Leigh)
       </para>
      </listitem>

     </itemizedlist>

    </sect5>

    <sect5>
     <title><application>psql</> <link
     linkend="APP-PSQL-meta-commands"><command>\d</></link>
     Commands</title>

     <itemizedlist>

      <listitem>
       <para>
        Make <command>\d</> show child tables that inherit from the specified
        parent (Damien Clochard)
       </para>

       <para>
        <command>\d</> shows only the number of child tables, while
        <command>\d+</> shows the names of all child tables.
       </para>
      </listitem>

      <listitem>
       <para>
        Show definitions of index columns in <command>\d index_name</>
        (Khee Chin)
       </para>

       <para>
        The definition is useful for expression indexes.
       </para>
      </listitem>

      <listitem>
       <para>
        Show a view's defining query only in
        <command>\d+</>, not in <command>\d</> (Peter Eisentraut)
       </para>

       <para>
        Always including the query was deemed overly verbose.
       </para>
      </listitem>

     </itemizedlist>

    </sect5>
   </sect4>

   <sect4>
    <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Make <application>pg_dump</>/<application>pg_restore</>
       <link linkend="pg-dump-options"><option>--clean</></link>
       also remove large objects (Itagaki Takahiro)
      </para>
     </listitem>

     <listitem>
      <para>
       Fix <application>pg_dump</> to properly dump large objects when
       <literal>standard_conforming_strings</> is enabled (Tom Lane)
      </para>

      <para>
       The previous coding could fail when dumping to an archive file
       and then generating script output from <application>pg_restore</>.
      </para>
     </listitem>

     <listitem>
      <para>
       <application>pg_restore</> now emits large-object data in hex format
       when generating script output (Tom Lane)
      </para>

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

     <listitem>
      <para>
       Allow <application>pg_dump</> to dump comments attached to columns
       of composite types (Taro Minowa (Higepon))
      </para>
     </listitem>

     <listitem>
      <para>
       Make <application>pg_dump</> <link
       linkend="pg-dump-options"><option>--verbose</></link>
       output the <application>pg_dump</> and server versions
       in text output mode (Jim Cox, Tom Lane)
      </para>

      <para>
       These were already provided in custom output mode.
      </para>
     </listitem>

     <listitem>
      <para>
       <application>pg_restore</> now complains if any command-line arguments
       remain after the switches and optional file name (Tom Lane)
      </para>

      <para>
       Previously, it silently ignored any such arguments.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link
    linkend="app-pg-ctl"><application>pg_ctl</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Allow <application>pg_ctl</> to be used safely to start the
       <application>postmaster</> during a system reboot (Tom Lane)
      </para>

      <para>
       Previously, <application>pg_ctl</>'s parent process could have been
       mistakenly identified as a running <application>postmaster</> based on
       a stale <application>postmaster</> lock file, resulting in a transient
       failure to start the database.
      </para>
     </listitem>

     <listitem>
      <para>
       Give <application>pg_ctl</> the ability to initialize the database
       (by invoking <application>initdb</>) (Zdenek Kotala)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title><application>Development Tools</></title>

   <sect4>
    <title><link linkend="libpq"><application>libpq</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Add new <application>libpq</> functions
       <link
       linkend="libpq-connect"><function>PQconnectdbParams()</></link>
       and <function>PQconnectStartParams()</> (Guillaume
       Lelarge)
      </para>

      <para>
       These functions are similar to <function>PQconnectdb()</> and
       <function>PQconnectStart()</> except that they accept a null-terminated
       array of connection options, rather than requiring all options to
       be provided in a single string.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <application>libpq</> functions <link
       linkend="libpq-exec-escape-string"><function>PQescapeLiteral()</></link>
       and <function>PQescapeIdentifier()</> (Robert Haas)
      </para>

      <para>
       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 <function>PQescapeStringConn()</>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for a per-user service file (<link
       linkend="libpq-pgservice"><filename>.pg_service.conf</></link>),
       which is checked before the site-wide service file
       (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Properly report an error if the specified <application>libpq</> service
       cannot be found (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link linkend="libpq-keepalives">TCP keepalive settings</link>
       in libpq (Tollef Fog Heen, Fujii Masao, Robert Haas)
      </para>

      <para>
       Keepalive settings were already supported on the server end of
       TCP connections.
      </para>
     </listitem>

     <listitem>
      <para>
       Avoid extra system calls to block and unblock <literal>SIGPIPE</>
       in <application>libpq</>, on platforms that offer alternative methods
       (Jeremy Kerr)
      </para>
     </listitem>

     <listitem>
      <para>
       When a <link linkend="libpq-pgpass"><filename>.pgpass</></link>-supplied
       password fails, mention where the password came from in the error
       message (Bruce Momjian)
      </para>
     </listitem>

     <listitem>
      <para>
       Load all SSL certificates given in the client certificate file
       (Tom Lane)
      </para>

      <para>
       This improves support for indirectly-signed SSL certificates.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="ecpg"><application>ecpg</></link></title>

    <itemizedlist>

     <listitem>
      <para>
       Add <link linkend="ecpg-descriptors"><acronym>SQLDA</></link>
       (SQL Descriptor Area) support to <application>ecpg</>
       (Boszormenyi Zoltan)
      </para>
     </listitem>

     <listitem>
      <para>
       Add the <link linkend="ecpg-descriptors"><command>DESCRIBE</>
       [ <literal>OUTPUT</> ]</link> statement to <application>ecpg</>
       (Boszormenyi Zoltan)
      </para>
     </listitem>

     <listitem>
      <para>
       Add an <link linkend="ecpg-library">ECPGtransactionStatus</link>
       function to return the current transaction status (Bernd Helmle)
      </para>
     </listitem>

     <listitem>
      <para>
       Add the <literal>string</> data type in <application>ecpg</>
       Informix-compatibility mode (Boszormenyi Zoltan)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <application>ecpg</> to use <literal>new</> and <literal>old</>
       variable names without restriction (Michael Meskes)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow <application>ecpg</> to use variable names in
       <function>free()</> (Michael Meskes)
      </para>
     </listitem>

     <listitem>
      <para>
       Make <function>ecpg_dynamic_type()</> return zero for non-SQL3 data
       types (Michael Meskes)
      </para>

      <para>
       Previously it returned the negative of the data type OID.
       This could be confused with valid type OIDs, however.
      </para>
     </listitem>

     <listitem>
      <para>
       Support <type>long long</> types on platforms that already have 64-bit
       <type>long</> (Michael Meskes)
      </para>
     </listitem>

     </itemizedlist>

     <sect5>
      <title><application>ecpg</> Cursors</title>

      <itemizedlist>

      <listitem>
       <para>
        Add out-of-scope cursor support in <application>ecpg</>'s native mode
        (Boszormenyi Zoltan)
       </para>

       <para>
        This allows <command>DECLARE</> to use variables that are not in
        scope when <command>OPEN</> is called. This facility already existed
        in <application>ecpg</>'s Informix-compatibility mode.
       </para>
      </listitem>

      <listitem>
       <para>
        Allow dynamic cursor names in <application>ecpg</> (Boszormenyi Zoltan)
       </para>
      </listitem>

      <listitem>
       <para>
        Allow <application>ecpg</> to use noise words <literal>FROM</> and
        <literal>IN</> in <command>FETCH</> and <command>MOVE</> (Boszormenyi
        Zoltan)
       </para>
      </listitem>

     </itemizedlist>

    </sect5>

   </sect4>

  </sect3>

  <sect3>
   <title>Build Options</title>

   <itemizedlist>

    <listitem>
     <para>
      Enable client thread safety by default (Bruce Momjian)
     </para>

     <para>
      The thread-safety option can be disabled with <link
      linkend="configure"><literal>configure</></link>
      <option>--disable-thread-safety</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Add support for controlling the Linux out-of-memory killer
      (Alex Hunsaker, Tom Lane)
     </para>

     <para>
      Now that <filename>/proc/self/oom_adj</> allows disabling
      of the <productname>Linux</> out-of-memory (<acronym>OOM</>)
      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 <link
      linkend="linux-memory-overcommit"><literal>LINUX_OOM_ADJ</></link>
      allows the killer to be reactivated for child processes.
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title>Makefiles</title>

    <itemizedlist>

     <listitem>
      <para>
       New <filename>Makefile</> targets <link
       linkend="build"><literal>world</></link>,
       <literal>install-world</>, and <literal>installcheck-world</>
       (Andrew Dunstan)
      </para>

      <para>
       These are similar to the existing <literal>all</>, <literal>install</>,
       and <literal>installcheck</> targets, but they also build the
       <acronym>HTML</> documentation, build and test <filename>contrib</>,
       and test server-side languages and <application>ecpg</>.
      </para>
     </listitem>

     <listitem>
      <para>
       Add data and documentation installation location control to <link
       linkend="xfunc-c-pgxs"><acronym>PGXS</></link> Makefiles
       (Mark Cave-Ayland)
      </para>
     </listitem>

    <listitem>
     <para>
      Add Makefile rules to build the <productname>PostgreSQL</> documentation
      as a single <acronym>HTML</> file or as a single plain-text file
      (Peter Eisentraut, Bruce Momjian)
     </para>
    </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Windows</title>

    <itemizedlist>

     <listitem>
      <para>
       Support compiling on <link
       linkend="install-win32">64-bit
       <productname>Windows</></link> and running in 64-bit
       mode (Tsutomu Yamada, Magnus Hagander)
      </para>

      <para>
       This allows for large shared memory sizes on <productname>Windows</>.
      </para>
     </listitem>

     <listitem>
      <para>
       Support server builds using <link
       linkend="install-win32-full"><productname>Visual Studio
       2008</></link> (Magnus Hagander)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Source Code</title>

   <itemizedlist>

    <listitem>
     <para>
      Distribute prebuilt documentation in a subdirectory tree, rather than
      as tar archive files inside the distribution tarball
      (Peter Eisentraut)
     </para>

     <para>
      For example, the prebuilt <acronym>HTML</> documentation is now in
      <filename>doc/src/sgml/html/</>; the manual pages are packaged
      similarly.
     </para>
    </listitem>

    <listitem>
     <para>
      Make the server's lexer reentrant (Tom Lane)
     </para>

     <para>
      This was needed for use of the lexer by PL/pgSQL.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve speed of memory allocation (Tom Lane, Greg Stark)
     </para>
    </listitem>

    <listitem>
     <para>
      User-defined constraint triggers now have entries in
      <structname>pg_constraint</> as well as <structname>pg_trigger</>
      (Tom Lane)
     </para>

     <para>
      Because of this change,
      <structname>pg_constraint</>.<structfield>pgconstrname</> is now
      redundant and has been removed.
     </para>
    </listitem>

    <listitem>
     <para>
      Add system catalog columns
      <structname>pg_constraint</>.<structfield>conindid</> and
      <structname>pg_trigger</>.<structfield>tgconstrindid</>
      to better document the use of indexes for constraint
      enforcement (Tom Lane)
     </para>
    </listitem>

    <listitem>
     <para>
      Allow multiple conditions to be communicated to backends using a single
      operating system signal (Fujii Masao)
     </para>

     <para>
      This allows new features to be added without a platform-specific
      constraint on the number of signal conditions.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve source code test coverage, including <filename>contrib</>, PL/Python,
      and PL/Perl (Peter Eisentraut, Andrew Dunstan)
     </para>
    </listitem>

    <listitem>
     <para>
      Remove the use of flat files for system table bootstrapping
      (Tom Lane, Alvaro Herrera)
     </para>

     <para>
      This improves performance when using many roles or
      databases, and eliminates some possible failure conditions.
     </para>
    </listitem>

    <listitem>
     <para>
      Automatically generate the initial contents of
      <structname>pg_attribute</> for <quote>bootstrapped</> catalogs
      (John Naylor)
     </para>

     <para>
      This greatly simplifies changes to these catalogs.
     </para>
    </listitem>

    <listitem>
     <para>
      Split the processing of
      <command>INSERT</>/<command>UPDATE</>/<command>DELETE</> operations out
      of <filename>execMain.c</> (Marko Tiikkaja)
     </para>

     <para>
      Updates are now executed in a separate ModifyTable node.  This change is
      necessary infrastructure for future improvements.
     </para>
    </listitem>

    <listitem>
     <para>
      Simplify translation of <application>psql</>'s SQL help text
      (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Reduce the lengths of some file names so that all file paths in the
      distribution tarball are less than 100 characters (Tom Lane)
     </para>

     <para>
      Some decompression programs have problems with longer file paths.
     </para>
    </listitem>

    <listitem>
     <para>
      Add a new <link
      linkend="errcodes-table"><literal>ERRCODE_INVALID_PASSWORD</></link>
      <literal>SQLSTATE</> error code (Bruce Momjian)
     </para>
    </listitem>

    <listitem>
     <para>
      With authors' permissions, remove the few remaining personal source code
      copyright notices (Bruce Momjian)
     </para>

     <para>
      The personal copyright notices were insignificant but the community
      occasionally had to answer questions about them.
     </para>
    </listitem>

    <listitem>
     <para>
      Add new documentation <link linkend="non-durability">section</link>
      about running <productname>PostgreSQL</> in non-durable mode
      to improve performance (Bruce Momjian)
     </para>
    </listitem>

    <listitem>
     <para>
      Restructure the <acronym>HTML</> documentation
      <filename>Makefile</> rules to make their dependency checks work
      correctly, avoiding unnecessary rebuilds (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
      building, rather than <productname>Docbook2X</> (Peter Eisentraut)
     </para>

     <para>
      This changes the set of tools needed to build the man pages.
     </para>
    </listitem>

    <listitem>
     <para>
      Improve PL/Perl code structure (Tim Bunce)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve error context reports in PL/Perl (Alexey Klyukin)
     </para>
    </listitem>

   </itemizedlist>

   <sect4>
    <title>New Build Requirements</title>

     <para>
      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.
     </para>

    <itemizedlist>
     <listitem>
      <para>
       Require <application>Autoconf</> 2.63 to build
       <application>configure</> (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Flex</> 2.5.31 or later to build
       from a <acronym>CVS</> checkout (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Perl</> version 5.8 or later to build
       from a <acronym>CVS</> checkout (John Naylor, Andrew Dunstan)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Portability</title>

    <itemizedlist>

     <listitem>
      <para>
       Use a more modern <acronym>API</> for <application>Bonjour</> (Tom Lane)
      </para>

      <para>
       Bonjour support now requires <productname>OS X</> 10.3 or later.
       The older API has been deprecated by Apple.
      </para>
     </listitem>

     <listitem>
      <para>
       Add spinlock support for the <productname>SuperH</>
       architecture (Nobuhiro Iwamatsu)
      </para>
     </listitem>

     <listitem>
      <para>
       Allow non-<application>GCC</> compilers to use inline functions if
       they support them (Kurt Harriman)
      </para>
     </listitem>

     <listitem>
      <para>
       Remove support for platforms that don't have a working 64-bit
       integer data type (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Restructure use of <literal>LDFLAGS</> to be more consistent
       across platforms (Tom Lane)
      </para>

      <para>
       <literal>LDFLAGS</> is now used for linking both executables and shared
       libraries, and we add on <literal>LDFLAGS_EX</> when linking
       executables, or <literal>LDFLAGS_SL</> when linking shared libraries.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Server Programming</title>

    <itemizedlist>

     <listitem>
      <para>
       Make backend header files safe to include in <productname>C++</>
       (Kurt Harriman, Peter Eisentraut)
      </para>

      <para>
       These changes remove keyword conflicts that previously made
       <productname>C++</> usage difficult in backend code.  However, there
       are still other complexities when using <productname>C++</> for backend
       functions. <literal>extern "C" { }</> is still necessary in
       appropriate places, and memory management and error handling are
       still problematic.
      </para>
     </listitem>

     <listitem>
      <para>
       Add <link
       linkend="xaggr"><function>AggCheckCallContext()</></link>
       for use in detecting if a <productname>C</> function is
       being called as an aggregate (Hitoshi Harada)
      </para>
     </listitem>

     <listitem>
      <para>
       Change calling convention for <function>SearchSysCache()</> and related
       functions to avoid hard-wiring the maximum number of cache keys
       (Robert Haas)
      </para>

      <para>
       Existing calls will still work for the moment, but can be expected to
       break in 9.1 or later if not converted to the new style.
      </para>
     </listitem>

     <listitem>
      <para>
       Require calls of <function>fastgetattr()</> and
       <function>heap_getattr()</> backend macros to provide a non-NULL fourth
       argument (Robert Haas)
      </para>
     </listitem>

     <listitem>
      <para>
       Custom typanalyze functions should no longer rely on
       <structname>VacAttrStats</>.<structfield>attr</> to determine the type
       of data they will be passed (Tom Lane)
      </para>

      <para>
       This was changed to allow collection of statistics on index columns
       for which the storage type is different from the underlying column
       data type.  There are new fields that tell the actual datatype being
       analyzed.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Server Hooks</title>

    <itemizedlist>

     <listitem>
      <para>
       Add parser hooks for processing ColumnRef and ParamRef nodes
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Add a ProcessUtility hook so loadable modules can control utility
       commands (Itagaki Takahiro)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Binary Upgrade Support</title>

    <itemizedlist>

    <listitem>
     <para>
      Add <link linkend="pgupgrade"><filename>contrib/pg_upgrade</></link>
      to support in-place upgrades (Bruce Momjian)
     </para>

     <para>
      This avoids the requirement of dumping/reloading the database when
      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.
     </para>
    </listitem>

     <listitem>
      <para>
       Add support for preserving relation <link
       linkend="catalog-pg-class"><structname>relfilenode</></link> values
       during binary upgrades (Bruce Momjian)
      </para>
     </listitem>

     <listitem>
      <para>
       Add support for preserving <structname>pg_type</>
       and <structname>pg_enum</> OIDs during binary upgrades
       (Bruce Momjian)
      </para>
     </listitem>

     <listitem>
      <para>
       Move data files within tablespaces into
       <productname>PostgreSQL</>-version-specific subdirectories
       (Bruce Momjian)
      </para>

      <para>
       This simplifies binary upgrades.
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

  </sect3>

  <sect3>
   <title>Contrib</title>

   <itemizedlist>

    <listitem>
     <para>
      Add multithreading option (<option>-j</>) to <link
      linkend="pgbench"><filename>contrib/pgbench</></link>
      (Itagaki Takahiro)
     </para>

     <para>
      This allows multiple <acronym>CPU</>s to be used by pgbench,
      reducing the risk of pgbench itself becoming the test bottleneck.
     </para>
    </listitem>

    <listitem>
     <para>
      Add <command>\shell</> and <command>\setshell</> meta
      commands to <link
      linkend="pgbench"><filename>contrib/pgbench</></link>
      (Michael Paquier)
     </para>
    </listitem>

    <listitem>
     <para>
      New features for <link
      linkend="dict-xsyn"><filename>contrib/dict_xsyn</></link>
      (Sergey Karpov)
     </para>

     <para>
      The new options are <literal>matchorig</>, <literal>matchsynonyms</>,
      and <literal>keepsynonyms</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Add full text dictionary <link
      linkend="unaccent"><filename>contrib/unaccent</></link>
      (Teodor Sigaev)
     </para>

     <para>
      This filtering dictionary removes accents from letters, which
      makes full-text searches over multiple languages much easier.
     </para>
    </listitem>

    <listitem>
     <para>
      Add <link
      linkend="CONTRIB-DBLINK-GET-NOTIFY"><function>dblink_get_notify()</></link>
      to <filename>contrib/dblink</> (Marcus Kempe)
     </para>

     <para>
      This allows asynchronous notifications in <productname>dblink</>.
     </para>
    </listitem>

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

     <para>
      This affects <link
      linkend="CONTRIB-DBLINK-BUILD-SQL-INSERT"><function>dblink_build_sql_insert()</></link>
      and related functions.  These functions now number columns according
      to logical not physical column numbers.
     </para>
    </listitem>

    <listitem>
     <para>
      Greatly increase <link
      linkend="hstore"><filename>contrib/hstore</></link>'s data
      length limit, and add B-tree and hash support so <literal>GROUP
      BY</> and <literal>DISTINCT</> operations are possible on
      <type>hstore</> columns (Andrew Gierth)
     </para>

     <para>
      New functions and operators were also added.  These improvements
      make <type>hstore</> a full-function key-value store embedded in
      <productname>PostgreSQL</>.
     </para>
    </listitem>

    <listitem>
     <para>
      Add <link
      linkend="passwordcheck"><filename>contrib/passwordcheck</></link>
      to support site-specific password strength policies (Laurenz
      Albe)
     </para>

     <para>
      The source code of this module should be modified to implement
      site-specific password policies.
     </para>
    </listitem>

    <listitem>
     <para>
      Add <link
      linkend="pgarchivecleanup"><filename>contrib/pg_archivecleanup</></link>
      tool (Simon Riggs)
     </para>

     <para>
      This is designed to be used in the
      <literal>archive_cleanup_command</literal>
      server parameter, to remove no-longer-needed archive files.
     </para>
    </listitem>

    <listitem>
     <para>
      Add query text to <link
      linkend="auto-explain"><filename>contrib/auto_explain</></link>
      output (Andrew Dunstan)
     </para>
    </listitem>

    <listitem>
     <para>
      Add buffer access counters to <link
      linkend="pgstatstatements"><filename>contrib/pg_stat_statements</></link>
      (Itagaki Takahiro)
     </para>
    </listitem>

    <listitem>
     <para>
      Update <link
      linkend="server-start"><filename>contrib/start-scripts/linux</></link>
      to use <filename>/proc/self/oom_adj</> to disable the
      <link linkend="linux-memory-overcommit"><productname>Linux</>
      out-of-memory</link> (<acronym>OOM</>) killer (Alex
      Hunsaker, Tom Lane)
     </para>
    </listitem>

   </itemizedlist>

  </sect3>
 </sect2>
</sect1>
@


2.56
log
@Add a compatibility note about plpgsql's treatment of SELECT INTO rec.fld
when fld is of composite type.  Per discussion of bug #5644 from Valentine
Gogichashvili.
@
text
@d1 2
a2 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.55 2010/09/01 15:14:42 tgl Exp $ -->
d9 1
a9 1
   <simpara>2010-??-??</simpara>
a11 2
  <para>CURRENT AS OF 2010-08-24</para>

d49 1
a49 1
      the future.  Large objects (BLOBs) now support privilege management as
d191 3
a193 3
   improvements.  Also, users who make extensive use of PL/pgSQL,
   Point-In-Time Recovery (PITR), and Warm Standby should test their
   solutions because of slight user-visible changes in these areas.
d753 1
a753 1
       Allow setting of distinct statistics using <link
d892 1
a892 1
       tables and indexes (Magnus Hagander)
d915 1
a915 1
       in the new <structname>pg_db_role_setting</> system table. A new
d992 2
a993 1
       making superuser-only custom parameters practically useless.
d1070 1
a1070 1
       Add Unicode surrogate pair (dual 16-bit) support to
d1187 1
a1187 1
       Add support for copying all attributes in <command>CREATE
d1664 2
a1665 3
      Support locale-specific <link
      linkend="functions-posix-regexp">regular expression</link>
      processing with <acronym>UTF-8</> server encoding (Tom Lane)
d1669 3
a1671 6
      Locale-specific regular expression functionality includes
      case-insensitive matching and locale-specific character classes.
      Previously, these features only worked correctly for
      non-<acronym>ASCII</> characters when using a single-byte server
      encoding (such as LATIN1).  They will still misbehave in multi-byte
      encodings other than <acronym>UTF-8</>.
d1677 3
a1679 2
      Allow function calls to supply parameter names and match them to named
      parameters in the function definition (Pavel Stehule)
d1683 6
a1688 3
      For example, if a function is defined to take parameters <literal>a</>
      and <literal>b</>, it can be called with <literal>func(a := 7, b
      := 12)</> or <literal>func(b := 12, a := 7)</>.
d2012 1
a2012 1
if TG_OP = 'INSERT' AND NEW.col1 = ... then
d2238 3
a2240 3
     Add <link linkend="APP-VACUUMDB"><command>vacuumdb</></link>
     <option>--analyze-only</> option to analyze without vacuuming
     (Bruce Momjian)
d2576 2
a2577 1
       Load SSL certificate chains (Tom Lane)
d2605 1
a2605 1
       [<literal>OUTPUT</>]</link> statement to <application>ecpg</>
d2612 2
a2613 3
       Add an <application>ecpg</> function <link
       linkend="ecpg-library">ECPGtransactionStatus</link> to return the
       current transaction status (Bernd Helmle)
d2710 1
a2710 1
      Thread-safe builds can be disabled with <link
d2750 1
a2750 1
       and <literal>installcheck</> targets, but they also build
d2766 2
a2767 2
      Add Makefile rules to build documentation as a single <acronym>HTML</>
      file or as a single plain-text file
d3130 1
a3130 1
       break in 9.1 or later if not converted.
a3174 7
       Allow the calling of parser hooks from <acronym>SPI</> and cached
       plans (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
@


2.55
log
@Improve release notes' description of Teodor's fixes for polygon overlaps
and contains operators.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.54 2010/08/25 19:41:38 momjian Exp $ -->
d439 25
@


2.54
log
@Update release notes, per comments from Simon Riggs.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.53 2010/08/25 00:47:57 tgl Exp $ -->
d1701 13
a1713 2
      linkend="functions-geometry-op-table"><quote>overlap</quote></link>
      and <quote>contains</quote> operations over polygons (Teodor Sigaev)
@


2.53
log
@Update 9.0 release notes for changes since beta4.

Note: as usual, bug fixes that were also applied in back branches are not
considered material to include in a new major release's notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.52 2010/08/24 23:45:32 tgl Exp $ -->
d192 3
a194 2
   improvements.  Particularly, users who make extensive use of PL/pgSQL
   and/or PITR and Warm Standby should test their solutions for breakage.
d221 6
a226 3
      Replace server parameter <varname>archive_mode</> with
      <link linkend="guc-wal-level"><varname>wal_level</></link>
      (Heikki Linnakangas)
@


2.52
log
@Further editing of release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.50 2010/08/23 02:43:25 tgl Exp $ -->
d11 1
a11 1
  <para>CURRENT AS OF 2010-07-29</para>
d279 13
d1131 8
d1712 1
a1712 1
       linkend="syntax-aggregates"><literal>ORDER BY</></> (Andrew Gierth)
d2403 11
d3102 15
@


2.51
log
@Clarifications for 9.0 release notes

Josh Berkus
@
text
@d46 6
a51 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
      IN SCHEMA</></link> supports mass permissions changes, and
      the <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
      DEFAULT PRIVILEGES</></link> command controls privileges
      of all newly-created objects.  Large object permissions now
      support <command>GRANT</>/<command>REVOKE</> as well.
d57 8
a64 4
      Add support for compiling on <link
      linkend="install-win32-full">64-bit
      <productname>Windows</></link> and running in 64-bit
      mode.
d70 2
a71 6
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement permits
      ad-hoc or anonymous code blocks.  Functions can now be called using named
      parameters.  <link linkend="plpgsql">PL/pgSQL</link> is now installed by default,
      and <link linkend="plperl">PL/Perl</link> and <link linkend="plpython">PL/Python</link>
      have been enhanced in several ways, including support for Python3.
d77 3
a79 5
      More advanced reporting queries with additional <link
      linkend="functions-window">window functions</link>
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability
      to <link linkend="syntax-aggregates"><literal>ORDER BY</></link>
      inside aggregate functions.
d85 3
a87 3
      Triggers now support two new features,
      SQL-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link>, and
d102 3
a104 3
      New and enhanced security features, including <link linkend="client-authentication">RADIUS authentication</link>,
      LDAP authentication improvements, and the new <link linkend="passwordcheck">passwordcheck</link> optional module
      for testing password strength.
d110 4
a113 6
      The <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link>
      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.
d119 6
a124 2
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d130 5
a134 3
      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).
d140 3
a142 4
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>
      let database designers define uniqueness based on complex
      criteria, including for non-scalar data such as time periods,
      ranges and arrays.
d148 4
a151 4
      As part of our decade-long effort to eliminate the pain of VACUUM,
      <link linkend="vacuum-for-space-recovery"><command>VACUUM FULL</></link>
      is now substantially faster by rewriting the entire table and
      indexes, rather than moving around single rows to compact space.
d157 2
a158 2
      <link linkend="using-explain"><command>EXPLAIN</command></link>
      plans are now available in JSON, XML and YAML format, and include
d165 2
a166 2
      The <link linkend="hstore">HStore optional module</link> has been improved with new functions and greater
      data capacity to make it a high-performance key-value store.
d220 3
a222 3
      <link linkend="guc-wal-level"><varname>wal_level</></link> should now be
      set to <literal>archive</>, not <literal>on</>, to do continuous
      archiving (Heikki Linnakangas)
a255 12
   <listitem>
    <para>
     Make <function>date_trunc</> truncate rather than round when reducing
     fractional-seconds precision (Tom Lane)
    </para>

    <para>
     The code always acted this way for integer-based dates/times.
     Now float-based dates/times behave similarly.
    </para>
   </listitem>

d308 12
d556 13
d571 2
a572 1
       used in the same transaction as table creation (Tom Lane)
d598 2
a599 2
       Outer joins where the inner side is unique and not referenced in
       the query are unnecessary and are therefore now removed.  This will
d619 8
d660 2
a661 1
       This avoids the rare error <quote>failed to make a valid plan</>.
d850 1
a850 1
       to allow resetting of the statistics counters for individual
d876 4
a879 1
       Backwards-compatible system views do not show combination settings.
a880 1

d915 13
a936 1

d941 2
a942 1
       Add proper permissions for custom server parameters (Tom Lane)
d946 6
a951 5
       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.
a954 13
    <listitem>
     <para>
      Change server parameter <link
      linkend="guc-log-temp-files"><varname>log_temp_files</></link> to
      use default file size units of kilobytes (Robert Haas)
     </para>

     <para>
      Previously this setting was interpreted in bytes if no units were
      specified.
     </para>
    </listitem>

d987 1
a987 1
      syntax in the same query (Tom Lane)
d1093 1
a1093 1
    <title><command>ALTER</></title>
d1099 2
a1100 17
       Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
       DEFAULT PRIVILEGES</></link> command to control privileges
       of objects created later (Petr Jelinek)
      </para>

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

     <listitem>
      <para>
       Implement <literal>IF EXISTS</> for <literal>DROP COLUMN</> and
       <literal>DROP CONSTRAINT </> (Andres Freund)
d1238 1
d1240 13
d1264 1
a1264 1
       large object.
d1314 1
a1314 1
      Global catalogs still cannot be clustered.
d1460 8
d1558 1
a1558 1
      Tighten input requirements for <type>int2vector</> input (Caleb
d1667 3
a1669 3
      Fix <function>to_char()</> to output the proper localized
      numeric and monetary characters on <productname>Windows</>
      (Hiroshi Inoue, Itagaki Takahir, Bruce Momjian)
d1691 1
a1691 2
       linkend="syntax-aggregates"><literal>ORDER BY</></> (Andrew
       Gierth)
d1704 7
d1789 11
a1799 4
       Make the <link linkend="information-schema">information_schema</link>
       views properly display maximum octet lengths for <type>char</> and
       <type>varchar</> columns, as well as the proper precision for datetime
       columns (Peter Eisentraut)
d1805 2
a1806 1
       Speed up information_schema privilege views (Joachim Wieland)
d1942 17
d2125 4
a2128 3
       binary, rather than the PostgreSQL <type>bytea</> text format. Null
       bytes are now also output properly from PL/Python. <type>boolean</>
       and <type>numeric</> value passing in PL/Python was also improved.
d2134 2
a2135 2
       Add <link linkend="plpython-arrays">array parameter/return
       support</link> to PL/Python (Peter Eisentraut)
d2141 1
a2141 1
       Improve mapping of domains to Python base types in PL/Python (Peter Eisentraut)
d2399 4
a2402 4
       Previously the <application>pg_ctl</> process could have been mistakenly
       identified as a running <application>postmaster</> based on a stale
       <application>postmaster</> lock file, resulting in a transient failure
       to start the database.
d2488 8
d2594 1
a2594 1
        Add <application>ecpg</> out-of-scope cursor support in native mode
d2601 1
a2601 1
        in <application>ecpg</> Informix-compatibility mode.
d2607 1
a2607 1
        Allow dynamic <application>ecpg</> cursor names (Boszormenyi Zoltan)
d2678 3
a2680 3
       and <literal>installcheck</> targets, but they build <acronym>HTML</>
       documentation, build and test <filename>contrib</>, and test
       server-side languages and <application>ecpg</>.
d2686 1
a2686 1
       Add data and documentation location control to <link
d2694 3
a2696 2
      Add a Makefile rule to build documentation as a single text file
      (Bruce Momjian)
a2729 7
     <listitem>
      <para>
       Support multiprocessor compilation using <productname>Microsoft Visual
       C</> (Magnus Hagander)
      </para>
     </listitem>

d2828 26
a2853 1
      Improve the ability to translate <application>psql</> strings
d2860 1
a2860 1
      Reduce the length of some file names so that all file paths in the
d2899 3
a2901 2
      Restructure the <acronym>HTML</> documentation build
      <filename>Makefile</> rules (Peter Eisentraut)
d2908 5
a2912 1
      building (Peter Eisentraut)
d2924 1
a2924 1
      Improve error context support in PL/Perl (Alexey Klyukin)
d3007 6
d3026 2
a3027 2
       Simplify use of <productname>C++</> functions in backend code (Kurt
       Harriman, Peter Eisentraut)
d3051 13
d3065 1
a3065 1
       <function>heap_getattr()</> backend macros to use a non-NULL fourth
d3081 2
a3082 2
       Add parser hooks to access column and parameter references in
       queries (Tom Lane)
d3205 1
a3205 1
      This filter dictionary removes accents from letters, which
@


2.50
log
@Make an editorial pass over the 9.0 release notes.

This is mostly about grammar, style, and presentation, though I did find
a few small factual errors.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.49 2010/08/17 04:37:21 petere Exp $ -->
d46 6
a51 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE IN
      SCHEMA</></link> supports mass permissions changes on existing objects,
      while <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT
      PRIVILEGES</></link> allows control of privileges for objects created in
      the future.  Large objects (BLOBs) now support privilege management as
      well.
d57 4
a60 7
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement permits
      execution of <quote>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.
d66 6
a71 2
      Full support for <link linkend="install-win32">64-bit
      <productname>Windows</></link>.
d77 5
a81 3
      More advanced reporting queries, including additional windowing options
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability to
      control the order in which values are fed to aggregate functions.
d87 3
a89 3
      New trigger features, including
      SQL-standard-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link> and
d104 3
a106 3
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>.
      These provide a generalized version of unique constraints, allowing
      enforcement of complex conditions.
d112 6
a117 4
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and a new contrib module
      <link linkend="passwordcheck"><filename>passwordcheck</></link>
      for testing password strength.
d123 2
a124 6
      New high-performance implementation of the
      <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> feature.
      Pending events are now stored in a memory-based queue rather than
      a table.  Also, a <quote>payload</> string can be sent with each
      event, rather than transmitting just an event name as before.
d130 3
a132 5
      New implementation of
      <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link>.
      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.
d138 4
a141 3
      New contrib module
      <link linkend="pgupgrade"><filename>pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d147 4
a150 4
      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).
d156 2
a157 2
      <link linkend="SQL-EXPLAIN "><command>EXPLAIN</></link> enhancements.
      The output is now available in JSON, XML, or YAML format, and includes
d164 2
a165 2
      <link linkend="hstore"><filename>hstore</></link> improvements,
      including new functions and greater data capacity.
d1656 2
a1657 1
       Allow aggregate functions to use <literal>ORDER BY</> (Andrew
@


2.49
log
@Spell and markup checking
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.48 2010/08/07 13:07:06 momjian Exp $ -->
d17 1
a17 1
    Based on overwhelming user demand, this release of
d19 2
a20 2
    for years, like easy-to-use replication, a mass permission
    facility, and anonymous blocks. While past major releases have
d24 1
a24 1
    been done with few incompatibilities. Major enhancements are:
d34 6
a39 5
      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 (<acronym>WAL</>) files to be streamed over a network port to a
      standby database server.
d46 6
a51 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
      IN SCHEMA</></link> supports mass permissions changes, and
      the <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
      DEFAULT PRIVILEGES</></link> command controls privileges
      of all newly-created objects.  Large object permissions now
      support <command>GRANT</>/<command>REVOKE</> as well.
d57 7
a63 4
      Add support for compiling on <link
      linkend="install-win32-full">64-bit
      <productname>Windows</></link> and running in 64-bit
      mode.
d69 2
a70 6
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement permits
      anonymous code blocks.  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.
d76 3
a78 3
      More advanced reporting queries with additional windowing functions
      (PRECEDING and FOLLOWING) and the ability to ORDER BY inside aggregate
      functions.
d84 3
a86 3
      Triggers now support two new features,
      SQL-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link>, and
d101 3
a103 3
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and the new <filename>checkpassword</> optional module
      for testing password strength.
d109 4
a112 6
      The <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link>
      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.
d118 6
a123 2
      Add <link linkend="pgupgrade"><filename>contrib/pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d129 5
a133 3
      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).
d139 3
a141 3
      Exclusion constraints let database designers define uniqueness
      based on complex criteria, including for non-scalar data such
      as time periods, ranges and arrays.
d147 4
a150 4
      As part of our decade-long effort to eliminate the pain of VACUUM,
      <command>VACUUM FULL</> is now substantially faster by
      rewriting the entire table and
      indexes, rather than moving around single rows to compact space.
d156 2
a157 1
      <command>EXPLAIN</> plans are now available in JSON, XML, and YAML format, and include
d164 2
a165 2
      The <filename>hstore</> optional module has been improved with new functions and greater
      data capacity to make it a high-performance key-value store.
d182 2
a183 2
   A dump/restore using <application>pg_dump</application>
   or use of <application>pg_upgrade</application> is required
d189 1
a189 1
   Version 9.0 contains a number of changes which selectively break backwards
d203 1
a203 1
      Remove server variable <varname>add_missing_from</>, which was
d210 1
a210 1
      Remove server variable <varname>regex_flavor</>, which
d213 1
a213 1
      (i.e., Perl compatible) for many years. (Tom Lane)
d219 3
a221 4
      It is now necessary to set <link
      linkend="guc-wal-level"><varname>wal_level</></link> to
      <literal>archive</> to do continuous archiving.
      (Heikki Linnakangas)
d227 2
a228 3
      Adjust <link
      linkend="guc-log-temp-files"><varname>log_temp_files</></link> to
      use default file size units of kilobytes (Robert Haas)
d238 1
d244 2
a245 2
     do not do additional permission checks on child tables
     returned as part of the query (Peter Eisentraut)
d249 3
a251 1
     The SQL standard specifies this behavior.
d257 7
a263 2
     Have fractional seconds conversion truncate rather than
     round when using float-based dates/times (Tom Lane)
d272 2
a273 1
   <title>String Handling</title>
d276 14
d325 1
d330 3
a332 2
      Tighten enforcement of column renaming when a child table inherits
      the renamed column from an unrelated parent (KaiGai Kohei)
d338 2
a339 2
      No longer rename index names and index column names when table
      columns are renamed (Tom Lane)
d343 3
a345 3
      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.
d356 5
a360 4
      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
      <command>DROP</command> and recreate the function.
d370 1
d380 6
a385 6
      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 <link
d393 1
a393 1
      PL/pgSQL no longer allows variable names that match SQL
d421 1
a421 1
      Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom Lane)
d427 2
a428 2
      which can now alias any variable, not just dollar sign
      parameter names (such as <literal>$1</>).
d437 1
d439 15
d482 1
a482 1
    <title>Continuous Archiving and Binary Replication</title>
d485 2
a486 2
     PostgreSQL's native standby capability has been expanded both to
     support read-only queries on standby slaves and to greatly reduce
d495 1
a495 1
       Allow a standby system to accept read-only queries
d502 1
a502 1
       settings to enable this feature, as well as extensive
d509 2
a510 2
       Allow write-ahead log (<acronym>WAL</>) files to be streamed to a
       standby system (Fujii Masao, Heikki Linnakangas)
d515 7
a521 6
       Previously <acronym>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 <filename>postgresql.conf</>
       and <filename>recovery.conf</> settings to enable this
       feature, as well as extensive <link
       linkend="streaming-replication">documentation</link>.
a541 6
    <para>
     Version 9.0 also contains several performance and optimizer enhancements
     to improve specific uses of PostgreSQL and remedy certain poor-performing
     cases.
    </para>

d546 4
a549 1
       Improve performance of finding inherited child tables (Tom Lane)
d555 3
a557 4
       Allow per-tablespace sequential and random page cost variables
       (<varname>seq_page_cost</>/<varname>random_page_cost</>) via
       <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE
       ... SET/RESET</></link> (Robert Haas)
d563 1
a563 3
       Improve performance of <link
       linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
       used in the same transaction as table creation (Tom Lane)
d586 1
a586 1
       by object-relational mappers (ORM).
d597 2
a598 2
       <function>MAX()</>/<function>MIN()</> values in indexes that also
       contain null values.
d604 2
a605 2
       Improve optimizer equivalence detection of &lt;&gt; <type>boolean</>
       tests (Tom Lane)
d613 1
d624 4
a627 4
       random plans, it now selects the same random plans for
       identical queries. You can modify <link
       linkend="guc-geqo-seed"><varname>geqo_seed</></link> to randomize
       the starting value of the random plan generator.
a628 6

      <para>
       This gives GEQO query response times and resource usage
       repeatability and predictability.
      </para>

d633 1
a633 1
       Improve GEQO plan selection (Tom Lane).
d637 1
a637 1
       This avoids the rare error, "failed to make a valid plan".
d647 1
d658 2
a659 2
       autovacuum does not yet properly analyze parent tables based on
       child table changes.
d665 1
a665 1
       Improve <link linkend="routine-vacuuming">autovacuum</link>
d672 1
a672 1
       Improve optimizer statistics for greater/less-than comparisons
d677 1
a677 1
       When looking up optimizer statistics for greater/less-than comparisons,
d679 4
a682 3
       use an index to generate the actual statistics. This is particularly
       useful for columns that are always increasing, and hence often have
       inaccurate statistics.
d694 4
a697 5
       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 <command>ANALYZE</>.  Database administrators
       can use this feature to fix some poor statistics, especially on
       tables with millions or billions of rows.
a706 4
    <para>
     Version 9.0 further extends PostgreSQL's support for multiple
     authentication methods, including RADIUS and improved LDAP support.
    </para>
d723 2
a724 1
       to operate in "search/bind" mode (Robert Fleming, Magnus)
d742 1
a742 1
       These match the server's <acronym>IP</> address and network address
a759 5
    <para>
     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.
    </para>
d772 1
a772 1
       This allows DBAs to characterize database traffic
d779 1
a779 1
       Add an SQL state option (<literal>%e</>) to <link
d786 1
a786 1
       by type.
d809 1
d816 1
a816 1
       to reset the cluster-wide shared statistics of the
d826 1
a826 1
       to allow the resetting of statistics counters for individual
d837 1
d842 3
a844 3
       Allow setting of configuration variables based on <link
       linkend="sql-alterrole">database/role</link>
       combinations (Alvaro Herrera)
d848 1
a848 1
       Previously only per-database and per-role setting were possible,
d851 2
a852 4
       <application>psql</> <literal>\drds</> command shows these settings.
       Backwards-compatible system views do not show this information.
       The primary use of this feature is setting schema
       <link linkend="guc-search-path"><varname>search_path</varname></link>.
d859 1
a859 1
       Add Boolean variable <link
d861 1
a861 1
       controls whether a Bonjour-enabled binary advertises
d866 3
a868 1
       The default is off, meaning it does not advertise.
d874 1
a874 1
       Add Boolean variable <link
d881 3
a883 1
       The default is on.
d889 1
a889 1
       Log changed parameter values when <filename>postgresql.conf</> is
d894 3
a896 2
       This lets DBAs and security staff audit when database settings
       were changed.
d903 1
a903 1
       Add proper permissions for custom variables (Tom Lane)
d907 5
a911 5
       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.
d917 1
a917 1
      Adjust <link
d919 1
a919 1
      use default file sizes units of kilobytes (Robert Haas)
d923 1
a923 1
      Previously this setting defaulted to bytes if no units were
d936 1
d941 1
a941 1
      Do <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT
d948 5
a952 5
      Previously, concurrent transactions could potentially cause
      <command>SELECT</> to return fewer rows than specified by
      <literal>LIMIT</>. <literal>FOR UPDATE</> can still affect
      <literal>ORDER BY</> ordering, but this can be corrected by using
      <literal>FOR UPDATE</> in a subquery.
d966 1
a966 1
      Increase the supported frame options in <link
d972 3
a974 3
      This allows frames (<literal>RANGE</> or <literal>ROWS</>) to start
      with <literal>CURRENT ROW</>, and to use the <literal>ROWS n
      PRECEDING</>/<literal>FOLLOWING</> clause.
d980 2
a981 2
      Have <command>SELECT</> and <command>CREATE TABLE AS</> return
      row counts to the client
d986 3
a988 7
      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 <command>COUNT</command> query.
     </para>

     <para>
      <application>psql</> does not display these counts.
d996 1
d1010 1
a1010 1
       Allow Unicode escapes in <link
d1024 1
d1038 2
a1039 2
      columns only of tables, views, and composite types, not other
      objects like indexes and <acronym>TOAST</> tables (Tom Lane)
d1046 2
a1047 6
      linkend="SQL-CREATETYPE-enum">enumerate types</link> with
      no labels (Bruce Momjian)
     </para>

     <para>
      This is useful for supporting binary upgrades.
d1053 2
a1054 2
      Have columns defined with storage type <literal>MAIN</> remain on
      the main heap page unless it cannot fit (Kevin Grittner)
d1058 2
a1059 2
      Previously <literal>MAIN</> values were forced to <acronym>TOAST</>
      tables until the row size was one-quarter of the page size.
d1067 1
d1074 1
a1074 1
       of newly-created objects (Petr Jelinek)
d1078 4
a1081 4
       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.
d1094 1
a1094 1
       Allow <command>ALTER TABLE</> commands which rewrite tables to skip
d1099 4
a1102 3
       Such operations either complete fully or are rolled back, so
       <acronym>WAL</> archiving can be skipped, unless running in continuous
       archiving mode.  This reduces I/O overhead and improves performance.
d1112 1
d1118 2
a1119 2
       to the <command>CREATE TABLE ... LIKE INCLUDING</> command (Itagaki
       Takahiro)
d1125 2
a1126 2
       Add support for copying all attributes to the <command>CREATE
       TABLE LIKE INCLUDING</> command (Itagaki Takahiro)
d1132 2
a1133 1
       Add the SQL-standard <command>CREATE TABLE ... OF type</> command
d1138 1
a1138 1
       This allows the creation of a table to match an existing composite
d1150 1
d1160 3
a1162 1
       This allows <command>UPDATE tab SET col = col + 1</> to work reliably
d1166 3
a1168 3
       updated. The constraint check may also be deferred until the end of the
       current transaction, allowing updates to be spread over multiple SQL
       commands.
d1174 3
a1176 11
       Exclusion Constraints: generalize uniqueness constraints by allowing arbitrary operator
       comparisons, not just equality (Jeff Davis)
      </para>

      <para>
       This is enabled with the <link
       linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
       TABLE CONSTRAINT ... EXCLUDE</></link> 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.
d1180 9
a1188 5
       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.
a1189 1

d1194 2
a1195 2
       Improve the constraint violation error message to report the values
       causing the failure (Itagaki Takahiro)
d1199 2
a1200 2
       For example, a uniqueness constraint violation now reports <literal>Key
       (x)=(2) already exists</>.
d1210 1
d1215 1
a1215 1
       Add the ability to make mass permission changes per
d1222 1
a1222 1
       This simplifies the assignment of object permissions
d1231 1
a1231 1
       Add the ability to control large object permissions with
d1234 6
d1255 3
a1257 3
      Have <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> store events
      in a memory queue, rather than a system table (Joachim
d1262 2
a1263 3
      LISTEN/NOTIFY may now be used as a full-featured, high-performance
      event queue system for PostgreSQL, with transactional support
      and guaranteed delivery.
d1270 8
a1277 1
      to pass an optional string to listeners (Joachim Wieland)
d1284 1
a1284 1
      on all system tables (Tom Lane)
d1288 1
a1288 1
      Global system tables still cannot be clustered.
d1296 1
d1301 2
a1302 2
       Allow <literal>*</> as a parameter in <literal>FORCE QUOTE</> for
       <literal>COPY CSV</> (Itagaki Takahiro)
d1306 2
a1307 1
       This forces quotes for all <acronym>CSV</> output columns.
d1313 2
a1314 2
       Add new <command>COPY</> syntax that allows parameters to be
       specified in parentheses (Robert Haas, Emmanuel Cecchet)
d1319 1
a1319 1
       The old syntax is still supported.
d1329 1
d1334 3
a1336 2
       Allow <command>EXPLAIN</> output in <acronym>XML</>, <acronym>JSON</>,
       and <acronym>YAML</> formats (Robert Haas, Greg Sabino Mullane)
d1340 2
a1341 2
       The new output formats will support the development of new tools
       for analysis of EXPLAIN output.
d1347 2
a1348 2
       Add new <command>EXPLAIN (BUFFERS)</> to report query buffer
       activity (Itagaki Takahiro)
d1353 3
a1355 3
       log_*_stats log output, e.g. <link
       linkend="runtime-config-statistics-monitor">log_statement_stats</link>,
       no longer shows this information.
d1368 2
a1369 2
       Allow <command>EXPLAIN</> options to be specified inside parentheses
       (Robert Haas)
d1373 2
a1374 2
       This allows for the expansion of <command>EXPLAIN</> options. The
       old syntax is still supported.
d1384 1
d1390 2
a1391 2
       indexes, rather than moving around single rows to compact space
       (Itagaki Takahiro, Tom Lane)
d1396 3
a1398 2
       Note that the new method may use more disk space during VACUUM
       FULL.
d1405 2
a1406 2
       Add new <command>VACUUM</> syntax that allows parameters to be
       specified in parentheses (Itagaki Takahiro)
d1410 2
a1411 2
       This allows greater flexibility for future <command>VACUUM</>
       options. The old syntax is still supported.
d1421 1
d1426 3
a1428 2
       Allow an index to be auto-named by not supplying an index name to
       <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link> (Tom Lane)
d1434 2
a1435 2
       Allow <link linkend="SQL-REINDEX"><command>REINDEX</></link>
       on system indexes (Tom Lane)
d1439 3
a1441 1
       WAS THIS POSSIBLE ON ANY SYSTEM TABLE BEFORE? NON-HARDWIRED ONES?
d1447 2
a1448 1
       Add <literal>point_ops</> operator class for GiST (Teodor Sigaev)
d1452 5
a1456 4
       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.
d1462 1
a1462 1
       Use red-black trees for <acronym>GIN</> index creation
d1467 2
a1468 2
       Red-black trees are self-balanced.  This means much faster
       GIN index creation.
d1481 1
d1486 2
a1487 3
      Allow hex values to be specified in <link
      linkend="datatype-binary"><type>bytea</></link> strings
      (Peter Eisentraut)
d1491 1
a1491 1
      The variable <link
d1493 4
a1496 4
      if hex (default) or octal escapes are used for <type>bytea</>
      output. (SWITCH DEFAULT FOR BETA? PETER) Libpq's
      <function>PQescapeByteaConn()</> now uses the hex format
      for <productname>PostgreSQL</> 9.0 servers.
d1501 3
a1503 2
      which use binary data, allowing them to store and retrieve
      it without conversion.
a1504 1

d1509 1
a1509 1
      Allow <link
d1515 11
a1525 1
      The previous maximum <varname>extra_float_digits</> was <literal>2</>.
d1533 1
d1538 1
a1538 1
       Add prefix support for the full text search synonym dictionary
d1545 1
a1545 1
       Add full text search filtering dictionaries (Teodor Sigaev)
d1549 1
a1549 1
       Filtering dictionaries allow tokens to be modified and passed to
d1556 1
a1556 1
       Allow underscores in full text email addresses (Teodor Sigaev)
d1562 2
a1563 2
       Use more standards-compliant rules for <acronym>URL</>
       parsing (Tom Lane)
d1575 1
d1580 1
a1580 1
      Allow case-insensitive <link
d1582 1
a1582 1
      matching with <acronym>UTF-8</> server encodings.
d1586 6
a1591 4
      Previously, only <acronym>ASCII</> characters and single-byte
      encodings worked properly. Multibyte encodings other than <acronym>UTF-8</>
      are still broken for case-insensitive regular expression
      matching.
d1610 1
a1610 1
      Add support for <link
d1612 2
a1613 2
      scientific notation output (<link
      linkend="functions-formatting-numeric-table"><literal>'EEEE'</></link>)
d1620 4
a1623 4
      Have <function>to_char()</> honor <link
      linkend="functions-formatting-datetimemod-table"><literal>'FM'</></link>
      (fill mode) in <literal>'Y'</>, <literal>'YY'</>, and
      <literal>'YYY'</> specifications (Bruce Momjian, Tom Lane)
d1627 1
a1627 1
      It was already honored by <literal>'YYYY'</>.
d1642 2
a1643 2
      linkend="functions-geometry-op-table">"overlap"</link>
      and "contains" operations over polygons (Teodor Sigaev)
d1651 1
d1661 4
a1664 4
       For example, this is now supported, <literal>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.
d1672 1
a1672 1
       aggregate function which aggregates values into a single
a1674 4

      <para>
       An optional second argument allows specification of a delimiter.
      </para>
d1685 3
a1687 2
       For example, <literal>agg(DISTINCT x)</> might pass NULL <literal>x</>
       values to <function>agg()</>.
d1697 1
d1725 1
d1748 4
a1751 8
       Have <link linkend="information-schema">information
       schema</link> properly display date type octet lengths
       (Peter Eisentraut)
      </para>

      <para>
       The reported length is now the maximum octet length; previously,
       a huge value was reported.
d1757 1
a1757 1
       Speed up information schema privilege views (Joachim Wieland)
d1767 1
d1772 3
a1774 3
       Implement anonymous functions using the <link
       linkend="SQL-DO"><command>DO</></link> statement, a.k.a anonymous
       blocks (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
d1779 2
a1780 1
       a new function and execute it.
d1786 1
a1786 1
       Allow SQL-compliant <link
d1792 3
a1794 3
       Such triggers are fired only if the specified columns are affected
       by the query, e.g. in <command>UPDATE</>'s <literal>SET</> list.
       information_schema now also shows this information.
d1800 1
a1800 1
       Add <literal>WHEN</> clause to <link
d1802 2
a1803 2
       to allow control over whether a trigger is fired (Takahiro
       Itagaki)
d1807 3
a1809 2
       While a check can be performed inside the trigger, doing it in an
       external <literal>WHEN</> clause has performance benefits.
d1850 39
d1906 2
a1907 1
       <literal>CONST</>.  This restriction has been removed to simplify
a1921 12
       Make PL/pgSQL use the main lexer, rather than its own version
       (Tom Lane)
      </para>

      <para>
       This ensures accurate tracking of the main system's behavior for details
       such as string escaping.
      </para>
     </listitem>

     <listitem>
      <para>
d1951 1
d1968 1
a1968 1
       Add server variable <link
d1970 1
a1970 1
       specify a PL/Perl Perl initialization function (Tim
d1977 4
a1980 8
       and <varname>plperl.on_plperlu_init</> are also available
       for trusted/untrusted-specific initialization.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve error context support in PL/Perl (Alexey Klyukin)
d2000 2
a2001 1
       This can be globally enabled with the server variable <link
d2013 2
a2014 1
       generates an error.
a2031 6
     <listitem>
      <para>
       Improve PL/Perl code structure (Tim Bunce)
      </para>
     </listitem>

d2038 1
d2058 1
a2058 1
       <type>Bytea</> values passed into PL/Python now are represented as
d2086 1
a2086 1
       cannot be used in the same backend with the usual
d2105 1
d2111 2
a2112 1
     <option>--analyze-only</> option to only analyze (Bruce Momjian)
d2120 1
d2125 2
a2126 2
       Properly escape <application>psql</> <link
       linkend="APP-PSQL-variables">variables</link> and
d2131 4
a2134 2
       For example, <literal>:'var'</> will be escaped as a literal string, and
       <literal>:"var"</> will be escaped as an SQL identifier.
d2140 2
a2141 2
       Ignore leading UTF-8-encoded Unicode byte-order marker in
       <application>psql</> (Itagaki Takahiro)
d2146 2
d2161 2
a2162 2
       Prevent overwriting of <application>psql</>'s command-line history
       if two <application>psql</> sessions are run simultaneously (Tom Lane)
d2175 1
a2175 1
       Show <literal>\timing</> output when enabled, regardless of
d2184 1
d2189 2
a2190 2
        Allow <application>psql</> to use fancy Unicode line-drawing
        characters via <command>\pset linestyle unicode</> (Roger Leigh)
a2191 1
      </listitem>
a2192 1
      <listitem>
d2194 3
a2196 2
        Improve display of wrapped columns in <application>psql</> (Roger
        Leigh)
d2198 1
d2200 1
d2202 2
a2203 2
        The previous format is available by using <command>\pset linestyle
        old-ascii</>.
d2215 1
d2220 1
a2220 1
        Have <command>\d</> show child tables that inherit from the specified
d2232 2
a2233 1
        Show definition of indexes in <command>\d index_name</> (Khee Chin)
d2243 6
a2248 2
        In <application>psql</>, show the view definition only with <command>\d+</>,
        not with <command>\d</> (Peter Eisentraut)
d2259 1
d2264 1
a2264 1
       Have <application>pg_dump</>/<application>pg_restore</>
d2272 2
a2273 2
       Fix <application>pg_dump</> to properly dump large objects if
       standard_conforming_strings is enabled (Tom Lane)
d2277 15
a2291 2
       Large objects dumps now use hex format for output. (SWITCH DEFAULT
       FOR BETA? TOM)
d2304 1
a2304 1
       Have <application>pg_dump</> <link
d2311 1
a2311 1
       These were already present in custom output mode.
d2322 1
d2327 2
a2328 2
       Allow <application>pg_ctl</> to be safely used to start the
       <application>postmaster</> at boot-time (Tom Lane)
d2334 2
a2335 1
       <application>postmaster</> lock file.
d2342 1
a2342 1
       (like <application>initdb</>) (Zdenek Kotala)
a2345 1

d2371 1
a2371 1
       <function>PQconnectStart()</> except they allow a null-terminated
d2373 1
a2373 1
       be sent in a single string.
d2385 2
a2386 2
       These functions return appropriately quoted and escaped literal
       strings and identifiers. The caller is not required to pre-allocate
d2393 1
a2393 1
       Add checking for a per-user service file (<link
d2398 1
d2400 1
d2402 2
a2403 2
       The file <filename>.pg_service.conf</> is assumed to be in the
       user's home directory.
d2409 1
a2409 1
       Add <link linkend="libpq-keepalives">keepalive settings</link>
d2421 3
a2423 10
       Properly report an error if the specified <application>libpq</> service
       cannot be found (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Issue a warning if the <link
       linkend="libpq-pgpass"><filename>.pgpass</></link>-retrieved
       password fails (Bruce Momjian)
d2433 1
a2433 2
       This improves handling of indirectly-signed SSL client
       certificates.
d2443 1
d2464 2
a2465 2
       Add an <application>ecpg</> <link
       linkend="ecpg-library">function</link> to return the
d2487 1
a2487 1
       <function>free()</>(Michael Meskes)
d2493 2
a2494 2
       Have <application>ecpg</> return zero for non-SQL3 data types
       (Michael Meskes))
d2498 2
a2499 1
       Previously it returned the negative of the data type <type>oid</>.
d2506 1
a2506 1
       <type>long</>s (Michael Meskes))
d2514 1
d2554 1
d2564 1
a2564 1
      linkend="configure"><application>configure</></link>
d2571 2
a2572 2
      Add a compile-time option to allow the Linux out-of-memory killer
      to kill backends (Alex Hunsaker, Tom Lane)
d2578 5
a2582 13
      killer for the postmaster and its children, the new
      compile-time option <link
      linkend="linux-memory-overcommit"><literal>-DLINUX_OOM_ADJ=0</></link>
      allows the killer to be enabled for <application>postmaster</>
      children. <application>pg_config</> shows if this flag
      was used during compilation.
     </para>
    </listitem>

    <listitem>
     <para>
      Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
      building (Peter Eisentraut)
d2590 1
a2616 7
     <listitem>
      <para>
       Restructure the <acronym>HTML</> documentation build
       <filename>Makefile</> rules (Peter Eisentraut)
      </para>
     </listitem>

a2623 7
    <listitem>
     <para>
      Restructure use of <literal>LDFLAGS</> to be more consistent
      across platforms (Tom Lane)
     </para>
    </listitem>

d2629 1
a2629 24
    <title>New Requirements</title>
    <itemizedlist>

     <listitem>
      <para>
       Require <application>Autoconf</> 2.63 for building from source (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Flex</> 2.5.31 or later to build from source
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Perl</> version 5.8 or greater to build the server
       from a <acronym>CVS</> copy (John Naylor, Andrew Dunstan)
      </para>
     </listitem>

    </itemizedlist>
a2630 4
   </sect4>

   <sect4>
    <title>Windows</title>
d2635 2
a2636 2
       Add support for compiling on <link
       linkend="install-win32-full">64-bit
d2638 1
a2638 1
       mode (Tsutomu Yamada, Magnus)
d2648 1
a2648 1
       Allow server builds using <link
d2656 1
a2656 1
       Allow multiprocessor compilation using <productname>Microsoft Visual
d2669 1
d2674 3
a2676 2
      Distribute documentation in a proper directory tree, rather than
      as tar archive files inside the main distribution tarball (Peter Eisentraut)
d2680 2
a2681 2
      For example, the <acronym>HTML</> documentation is now in
      <filename>doc/src/sgml/html</>; the manual pages are packaged
d2688 1
a2688 1
      Enable the server's lexer to be reentrant (Tom Lane)
d2704 18
a2721 1
      Add system columns to better document the use of indexes for constraint
d2728 2
a2729 2
      Allow multiple actions to be communicated using the same operating
      system signal (Fujii Masao)
d2733 2
a2734 2
      This allows improved backend communication as new features are
      added.
d2752 2
a2753 2
      This also improves performance when using millions of users and
      databases.
d2766 2
a2767 2
      Reduce the length of some file names so file paths are less than
      100 characters (Tom Lane)
d2771 1
a2771 1
      Some decompression programs have problems with long file names.
d2777 23
a2799 2
      Tighten input requirements for <type>int2</> vector input (Caleb
      Welton)
d2805 2
a2806 3
      Add a new <link
      linkend="errcodes-table"><literal>ERRCODE_INVALID_PASSWORD</></link>
      <literal>SQLSTATE</> error code (Bruce Momjian)
d2812 2
a2813 2
      Properly remove the few remaining personal source code copyright
      entries (Bruce Momjian)
d2815 1
d2817 1
d2819 1
a2819 2
      The personal copyright notices were insignificant but the community
      occasionally had to answer questions about them.
d2825 1
a2825 3
      New documentation <link linkend="non-durability">section</link>
      about running <productname>PostgreSQL</> in non-durable mode,
      to improve performance  (Bruce Momjian)
d2832 37
a2868 1
    <title>Feature Support</title>
d2877 2
a2878 1
       Bonjour now requires <productname>OS X</> 10.3 or later.
d2884 1
a2884 1
       Add processor test-and-test lock support for the <productname>SuperH</>
d2899 1
a2899 1
       integer data types (Tom Lane)
d2901 1
d2903 1
d2905 2
a2906 2
       It is believed all supported platforms have working 64-bit integer
       data types.
a2909 1

d2916 1
d2926 3
a2928 3
       While this removes keyword conflicts that previously made
       <productname>C++</> usage difficult in backend code, there are
       still other complexities when using <productname>C++</> for backend
d2930 2
a2931 1
       appropriate places.
d2946 3
a2948 3
       Require <function>fastgetattr()</> and <function>heap_getattr()</>
       backend macros to use a non-NULL fourth argument (Robert Haas)
       KEEP?
d2958 1
d2970 2
a2971 2
       Add a hook so loadable modules can control utility commands (Itagaki
       Takahiro)
d2977 2
a2978 2
       Allow the calling of parser hooks from <acronym>SPI</> and cached
       plans (Tom Lane)
d2988 1
d2999 2
a3000 2
      upgrading to a new major release of PostgreSQL and speeds up offline
      upgrades by orders of magnitude. It supports upgrades to 9.0
d3007 3
a3009 3
       Add support for preservation of all <link
       linkend="catalog-pg-class"><structname>relfilenodes</></link>,
       for use during binary upgrades (Bruce Momjian)
d3015 3
a3017 7
       Add support for binary upgrades to preserve <structname>pg_type</>
       and <structname>pg_enum</> <type>oids</> (Bruce Momjian)
      </para>

      <para>
       This is needed to allow binary upgrades of user-defined composite
       types, arrays, and enums (enumerated types).
d3023 3
a3025 2
       Move tablespace data directories into their own
       <productname>PostgreSQL</> version-specific subdirectory (Bruce Momjian)
d3041 1
d3046 1
a3046 1
      Add multithreaded option (<option>-j</>) to <link
d3052 2
a3053 1
      This allows multiple <acronym>CPU</>s to be used for pgbench tests.
d3106 1
a3106 1
      Improve <filename>contrib/dblink</>s handling of dropped columns
d3113 2
a3114 1
      and related functions.
d3121 4
a3124 4
      linkend="hstore"><filename>contrib/hstore</></link>'s
      length limit and add B-tree and hash abilities so <literal>GROUP
      BY</> and <literal>DISTINCT</> operations are possible
      (Andrew Gierth)
d3129 2
a3130 1
      make hstore a full-functional key-value store embedded in PostgreSQL.
d3138 1
a3138 1
      which can check the strength of assigned passwords (Laurenz
d3156 3
a3158 2
      This is designed to be used by the <literal>archive_cleanup_command</literal>
      setting to remove unnecessary archive files.
@


2.48
log
@Fix 9.0 release notes vacuum mention, not -> now

Peter Fokkinga
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.47 2010/08/06 19:13:13 tgl Exp $ -->
d102 1
a102 1
      LDAP authentication improvements, and the new checkpassword optional module
d120 1
a120 1
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
d152 1
a152 1
      EXPLAIN plans are now available in JSON, XML and YAML format, and include
d159 1
a159 1
      The HStore optional module has been improved with new functions and greater
d208 1
a208 1
      (e.g. Perl-regex compatible) for many years. (Tom Lane)
d557 1
a557 1
       contain NULLs.
d584 1
a584 1
       linkend="guc-geqo-seed">geqo_seed</link> to randomize
d769 1
a769 1
       Now there is true multi-lingual support for PostgreSQL log messages
d830 1
a830 1
       Add boolean variable <link
d843 1
a843 1
       Add boolean variable <link
d1393 1
a1393 1
       Add <literal>point_ops</> opclass for GiST (Teodor Sigaev)
d1436 1
a1436 1
      linkend="guc-bytea-output">bytea_output</link> controls
d1519 2
a1520 2
      encodings worked properly. Other multi-byte, non-<acronym>UTF-8</>
      encodings are still broken for case-insensitive regular expression
d1871 1
a1871 1
       linkend="guc-plperl-on-init">plperl.on_init</link> to
d1878 1
a1878 1
       linkend="guc-plperl-on-plperl-init">plperl.on_plperl_init</link>
d1907 1
a1907 1
       linkend="guc-plperl-use-strict">plperl.use_strict</link>.
d1968 2
a1969 2
       binary, rather than the Postgres <type>bytea</> text format. Null
       bytes are now also output properly from PL/Python. <type>Boolean</>
d2492 1
a2492 1
       documentation, build and test <filename>/contrib</>, and test
d2585 1
a2585 1
       Allow multi-processor compilation using <productname>Microsoft Visual
d2650 1
a2650 1
      Improve source code test coverage, including /contrib, PL/Python,
d2842 1
a2842 1
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
d2897 2
a2898 2
      Add multi-threaded option (<option>-j</>) to <link
      linkend="pgbench"><filename>/contrib/pgbench</></link>
d2911 1
a2911 1
      linkend="pgbench"><filename>/contrib/pgbench</></link>
d2919 1
a2919 1
      linkend="dict-xsyn"><filename>/contrib/dict_xsyn</></link>
d2932 1
a2932 1
      linkend="unaccent"><filename>/contrib/unaccent</></link>
d2946 1
a2946 1
      to <filename>/contrib/dblink</> (Marcus Kempe)
d2950 1
a2950 1
      This allows async notifications in <productname>dblink</>.
d2956 1
a2956 1
      Improve <filename>/contrib/dblink</>s handling of dropped columns
d2970 2
a2971 2
      linkend="hstore"><filename>/contrib/hstore</></link>'s
      length limit and add btree and hash abilities so <literal>GROUP
d2978 1
a2978 1
      make HStore a full-functional key-value store embedded in PostgreSQL.
d2985 1
a2985 1
      linkend="passwordcheck"><filename>/contrib/passwordcheck</></link>
d2999 1
a2999 1
      linkend="pgarchivecleanup"><filename>/contrib/pg_archivecleanup</></link>
d3012 1
a3012 1
      linkend="auto-explain"><filename>/contrib/auto_explain</></link>
d3020 1
a3020 1
      linkend="pgstatstatements"><filename>/contrib/pg_stat_statements</></link>
d3028 1
a3028 1
      linkend="server-start"><filename>/contrib/start-scripts/linux</></link>
@


2.47
log
@Let's put that </link> in a sane place ...
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.46 2010/08/06 18:55:24 tgl Exp $ -->
d144 1
a144 1
      <command>VACUUM FULL</> is not substantially faster by
@


2.46
log
@Fix inaccurate description of deferrable unique constraints, per Dean Rasheed.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.45 2010/08/06 17:56:43 rhaas Exp $ -->
d94 2
a95 2
      unique constraints. Mass updates to unique keys are now possible
      without trickery.</link>
@


2.45
log
@Rearrange "big features" section of the release notes.

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.44 2010/07/29 21:18:11 tgl Exp $ -->
d94 2
a95 1
      unique constraints, now permit mass updates to unique keys.</link>
d1126 7
a1132 4
       This allows <command>UPDATE tab SET col = col + 1</> to work on
       columns that have a unique indexes or are marked as primary key,
       but <literal>DEFERRABLE INITIALLY DEFERRED</> must be used to mark
       the constraint as deferred.
@


2.44
log
@Update release notes for 9.0 beta 4.  Back-patch some changes that were made only in HEAD.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.43 2010/07/27 19:01:16 petere Exp $ -->
d56 9
d76 8
d100 3
a102 3
      Exclusion constraints let database designers define uniqueness
      based on complex criteria, including for non-scalar data such
      as time periods, ranges and arrays.
d119 23
d143 1
a143 1
      <command>VACUUM FULL</> is now substantially faster by
d151 2
a152 4
      Add support for compiling on <link
      linkend="install-win32-full">64-bit
      <productname>Windows</></link> and running in 64-bit
      mode.
d158 2
a159 2
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
@


2.43
log
@Spelling fixes
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.42 2010/07/12 18:30:36 momjian Exp $ -->
d11 2
a135 1
  <para>CURRENT AS OF 2010-07-08</para>
d2033 7
@


2.42
log
@Restore pl/pgsql default install release note item.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.41 2010/07/12 18:25:21 momjian Exp $ -->
d688 1
a688 1
     users need increased monitoring.  PostgresSQL 9.0 continues to add
d747 1
a747 1
       bgwriter (Greg Smith)
d756 1
a756 1
       to allow the reseting of statistics counters for individual
@


2.41
log
@9.0 release note improvements

Erik Rijkers
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.40 2010/07/12 17:47:39 momjian Exp $ -->
d57 3
a59 2
      parameters.  PL/Perl and PL/Python have been enhanced in several ways,
      including support for Python3.
@


2.40
log
@Spellcheck 9.0 release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39 2010/07/08 22:26:14 momjian Exp $ -->
d19 4
a22 5
    been quite conservative in their scope, this release shows a
    bold new desire to provide facilities that every new and existing
    user of <productname>PostgreSQL</> will embrace. This has all
    been done with few incompatibilities. The major areas of
    enhancement are:
d56 3
a58 4
      ad-hoc or anonymous code blocks.  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.
d184 1
a184 1
      use default file sizes units of kilobytes (Robert Haas)
d429 1
a429 1
       as 16 megabytes files; this allows master changes to be sent to the
d504 1
a504 1
       by object-relational mappers.
d820 1
a820 1
       This lets DBAs and security staff to audit when database settings
d1003 1
a1003 1
       of all newly-created objects (Petr Jelinek)
d1008 1
a1008 1
       a complex database application.  Defaults currently support tables
d1086 1
a1086 1
       columns that have a unique indexes or are marked as primary keys,
d1094 1
a1094 1
       Generalize uniqueness constraints by allowing arbitrary operator
d1662 2
a1663 2
       linkend="SQL-DO"><command>DO</></link> statement (Petr
       Jelinek, Joshua Tolley, Hannu Valtonen)
d1862 1
a1862 1
       This can be enabled with the server variable <link
d2306 1
a2306 1
       Informix-compatibility mode (Zoltan Boszormenyi)
d2370 2
a2371 2
        <literal>IN</> in <command>FETCH</> and <command>MOVE</> (Zoltan
        Boszormenyi)
@


2.39
log
@Update release notes for 9.0 beta 3.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.38 2010/07/01 02:33:21 momjian Exp $ -->
d537 1
a537 1
       Use the same random seed everytime GEQO plans a query (Andres
d1009 1
a1009 1
       This greatly simplifies the assignment of object priveleges in
@


2.39.2.1
log
@Spelling fixes
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39 2010/07/08 22:26:14 momjian Exp $ -->
d537 1
a537 1
       Use the same random seed every time GEQO plans a query (Andres
d689 1
a689 1
     users need increased monitoring.  PostgreSQL 9.0 continues to add
d748 1
a748 1
       background writer (Greg Smith)
d757 1
a757 1
       to allow the resetting of statistics counters for individual
@


2.39.2.2
log
@Update release notes for 9.0 beta 4.  Back-patch some changes that were made only in HEAD.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.43 2010/07/27 19:01:16 petere Exp $ -->
a10 2
  <para>CURRENT AS OF 2010-07-29</para>

d19 5
a23 4
    been conservative in their scope, this release shows a
    bold new desire to provide facilities that new and existing
    users of <productname>PostgreSQL</> will embrace. This has all
    been done with few incompatibilities. Major enhancements are:
d57 1
a57 1
      anonymous code blocks.  Functions can now be called using named
d135 1
d186 1
a186 1
      use default file size units of kilobytes (Robert Haas)
d431 1
a431 1
       as 16 megabytes files; Streaming Replication allows master changes to be sent to the
d506 1
a506 1
       by object-relational mappers (ORM).
d822 1
a822 1
       This lets DBAs and security staff audit when database settings
d1005 1
a1005 1
       of newly-created objects (Petr Jelinek)
d1009 2
a1010 2
       This greatly simplifies the assignment of object privileges in
       a complex database application.  Defaults currently support tables,
d1088 1
a1088 1
       columns that have a unique indexes or are marked as primary key,
d1096 1
a1096 1
       Exclusion Constraints: generalize uniqueness constraints by allowing arbitrary operator
d1664 2
a1665 2
       linkend="SQL-DO"><command>DO</></link> statement, a.k.a anonymous
       blocks (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
d1864 1
a1864 1
       This can be globally enabled with the server variable <link
a2032 7
     <listitem>
      <para>
       Show <literal>\timing</> output when enabled, regardless of
       <quote>quiet</> mode (Peter Eisentraut)
      </para>
     </listitem>

d2308 1
a2308 1
       Informix-compatibility mode (Boszormenyi Zoltan)
d2372 2
a2373 2
        <literal>IN</> in <command>FETCH</> and <command>MOVE</> (Boszormenyi
        Zoltan)
@


2.39.2.3
log
@Rearrange "big features" section of the release notes.

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.2 2010/07/29 21:18:16 tgl Exp $ -->
a55 9
      Add support for compiling on <link
      linkend="install-win32-full">64-bit
      <productname>Windows</></link> and running in 64-bit
      mode.
     </para>
    </listitem>

    <listitem>
     <para>
a66 8
      More advanced reporting queries with additional windowing functions
      (PRECEDING and FOLLOWING) and the ability to ORDER BY inside aggregate
      functions.
     </para>
    </listitem>

    <listitem>
     <para>
d83 3
a85 3
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and the new checkpassword optional module
      for testing password strength.
a101 23
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
     </para>
    </listitem>

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

    <listitem>
     <para>
      Exclusion constraints let database designers define uniqueness
      based on complex criteria, including for non-scalar data such
      as time periods, ranges and arrays.
     </para>
    </listitem>

    <listitem>
     <para>
d103 1
a103 1
      <command>VACUUM FULL</> is not substantially faster by
d111 4
a114 2
      EXPLAIN plans are now available in JSON, XML and YAML format, and include
      buffer utilization and other data not previously available.
d120 2
a121 2
      The HStore optional module has been improved with new functions and greater
      data capacity to make it a high-performance key-value store.
@


2.39.2.4
log
@Fix inaccurate description of deferrable unique constraints, per Dean Rasheed.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.45 2010/08/06 17:56:43 rhaas Exp $ -->
d94 1
a94 2
      unique constraints. Mass updates to unique keys are now possible
      without trickery.</link>
d1125 4
a1128 7
       This allows <command>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 <literal>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.
@


2.39.2.5
log
@Let's put that </link> in a sane place ...
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.46 2010/08/06 18:55:24 tgl Exp $ -->
d94 2
a95 2
      unique constraints</link>. Mass updates to unique keys are now possible
      without trickery.
@


2.39.2.6
log
@Spell and markup checking
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.5 2010/08/06 19:13:18 tgl Exp $ -->
d102 1
a102 1
      LDAP authentication improvements, and the new <filename>checkpassword</> optional module
d120 1
a120 1
      Add <link linkend="pgupgrade"><filename>contrib/pg_upgrade</></link>
d152 1
a152 1
      <command>EXPLAIN</> plans are now available in JSON, XML, and YAML format, and include
d159 1
a159 1
      The <filename>hstore</> optional module has been improved with new functions and greater
d208 1
a208 1
      (i.e., Perl compatible) for many years. (Tom Lane)
d557 1
a557 1
       contain null values.
d584 1
a584 1
       linkend="guc-geqo-seed"><varname>geqo_seed</></link> to randomize
d769 1
a769 1
       Now there is true multilingual support for PostgreSQL log messages
d830 1
a830 1
       Add Boolean variable <link
d843 1
a843 1
       Add Boolean variable <link
d1393 1
a1393 1
       Add <literal>point_ops</> operator class for GiST (Teodor Sigaev)
d1436 1
a1436 1
      linkend="guc-bytea-output"><varname>bytea_output</></link> controls
d1519 2
a1520 2
      encodings worked properly. Multibyte encodings other than <acronym>UTF-8</>
      are still broken for case-insensitive regular expression
d1871 1
a1871 1
       linkend="guc-plperl-on-init"><varname>plperl.on_init</></link> to
d1878 1
a1878 1
       linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperl_init</></link>
d1907 1
a1907 1
       linkend="guc-plperl-use-strict"><varname>plperl.use_strict</></link>.
d1968 2
a1969 2
       binary, rather than the PostgreSQL <type>bytea</> text format. Null
       bytes are now also output properly from PL/Python. <type>boolean</>
d2492 1
a2492 1
       documentation, build and test <filename>contrib</>, and test
d2585 1
a2585 1
       Allow multiprocessor compilation using <productname>Microsoft Visual
d2650 1
a2650 1
      Improve source code test coverage, including <filename>contrib</>, PL/Python,
d2842 1
a2842 1
      Add <link linkend="pgupgrade"><filename>contrib/pg_upgrade</></link>
d2897 2
a2898 2
      Add multithreaded option (<option>-j</>) to <link
      linkend="pgbench"><filename>contrib/pgbench</></link>
d2911 1
a2911 1
      linkend="pgbench"><filename>contrib/pgbench</></link>
d2919 1
a2919 1
      linkend="dict-xsyn"><filename>contrib/dict_xsyn</></link>
d2932 1
a2932 1
      linkend="unaccent"><filename>contrib/unaccent</></link>
d2946 1
a2946 1
      to <filename>contrib/dblink</> (Marcus Kempe)
d2950 1
a2950 1
      This allows asynchronous notifications in <productname>dblink</>.
d2956 1
a2956 1
      Improve <filename>contrib/dblink</>s handling of dropped columns
d2970 2
a2971 2
      linkend="hstore"><filename>contrib/hstore</></link>'s
      length limit and add B-tree and hash abilities so <literal>GROUP
d2978 1
a2978 1
      make hstore a full-functional key-value store embedded in PostgreSQL.
d2985 1
a2985 1
      linkend="passwordcheck"><filename>contrib/passwordcheck</></link>
d2999 1
a2999 1
      linkend="pgarchivecleanup"><filename>contrib/pg_archivecleanup</></link>
d3012 1
a3012 1
      linkend="auto-explain"><filename>contrib/auto_explain</></link>
d3020 1
a3020 1
      linkend="pgstatstatements"><filename>contrib/pg_stat_statements</></link>
d3028 1
a3028 1
      linkend="server-start"><filename>contrib/start-scripts/linux</></link>
@


2.39.2.7
log
@Make an editorial pass over the 9.0 release notes.

This is mostly about grammar, style, and presentation, though I did find
a few small factual errors.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.6 2010/08/17 04:37:17 petere Exp $ -->
d17 1
a17 1
    This release of
d19 2
a20 2
    for years, such as easy-to-use replication, a mass permission-changing
    facility, and anonymous code blocks. While past major releases have
d24 1
a24 1
    been done with few incompatibilities. Major enhancements include:
d34 5
a38 6
      Built-in replication based on log shipping.  This advance consists of
      two features: Streaming Replication, allowing continuous archive
      (<acronym>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.
d45 15
a59 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE IN
      SCHEMA</></link> supports mass permissions changes on existing objects,
      while <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT
      PRIVILEGES</></link> allows control of privileges for objects created in
      the future.  Large objects (BLOBs) now support privilege management as
      well.
d67 1
a67 2
      execution of <quote>anonymous</> code blocks, without having to
      define a function first.  Functions can now be called using named
d76 3
a78 2
      Full support for <link linkend="install-win32">64-bit
      <productname>Windows</></link>.
d84 3
a86 11
      More advanced reporting queries, including additional windowing options
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability to
      control the order in which values are fed to aggregate functions.
     </para>
    </listitem>

    <listitem>
     <para>
      New trigger features, including
      SQL-standard-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link> and
d101 3
a103 3
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>.
      These provide a generalized version of unique constraints, allowing
      enforcement of complex conditions.
d109 6
a114 4
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and a new contrib module
      <link linkend="passwordcheck"><filename>passwordcheck</></link>
      for testing password strength.
d120 2
a121 6
      New high-performance implementation of the
      <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> feature.
      Pending events are now stored in a memory-based queue rather than
      a table.  Also, a <quote>payload</> string can be sent with each
      event, rather than transmitting just an event name as before.
d127 3
a129 5
      New implementation of
      <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link>.
      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.
d135 3
a137 3
      New contrib module
      <link linkend="pgupgrade"><filename>pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d143 4
a146 4
      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).
d152 1
a152 2
      <link linkend="SQL-EXPLAIN "><command>EXPLAIN</></link> enhancements.
      The output is now available in JSON, XML, or YAML format, and includes
d159 2
a160 2
      <link linkend="hstore"><filename>hstore</></link> improvements,
      including new functions and greater data capacity.
d177 2
a178 2
   A dump/restore using <application>pg_dump</application>,
   or use of <application>pg_upgrade</application>, is required
d184 1
a184 1
   Version 9.0 contains a number of changes that selectively break backwards
d198 1
a198 1
      Remove server parameter <varname>add_missing_from</>, which was
d205 1
a205 1
      Remove server parameter <varname>regex_flavor</>, which
d208 1
a208 1
      for many years (Tom Lane)
d214 4
a217 3
      <link linkend="guc-wal-level"><varname>wal_level</></link> should now be
      set to <literal>archive</>, not <literal>on</>, to do continuous
      archiving (Heikki Linnakangas)
d223 3
a225 2
      <link linkend="guc-log-temp-files"><varname>log_temp_files</></link>
      now uses default file size units of kilobytes (Robert Haas)
a234 1

d240 2
a241 2
     do not do any separate permission checks on child tables
     scanned as part of the query (Peter Eisentraut)
d245 1
a245 3
     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.
d251 2
a252 7
     Make <function>date_trunc</> truncate rather than round when reducing
     fractional-seconds precision (Tom Lane)
    </para>

    <para>
     The code always acted this way for integer-based dates/times.
     Now float-based dates/times behave similarly.
d261 1
a261 2
   <title>Data Types</title>

a263 14
    <listitem>
     <para>
      <link linkend="datatype-binary"><type>bytea</></link> output now
      appears in hex format by default (Peter Eisentraut)
     </para>

     <para>
      The server parameter <link
      linkend="guc-bytea-output"><varname>bytea_output</></link> can be
      used to select the traditional output format if needed for
      compatibility.
     </para>
    </listitem>

a298 1

d303 2
a304 3
      Tighten enforcement of column name consistency during <command>RENAME</>
      when a child table inherits the same column from multiple unrelated
      parents (KaiGai Kohei)
d310 2
a311 2
      No longer automatically rename indexes and index columns when the
      underlying table columns are renamed (Tom Lane)
d315 3
a317 3
      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.
d328 4
a331 5
      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
      <command>DROP</command> and recreate the function to do that.
a340 1

d350 6
a355 6
      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 <link
d363 1
a363 1
      PL/pgSQL no longer allows variable names that match certain SQL
d391 1
a391 1
      Remove PL/pgSQL's <literal>RENAME</> declaration (Tom Lane)
d397 2
a398 2
      which can now create an alias for any variable, not only dollar sign
      parameter names (such as <literal>$1</>) as before.
a406 1

a407 15

    <listitem>
     <para>
      Deprecate use of <literal>=&gt;</> as an operator name (Robert Haas)
     </para>

     <para>
      Future versions of <productname>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.
     </para>
    </listitem>

d436 1
a436 1
    <title>Continuous Archiving and Streaming Replication</title>
d439 2
a440 2
     PostgreSQL's existing standby-server capability has been expanded both to
     support read-only queries on standby servers and to greatly reduce
d449 1
a449 1
       Allow a standby server to accept read-only queries
d456 1
a456 1
       settings to control this feature, as well as extensive
d463 2
a464 2
       Allow write-ahead log (<acronym>WAL</>) data to be streamed to a
       standby server (Fujii Masao, Heikki Linnakangas)
d469 6
a474 7
       Previously <acronym>WAL</> data could be sent to standby servers only
       in units of entire <acronym>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 <filename>postgresql.conf</> and
       <filename>recovery.conf</> settings to control this feature, as well as
       extensive <link linkend="streaming-replication">documentation</link>.
d495 6
d505 1
a505 4
       Allow per-tablespace values to be set for sequential and random page
       cost estimates (<varname>seq_page_cost</>/<varname>random_page_cost</>)
       via <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE
       ... SET/RESET</></link> (Robert Haas)
d511 4
a514 3
       Improve performance of <link
       linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
       used in the same transaction as table creation (Tom Lane)
d520 3
a522 1
       Improve performance of finding inheritance child tables (Tom Lane)
d545 1
a545 1
       by object-relational mappers (ORMs).
d556 2
a557 2
       <function>MAX()</>/<function>MIN()</> values in indexes that
       contain many null values.
d563 2
a564 2
       Improve the optimizer's equivalence detection for expressions involving
       <type>boolean</> <literal>&lt;&gt;</> operators (Tom Lane)
a571 1

d582 4
a585 4
       random plans, it now always selects the same random plans for identical
       queries, thus giving more consistent performance. You can modify <link
       linkend="guc-geqo-seed"><varname>geqo_seed</></link> to experiment with
       alternative plans.
d587 6
d597 1
a597 1
       Improve GEQO plan selection (Tom Lane)
d601 1
a601 1
       This avoids the rare error <quote>failed to make a valid plan</>.
a610 1

d621 2
a622 2
       autovacuum does not yet automatically re-analyze parent tables
       when child tables change.
d628 1
a628 1
       Improve <link linkend="routine-vacuuming">autovacuum</link>'s
d635 1
a635 1
       Improve optimizer's estimation for greater/less-than comparisons
d640 1
a640 1
       When looking up statistics for greater/less-than comparisons,
d642 3
a644 4
       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.
d656 5
a660 4
       This allows users to override the estimated number or percentage of
       distinct values for a column. This statistic is normally computed by
       <command>ANALYZE</>, but the estimate can be poor, especially on tables
       with very large numbers of rows.
d670 4
d690 1
a690 2
       to operate in <quote>search/bind</> mode
       (Robert Fleming, Magnus Hagander)
d708 1
a708 1
       These match the server's <acronym>IP</> address and subnet address
d726 5
d743 1
a743 1
       This allows administrators to characterize database traffic
d750 1
a750 1
       Add a SQLSTATE option (<literal>%e</>) to <link
d757 1
a757 1
       by error code number.
a779 1

d786 1
a786 1
       to reset the cluster-wide shared statistics for the
d796 1
a796 1
       to allow resetting of the statistics counters for individual
a806 1

d811 3
a813 3
       Allow setting of configuration parameters based on <link
       linkend="sql-alterrole">database/role combinations</link>
       (Alvaro Herrera)
d817 1
a817 1
       Previously only per-database and per-role settings were possible,
d820 4
a823 2
       <application>psql</> command <literal>\drds</> shows these settings.
       Backwards-compatible system views do not show combination settings.
d830 1
a830 1
       Add server parameter <link
d832 1
a832 1
       controls whether a Bonjour-enabled server advertises
d837 1
a837 3
       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.
d843 1
a843 1
       Add server parameter <link
d850 1
a850 3
       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.
d856 1
a856 1
       Log changes of parameter values when <filename>postgresql.conf</> is
d861 2
a862 3
       This lets administrators and security staff audit changes of database
       settings, and is also very convenient for checking the effects of
       <filename>postgresql.conf</> edits.
d869 1
a869 1
       Add proper permissions for custom server parameters (Tom Lane)
d873 5
a877 5
       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.
d883 1
a883 1
      Change server parameter <link
d885 1
a885 1
      use default file size units of kilobytes (Robert Haas)
d889 1
a889 1
      Previously this setting was interpreted in bytes if no units were
a901 1

d906 1
a906 1
      Perform <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT
d913 5
a917 5
      Previously, changes made by concurrent transactions could cause a
      <command>SELECT FOR UPDATE</> to unexpectedly return fewer rows than
      specified by its <literal>LIMIT</>. <literal>FOR UPDATE</> in combination
      with <literal>ORDER BY</> can still produce surprising results, but that
      can be corrected by placing <literal>FOR UPDATE</> in a subquery.
d931 1
a931 1
      Extend the supported frame options in <link
d937 3
a939 3
      Frames can now start with <literal>CURRENT ROW</>, and the <literal>ROWS
      <replaceable>n</> PRECEDING</>/<literal>FOLLOWING</> options are now
      supported.
d945 2
a946 2
      Make <command>SELECT INTO</> and <command>CREATE TABLE AS</> return
      row counts to the client in their command tags
d951 7
a957 3
      This can save an entire round-trip to the client, allowing result counts
      and pagination to be calculated without an additional
      <command>COUNT</command> query.
a964 1

d978 1
a978 1
       Support Unicode escapes in <link
a991 1

d1005 2
a1006 2
      columns of tables, views, and composite types only, not other
      relation types such as indexes and <acronym>TOAST</> tables (Tom Lane)
d1013 6
a1018 2
      linkend="SQL-CREATETYPE-enum">enumerated types</link> containing
      no values (Bruce Momjian)
d1024 2
a1025 2
      Let values of columns having storage type <literal>MAIN</> remain on
      the main heap page unless the row cannot fit on a page (Kevin Grittner)
d1029 2
a1030 2
      Previously <literal>MAIN</> values were forced out to <acronym>TOAST</>
      tables until the row size was less than one-quarter of the page size.
a1037 1

d1044 1
a1044 1
       of objects created later (Petr Jelinek)
d1048 4
a1051 4
       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.
d1064 1
a1064 1
       Allow <command>ALTER TABLE</> commands that rewrite tables to skip
d1069 3
a1071 4
       Such operations either produce a new copy of the table or are rolled
       back, so <acronym>WAL</> archiving can be skipped, unless running in
       continuous archiving mode.  This reduces I/O overhead and improves
       performance.
a1080 1

d1086 2
a1087 2
       settings in <command>CREATE TABLE ... LIKE</> commands
       (Itagaki Takahiro)
d1093 2
a1094 2
       Add support for copying all attributes in <command>CREATE
       TABLE ... LIKE</> commands (Itagaki Takahiro)
d1100 1
a1100 2
       Add the SQL-standard
       <literal>CREATE TABLE ... OF <replaceable>type</></literal> command
d1105 1
a1105 1
       This allows creation of a table that matches an existing composite
a1116 1

d1126 1
a1126 3
       This allows mass updates, such as
       <literal>UPDATE tab SET col = col + 1</>,
       to work reliably
d1130 3
a1132 3
       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.
d1138 11
a1148 3
       Add
       <link linkend="ddl-constraints-exclusion">exclusion constraints</link>
       (Jeff Davis)
d1152 5
a1156 9
       Exclusion constraints generalize uniqueness constraints by allowing
       arbitrary comparison operators, not just equality.  They are created
       with the <link linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
       TABLE CONSTRAINT ... EXCLUDE</></link> 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.
d1158 1
d1163 2
a1164 2
       Improve uniqueness-constraint violation error messages to
       report the values causing the failure (Itagaki Takahiro)
d1168 2
a1169 2
       For example, a uniqueness constraint violation might now report
       <literal>Key (x)=(2) already exists</>.
a1178 1

d1183 1
a1183 1
       Add the ability to make mass permission changes across a whole
d1190 1
a1190 1
       This simplifies management of object permissions
d1199 1
a1199 1
       Add the ability to control large object (BLOB) permissions with
a1201 6

      <para>
       Formerly, any database user could read or modify any large object.
       Read and write permissions can now be granted and revoked per
       large object.
      </para>
d1217 3
a1219 3
      Make <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> store pending events
      in a memory queue, rather than in a system table (Joachim
d1224 3
a1226 2
      This substantially improves performance, while retaining the existing
      features of transactional support and guaranteed delivery.
d1233 1
a1233 8
      to pass an optional <quote>payload</> string to listeners
      (Joachim Wieland)
     </para>

     <para>
      This greatly improves the usefulness of
      <command>LISTEN</>/<command>NOTIFY</> as a
      general-purpose event queue system.
d1240 1
a1240 1
      on all per-database system catalogs (Tom Lane)
d1244 1
a1244 1
      Global catalogs still cannot be clustered.
a1251 1

d1256 2
a1257 2
       Accept <literal>COPY ... CSV FORCE QUOTE *</>
       (Itagaki Takahiro)
d1261 1
a1261 2
       Now <literal>*</> can be used as shorthand for <quote>all columns</>
       in the <literal>FORCE QUOTE</> clause.
d1267 2
a1268 2
       Add new <command>COPY</> syntax that allows options to be
       specified inside parentheses (Robert Haas, Emmanuel Cecchet)
d1273 1
a1273 1
       The old syntax is still supported, but only for pre-existing options.
a1282 1

d1287 2
a1288 3
       Allow <command>EXPLAIN</> to output in <acronym>XML</>,
       <acronym>JSON</>, or <acronym>YAML</> format (Robert Haas, Greg
       Sabino Mullane)
d1292 2
a1293 2
       The new output formats are easily machine-readable, supporting the
       development of new tools for analysis of <command>EXPLAIN</> output.
d1299 2
a1300 2
       Add new <literal>BUFFERS</> option to report query
       buffer usage during <command>EXPLAIN ANALYZE</> (Itagaki Takahiro)
d1305 3
a1307 3
       Buffer usage is no longer reported in the output for <link
       linkend="runtime-config-statistics-monitor">log_statement_stats</link>
       and related settings.
d1320 2
a1321 2
       Add new <command>EXPLAIN</> syntax that allows options to be
       specified inside parentheses (Robert Haas)
d1325 2
a1326 2
       This allows greater flexibility for future <command>EXPLAIN</> options.
       The old syntax is still supported, but only for pre-existing options.
a1335 1

d1341 2
a1342 2
       rebuild its indexes, rather than moving individual rows around to
       compact space (Itagaki Takahiro, Tom Lane)
d1347 2
a1348 3
       Note that the new method will use more disk space transiently
       during <command>VACUUM FULL</>; potentially as much as twice
       the space normally occupied by the table and its indexes.
d1355 2
a1356 2
       Add new <command>VACUUM</> syntax that allows options to be
       specified inside parentheses (Itagaki Takahiro)
d1360 2
a1361 2
       This allows greater flexibility for future <command>VACUUM</> options.
       The old syntax is still supported, but only for pre-existing options.
a1370 1

d1375 2
a1376 3
       Allow an index to be named automatically by omitting the index name in
       <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link>
       (Tom Lane)
d1382 2
a1383 2
       Reindexing shared system catalogs is now fully transactional
       and crash-safe (Tom Lane)
d1387 1
a1387 3
       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.
d1393 1
a1393 2
       Add <literal>point_ops</> operator class for <acronym>GiST</>
      (Teodor Sigaev)
d1397 4
a1400 5
       This feature permits <acronym>GiST</> indexing of <type>point</>
       columns.  The index can be used for several types of queries
       such as <replaceable>point</> <literal>&lt;@@</> <replaceable>polygon</>
       (point is in polygon).  This should make many
       <productname>PostGIS</> queries faster.
d1406 1
a1406 1
       Use red-black binary trees for <acronym>GIN</> index creation
d1411 2
a1412 2
       Red-black trees are self-balancing.  This avoids slowdowns in
       cases where the input is in nonrandom order.
a1424 1

d1429 3
a1431 2
      Allow <link linkend="datatype-binary"><type>bytea</></link> values
      to be written in hex notation (Peter Eisentraut)
d1435 1
a1435 1
      The server parameter <link
d1437 4
a1440 4
      whether hex or traditional format is used for <type>bytea</>
      output.  Libpq's <function>PQescapeByteaConn()</> function automatically
      uses the hex format when connected to <productname>PostgreSQL</> 9.0
      or newer servers.
d1445 2
a1446 3
      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.
d1448 1
d1453 1
a1453 1
      Allow server parameter <link
d1459 1
a1459 11
      The previous maximum <varname>extra_float_digits</> setting was
      <literal>2</>.  There are cases where 3 digits are needed to dump and
      restore <type>float4</> values exactly.  <application>pg_dump</> will
      now use the setting of 3 when dumping from a server that allows it.
     </para>
    </listitem>

    <listitem>
     <para>
      Tighten input requirements for <type>int2vector</> input (Caleb
      Welton)
a1466 1

d1471 1
a1471 1
       Add prefix support in <literal>synonym</> dictionaries
d1478 1
a1478 1
       Add <firstterm>filtering</> dictionaries (Teodor Sigaev)
d1482 1
a1482 1
       Filtering dictionaries allow tokens to be modified then passed to
d1489 1
a1489 1
       Allow underscores in email-address tokens (Teodor Sigaev)
d1495 2
a1496 2
       Use more standards-compliant rules for parsing <acronym>URL</> tokens
       (Tom Lane)
a1507 1

d1512 1
a1512 1
      Support locale-specific <link
d1514 1
a1514 1
      processing with <acronym>UTF-8</> server encoding (Tom Lane)
d1518 4
a1521 6
      Locale-specific regular expression functionality includes
      case-insensitive matching and locale-specific character classes.
      Previously, these features only worked correctly for
      non-<acronym>ASCII</> characters when using a single-byte server
      encoding (such as LATIN1).  They will still misbehave in multi-byte
      encodings other than <acronym>UTF-8</>.
d1540 1
a1540 1
      Add support for scientific notation in <link
d1542 2
a1543 2
      (<link linkend="functions-formatting-numeric-table"><literal>EEEE</>
      specification</link>)
d1550 4
a1553 4
      Make <function>to_char()</> honor <link
      linkend="functions-formatting-datetimemod-table"><literal>FM</></link>
      (fill mode) in <literal>Y</>, <literal>YY</>, and
      <literal>YYY</> specifications (Bruce Momjian, Tom Lane)
d1557 1
a1557 1
      It was already honored by <literal>YYYY</>.
d1572 2
a1573 2
      linkend="functions-geometry-op-table"><quote>overlap</quote></link>
      and <quote>contains</quote> operations over polygons (Teodor Sigaev)
a1580 1

d1590 4
a1593 4
       For example, this is now supported: <literal>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.
d1601 1
a1601 1
       aggregate function to combine values into a single
d1604 4
d1618 2
a1619 3
       For example, <literal>agg(DISTINCT x)</> might pass a NULL <literal>x</>
       value to <function>agg()</>.  This is more consistent with the behavior
       in non-<literal>DISTINCT</> cases.
a1628 1

a1655 1

d1678 8
a1685 4
       Make the <link linkend="information-schema">information_schema</link>
       views properly display maximum octet lengths for <type>char</> and
       <type>varchar</> columns, as well as the proper precision for datetime
       columns (Peter Eisentraut)
d1691 1
a1691 1
       Speed up information_schema privilege views (Joachim Wieland)
a1700 1

d1705 3
a1707 3
       Support execution of anonymous code blocks using the <link
       linkend="SQL-DO"><command>DO</></link> statement
       (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
d1712 1
a1712 2
       and delete a temporary function definition.  Code can be executed in
       any language for which the user has permissions to define a function.
d1718 1
a1718 1
       Implement SQL-standard-compliant <link
d1724 3
a1726 3
       Such triggers are fired only when the specified column(s) are affected
       by the query, e.g. appear in an <command>UPDATE</>'s <literal>SET</>
       list.
d1732 1
a1732 1
       Add the <literal>WHEN</> clause to <link
d1734 2
a1735 2
       to allow control over whether a trigger is fired (Itagaki
       Takahiro)
d1739 2
a1740 3
       While the same type of check can always be performed inside the
       trigger, doing it in an external <literal>WHEN</> clause can have
       performance benefits.
a1780 39

      <para>
       The language can still be removed from a particular database if the
       administrator has security or performance concerns about making it
       available.
      </para>
     </listitem>

     <listitem>
      <para>
       Improve handling of cases where PL/pgSQL variable names conflict with
       identifiers used in queries within a function
       (Tom Lane)
      </para>

      <para>
       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 <link
       linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>
       or the per-function option <literal>#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.
      </para>
     </listitem>

     <listitem>
      <para>
       Make PL/pgSQL use the main lexer, rather than its own version
       (Tom Lane)
      </para>

      <para>
       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.
      </para>
d1798 1
a1798 2
       <literal>CONST</>, so the function's code could not change their
       values.  This restriction has been removed to simplify
d1813 12
a1853 1

d1870 1
a1870 1
       Add server parameter <link
d1872 1
a1872 1
       specify a PL/Perl initialization function (Tim
d1879 8
a1886 4
       and <link
       linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperlu_init</></link>
       are also available for initialization that is specific to the trusted
       or untrusted language respectively.
d1906 1
a1906 2
       Perl <literal>strict</> checks can also be globally enabled with the
       new server parameter <link
d1918 1
a1918 2
       generates an error.  It will not allow loading of modules that
       the administrator has not preloaded via the initialization parameters.
d1936 6
a1947 1

d1967 1
a1967 1
       <type>Bytea</> values passed into PL/Python are now represented as
d1995 1
a1995 1
       cannot be used in the same session with the
a2013 1

d2019 1
a2019 2
     <option>--analyze-only</> option to analyze without vacuuming
     (Bruce Momjian)
a2026 1

d2031 2
a2032 2
       Add support for quoting/escaping the values of <application>psql</>
       <link linkend="APP-PSQL-variables">variables</link> as SQL strings or
d2037 2
a2038 4
       For example, <literal>:'var'</> will produce the value of
       <literal>var</> quoted and properly escaped as a literal string, while
       <literal>:"var"</> will produce its value quoted and escaped as an
       identifier.
d2044 2
a2045 2
       Ignore a leading UTF-8-encoded Unicode byte-order marker in
       script files read by <application>psql</> (Itagaki Takahiro)
a2049 2
       It improves compatibility with certain editors, mostly on Windows,
       that insist on inserting such markers.
d2063 2
a2064 2
       Avoid overwriting of <application>psql</>'s command-line history when
       two <application>psql</> sessions are run concurrently (Tom Lane)
d2077 1
a2077 1
       Show <literal>\timing</> output when it is enabled, regardless of
d2086 1
d2088 6
a2093 1
     <itemizedlist>
d2102 1
a2102 2
        This behavior is now the default.
        The previous formatting is available by using <command>\pset linestyle
a2106 7
      <listitem>
       <para>
        Allow <application>psql</> to use fancy Unicode line-drawing
        characters via <command>\pset linestyle unicode</> (Roger Leigh)
       </para>
      </listitem>

a2114 1

d2119 1
a2119 1
        Make <command>\d</> show child tables that inherit from the specified
d2131 1
a2131 2
        Show definitions of index columns in <command>\d index_name</>
        (Khee Chin)
d2141 2
a2142 6
        Show a view's defining query only in
        <command>\d+</>, not in <command>\d</> (Peter Eisentraut)
       </para>

       <para>
        Always including the query was deemed overly verbose.
a2152 1

d2157 1
a2157 1
       Make <application>pg_dump</>/<application>pg_restore</>
d2165 2
a2166 2
       Fix <application>pg_dump</> to properly dump large objects when
       <literal>standard_conforming_strings</> is enabled (Tom Lane)
d2170 2
a2171 15
       The previous coding could fail when dumping to an archive file
       and then generating script output from <application>pg_restore</>.
      </para>
     </listitem>

     <listitem>
      <para>
       <application>pg_restore</> now emits large-object data in hex format
       when generating script output (Tom Lane)
      </para>

      <para>
       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.
d2184 1
a2184 1
       Make <application>pg_dump</> <link
d2191 1
a2191 1
       These were already provided in custom output mode.
a2201 1

d2206 2
a2207 2
       Allow <application>pg_ctl</> to be used safely to start the
       <application>postmaster</> during a system reboot (Tom Lane)
d2213 1
a2213 2
       <application>postmaster</> lock file, resulting in a transient failure
       to start the database.
d2220 1
a2220 1
       (by invoking <application>initdb</>) (Zdenek Kotala)
d2224 1
d2250 1
a2250 1
       <function>PQconnectStart()</> except that they accept a null-terminated
d2252 1
a2252 1
       be provided in a single string.
d2264 2
a2265 2
       These functions return appropriately quoted and escaped SQL string
       literals and identifiers. The caller is not required to pre-allocate
d2272 1
a2272 1
       Add support for a per-user service file (<link
a2276 1
     </listitem>
a2277 1
     <listitem>
d2279 2
a2280 2
       Properly report an error if the specified <application>libpq</> service
       cannot be found (Peter Eisentraut)
d2286 1
a2286 1
       Add <link linkend="libpq-keepalives">TCP keepalive settings</link>
d2298 10
a2307 3
       When a <link linkend="libpq-pgpass"><filename>.pgpass</></link>-supplied
       password fails, mention where the password came from in the error
       message (Bruce Momjian)
d2317 2
a2318 1
       This improves support for indirectly-signed SSL certificates.
a2327 1

d2348 2
a2349 2
       Add an <application>ecpg</> function <link
       linkend="ecpg-library">ECPGtransactionStatus</link> to return the
d2371 1
a2371 1
       <function>free()</> (Michael Meskes)
d2377 2
a2378 2
       Make <function>ecpg_dynamic_type()</> return zero for non-SQL3 data
       types (Michael Meskes)
d2382 1
a2382 2
       Previously it returned the negative of the data type OID.
       This could be confused with valid type OIDs, however.
d2389 1
a2389 1
       <type>long</> (Michael Meskes)
a2396 1

a2435 1

d2445 1
a2445 1
      linkend="configure"><literal>configure</></link>
d2452 2
a2453 2
      Add support for controlling the Linux out-of-memory killer
      (Alex Hunsaker, Tom Lane)
d2459 13
a2471 5
      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 <link
      linkend="linux-memory-overcommit"><literal>LINUX_OOM_ADJ</></link>
      allows the killer to be reactivated for child processes.
a2478 1

d2505 7
d2519 35
a2559 1

d2564 2
a2565 2
       Support compiling on <link
       linkend="install-win32">64-bit
d2567 1
a2567 1
       mode (Tsutomu Yamada, Magnus Hagander)
d2577 1
a2577 1
       Support server builds using <link
d2585 1
a2585 1
       Support multiprocessor compilation using <productname>Microsoft Visual
a2597 1

d2602 2
a2603 3
      Distribute prebuilt documentation in a subdirectory tree, rather than
      as tar archive files inside the distribution tarball
      (Peter Eisentraut)
d2607 2
a2608 2
      For example, the prebuilt <acronym>HTML</> documentation is now in
      <filename>doc/src/sgml/html/</>; the manual pages are packaged
d2615 1
a2615 1
      Make the server's lexer reentrant (Tom Lane)
d2631 1
a2631 18
      User-defined constraint triggers now have entries in
      <structname>pg_constraint</> as well as <structname>pg_trigger</>
      (Tom Lane)
     </para>

     <para>
      Because of this change,
      <structname>pg_constraint</>.<structfield>pgconstrname</> is now
      redundant and has been removed.
     </para>
    </listitem>

    <listitem>
     <para>
      Add system catalog columns
      <structname>pg_constraint</>.<structfield>conindid</> and
      <structname>pg_trigger</>.<structfield>tgconstrindid</>
      to better document the use of indexes for constraint
d2638 2
a2639 2
      Allow multiple conditions to be communicated to backends using a single
      operating system signal (Fujii Masao)
d2643 2
a2644 2
      This allows new features to be added without a platform-specific
      constraint on the number of signal conditions.
d2662 2
a2663 2
      This improves performance when using many roles or
      databases, and eliminates some possible failure conditions.
d2676 2
a2677 2
      Reduce the length of some file names so that all file paths in the
      distribution tarball are less than 100 characters (Tom Lane)
d2681 8
a2688 1
      Some decompression programs have problems with longer file paths.
d2702 2
a2703 2
      With authors' permissions, remove the few remaining personal source code
      copyright notices (Bruce Momjian)
d2714 3
a2716 29
      Add new documentation <link linkend="non-durability">section</link>
      about running <productname>PostgreSQL</> in non-durable mode
      to improve performance (Bruce Momjian)
     </para>
    </listitem>

    <listitem>
     <para>
      Restructure the <acronym>HTML</> documentation build
      <filename>Makefile</> rules (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
      building (Peter Eisentraut)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve PL/Perl code structure (Tim Bunce)
     </para>
    </listitem>

    <listitem>
     <para>
      Improve error context support in PL/Perl (Alexey Klyukin)
d2723 1
a2723 37
    <title>New Build Requirements</title>

     <para>
      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.
     </para>

    <itemizedlist>
     <listitem>
      <para>
       Require <application>Autoconf</> 2.63 to build
       <application>configure</> (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Flex</> 2.5.31 or later to build
       from a <acronym>CVS</> checkout (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
       Require <application>Perl</> version 5.8 or later to build
       from a <acronym>CVS</> checkout (John Naylor, Andrew Dunstan)
      </para>
     </listitem>

    </itemizedlist>

   </sect4>

   <sect4>
    <title>Portability</title>

d2732 1
a2732 2
       Bonjour support now requires <productname>OS X</> 10.3 or later.
       The older API has been deprecated by Apple.
d2738 1
a2738 1
       Add spinlock support for the <productname>SuperH</>
d2753 1
a2753 1
       integer data type (Tom Lane)
a2754 1
     </listitem>
a2755 1
     <listitem>
d2757 2
a2758 2
       Restructure use of <literal>LDFLAGS</> to be more consistent
       across platforms (Tom Lane)
d2762 1
a2768 1

d2778 3
a2780 3
       These changes remove keyword conflicts that previously made
       <productname>C++</> usage difficult in backend code.  However, there
       are still other complexities when using <productname>C++</> for backend
d2782 1
a2782 2
       appropriate places, and memory management and error handling are
       still problematic.
d2797 3
a2799 3
       Require calls of <function>fastgetattr()</> and
       <function>heap_getattr()</> backend macros to use a non-NULL fourth
       argument (Robert Haas)
a2808 1

d2820 2
a2821 2
       Allow the calling of parser hooks from <acronym>SPI</> and cached
       plans (Tom Lane)
d2827 2
a2828 2
       Add a ProcessUtility hook so loadable modules can control utility
       commands (Itagaki Takahiro)
a2837 1

d2848 2
a2849 2
      upgrading to a new major release of PostgreSQL, thus reducing downtime
      by orders of magnitude. It supports upgrades to 9.0
d2856 3
a2858 3
       Add support for preserving relation <link
       linkend="catalog-pg-class"><structname>relfilenode</></link> values
       during binary upgrades (Bruce Momjian)
d2864 7
a2870 3
       Add support for preserving <structname>pg_type</>
       and <structname>pg_enum</> OIDs during binary upgrades
       (Bruce Momjian)
d2876 2
a2877 3
       Move data files within tablespaces into
       <productname>PostgreSQL</>-version-specific subdirectories
       (Bruce Momjian)
a2892 1

d2897 1
a2897 1
      Add multithreading option (<option>-j</>) to <link
d2903 1
a2903 2
      This allows multiple <acronym>CPU</>s to be used by pgbench,
      reducing the risk of pgbench itself becoming the test bottleneck.
d2956 1
a2956 1
      Improve <filename>contrib/dblink</>'s handling of dropped columns
d2963 1
a2963 2
      and related functions.  These functions now number columns according
      to logical not physical column numbers.
d2970 4
a2973 4
      linkend="hstore"><filename>contrib/hstore</></link>'s data
      length limit, and add B-tree and hash support so <literal>GROUP
      BY</> and <literal>DISTINCT</> operations are possible on
      <type>hstore</> columns (Andrew Gierth)
d2978 1
a2978 2
      make <type>hstore</> a full-function key-value store embedded in
      <productname>PostgreSQL</>.
d2986 1
a2986 1
      to support site-specific password strength policies (Laurenz
d3004 2
a3005 3
      This is designed to be used in the
      <literal>archive_cleanup_command</literal>
      server parameter, to remove no-longer-needed archive files.
@


2.39.2.8
log
@Clarifications for 9.0 release notes

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.7 2010/08/23 02:43:35 tgl Exp $ -->
d46 6
a51 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
      IN SCHEMA</></link> supports mass permissions changes, and
      the <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
      DEFAULT PRIVILEGES</></link> command controls privileges
      of all newly-created objects.  Large object permissions now
      support <command>GRANT</>/<command>REVOKE</> as well.
d57 7
a63 4
      Add support for compiling on <link
      linkend="install-win32-full">64-bit
      <productname>Windows</></link> and running in 64-bit
      mode.
d69 2
a70 6
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement permits
      ad-hoc or anonymous code blocks.  Functions can now be called using named
      parameters.  <link linkend="plpgsql">PL/pgSQL</link> is now installed by default,
      and <link linkend="plperl">PL/Perl</link> and <link linkend="plpython">PL/Python</link>
      have been enhanced in several ways, including support for Python3.
d76 3
a78 5
      More advanced reporting queries with additional <link
      linkend="functions-window">window functions</link>
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability
      to <link linkend="syntax-aggregates"><literal>ORDER BY</></link>
      inside aggregate functions.
d84 3
a86 3
      Triggers now support two new features,
      SQL-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link>, and
d101 3
a103 3
      New and enhanced security features, including <link linkend="client-authentication">RADIUS authentication</link>,
      LDAP authentication improvements, and the new <link linkend="passwordcheck">passwordcheck</link> optional module
      for testing password strength.
d109 4
a112 6
      The <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link>
      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.
d118 6
a123 2
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d129 5
a133 3
      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).
d139 3
a141 4
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>
      let database designers define uniqueness based on complex
      criteria, including for non-scalar data such as time periods,
      ranges and arrays.
d147 4
a150 4
      As part of our decade-long effort to eliminate the pain of VACUUM,
      <link linkend="vacuum-for-space-recovery"><command>VACUUM FULL</></link>
      is now substantially faster by rewriting the entire table and
      indexes, rather than moving around single rows to compact space.
d156 2
a157 2
      <link linkend="using-explain"><command>EXPLAIN</command></link>
      plans are now available in JSON, XML and YAML format, and include
d164 2
a165 2
      The <link linkend="hstore">HStore optional module</link> has been improved with new functions and greater
      data capacity to make it a high-performance key-value store.
d1656 1
a1656 2
       Allow aggregate functions to use <link
       linkend="syntax-aggregates"><literal>ORDER BY</></> (Andrew
@


2.39.2.9
log
@Further editing of release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.50 2010/08/23 02:43:25 tgl Exp $ -->
d46 6
a51 6
      linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE IN
      SCHEMA</></link> supports mass permissions changes on existing objects,
      while <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT
      PRIVILEGES</></link> allows control of privileges for objects created in
      the future.  Large objects (BLOBs) now support privilege management as
      well.
d57 4
a60 8
      Broadly enhanced stored procedure support.
      The <link linkend="SQL-DO"><command>DO</></link> statement supports
      ad-hoc or <quote>anonymous</> code blocks.
      Functions can now be called using named parameters.
      <link linkend="plpgsql">PL/pgSQL</link> is now installed by default, and
      <link linkend="plperl">PL/Perl</link> and <link
      linkend="plpython">PL/Python</link> have been enhanced in several ways,
      including support for Python3.
d66 6
a71 2
      Full support for <link linkend="install-win32">64-bit
      <productname>Windows</></link>.
d77 5
a81 3
      More advanced reporting queries, including additional windowing options
      (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability to
      control the order in which values are fed to aggregate functions.
d87 3
a89 3
      New trigger features, including
      SQL-standard-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link> and
d104 3
a106 3
      <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>.
      These provide a generalized version of unique constraints, allowing
      enforcement of complex conditions.
d112 6
a117 4
      New and enhanced security features, including RADIUS authentication,
      LDAP authentication improvements, and a new contrib module
      <link linkend="passwordcheck"><filename>passwordcheck</></link>
      for testing password strength.
d123 2
a124 6
      New high-performance implementation of the
      <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> feature.
      Pending events are now stored in a memory-based queue rather than
      a table.  Also, a <quote>payload</> string can be sent with each
      event, rather than transmitting just an event name as before.
d130 3
a132 5
      New implementation of
      <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link>.
      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.
d138 4
a141 3
      New contrib module
      <link linkend="pgupgrade"><filename>pg_upgrade</></link>
      to support in-place upgrades from 8.3 or 8.4 to 9.0.
d147 4
a150 4
      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).
d156 2
a157 2
      <link linkend="SQL-EXPLAIN "><command>EXPLAIN</></link> enhancements.
      The output is now available in JSON, XML, or YAML format, and includes
d164 2
a165 2
      <link linkend="hstore"><filename>hstore</></link> improvements,
      including new functions and greater data capacity.
d219 3
a221 3
      Replace server parameter <varname>archive_mode</> with
      <link linkend="guc-wal-level"><varname>wal_level</></link>
      (Heikki Linnakangas)
d255 12
a318 12
   <listitem>
    <para>
     Make <function>date_trunc</> truncate rather than round when reducing
     precision of fractional seconds (Tom Lane)
    </para>

    <para>
     The code always acted this way for integer-based dates/times.
     Now float-based dates/times behave similarly.
    </para>
   </listitem>

a554 13
       Improve performance and reliability of EvalPlanQual rechecks in join
       queries (Tom Lane)
      </para>

      <para>
       <command>UPDATE</>, <command>DELETE</>, and <command>SELECT FOR
       UPDATE/SHARE</> queries that involve joins will now behave much better
       when encountering freshly-updated rows.
      </para>
     </listitem>

     <listitem>
      <para>
d557 1
a557 2
       the table was created or truncated earlier in the same transaction
       (Tom Lane)
d583 2
a584 2
       Outer joins where the inner side is unique and not referenced above
       the join are unnecessary and are therefore now removed.  This will
a603 8
       Improve the optimizer's choices about when to use materialize nodes,
       and when to use sorting versus hashing for <literal>DISTINCT</>
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
d637 1
a637 2
       This avoids the rare error <quote>failed to make a valid plan</>,
       and should also improve planning speed.
d826 1
a826 1
       to allow resetting the statistics counters for individual
d852 1
a852 4
       The legacy system views <structname>pg_roles</>,
       <structname>pg_shadow</>, and <structname>pg_user</>
       do not show combination settings, and therefore no longer
       completely represent the configuration for a user or database.
d854 1
a888 13
       Change server parameter <link
       linkend="guc-log-temp-files"><varname>log_temp_files</></link> to
       use default file size units of kilobytes (Robert Haas)
      </para>

      <para>
       Previously this setting was interpreted in bytes if no units were
       specified.
      </para>
     </listitem>

     <listitem>
      <para>
d898 1
d903 1
a903 2
       Properly enforce superuser permissions for custom server parameters
       (Tom Lane)
d907 5
a911 6
       Non-superusers can no longer issue <command>ALTER
       ROLE</>/<command>DATABASE SET</> for parameters that are not currently
       known to the server.  This allows the server to correctly check that
       superuser-only parameters are only set by superusers.  Previously,
       the <literal>SET</> would be allowed and then ignored at session start,
       making superuser-only custom parameters practically useless.
d915 13
d960 1
a960 1
      syntax (Tom Lane)
d1066 1
a1066 1
    <title><command>ALTER TABLE</></title>
d1072 17
a1088 2
       Implement <literal>IF EXISTS</> for <literal>ALTER TABLE DROP COLUMN</>
       and <literal>ALTER TABLE DROP CONSTRAINT </> (Andres Freund)
a1225 1
     </listitem>
a1226 13
     <listitem>
      <para>
       Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
       DEFAULT PRIVILEGES</></link> command to control privileges
       of objects created later (Petr Jelinek)
      </para>

      <para>
       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.
      </para>
d1238 1
a1238 1
       large object, and the ownership of large objects is tracked.
d1288 1
a1288 1
      Shared catalogs still cannot be clustered.
a1433 8
       By default, multicolumn indexes are now named after all their columns;
       and index expression columns are now named based on their expressions
       (Tom Lane)
      </para>
     </listitem>

     <listitem>
      <para>
d1524 1
a1524 1
      Tighten input checking for <type>int2vector</> values (Caleb
d1633 3
a1635 3
      Fix <function>to_char()</> to output localized numeric and monetary
      strings in the correct encoding on <productname>Windows</>
      (Hiroshi Inoue, Itagaki Takahiro, Bruce Momjian)
d1657 2
a1658 1
       linkend="syntax-aggregates"><literal>ORDER BY</></> (Andrew Gierth)
a1670 7
       Multi-argument aggregate functions can now use <literal>DISTINCT</>
       (Andrew Gierth)
      </para>
     </listitem>

     <listitem>
      <para>
d1749 4
a1752 11
       Update the <link linkend="information-schema">information_schema</link>
       views to conform to SQL:2008
       (Peter Eisentraut)
      </para>
     </listitem>

     <listitem>
      <para>
       Make the <literal>information_schema</> views correctly display maximum
       octet lengths for <type>char</> and <type>varchar</> columns (Peter
       Eisentraut)
d1758 1
a1758 2
       Speed up <literal>information_schema</> privilege views
       (Joachim Wieland)
a1893 17
       Avoid throwing an unnecessary error for an invalid record reference
       (Tom Lane)
      </para>

      <para>
       An error is now thrown only if the reference is actually fetched,
       rather than whenever the enclosing expression is reached.  For
       example, many people have tried to do this in triggers:
<programlisting>
if TG_OP = 'INSERT' AND NEW.col1 = ... then
</programlisting>
       This will now actually work as expected.
      </para>
     </listitem>

     <listitem>
      <para>
d2060 3
a2062 4
       binary, rather than the PostgreSQL <type>bytea</> text format.
       <type>Bytea</> values containing null bytes are now also output
       properly from PL/Python.  Passing of boolean, integer, and float
       values was also improved.
d2068 2
a2069 2
       Support <link linkend="plpython-arrays">arrays</link> as parameters and
       return values in PL/Python (Peter Eisentraut)
d2075 1
a2075 1
       Improve mapping of SQL domains to Python types (Peter Eisentraut)
d2333 4
a2336 4
       Previously, <application>pg_ctl</>'s parent process could have been
       mistakenly identified as a running <application>postmaster</> based on
       a stale <application>postmaster</> lock file, resulting in a transient
       failure to start the database.
a2421 8
       Avoid extra system calls to block and unblock <literal>SIGPIPE</>
       in <application>libpq</>, on platforms that offer alternative methods
       (Jeremy Kerr)
      </para>
     </listitem>

     <listitem>
      <para>
d2520 1
a2520 1
        Add out-of-scope cursor support in <application>ecpg</>'s native mode
d2527 1
a2527 1
        in <application>ecpg</>'s Informix-compatibility mode.
d2533 1
a2533 1
        Allow dynamic cursor names in <application>ecpg</> (Boszormenyi Zoltan)
d2604 3
a2606 3
       and <literal>installcheck</> targets, but they also build
       <acronym>HTML</> documentation, build and test <filename>contrib</>,
       and test server-side languages and <application>ecpg</>.
d2612 1
a2612 1
       Add data and documentation installation location control to <link
d2620 2
a2621 3
      Add Makefile rules to build documentation as a single <acronym>HTML</>
      file or as a single plain-text file
      (Peter Eisentraut, Bruce Momjian)
d2655 7
d2760 1
a2760 26
      Automatically generate the initial contents of
      <structname>pg_attribute</> for <quote>bootstrapped</> catalogs
      (John Naylor)
     </para>

     <para>
      This greatly simplifies changes to these catalogs.
     </para>
    </listitem>

    <listitem>
     <para>
      Split the processing of
      <command>INSERT</>/<command>UPDATE</>/<command>DELETE</> operations out
      of <filename>execMain.c</> (Marko Tiikkaja)
     </para>

     <para>
      Updates are now executed in a separate ModifyTable node.  This change is
      necessary infrastructure for future improvements.
     </para>
    </listitem>

    <listitem>
     <para>
      Simplify translation of <application>psql</>'s SQL help text
d2767 1
a2767 1
      Reduce the lengths of some file names so that all file paths in the
d2806 2
a2807 3
      Restructure the <acronym>HTML</> documentation
      <filename>Makefile</> rules to make their dependency checks work
      correctly, avoiding unnecessary rebuilds (Peter Eisentraut)
d2814 1
a2814 5
      building, rather than <productname>Docbook2X</> (Peter Eisentraut)
     </para>

     <para>
      This changes the set of tools needed to build the man pages.
d2826 1
a2826 1
      Improve error context reports in PL/Perl (Alexey Klyukin)
a2908 6

      <para>
       <literal>LDFLAGS</> is now used for linking both executables and shared
       libraries, and we add on <literal>LDFLAGS_EX</> when linking
       executables, or <literal>LDFLAGS_SL</> when linking shared libraries.
      </para>
d2922 2
a2923 2
       Make backend header files safe to include in <productname>C++</>
       (Kurt Harriman, Peter Eisentraut)
a2946 13
       Change calling convention for <function>SearchSysCache()</> and related
       functions to avoid hard-wiring the maximum number of cache keys
       (Robert Haas)
      </para>

      <para>
       Existing calls will still work for the moment, but can be expected to
       break in 9.1 or later if not converted.
      </para>
     </listitem>

     <listitem>
      <para>
d2948 1
a2948 1
       <function>heap_getattr()</> backend macros to provide a non-NULL fourth
d2964 2
a2965 2
       Add parser hooks for processing ColumnRef and ParamRef nodes
       (Tom Lane)
d3088 1
a3088 1
      This filtering dictionary removes accents from letters, which
@


2.39.2.10
log
@Update 9.0 release notes for changes since beta4.

Note: as usual, bug fixes that were also applied in back branches are not
considered material to include in a new major release's notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.52 2010/08/24 23:45:32 tgl Exp $ -->
d11 1
a11 1
  <para>CURRENT AS OF 2010-08-24</para>
a278 13
    <listitem>
     <para>
      Array input now considers only plain ASCII whitespace characters
      to be potentially ignorable; it will never ignore non-ASCII characters,
      even if they are whitespace according to some locales (Tom Lane)
     </para>

     <para>
      This avoids some corner cases where array values could be interpreted
      differently depending on the server's locale settings.
     </para>
    </listitem>

a1117 8
     <listitem>
      <para>
       Fix failure of <literal>ALTER TABLE <replaceable>table</> ADD COLUMN
       <replaceable>col</> serial</literal> when done by non-owner of table
       (Tom Lane)
      </para>
     </listitem>

d1691 1
a1691 1
       linkend="syntax-aggregates"><literal>ORDER BY</></link> (Andrew Gierth)
a2381 11
     <listitem>
      <para>
       <application>pg_restore</> now complains if any command-line arguments
       remain after the switches and optional file name (Tom Lane)
      </para>

      <para>
       Previously, it silently ignored any such arguments.
      </para>
     </listitem>

a3069 15
     <listitem>
      <para>
       Custom typanalyze functions should no longer rely on
       <structname>VacAttrStats</>.<structfield>attr</> to determine the type
       of data they will be passed (Tom Lane)
      </para>

      <para>
       This was changed to allow collection of statistics on index columns
       for which the storage type is different from the underlying column
       data type.  There are new fields that tell the actual datatype being
       analyzed.
      </para>
     </listitem>

@


2.39.2.11
log
@Update release notes, per comments from Simon Riggs.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.10 2010/08/25 00:48:06 tgl Exp $ -->
d192 2
a193 3
   improvements.  Also, users who make extensive use of PL/pgSQL,
   Point-In-Time Recovery (PITR), and Warm Standby should test their
   solutions because of slight user-visible changes in these areas.
d220 3
a222 6
      <link linkend="guc-archive-mode"><varname>archive_mode</></link>
      now only affects <link
      linkend="guc-archive-command"><varname>archive_command</></link>;
      a new setting, <link
      linkend="guc-wal-level"><varname>wal_level</></link>, affects
      the contents of the write-ahead log (Heikki Linnakangas)
@


2.39.2.12
log
@Improve release notes' description of Teodor's fixes for polygon overlaps
and contains operators.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.54 2010/08/25 19:41:38 momjian Exp $ -->
d1701 2
a1702 13
      linkend="functions-geometry-op-table"><quote>overlaps</quote></link>
      and <quote>contains</quote> operations for polygons (Teodor Sigaev)
     </para>

     <para>
      The polygon <literal>&amp;&amp;</> (overlaps) operator formerly just
      checked to see if the two polygons' bounding boxes overlapped.  It now
      does a more correct check.  The polygon <literal>@@&gt;</> and
      <literal>&lt;@@</> (contains/contained by) operators formerly checked
      to see if one polygon's vertexes were all contained in the other;
      this can wrongly report <quote>true</> for some non-convex polygons.
      Now they check that all line segments of one polygon are contained in
      the other.
@


2.39.2.13
log
@Add a compatibility note about plpgsql's treatment of SELECT INTO rec.fld
when fld is of composite type.  Per discussion of bug #5644 from Valentine
Gogichashvili.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.39.2.12 2010/09/01 15:14:48 tgl Exp $ -->
a438 25
      PL/pgSQL now treats selection into composite fields more consistently
      (Tom Lane)
     </para>

     <para>
      Formerly, a statement like
      <literal>SELECT ... INTO <replaceable>rec</>.<replaceable>fld</> FROM ...</literal>
      was treated as a scalar assignment even if the record field
      <replaceable>fld</> was of composite type.  Now it is treated as a
      record assignment, the same as when the <literal>INTO</> target is a
      regular variable of composite type.  So the values to be assigned to the
      field's subfields should be written as separate columns of the
      <command>SELECT</> list, not as a <literal>ROW(...)</> construct as in
      previous versions.
     </para>

     <para>
      If you need to do this in a way that will work in both 9.0 and previous
      releases, you can write something like
      <literal><replaceable>rec</>.<replaceable>fld</> := ROW(...) FROM ...</literal>.
     </para>
    </listitem>

    <listitem>
     <para>
@


2.39.2.14
log
@Stamp 9.0 release notes with expected release date; also some last-minute
copy-editing.
@
text
@d1 1
a1 2
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.56 2010/09/15 17:45:57 tgl Exp $ -->
<!-- See header comment in release.sgml about typical markup -->
d8 1
a8 1
   <simpara>2010-09-20</simpara>
d11 2
d50 1
a50 1
      the future.  Large objects (BLOBs) now support permissions management as
d192 3
a194 3
   improvements.  In particular, users who make extensive use of PL/pgSQL,
   Point-In-Time Recovery (PITR), or Warm Standby should test their
   applications because of slight user-visible changes in those areas.
d754 1
a754 1
       Allow setting of number-of-distinct-values statistics using <link
d893 1
a893 1
       tables and functions (Magnus Hagander)
d916 1
a916 1
       in the new <structname>pg_db_role_setting</> system catalog. A new
d993 1
a993 2
       making superuser-only custom parameters much less useful than they
       should be.
d1070 1
a1070 1
       Support Unicode surrogate pairs (dual 16-bit representation) in
d1187 1
a1187 1
       Add a shortcut for copying all properties in <command>CREATE
d1664 3
a1666 2
      Allow function calls to supply parameter names and match them to named
      parameters in the function definition (Pavel Stehule)
d1670 6
a1675 3
      For example, if a function is defined to take parameters <literal>a</>
      and <literal>b</>, it can be called with <literal>func(a := 7, b
      := 12)</> or <literal>func(b := 12, a := 7)</>.
d1681 2
a1682 3
      Support locale-specific <link
      linkend="functions-posix-regexp">regular expression</link>
      processing with <acronym>UTF-8</> server encoding (Tom Lane)
d1686 3
a1688 6
      Locale-specific regular expression functionality includes
      case-insensitive matching and locale-specific character classes.
      Previously, these features worked correctly for non-<acronym>ASCII</>
      characters only if the database used a single-byte server encoding (such
      as LATIN1).  They will still misbehave in multi-byte encodings other
      than <acronym>UTF-8</>.
d2012 1
a2012 1
if TG_OP = 'INSERT' and NEW.col1 = ... then
d2238 3
a2240 3
     Add an <option>--analyze-only</> option to <link
     linkend="APP-VACUUMDB"><command>vacuumdb</></link>, to analyze without
     vacuuming (Bruce Momjian)
d2576 1
a2576 2
       Load all SSL certificates given in the client certificate file
       (Tom Lane)
d2604 1
a2604 1
       [ <literal>OUTPUT</> ]</link> statement to <application>ecpg</>
d2611 3
a2613 2
       Add an <link linkend="ecpg-library">ECPGtransactionStatus</link>
       function to return the current transaction status (Bernd Helmle)
d2710 1
a2710 1
      The thread-safety option can be disabled with <link
d2750 1
a2750 1
       and <literal>installcheck</> targets, but they also build the
d2766 2
a2767 2
      Add Makefile rules to build the <productname>PostgreSQL</> documentation
      as a single <acronym>HTML</> file or as a single plain-text file
d3130 1
a3130 1
       break in 9.1 or later if not converted to the new style.
d3175 7
@


2.38
log
@Update 9.0 release notes so streaming replication and hot standby is not
assumed to require continuous archiving.

Per report from Fujii Masao
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.37 2010/06/30 14:25:24 adunstan Exp $ -->
d135 1
a135 1
  <para>CURRENT AS OF 2010-06-03</para>
d182 8
d370 10
a379 4
      <para>
       Remove support for platforms that don't have a working 64-bit
       integer data type (Tom Lane)
      </para>
d381 2
a382 7
      <para>
       It is believed all still-supported platforms have working 64-bit
       integer data types.
      </para>
     </listitem>
    </itemizedlist>
   </sect3>
d581 3
a583 1
       This is particularly useful for partitioned tables.
a786 1

d842 13
d1952 3
a1954 1
       linkend="plpython-python23"><literal>plpython3u</></link>.
d2237 12
d2264 1
a2264 1
       Load SSL certificate chain (Tom Lane)
d2463 14
d2663 8
d2794 1
a2794 1
      to support in-place upgrades (Bruce)
d2907 13
d2949 13
@


2.37
log
@Correct missing/misspelled surname.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.36 2010/06/29 21:20:19 tgl Exp $ -->
d401 1
a401 1
       Allow continuous archive standby systems to accept read-only queries
d415 1
a415 1
       Allow continuous archive (<acronym>WAL</>) files to be streamed to a
@


2.36
log
@Add compatibility note warning that plpgsql is now stricter about the column
datatypes of composite results, per gripe from Marcel Asio.  Some desultory
copy-editing of plpgsql-related sections of the release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.35 2010/06/24 18:33:05 rhaas Exp $ -->
d2450 1
a2450 1
       from a <acronym>CVS</> copy (John Naylor, Andrew)
d2551 1
a2551 1
      and PL/Perl (Peter Eisentraut, Andrew Dustan)
@


2.35
log
@Further 9.0 release notes updates.

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.34 2010/06/16 18:46:18 momjian Exp $ -->
d33 5
a37 4
      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 (<acronym>WAL</>) files 
      to be streamed over a network port to a standby database server.
d58 3
a60 2
      parameters.  PL/pgSQL is now installed by default, and PL/Perl and PL/Python
      have been enhanced in several ways, including support for Python3.
d68 1
a68 1
      linkend="SQL-CREATETRIGGER">per-column triggers</link>, and 
d91 1
a91 1
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> 
d139 1
a139 1
   or use of <application>pg_upgrade</application> is required 
d145 5
a149 4
   Version 9.0 contains a number of changes which 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.  Observe the following incompatibilities:
d276 2
a277 2
      No longer change function input variable names via 
      <command>REPLACE FUNCTION</command>(Pavel Stehule).
d281 4
a284 4
      In order to support names parameter calls, it is
      no longer possible to change the aliases for input variables
      in the function declaration in place.  You now have to <command>DROP
      </command> and recreate the function.
d293 1
a293 1
   <title>PL/pgSQL Variables</title>
d298 1
a298 1
      Have PL/pgSQL throw an error if a variable name conflicts with a
d303 6
a308 1
      This behavior can be changed via the server variable <link
d310 1
a310 4
      or by the per-function option <literal>#variable_conflict</>.
      The former behavior was to bind to variable names over
      column names, but not consistently.  Stored procedures
      with naming conflicts will probably need to be refactored.
d316 15
a330 1
      Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom Lane)
d334 5
a338 4
      Instead, use <link
      linkend="plpgsql-declaration-parameters"><literal>ALIAS</></link>,
      which can now alias any variable, not just dollar sign
      variables, e.g. <literal>$1</>.
d344 1
a344 2
      PL/pgSQL no longer allows unquoted variables names that match SQL
      reserved words (Tom Lane)
d348 4
a351 1
      Variables can be double-quoted to avoid this restriction.  
d364 1
a364 1
       integer data types (Tom Lane)
d368 2
a369 2
       It is believed all supported platforms have working 64-bit integer
       data types.
d379 1
a379 1
    Version 9.0 has an unprecedented number of new major features, 
d448 3
a450 2
     Version 9.0 also contains several performance and optimizer enhancements to 
     improve specific uses of PostgreSQL and remedy certain poor-performing cases.
d495 1
a495 1
       the query are unnecessary and are therefore now removed.  This will 
d677 1
a677 1
     With increased use of PostgreSQL in high-end production systems, 
d693 1
a693 1
       This allows DBAs to characterize database traffic 
d772 1
a772 1
       The primary use of this feature is setting schema 
d889 1
a889 1
      For drivers which support this feature, this saves an entire 
d1083 1
a1083 1
       operators that do not have built-in constraints. 
d1089 1
a1089 1
       or ranges of values. This supports data integrity at the 
d1160 1
a1160 1
      event queue system for PostgreSQL, with transactional support 
d1227 1
a1227 1
       The new output formats will support the development of new tools 
d1281 1
a1281 1
       The previous method was usually slower and caused index bloat.  
d1332 1
a1332 1
       This feature supports GiST indexing of point operations on polygons, 
d1334 1
a1334 1
       indexing only worked for bounding boxes.  This should make many 
d1714 1
a1714 1
       Install server-side language PL/pgSQL by default (Bruce Momjian)
d1720 2
a1721 1
       Allow PL/pgSQL to handle row types with dropped columns (Pavel Stehule)
d1727 1
a1727 1
       Allow <literal>IN</> parameters to be assigned values within
d1730 8
d1748 7
a1754 1
       Have PL/pgSQL use the main lexer, rather than a custom version (Tom Lane)
a1757 8
    </itemizedlist>

   </sect4>

   <sect4>
    <title><link linkend="plpgsql-cursors">PL/pgSQL Cursors</link></title>
    <itemizedlist>

d1760 1
a1760 1
       Add count and <literal>ALL</> options to <command>MOVE
d1774 2
a1775 2
       Add PL/pgSQL's <command>OPEN cursor FOR EXECUTE</> to use parameters
       (Pavel Stehule, Itagaki Takahiro)
d2515 1
a2515 1
      Enable the server lexer to be reentrant (Tom Lane)
d2829 2
a2830 3
      This filter dictionary removes accents from tokens, and 
      makes full-text searches over multiple languages much 
      easier.
@


2.34
log
@Update doc description for 9.0 release note item:

      Have <command>SELECT</> and <command>CREATE TABLE AS</> return
      row counts to the client
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.33 2010/06/16 18:31:39 momjian Exp $ -->
d58 1
a58 1
      have been enhanced in several ways.
a292 1

d335 17
d356 5
d597 5
d653 6
d670 2
a671 2
        This allows DBAs to characterize database traffic 
        and troubleshoot problems by source application.
d681 6
d694 5
d866 3
a868 3
      This allows operations that do not return a result, like
      <command>SELECT INTO</>, to return a count of the number of rows
      processed.
d1309 4
a1312 1
       DETAILS?
d2702 14
a2758 13
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></link>
      to support in-place upgrades (Bruce)
     </para>

     <para>
      This avoids the requirement of dumping/reloading the database when
      upgrading to a new major release of PostgreSQL.  It supports upgrades
      from PostgreSQL 8.3 and 8.4.
     </para>
    </listitem>

    <listitem>
     <para>
d2799 3
a2801 1
      This filter dictionary removes accents from tokens.
d2827 2
a2828 1
      New functions and operators were also added.
@


2.33
log
@9.0 release notes updates.

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.32 2010/06/16 14:50:34 adunstan Exp $ -->
d823 3
a825 3
      For drivers which support this feature, this saves an entire 
      round-trip to the client, allowing result counts and pagination
      to be calculated without a second <command>COUNT</command> query.
@


2.32
log
@Remove perl symbol table additions for plperl functions, and mention of it
in the release notes, as it is not apparently providing anything useful.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.31 2010/06/14 02:18:43 rhaas Exp $ -->
d111 1
a111 1
      mode
d136 3
a138 2
   A dump/restore using <application>pg_dump</application> is
   required for those wishing to migrate data from any previous
d143 4
a146 1
   Observe the following incompatibilities:
d495 6
d636 5
d706 2
d709 2
d744 6
d823 6
d943 1
a943 1
       archiving mode.
d1308 7
d1458 2
a1459 1
       significant.
@


2.31
log
@Fix misplaced modifier.

As suggested by Ian Barwick.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.30 2010/06/14 01:07:41 rhaas Exp $ -->
a1761 12
     <listitem>
      <para>
       PL/Perl subroutines are now given perl-visible names (Tim Bunce)
      </para>

      <para>
       PL/Perl subroutines are anonymous subrefs; this change adds entries 
       to the Perl symbol table for them, making profiling and code coverage 
       tools much more usable.
      </para>
     </listitem>

@


2.30
log
@Fix typo.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.29 2010/06/10 21:48:28 momjian Exp $ -->
d845 2
a846 2
      Allow <link linkend="SQL-COMMENT">comments</link> only on
      columns of tables, views, and composite types, not other
@


2.29
log
@Update text of 9.0 release notes

Josh Berkus
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.28 2010/06/07 02:01:08 itagaki Exp $ -->
d100 1
a100 1
      <command>VACUUM FULL</> is not substantially faster by
@


2.28
log
@Replace "slave" to "standby" in documentation for consistent terminology.
Almost all of the terms in docs and messages were replaced, but still
remains in a few comments and README files in codes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.27 2010/06/03 21:23:02 tgl Exp $ -->
a10 4
<!-- beta2 notes
recovery_connections -> hot_standby
-->

a30 53
     <para>
      Allow continuous archive standby systems to accept read-only queries
     </para>
    </listitem>

    <listitem>
     <para>
      Allow continuous archive (<acronym>WAL</>) files to be streamed to a
      standby system
     </para>
    </listitem>

    <listitem>
     <para>
      Add the ability to make mass permission changes per
       schema using the new <link
       linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
       IN SCHEMA</></link> clause
     </para>
    </listitem>

    <listitem>
     <para>
      Add the ability to control large object permissions with
      <command>GRANT</>/<command>REVOKE</>
     </para>
    </listitem>

    <listitem>
     <para>
      Implement anonymous functions using the <link
      linkend="SQL-DO"><command>DO</></link> statement
     </para>
    </listitem>

    <listitem>
     <para>
      Allow function calls to supply parameter names and match them to named
      parameters in the function definition (Pavel Stehule)
     </para>
    </listitem>

    <listitem>
     <para>
      Install server-side language PL/pgSQL by default
     </para>
    </listitem>

    <listitem>
     <para>
      Major PL/Perl enhancements
     </para>
    </listitem>
a31 8
    <listitem>
     <para>
      Allow SQL-compliant <link
      linkend="SQL-CREATETRIGGER">per-column triggers</link>
     </para>
    </listitem>

    <listitem>
d33 4
a36 2
      Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
      unique constraints</link>
d42 7
a48 3
      Have <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
      linkend="SQL-NOTIFY"><command>NOTIFY</></link> store events
      in a memory queue, rather than a system table
d54 5
a58 2
      Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
      to pass an optional string to listeners
d64 4
a67 2
      Change <command>VACUUM FULL</> to rewrite the entire table and
      indexes, rather than moving around single rows to compact space
d73 2
a74 1
      Add prefix support for the full text search synonym dictionary
d80 3
a82 1
      Use red-black trees for <acronym>GIN</> index creation
d88 6
a93 4
      Add <link
      linkend="functions-binarystring-other"><function>get_bit()</></link>
      and <function>set_bit()</> functions for <type>bit</>
      strings, mirroring those for <type>bytea</>
d99 4
a102 4
      Add the ability for clients to set an <link
      linkend="libpq-connect-application-name">application
      name</link>, which is displayed in
      <structname>pg_stat_activity</>
d118 1
a118 1
      to support in-place upgrades
d162 1
a162 1
      (e.g. Perl-regex compatible) for many years (Tom Lane)
d261 17
a277 3
      Administrators still can rename such columns manually. Expression
      index names are also not renamed. WHY ARE EXPRESSION INDEXES
      SIGNIFICANT?
d301 2
a302 1
      column names.
d326 1
a326 1
      Variables can be double-quoted to avoid this restriction.
d341 10
a350 1
    <title>Continuous Archiving</title>
a351 1

d373 1
d399 6
d438 1
d441 2
a442 1
       Allow <literal>IS NOT NULL</> restrictions to use indexes (Tom Lane)
d446 4
a449 3
       This is particularly useful for finding
       <function>MAX()</>/<function>MIN()</> values in indexes that also
       contain NULLs.
d455 1
a455 2
       Remove unnecessary <link linkend="queries-join">outer
       joins</link> (Robert Haas)
d459 3
a461 2
       Outer joins where the inner side is unique and not referenced in
       the query are unnecessary and are therefore now removed.
d554 3
a556 1
       is normally computed by <command>ANALYZE</>.
d889 4
a892 2
       It currently supports tables, views, sequences, and functions, and
       also has per-schema control.
d986 9
a994 1
       operators that do not have built-in constraints.
d996 1
d1026 7
d1062 3
a1064 1
      This greatly improves performance for these operations.
d1125 12
d1142 1
a1157 7
       Allow <command>EXPLAIN</> output in <acronym>XML</>, <acronym>JSON</>,
       and <acronym>YAML</> formats (Robert Haas, Greg Sabino Mullane)
      </para>
     </listitem>

     <listitem>
      <para>
d1184 3
a1186 1
       The previous method was usually slower and caused index bloat.
d1188 1
d1246 2
a1247 2
       Red-black trees are self-balanced so allow for faster index
     creation.
d1249 1
@


2.27
log
@Remove link that breaks HISTORY file generation.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.26 2010/06/03 19:38:39 momjian Exp $ -->
d401 1
a401 1
       slave with very little delay. There are new <filename>postgresql.conf</>
@


2.26
log
@Fix CREATE TRIGGER release mention, WHERE -> WHEN.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.25 2010/06/03 16:33:36 momjian Exp $ -->
d2555 1
a2555 1
       appropriate places (see <xref linkend="extend-Cpp">).
@


2.25
log
@Update 9.0 release notes to current.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.24 2010/06/01 13:43:39 momjian Exp $ -->
d1551 1
a1551 1
       external <literal>WHERE</> clause has performance benefits.
@


2.24
log
@Update C++ release note item wording.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.23 2010/06/01 03:19:36 momjian Exp $ -->
d182 1
a182 1
  <para>CURRENT AS OF 2010-05-12</para>
a590 1

d618 7
d1345 2
a1346 2
      and <literal>b</>, it can be called with <literal>func(7 AS a, 12
      AS b)</> or <literal>func(12 AS b, 7 AS a)</>.
d2106 11
d2181 7
d2555 1
a2555 1
       appropriate places.
@


2.23
log
@Comment out C++ docs for later user.  Tone down C++ compatibility in 9.0
release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.22 2010/05/17 17:46:13 adunstan Exp $ -->
d2531 1
a2531 1
       some cases.
@


2.22
log
@Clarify plperl subroutine name release notes item, remove now redundant Safe.pm item.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.21 2010/05/13 12:47:50 momjian Exp $ -->
d2522 1
a2522 1
       Allow use of <productname>C++</> functions in backend code (Kurt
d2527 5
a2531 3
       This removes keyword conflicts that previously made <productname>C++</>
       usage difficult in backend code. <literal>extern "C" { }</> might still
       be necessary.
@


2.21
log
@Fix HISTORY.html build using </link>, not </>.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.20 2010/05/13 01:57:01 momjian Exp $ -->
d1742 1
a1742 1
       PL/Perl subroutines are now given names (Tim Bunce)
d1746 3
a1748 9
       This is for the use of profiling and code coverage tools. DIDN'T
       THEY HAVE NAMES BEFORE?
      </para>
     </listitem>

     <listitem>
      <para>
       PL/Perl no longer allows <application>Safe</> version 2.20 because
       it is unsafe (Tim Bunce)
@


2.20
log
@Update release notes to current.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.19 2010/04/29 22:03:41 momjian Exp $ -->
d166 1
a166 1
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></>
d2636 1
a2636 1
      Add <link linkend="pgupgrade"><filename>/contrib/pg_upgrade</></>
@


2.19
log
@Documentation fix:  CREATE TRIGGER 'WHERE' -> 'WHEN'

Selena Deckelmann
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.18 2010/04/29 21:02:50 momjian Exp $ -->
d11 4
d164 7
d182 1
a182 1
  <para>CURRENT AS OF 2010-04-29</para>
d2636 13
@


2.18
log
@Doc fix -- last major item should not be a bullet.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.17 2010/04/29 20:54:28 momjian Exp $ -->
d1526 1
a1526 1
       Add <literal>WHERE</> clause to <link
@


2.17
log
@Move alpha release notes into a separate file;  re-align sgml tags.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.16 2010/04/29 20:43:22 momjian Exp $ -->
d160 1
a160 5
    <listitem>
     <para>
      The above items are explained in more detail in the sections below.
     </para>
    </listitem>
d162 3
a164 1
   </itemizedlist>
@


2.16
log
@Update 9.0 release notes to current;  add major items and introductory
text.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.15 2010/04/05 02:46:42 tgl Exp $ -->
d3 1784
d1788 26
a1813 2
 <sect1 id="release-9-0">
  <title>Release 9.0</title>
d1815 1
a1815 4
  <note>
   <title>Release date</title>
   <simpara>2010-??-??</simpara>
  </note>
d1817 3
a1819 2
  <sect2>
    <title>Overview</title>
d1821 1
d1823 6
a1828 10
      Based on overwhelming user demand, this release of
      <productname>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
      been quite conservative in their scope, this release shows a
      bold new desire to provide facilities that every new and existing
      user of <productname>PostgreSQL</> will embrace.  This has all
      been done with few incompatibilities.  The major areas of
      enhancement are:
    </para>
d1830 2
d1834 51
a1884 1
      <!-- This list duplicates items below, but without authors or details-->
d1887 4
a1890 3
        <para>
          Allow continuous archive standby systems to accept read-only queries
        </para>
d1894 9
a1902 4
        <para>
          Allow continuous archive (<acronym>WAL</>) files to be streamed to a
          standby system
        </para>
d1905 1
a1905 8
      <listitem>
        <para>
          Add the ability to make mass permission changes per
           schema using the new <link
           linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
           IN SCHEMA</></link> clause
        </para>
      </listitem>
d1907 1
a1907 6
      <listitem>
        <para>
          Add the ability to control large object permissions with
          <command>GRANT</>/<command>REVOKE</>
        </para>
      </listitem>
d1909 5
a1913 6
      <listitem>
        <para>
          Implement anonymous functions using the <link
          linkend="SQL-DO"><command>DO</></link> statement
        </para>
      </listitem>
d1916 4
a1919 5
        <para>
          Allow function calls to supply parameter names and match them to named
          parameters in the function definition (Pavel Stehule)
        </para>
      </listitem>
d1921 4
a1924 4
      <listitem>
        <para>
          Install server-side language PL/pgSQL by default
        </para>
d1928 3
a1930 4
        <para>
          Major PL/Perl enhancements
        </para>
      </listitem>
d1932 3
a1934 5
      <listitem>
        <para>
          Allow SQL-compliant <link
          linkend="SQL-CREATETRIGGER">per-column triggers</link>
        </para>
d1938 4
a1941 4
        <para>
          Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
          unique constraints</link>
        </para>
d1944 1
a1944 7
      <listitem>
        <para>
          Have <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
          linkend="SQL-NOTIFY"><command>NOTIFY</></link> store events
          in a memory queue, rather than a system table
        </para>
      </listitem>
d1946 2
a1947 6
      <listitem>
        <para>
          Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
          to pass an optional string to listeners
        </para>
      </listitem>
d1949 3
a1951 6
      <listitem>
        <para>
          Change <command>VACUUM FULL</> to rewrite the entire table and
          indexes, rather than moving around single rows to compact space
        </para>
      </listitem>
d1953 7
a1959 5
      <listitem>
        <para>
          Add prefix support for the full text search synonym dictionary
        </para>
      </listitem>
d1961 5
a1965 5
      <listitem>
        <para>
          Use red-black trees for <acronym>GIN</> index creation
        </para>
      </listitem>
d1967 5
a1971 8
      <listitem>
        <para>
          Add <link
          linkend="functions-binarystring-other"><function>get_bit()</></link>
          and <function>set_bit()</> functions for <type>bit</>
          strings, mirroring those for <type>bytea</>
        </para>
      </listitem>
d1973 6
a1978 8
      <listitem>
        <para>
          Add the ability for clients to set an <link
          linkend="libpq-connect-application-name">application
          name</link>, which is displayed in
          <structname>pg_stat_activity</>
        </para>
      </listitem>
d1980 7
a1986 8
      <listitem>
        <para>
          Add support for compiling on <link
          linkend="install-win32-full">64-bit
          <productname>Windows</></link> and running in 64-bit
          mode
        </para>
      </listitem>
d1988 4
a1991 5
      <listitem>
        <para>
          The above items are explained in more detail in the sections below.
        </para>
      </listitem>
d1995 12
a2006 1
  </sect2>
d2008 6
a2013 1
  <sect2>
d2015 6
a2020 2
    <title>Migration to Version 9.0</title>
    <para>CURRENT AS OF 2010-04-29</para>
a2021 5
    <para>
      A dump/restore using <application>pg_dump</application> is
      required for those wishing to migrate data from any previous
      release.
    </para>
d2023 1
a2023 3
    <para>
      Observe the following incompatibilities:
    </para>
d2025 1
a2025 2
    <sect3>
      <title>Server Settings</title>
d2027 1
a2027 1
      <itemizedlist>
d2029 2
a2030 24
        <listitem>
          <para>
            Remove server variable <varname>add_missing_from</>, which was
            defaulted to off for many years (Tom Lane)
          </para>
        </listitem>

        <listitem>
          <para>
            Remove server variable <varname>regex_flavor</>, which
            was defaulted to <link
            linkend="posix-syntax-details"><literal>advanced</></link>
            (e.g. Perl-regex compatible) for many years (Tom Lane)
          </para>
        </listitem>

        <listitem>
          <para>
            It is now necessary to set <link
            linkend="guc-wal-level"><varname>wal_level</></link> to
            <literal>archive</> to do continuous archiving.
            (Heikki Linnakangas)
          </para>
        </listitem>
d2032 2
a2033 1
      </itemizedlist>
d2035 1
a2035 1
    </sect3>
d2037 8
a2044 3
    <sect3>
      <title>Queries</title>
      <itemizedlist>
d2046 7
a2052 11
      <listitem>
        <para>
          When querying a <link linkend="ddl-inherit">parent table</link>,
          do not do additional permission checks on child tables
          returned as part of the query (Peter Eisentraut)
        </para>

        <para>
          The SQL standard specifies this behavior.
        </para>
      </listitem>
d2054 6
a2059 6
      <listitem>
        <para>
          Have fractional seconds conversion truncate rather than
          round when using float-based dates/times (Tom Lane)
        </para>
      </listitem>
d2061 6
a2066 1
      </itemizedlist>
d2068 7
a2074 1
    </sect3>
d2076 5
a2080 3
    <sect3>
      <title>String Handling</title>
      <itemizedlist>
d2082 6
a2087 20
      <listitem>
        <para>
          Improve standards compliance of <link
          linkend="functions-similarto-regexp"><literal>SIMILAR TO</></link>
          patterns and SQL-style <function>substring()</> patterns (Tom Lane)
        </para>

        <para>
          This includes treating <literal>?</> and <literal>{...}</> as
          pattern metacharacters, while they were simple literal characters
          before; that corresponds to new features added in SQL:2008.
          Also, <literal>^</> and <literal>$</> are now treated as simple
          literal characters; formerly they were treated as metacharacters,
          as if the pattern were following POSIX rather than SQL rules.
          Also, in SQL-standard <function>substring()</>, use of parentheses
          for nesting no longer interferes with capturing of a substring.
          Also, processing of bracket expressions (character classes) is
          now more standards-compliant.
        </para>
      </listitem>
d2089 7
a2095 7
      <listitem>
        <para>
         Reject negative length values in 3-parameter <link
         linkend="functions-string-sql"><function>substring()</></link>
         for bit strings, per the SQL standard (Tom Lane)
        </para>
      </listitem>
d2099 43
a2141 1
    </sect3>
d2143 6
a2148 3
    <sect3>
      <title>Object Renaming</title>
      <itemizedlist>
d2150 5
a2154 19
        <listitem>
          <para>
            Tighten enforcement of column renaming when a child table inherits
            the renamed column from an unrelated parent (KaiGai Kohei)
          </para>
        </listitem>

        <listitem>
          <para>
            No longer rename index names and index column names when table
            columns are renamed (Tom Lane)
          </para>

          <para>
            Administrators still can rename such columns manually.  Expression
            index names are also not renamed.  WHY ARE EXPRESSION INDEXES
            SIGNIFICANT?
          </para>
        </listitem>
d2156 4
a2159 1
      </itemizedlist>
d2161 1
a2161 1
    </sect3>
d2163 2
a2164 2
    <sect3>
      <title>PL/pgSQL Variables</title>
d2167 5
d2173 6
a2178 39
        <listitem>
          <para>
            Have PL/pgSQL throw an error if a variable name conflicts with a
            column name used in a query (Tom Lane)
          </para>

          <para>
            This behavior can be changed via the server variable <link
            linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>,
            or by the per-function option <literal>#variable_conflict</>.
            The former behavior was to bind to variable names over
            column names.
          </para>
        </listitem>

        <listitem>
          <para>
            Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom Lane)
          </para>

          <para>
            Instead, use <link
            linkend="plpgsql-declaration-parameters"><literal>ALIAS</></link>,
            which can now alias any variable, not just dollar sign
            variables, e.g. <literal>$1</>.
          </para>
        </listitem>

        <listitem>
          <para>
            PL/pgSQL no longer allows unquoted variables names that match SQL
            reserved words (Tom Lane)
          </para>

          <para>
            Variables can be double-quoted to avoid this restriction.
          </para>
        </listitem>
      </itemizedlist>
d2180 5
a2184 2
    </sect3>
  </sect2>
d2186 7
a2192 2
  <sect2>
    <title>Changes</title>
d2194 1
a2194 2
    <sect3>
      <title>Server</title>
d2196 1
a2196 374
      <sect4>
        <title>Continuous Archiving</title>
        <itemizedlist>

          <listitem>
            <para>
              Allow continuous archive standby systems to accept read-only queries
              (Simon Riggs, Heikki Linnakangas)
            </para>

            <para>
              This feature is called Hot Standby.  There are new
              <filename>postgresql.conf</> and <filename>recovery.conf</>
              settings to enable this feature, as well as extensive
              <link linkend="hot-standby">documentation</link>.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow continuous archive (<acronym>WAL</>) files to be streamed to a
              standby system (Fujii Masao, Heikki Linnakangas)
            </para>

            <para>
              Previously <acronym>WAL</> files could be sent to standby systems only
              as 16 megabytes files;  this allows master changes to be sent to the
              slave with very little delay.  There are new <filename>postgresql.conf</>
              and <filename>recovery.conf</> settings to enable this
              feature, as well as extensive <link
              linkend="streaming-replication">documentation</link>.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link
              linkend="functions-recovery-info-table"><function>pg_last_xlog_receive_location()</></link>
              and <function>pg_last_xlog_replay_location()</>, which
              can be used to monitor standby server <acronym>WAL</>
              activity (Simon Riggs, Fujii Masao, Heikki Linnakangas)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Performance</title>
        <itemizedlist>

          <listitem>
            <para>
              Improve performance of finding inherited child tables (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow per-tablespace sequential and random page cost variables
              (<varname>seq_page_cost</>/<varname>random_page_cost</>) via
              <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE
              ...  SET/RESET</></link> (Robert Haas)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve performance of <link
              linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
              used in the same transaction as table creation (Tom Lane)
            </para>
          </listitem>

          </itemizedlist>

      </sect4>

      <sect4>
        <title>Optimizer</title>

        <itemizedlist>
          <listitem>
            <para>
              Allow <literal>IS NOT NULL</> restrictions to use indexes (Tom Lane)
            </para>

            <para>
              This is particularly useful for finding
              <function>MAX()</>/<function>MIN()</> values in indexes that also
              contain NULLs.
            </para>
          </listitem>

          <listitem>
            <para>
              Remove unnecessary <link linkend="queries-join">outer
              joins</link> (Robert Haas)
            </para>

            <para>
              Outer joins where the inner side is unique and not referenced in
              the query are unnecessary and are therefore now removed.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve optimizer equivalence detection of &lt;&gt; <type>boolean</>
              tests (Tom Lane)
            </para>
          </listitem>
        </itemizedlist>
      </sect4>

      <sect4>
        <title><link linkend="geqo">GEQO</link></title>
        <itemizedlist>

          <listitem>
            <para>
              Use the same random seed everytime GEQO plans a query (Andres
              Freund)
            </para>

            <para>
              While the Genetic Query Optimizer (GEQO) still selects
              random plans, it now selects the same random plans for
              identical queries.  You can modify <link
              linkend="guc-geqo-seed">geqo_seed</link> to randomize
              the starting value of the random plan generator.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve GEQO plan selection (Tom Lane).
            </para>

            <para>
              This avoids the rare error, "failed to make a  valid plan".
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Optimizer Statistics</title>
        <itemizedlist>

          <listitem>
            <para>
              Improve <link linkend="SQL-ANALYZE"><command>ANALYZE</></link>
              to support inheritance-tree statistics (Tom Lane)
            </para>

            <para>
              This is particularly useful for partitioned tables.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve <link linkend="routine-vacuuming">autovacuum</link>
              detection of when re-analyze is necessary (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve optimizer statistics for greater/less-than comparisons
              (Tom Lane)
            </para>

            <para>
              When looking up optimizer 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.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow setting of distinct statistics using <link
              linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>
              (Robert Haas)
            </para>

            <para>
              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 <command>ANALYZE</>.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Authentication</title>
        <itemizedlist>

          <listitem>
            <para>
              Add support for <link
              linkend="auth-radius"><acronym>RADIUS</></link> (Remote
              Authentication Dial In User Service) authentication
              (Magnus Hagander)
            </para>
          </listitem>


          <listitem>
            <para>
              Allow <link linkend="auth-ldap"><acronym>LDAP</></link>
              (Lightweight Directory Access Protocol) authentication
              to operate in "search/bind" mode (Robert Fleming, Magnus)
            </para>

            <para>
              This allows the user to be looked up first, then the system uses
              the <acronym>DN</> (Distinguished Name) returned for that user.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link
              linkend="auth-pg-hba-conf"><literal>samehost</></link>
              and <literal>samenet</> designations to
              <filename>pg_hba.conf</> (Stef Walter)
            </para>

            <para>
              These match the server's <acronym>IP</> address and network address
              respectively.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Monitoring</title>
        <itemizedlist>

          <listitem>
            <para>
              Add the ability for clients to set an <link
              linkend="libpq-connect-application-name">application
              name</link>, which is displayed in
              <structname>pg_stat_activity</> (Dave Page)
            </para>
          </listitem>

          <listitem>
            <para>
              Add an SQL state option (<literal>%e</>) to <link
              linkend="guc-log-line-prefix"><varname>log_line_prefix</></link>
              (Guillaume Smet)
            </para>
          </listitem>

          <listitem>
            <para>
              Write to the Windows event log in <acronym>UTF16</> encoding
              (Itagaki Takahiro)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Statistics Counters</title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link
              linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared('bgwriter')</></link>
              to reset the cluster-wide shared statistics of the
              bgwriter (Greg Smith)
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link
              linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</></link>
              and <function>pg_stat_reset_single_function_counters()</>
              to allow the reseting of statistics counters for individual
              tables and indexes (Magnus Hagander)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Server Settings</title>
        <itemizedlist>

          <listitem>
            <para>
              Allow setting of configuration variables based on <link
              linkend="sql-alterrole">database/role</link>
              combinations (Alvaro Herrera)
            </para>

            <para>
              Previously only per-database and per-role setting were possible,
              not combinations.  All role and database settings are now stored
              in the new <structname>pg_db_role_setting</> system table.  A new
              <application>psql</> <literal>\drds</> command shows these settings.
              Backwards-compatible system views do not show this information.
            </para>
          </listitem>

          <listitem>
            <para>
              Add boolean variable <link
              linkend="guc-bonjour"><varname>bonjour</></link>, which
              controls whether a Bonjour-enabled binary advertises
              itself via <productname>Bonjour</> (Tom Lane)
            </para>

            <para>
              The default is off, meaning it does not advertise.
            </para>
          </listitem>

          <listitem>
            <para>
              Add boolean variable <link
              linkend="guc-enable-material"><varname>enable_material</></link>, which
              controls the use of materialize nodes in the optimizer
              (Robert Haas)
            </para>

            <para>
              The default is on.
            </para>
          </listitem>

          <listitem>
            <para>
              Log changed parameter values when <filename>postgresql.conf</> is
              reloaded (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Add proper permissions for custom variables (Tom Lane)
            </para>

            <para>
              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.
            </para>
          </listitem>
d2198 1
a2198 1
        </itemizedlist>
d2200 1
a2200 1
      </sect4>
d2202 40
a2241 1
    </sect3>
d2243 1
a2243 3
    <sect3>
      <title>Queries</title>
      <itemizedlist>
d2245 3
a2247 73
        <listitem>
          <para>
            Do <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT
            FOR UPDATE</>/<literal>SHARE</></link> processing after
            applying <literal>LIMIT</>, so the number of rows returned
            is always predictable (Tom Lane)
          </para>

          <para>
            Previously, concurrent transactions could potentially cause
            <command>SELECT</> to return fewer rows than specified by
            <literal>LIMIT</>.  <literal>FOR UPDATE</> can still affect
            <literal>ORDER BY</> ordering, but this can be corrected by using
            <literal>FOR UPDATE</> in a subquery.
          </para>
        </listitem>

        <listitem>
          <para>
            Allow mixing of traditional and SQL-standard <link
            linkend="SQL-LIMIT"><literal>LIMIT</>/<literal>OFFSET</></link>
            syntax in the same query (Tom Lane)
          </para>
        </listitem>

        <listitem>
          <para>
            Increase the supported frame options in <link
            linkend="SQL-WINDOW">window functions</link> (Hitoshi
            Harada)
          </para>

          <para>
            This allows frames (<literal>RANGE</> or <literal>ROWS</>) to start
            with <literal>CURRENT ROW</>, and to use the <literal>ROWS n
            PRECEDING</>/<literal>FOLLOWING</> clause.
          </para>
        </listitem>

        <listitem>
          <para>
            Have <command>SELECT</> and <command>CREATE TABLE AS</> return
            row counts to the client
            (Boszormenyi Zoltan)
          </para>

          <para>
            <application>psql</> does not display these counts.
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title>Unicode Strings</title>
        <itemizedlist>

          <listitem>
            <para>
              Add Unicode surrogate pair (dual 16-bit) support to
              <link
              linkend="sql-syntax-strings-uescape"><literal>U&amp;</></link>
              strings and identifiers (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow Unicode escapes in <link
              linkend="sql-syntax-strings-escape"><literal>E'...'</></link>
              strings (Marko Kreen)
            </para>
          </listitem>
d2249 7
a2255 1
        </itemizedlist>
d2257 7
a2263 1
      </sect4>
d2265 7
a2271 1
    </sect3>
d2273 6
a2278 3
    <sect3>
      <title>Object Manipulation</title>
      <itemizedlist>
d2280 1
a2280 188
        <listitem>
          <para>
            Speed up <link linkend="SQL-CREATEDATABASE"><command>CREATE
            DATABASE</></link> by deferring flushes to disk (Andres
            Freund, Greg Stark)
          </para>
        </listitem>

        <listitem>
          <para>
            Allow <link linkend="SQL-COMMENT">comments</link> only on
            columns of tables, views, and composite types, not other
            objects like indexes and <acronym>TOAST</> tables (Tom Lane)
          </para>
        </listitem>

        <listitem>
          <para>
            Allow the creation of <link
            linkend="SQL-CREATETYPE-enum">enumerate types</link> with
            no labels (Bruce Momjian)
          </para>

          <para>
            This is useful for supporting binary upgrades.
          </para>
        </listitem>

        <listitem>
          <para>
            Have columns defined with storage type <literal>MAIN</> remain on
            the main heap page unless it cannot fit (Kevin Grittner)
          </para>

          <para>
            Previously <literal>MAIN</> values were forced to <acronym>TOAST</>
            tables until the row size was one-quarter of the page size.
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
       <title><command>ALTER</></title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
              DEFAULT PRIVILEGES</></link> command to control privileges
              of all newly-created objects (Petr Jelinek)
            </para>

            <para>
              It currently supports tables, views, sequences, and functions, and
              also has per-schema control.
            </para>
          </listitem>

          <listitem>
            <para>
              Implement <literal>IF EXISTS</> for <literal>DROP COLUMN</> and
              <literal>DROP CONSTRAINT </> (Andres Freund)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>ALTER TABLE</> commands which rewrite tables to skip
              <acronym>WAL</> logging (Itagaki Takahiro)
            </para>

            <para>
              Such operations either complete fully or are rolled back, so
              <acronym>WAL</> archiving can be skipped, unless running in continuous
              archiving mode.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Add support for copying <literal>COMMENTS</> and <literal>STORAGE</>
              to the <command>CREATE TABLE ... LIKE INCLUDING</> command (Itagaki
              Takahiro)
            </para>
          </listitem>

          <listitem>
            <para>
              Add support for copying all attributes to the <command>CREATE
              TABLE LIKE INCLUDING</> command (Itagaki Takahiro)
            </para>
          </listitem>

          <listitem>
            <para>
              Add the SQL-standard <command>CREATE TABLE ... OF type</> command
              (Peter Eisentraut)
            </para>

            <para>
              This allows the creation of a table to match an existing composite
              type.  Additional constraints and defaults can be specified in the
              command.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Constraints</title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
              unique constraints</link> (Dean Rasheed)
            </para>

            <para>
              This allows <command>UPDATE tab SET col = col + 1</> to work on
              columns that have a unique indexes or are marked as primary keys,
              but <literal>DEFERRABLE INITIALLY DEFERRED</> must be used to mark
              the constraint as deferred.
            </para>
          </listitem>

          <listitem>
            <para>
              Generalize uniqueness constraints by allowing arbitrary operator
              comparisons, not just equality (Jeff Davis)
            </para>

            <para>
              This is enabled with the <link
              linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
              TABLE CONSTRAINT ...  EXCLUDE</></link> 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.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve the constraint violation error message to report the values
              causing the failure (Itagaki Takahiro)
            </para>

            <para>
              For example, a uniqueness constraint violation now reports <literal>Key
              (x)=(2) already exists</>.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Object Permissions</title>
        <itemizedlist>

          <listitem>
            <para>
              Add the ability to make mass permission changes per
              schema using the new <link
              linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
              IN SCHEMA</></link> clause (Petr Jelinek)
            </para>
          </listitem>

          <listitem>
            <para>
              Add the ability to control large object permissions with
              <command>GRANT</>/<command>REVOKE</> (KaiGai Kohei)
            </para>
          </listitem>
d2282 1
a2282 1
        </itemizedlist>
d2284 3
a2286 1
      </sect4>
d2288 5
a2292 1
    </sect3>
d2294 6
a2299 2
    <sect3>
      <title>Utility Operations</title>
d2301 6
a2306 1
      <itemizedlist>
d2308 1
a2308 186
        <listitem>
          <para>
            Have <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
            linkend="SQL-NOTIFY"><command>NOTIFY</></link> store events
            in a memory queue, rather than a system table (Joachim
            Wieland)
          </para>

          <para>
            This greatly improves performance for these operations.
          </para>
        </listitem>

        <listitem>
          <para>
            Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
            to pass an optional string to listeners (Joachim Wieland)
          </para>
        </listitem>

        <listitem>
          <para>
            Allow <link linkend="SQL-CLUSTER"><command>CLUSTER</></link>
            on all system tables (Tom Lane)
          </para>

          <para>
            Global system tables still cannot be clustered.
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title><link linkend="SQL-COPY"><command>COPY</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Allow <literal>*</> as a parameter in <literal>FORCE QUOTE</> for
              <literal>COPY CSV</> (Itagaki Takahiro)
            </para>

            <para>
              This forces quotes for all <acronym>CSV</> output columns.
            </para>
          </listitem>

          <listitem>
            <para>
              Add new <command>COPY</> syntax that allows parameters to be
              specified in parentheses (Robert Haas, Emmanuel Cecchet)
            </para>

            <para>
              This allows greater flexibility for future <command>COPY</> options.
              The old syntax is still supported.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Add new <command>EXPLAIN (BUFFERS)</> to report query buffer
              activity (Itagaki Takahiro)
            </para>

            <para>
              log_*_stats log output, e.g. <link
              linkend="runtime-config-statistics-monitor">log_statement_stats</link>,
              no longer shows this information.
            </para>
          </listitem>

          <listitem>
            <para>
              Add hash usage information to <command>EXPLAIN</> output (Robert
              Haas)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>EXPLAIN</> output in <acronym>XML</>, <acronym>JSON</>,
              and <acronym>YAML</> formats (Robert Haas, Greg Sabino Mullane)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>EXPLAIN</> options to be specified inside parentheses
              (Robert Haas)
            </para>

            <para>
              This allows for the expansion of <command>EXPLAIN</> options.  The
              old syntax is still supported.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="SQL-VACUUM"><command>VACUUM</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Change <command>VACUUM FULL</> to rewrite the entire table and
              indexes, rather than moving around single rows to compact space
              (Itagaki Takahiro, Tom Lane)
            </para>

            <para>
              The previous method was usually slower and caused index bloat.
            </para>
          </listitem>

          <listitem>
            <para>
              Add new <command>VACUUM</> syntax that allows parameters to be
              specified in parentheses (Itagaki Takahiro)
            </para>

            <para>
              This allows greater flexibility for future <command>VACUUM</>
              options.  The old syntax is still supported.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Indexes</title>
        <itemizedlist>

          <listitem>
            <para>
              Allow an index to be auto-named by not supplying an index name to
              <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link> (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <link linkend="SQL-REINDEX"><command>REINDEX</></link>
              on system indexes (Tom Lane)
            </para>

            <para>
              WAS THIS POSSIBLE ON ANY SYSTEM TABLE BEFORE?  NON-HARDWIRED ONES?
            </para>
          </listitem>

          <listitem>
            <para>
              Add <literal>point_ops</> opclass for GiST (Teodor Sigaev)
            </para>

            <para>
              DETAILS?
            </para>
          </listitem>

          <listitem>
            <para>
              Use red-black trees for <acronym>GIN</> index creation
             (Teodor Sigaev)
            </para>

            <para>
              Red-black trees are self-balanced so allow for faster index
          creation.
            </para>
          </listitem>
d2310 1
a2310 1
        </itemizedlist>
d2312 3
a2314 1
      </sect4>
d2316 7
a2322 1
    </sect3>
d2324 4
a2327 3
    <sect3>
      <title>Data Types</title>
      <itemizedlist>
d2329 7
a2335 65
        <listitem>
          <para>
            Allow hex values to be specified in <link
            linkend="datatype-binary"><type>bytea</></link> strings
            (Peter Eisentraut)
          </para>

          <para>
            The variable <link
            linkend="guc-bytea-output">bytea_output</link> controls
            if hex (default) or octal escapes are used for <type>bytea</>
            output.  (SWITCH DEFAULT FOR BETA?  PETER) Libpq's
            <function>PQescapeByteaConn()</> now uses the hex format
            for <productname>PostgreSQL</> 9.0 servers.
          </para>
        </listitem>

        <listitem>
          <para>
            Allow <link
            linkend="guc-extra-float-digits">extra_float_digits</link>
            to be increased to <literal>3</> (Tom Lane)
          </para>

          <para>
            The previous maximum <varname>extra_float_digits</> was <literal>2</>.
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title><link linkend="textsearch">Full Text Search</link></title>
        <itemizedlist>

          <listitem>
            <para>
              Add prefix support for the full text search synonym dictionary
              (Teodor Sigaev)
            </para>
          </listitem>

          <listitem>
            <para>
              Add full text search filtering dictionaries (Teodor Sigaev)
            </para>

            <para>
              Filtering dictionaries allow tokens to be modified and passed to
              subsequent dictionaries.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow underscores in full text email addresses (Teodor Sigaev)
            </para>
          </listitem>

          <listitem>
            <para>
              Use more standards-compliant rules for <acronym>URL</>
              parsing (Tom Lane)
            </para>
          </listitem>
d2337 6
a2342 1
        </itemizedlist>
d2344 1
a2344 1
      </sect4>
d2346 1
a2346 1
    </sect3>
d2348 1
a2348 3
    <sect3>
      <title>Functions</title>
      <itemizedlist>
d2350 115
a2464 232
        <listitem>
          <para>
            Allow case-insensitive <link
            linkend="functions-posix-regexp">regular expression</link>
            matching with <acronym>UTF-8</> server encodings.
          </para>

          <para>
            Previously, only <acronym>ASCII</> characters and single-byte
            encodings worked properly.  Other multi-byte, non-<acronym>UTF-8</>
            encodings are still broken for case-insensitive regular expression
            matching.
          </para>
        </listitem>

        <listitem>
          <para>
            Allow function calls to supply parameter names and match them to named
            parameters in the function definition (Pavel Stehule)
          </para>

          <para>
            For example, if a function is defined to take parameters <literal>a</>
            and <literal>b</>, it can be called with <literal>func(7 AS a, 12
            AS b)</> or <literal>func(12 AS b, 7 AS a)</>.
          </para>
        </listitem>

        <listitem>
          <para>
            Add support for <link
            linkend="functions-formatting"><function>to_char()</></link>
            scientific notation output (<link
            linkend="functions-formatting-numeric-table"><literal>'EEEE'</></link>)
            (Pavel Stehule, Brendan Jurd)
          </para>
        </listitem>

        <listitem>
          <para>
            Have <function>to_char()</> honor <link
            linkend="functions-formatting-datetimemod-table"><literal>'FM'</></link>
            (fill mode) in <literal>'Y'</>, <literal>'YY'</>, and
            <literal>'YYY'</> specifications (Bruce Momjian, Tom Lane)
          </para>

          <para>
            It was already honored by <literal>'YYYY'</>.
          </para>
        </listitem>

        <listitem>
          <para>
            Fix <function>to_char()</> to output the proper localized
            numeric and monetary characters on <productname>Windows</>
            (Hiroshi Inoue, Itagaki Takahir, Bruce Momjian)
          </para>
        </listitem>

        <listitem>
          <para>
            Correct calculations of <link
            linkend="functions-geometry-op-table">"overlap"</link>
            and "contains" operations over polygons (Teodor Sigaev)
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title>Aggregates</title>
        <itemizedlist>

          <listitem>
            <para>
              Allow aggregate functions to use <literal>ORDER BY</> (Andrew
              Gierth)
            </para>

            <para>
              For example, this is now supported, <literal>array_agg(a ORDER BY
              b)</>.  This is useful for aggregates where the order of values is
              significant.
            </para>
          </listitem>

          <listitem>
            <para>
              Add the <link
              linkend="functions-aggregate-table"><function>string_agg()</></link>
              aggregate function which aggregates values into a single
              string (Pavel Stehule)
            </para>

            <para>
              An optional second argument allows specification of a delimiter.
            </para>
          </listitem>

          <listitem>
            <para>
              Aggregate functions that are called with <literal>DISTINCT</> are
              now passed NULL values if the aggregate transition function is
              not marked as <literal>STRICT</> (Andrew Gierth)
            </para>

            <para>
              For example, <literal>agg(DISTINCT x)</> might pass NULL <literal>x</>
              values to <function>agg()</>.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Bit Strings</title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link
              linkend="functions-binarystring-other"><function>get_bit()</></link>
              and <function>set_bit()</> functions for <type>bit</>
              strings, mirroring those for <type>bytea</> (Leonardo
              F)
            </para>
          </listitem>

          <listitem>
            <para>
              Implement <link
              linkend="functions-string-sql"><function>OVERLAY()</></link>
              (replace) for <type>bit</> strings and <type>bytea</>
              (Leonardo F)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Object Information Functions</title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link
              linkend="functions-admin-dbsize"><function>pg_table_size()</></link>
              and <function>pg_indexes_size()</> to provide a more
              user-friendly interface to the <function>pg_relation_size()</>
              function (Bernd Helmle)
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link
              linkend="functions-info-access-table"><function>has_sequence_privilege()</></link>
              for sequence permission checking (Abhijit Menon-Sen)
            </para>
          </listitem>

          <listitem>
            <para>
              Have <link linkend="information-schema">information
              schema</link> properly display date type octet lengths
              (Peter Eisentraut)
            </para>

            <para>
              The reported length is now the maximum octet length;  previously,
              a huge value was reported.
            </para>
          </listitem>

          <listitem>
            <para>
              Speed up information schema privilege views (Joachim Wieland)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Function and Trigger Creation</title>
        <itemizedlist>

          <listitem>
            <para>
              Implement anonymous functions using the <link
              linkend="SQL-DO"><command>DO</></link> statement (Petr
              Jelinek, Joshua Tolley, Hannu Valtonen)
            </para>

            <para>
              This allows execution of server-side code without the need to create
              a new function and execute it.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow SQL-compliant <link
              linkend="SQL-CREATETRIGGER">per-column triggers</link>
              (Itagaki Takahiro)
            </para>

            <para>
              Such triggers are fired only if the specified columns are affected
              by the query, e.g. in <command>UPDATE</>'s <literal>SET</> list.
              information_schema now also shows this information.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <literal>WHERE</> clause to <link
              linkend="SQL-CREATETRIGGER"><command>CREATE TRIGGER</></link>
              to allow control over whether a trigger is fired (Takahiro
              Itagaki)
            </para>

            <para>
              While a check can be performed inside the trigger, doing it in an
              external <literal>WHERE</> clause has performance benefits.
            </para>
          </listitem>
d2466 1
a2466 1
        </itemizedlist>
d2468 3
a2470 1
      </sect4>
d2472 4
a2475 1
    </sect3>
d2477 4
a2480 2
    <sect3>
      <title>Server-Side Languages</title>
d2482 6
a2487 1
      <itemizedlist>
d2489 6
a2494 259
        <listitem>
          <para>
            Add the <literal>OR REPLACE</> clause to <link
            linkend="SQL-CREATELANGUAGE"><command>CREATE LANGUAGE</></link>
            (Tom Lane)
          </para>

          <para>
            This is helpful to optionally install a language if it does not
            already exist, and is particularly helpful now that PL/pgSQL is
            installed by default.
          </para>
        </listitem>

        </itemizedlist>

        <sect4>
        <title><link linkend="plpgsql">PL/PgSQL</link> Server-Side
        Language</title>

        <itemizedlist>

          <listitem>
            <para>
              Install server-side language PL/pgSQL by default (Bruce Momjian)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow PL/pgSQL to handle row types with dropped columns (Pavel Stehule)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <literal>IN</> parameters to be assigned values within
              PL/pgSQL functions (Steve Prentice)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve error location reporting in PL/pgSQL (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Have PL/pgSQL use the main lexer, rather than a custom version (Tom Lane)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="plpgsql-cursors">PL/pgSQL Cursors</link></title>
        <itemizedlist>

          <listitem>
            <para>
              Add count and <literal>ALL</> options to <command>MOVE
              FORWARD</>/<literal>BACKWARD</> in PL/pgSQL (Pavel Stehule)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow PL/pgSQL's <literal>WHERE CURRENT OF</> to use a cursor
              variable (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Add PL/pgSQL's <command>OPEN cursor FOR EXECUTE</> to use parameters
              (Pavel Stehule, Itagaki Takahiro)
            </para>

            <para>
              This is accomplished with a new <literal>USING</> clause.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="plperl">PL/Perl</link> Server-Side Language</title>
        <itemizedlist>

          <listitem>
            <para>
              Add new PL/Perl functions:  <link
              linkend="plperl-utility-functions"><function>quote_literal()</></link>,
              <function>quote_nullable()</>, <function>quote_ident()</>,
              <function>encode_bytea()</>, <function>decode_bytea()</>,
              <function>looks_like_number()</>,
              <function>encode_array_literal()</>,
              <function>encode_array_constructor()</> (Tim Bunce)
            </para>
          </listitem>

          <listitem>
            <para>
              Add server variable <link
              linkend="guc-plperl-on-init">plperl.on_init</link> to
              specify a PL/Perl Perl initialization function (Tim
              Bunce)
            </para>

            <para>
              <link
              linkend="guc-plperl-on-plperl-init">plperl.on_plperl_init</link>
              and <varname>plperl.on_plperlu_init</> are also available
              for trusted/untrusted-specific initialization.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve error context support in PL/Perl (Alexey Klyukin)
            </para>
          </listitem>

          <listitem>
            <para>
              Support <command>END</> blocks in PL/Perl (Tim Bunce)
            </para>

            <para>
              <command>END</> blocks do not currently allow database access.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>use strict</> in PL/Perl (Tim Bunce)
            </para>

            <para>
              This can be enabled with the server variable <link
              linkend="guc-plperl-use-strict">plperl.use_strict</link>.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>require</> in PL/Perl (Tim Bunce)
            </para>

            <para>
              This basically tests to see if the module is loaded, and if not,
              generates an error.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <command>use feature</> in PL/Perl if Perl version 5.10 or
              later is used (Tim Bunce)
            </para>
          </listitem>

          <listitem>
            <para>
              Verify that PL/Perl return values are valid in the server encoding
              (Andrew Dunstan)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve PL/Perl code structure (Tim Bunce)
            </para>
          </listitem>

          <listitem>
            <para>
              PL/Perl subroutines are now given names (Tim Bunce)
            </para>

            <para>
              This is for the use of profiling and code coverage tools.  DIDN'T
              THEY HAVE NAMES BEFORE?
            </para>
          </listitem>

          <listitem>
            <para>
              PL/Perl no longer allows <application>Safe</> version 2.20 because
              it is unsafe (Tim Bunce)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="plpython">PL/Python</link> Server-Side Language</title>
        <itemizedlist>

          <listitem>
            <para>
              Add Unicode support in PL/Python (Peter Eisentraut)
            </para>

            <para>
              Strings are automatically converted from/to the server encoding as
              necessary.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve <type>bytea</> support in PL/Python (Caleb Welton)
            </para>

            <para>
              <type>Bytea</> values passed into PL/Python now are represented as
              binary, rather than the Postgres <type>bytea</> text format.  Null
              bytes are now also output properly from PL/Python.  <type>Boolean</>
              and <type>numeric</> value passing in PL/Python was also improved.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link linkend="plpython-arrays">array parameter/return
              support</link> to PL/Python (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve mapping of domains to Python base types in PL/Python (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Add <application>Python</> 3 support to PL/Python (Peter Eisentraut)
            </para>

            <para>
              The new server-side language is called <link
              linkend="plpython-python23"><literal>plpython3u</></link>.
            </para>
          </listitem>

          <listitem>
            <para>
              Improve error location and exception reporting in PL/Python (Peter Eisentraut)
            </para>
          </listitem>
d2496 5
a2500 1
        </itemizedlist>
d2502 5
a2506 1
      </sect4>
a2507 1
    </sect3>
d2509 1
a2509 3
    <sect3>
      <title>Client Applications</title>
      <itemizedlist>
d2511 1
a2511 374
        <listitem>
        <para>
          Add <link linkend="APP-VACUUMDB"><command>vacuumdb</></link>
          <option>--analyze-only</> option to only analyze (Bruce Momjian)
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title><link linkend="APP-PSQL"><application>psql</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Properly escape <application>psql</> <link
              linkend="APP-PSQL-variables">variables</link> and
              identifiers (Pavel Stehule, Robert Haas)
            </para>

            <para>
              For example, <literal>:'var'</> will be escaped as a literal string, and
              <literal>:"var"</> will be escaped as an SQL identifier.
            </para>
          </listitem>

          <listitem>
            <para>
              Ignore leading UTF-8-encoded Unicode byte-order marker in
              <application>psql</> (Itagaki Takahiro)
            </para>

            <para>
              This is enabled when the client encoding is <acronym>UTF-8</>.
            </para>
          </listitem>

          <listitem>
            <para>
              Fix <command>psql --file -</> to properly honor <link
              linkend="R1-APP-PSQL-3"><option>--single-transaction</></link>
              (Bruce Momjian)
            </para>
          </listitem>

          <listitem>
            <para>
              Prevent overwriting of <application>psql</>'s command-line history
              if two <application>psql</> sessions are run simultaneously (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Improve <application>psql</>'s tab completion support (Itagaki
              Takahiro)
            </para>
          </listitem>

        </itemizedlist>

        <sect5>
        <title><application>psql</> Display</title>
          <itemizedlist>

            <listitem>
              <para>
                Allow <application>psql</> to use fancy Unicode line-drawing
                characters via <command>\pset linestyle unicode</> (Roger Leigh)
              </para>
            </listitem>

            <listitem>
              <para>
                Improve display of wrapped columns in <application>psql</> (Roger
                Leigh)
              </para>

              <para>
                The previous format is available by using <command>\pset linestyle
                old-ascii</>.
              </para>
            </listitem>

          </itemizedlist>

        </sect5>

        <sect5>
          <title><application>psql</> <link
          linkend="APP-PSQL-meta-commands"><command>\d</></link>
          Commands</title>
          <itemizedlist>

            <listitem>
              <para>
                Have <command>\d</> show child tables that inherit from the specified
                parent (Damien Clochard)
              </para>

              <para>
                <command>\d</> shows only the number of child tables, while
                <command>\d+</> shows the names of all child tables.
              </para>
            </listitem>

            <listitem>
              <para>
                Show definition of indexes in <command>\d index_name</> (Khee Chin)
              </para>

              <para>
                The definition is useful for expression indexes.
              </para>
            </listitem>

            <listitem>
              <para>
                In <application>psql</>, show the view definition only with <command>\d+</>,
                not with <command>\d</> (Peter Eisentraut)
              </para>
            </listitem>

          </itemizedlist>

        </sect5>
      </sect4>

      <sect4>
        <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Have <application>pg_dump</>/<application>pg_restore</>
              <link linkend="pg-dump-options"><option>--clean</></link>
              also remove large objects (Itagaki Takahiro)
            </para>
          </listitem>

          <listitem>
            <para>
              Fix <application>pg_dump</> to properly dump large objects if
              standard_conforming_strings is enabled (Tom Lane)
            </para>

            <para>
              Large objects dumps now use hex format for output.  (SWITCH DEFAULT
              FOR BETA? TOM)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <application>pg_dump</> to dump comments attached to columns
              of composite types (Taro Minowa (Higepon))
            </para>
          </listitem>

          <listitem>
            <para>
              Have <application>pg_dump</> <link
              linkend="pg-dump-options"><option>--verbose</></link>
              output the <application>pg_dump</> and server versions
              in text output mode (Jim Cox, Tom Lane)
            </para>

            <para>
              These were already present in custom output mode.
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link
        linkend="app-pg-ctl"><application>pg_ctl</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Allow <application>pg_ctl</> to be safely used to start the
              <application>postmaster</> at boot-time (Tom Lane)
            </para>

            <para>
              Previously the <application>pg_ctl</> process could have been mistakenly
              identified as a running <application>postmaster</> based on a stale
              <application>postmaster</> lock file.
            </para>
          </listitem>

          <listitem>
            <para>
              Give <application>pg_ctl</> the ability to initialize the database
              (like <application>initdb</>) (Zdenek Kotala)
            </para>
          </listitem>


        </itemizedlist>

      </sect4>

    </sect3>

    <sect3>
      <title><application>Development Tools</></title>

      <sect4>
        <title><link linkend="libpq"><application>libpq</></link></title>

        <itemizedlist>

          <listitem>
            <para>
              Add new <application>libpq</> functions
              <link
              linkend="libpq-connect"><function>PQconnectdbParams()</></link>
              and <function>PQconnectStartParams()</> (Guillaume
              Lelarge)
            </para>

            <para>
              These functions are similar to <function>PQconnectdb()</> and
              <function>PQconnectStart()</> except they allow a null-terminated
              array of connection options, rather than requiring all options to
              be sent in a single string.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <application>libpq</> functions <link
              linkend="libpq-exec-escape-string"><function>PQescapeLiteral()</></link>
              and <function>PQescapeIdentifier()</> (Robert Haas)
            </para>

            <para>
              These functions return appropriately quoted and escaped literal
              strings and identifiers.  The caller is not required to pre-allocate
              the string result, as is required by <function>PQescapeStringConn()</>.
            </para>
          </listitem>

          <listitem>
            <para>
              Add checking for a per-user service file (<link
              linkend="libpq-pgservice"><filename>.pg_service.conf</></link>),
              which is checked before the site-wide service file
              (Peter Eisentraut)
            </para>

            <para>
              The file <filename>.pg_service.conf</> is assumed to be in the
              user's home directory.
            </para>
          </listitem>

          <listitem>
            <para>
              Properly report an error if the specified <application>libpq</> service
              cannot be found (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Issue a warning if the <link
              linkend="libpq-pgpass"><filename>.pgpass</></link>-retrieved
              password fails (Bruce Momjian)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title><link linkend="ecpg"><application>ecpg</></link></title>
        <itemizedlist>

          <listitem>
            <para>
              Add <link linkend="ecpg-descriptors"><acronym>SQLDA</></link>
              (SQL Descriptor Area) support to <application>ecpg</>
              (Boszormenyi Zoltan)
            </para>
          </listitem>

          <listitem>
            <para>
              Add the <link linkend="ecpg-descriptors"><command>DESCRIBE</>
              [<literal>OUTPUT</>]</link> statement to <application>ecpg</>
              (Boszormenyi Zoltan)
            </para>
          </listitem>

          <listitem>
            <para>
              Add an <application>ecpg</> <link
              linkend="ecpg-library">function</link> to return the
              current transaction status (Bernd Helmle)
            </para>
          </listitem>

          <listitem>
            <para>
              Add the <literal>string</> data type in <application>ecpg</>
              Informix-compatibility mode (Zoltan Boszormenyi)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <application>ecpg</> to use <literal>new</> and <literal>old</>
              variable names without restriction (Michael Meskes)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow <application>ecpg</> to use variable names in
              <function>free()</>(Michael Meskes)
            </para>
          </listitem>

          <listitem>
            <para>
              Have <application>ecpg</> return zero for non-SQL3 data types
             (Michael Meskes))
            </para>

            <para>
              Previously it returned the negative of the data type <type>oid</>.
            </para>
          </listitem>

          </itemizedlist>

          <sect5>
            <title><application>ecpg</> Cursors</title>
            <itemizedlist>

            <listitem>
              <para>
                Add <application>ecpg</> out-of-scope cursor support in native mode
                (Boszormenyi Zoltan)
              </para>

              <para>
                This allows <command>DECLARE</> to use variables that are not in
                scope when <command>OPEN</> is called.  This facility already existed
                in <application>ecpg</> Informix-compatibility mode.
              </para>
            </listitem>

            <listitem>
              <para>
                Allow dynamic <application>ecpg</> cursor names (Boszormenyi Zoltan)
              </para>
            </listitem>

            <listitem>
              <para>
                Allow <application>ecpg</> to use noise words <literal>FROM</> and
                <literal>IN</> in <command>FETCH</> and <command>MOVE</> (Zoltan
                Boszormenyi)
              </para>
            </listitem>

          </itemizedlist>
d2513 3
a2515 1
        </sect5>
d2517 5
a2521 1
      </sect4>
d2523 6
a2528 1
    </sect3>
d2530 8
a2537 3
    <sect3>
      <title>Build Options</title>
      <itemizedlist>
d2539 7
a2545 137
        <listitem>
          <para>
            Enable client thread safety by default (Bruce Momjian)
          </para>

          <para>
            Thread-safe builds can be disabled with <link
            linkend="configure"><application>configure</></link>
            <option>--disable-thread-safety</>.
          </para>
        </listitem>

        <listitem>
          <para>
            Add a compile-time option to allow the Linux out-of-memory killer
            to kill backends (Alex Hunsaker, Tom Lane)
          </para>

          <para>
            Now that <filename>/proc/self/oom_adj</> allows disabling
            of the <productname>Linux</> out-of-memory (<acronym>OOM</>)
            killer for the postmaster and its children, the new
            compile-time option <link
            linkend="linux-memory-overcommit"><literal>-DLINUX_OOM_ADJ=0</></link>
            allows the killer to be enabled for <application>postmaster</>
            children.  <application>pg_config</> shows if this flag
            was used during compilation.
          </para>
        </listitem>

        <listitem>
          <para>
            Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
            building (Peter Eisentraut)
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title>Makefiles</title>
        <itemizedlist>

          <listitem>
            <para>
              New <filename>Makefile</> targets <link
              linkend="build"><literal>world</></link>,
              <literal>install-world</>, and <literal>installcheck-world</>
              (Andrew Dunstan)
            </para>

            <para>
              These are similar to the existing <literal>all</>, <literal>install</>,
              and <literal>installcheck</> targets, but they build <acronym>HTML</>
              documentation, build and test <filename>/contrib</>, and test
              server-side languages and <application>ecpg</>.
            </para>
          </listitem>

          <listitem>
            <para>
              Add data and documentation location control to <link
              linkend="xfunc-c-pgxs"><acronym>PGXS</></link> Makefiles
              (Mark Cave-Ayland)
            </para>
          </listitem>

          <listitem>
            <para>
              Restructure the <acronym>HTML</> documentation build
              <filename>Makefile</> rules (Peter Eisentraut)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>New Requirements</title>
        <itemizedlist>

          <listitem>
            <para>
              Require <application>Autoconf</> 2.63 for building from source (Peter Eisentraut)
            </para>
          </listitem>

          <listitem>
            <para>
              Require <application>Flex</> 2.5.31 or later to build from source
              (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Require <application>Perl</> version 5.8 or greater to build the server
              from a <acronym>CVS</> copy (John Naylor, Andrew)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Windows</title>
        <itemizedlist>

          <listitem>
            <para>
              Add support for compiling on <link
              linkend="install-win32-full">64-bit
              <productname>Windows</></link> and running in 64-bit
              mode (Tsutomu Yamada, Magnus)
            </para>

            <para>
              This allows for large shared memory sizes on <productname>Windows</>.
            </para>
          </listitem>

          <listitem>
            <para>
              Allow server builds using <link
              linkend="install-win32-full"><productname>Visual Studio
              2008</></link> (Magnus Hagander)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow multi-processor compilation using <productname>Microsoft Visual
              C</> (Magnus Hagander)
            </para>
          </listitem>
d2547 1
a2547 1
        </itemizedlist>
d2549 1
a2549 1
      </sect4>
d2551 3
a2553 1
    </sect3>
d2555 6
a2560 3
    <sect3>
      <title>Source Code</title>
      <itemizedlist>
d2562 6
a2567 260
        <listitem>
          <para>
            Distribute documentation in a proper directory tree, rather than
            as tar archive files inside the main distribution tarball (Peter Eisentraut)
          </para>

          <para>
            For example, the <acronym>HTML</> documentation is now in
            <filename>doc/src/sgml/html</>;  the manual pages are packaged
            similarly.
          </para>
        </listitem>

        <listitem>
          <para>
            Enable the server lexer to be reentrant (Tom Lane)
          </para>

          <para>
            This was needed for use of the lexer by PL/pgSQL.
          </para>
        </listitem>

        <listitem>
          <para>
            Improve speed of memory allocation (Tom Lane, Greg Stark)
          </para>
        </listitem>

        <listitem>
          <para>
            Add system columns to better document the use of indexes for constraint
            enforcement (Tom Lane)
          </para>
        </listitem>

        <listitem>
          <para>
            Allow multiple actions to be communicated using the same operating
            system signal (Fujii Masao)
          </para>

          <para>
            This allows improved backend communication as new features are
            added.
          </para>
        </listitem>

        <listitem>
          <para>
            Improve source code test coverage, including /contrib, PL/Python,
            and PL/Perl (Peter Eisentraut, Andrew Dustan)
          </para>
        </listitem>

        <listitem>
          <para>
            Remove the use of flat files for system table bootstrapping
           (Tom Lane, Alvaro Herrera)
          </para>

          <para>
            This also improves performance when using millions of users and
            databases.
          </para>
        </listitem>

        <listitem>
          <para>
            Improve the ability to translate <application>psql</> strings
            (Peter Eisentraut)
          </para>
        </listitem>

        <listitem>
          <para>
            Reduce the length of some file names so file paths are less than
            100 characters (Tom Lane)
          </para>

          <para>
            Some decompression programs have problems with long file names.
          </para>
        </listitem>

        <listitem>
          <para>
            Tighten input requirements for <type>int2</> vector input (Caleb
            Welton)
          </para>
        </listitem>

        <listitem>
          <para>
            Add a new <link
            linkend="errcodes-table"><literal>ERRCODE_INVALID_PASSWORD</></link>
            <literal>SQLSTATE</> error code (Bruce Momjian)
          </para>
        </listitem>

        <listitem>
          <para>
            Properly remove the few remaining personal source code copyright
            entries (Bruce Momjian)
          </para>

          <para>
            The personal copyright notices were insignificant but the community
            occasionally had to answer questions about them.
          </para>
        </listitem>

      </itemizedlist>

      <sect4>
        <title>Feature Support</title>
        <itemizedlist>

          <listitem>
            <para>
              Use a more modern <acronym>API</> for <application>Bonjour</> (Tom Lane)
            </para>

            <para>
              Bonjour now requires <productname>OS X</> 10.3 or later.
            </para>
          </listitem>

          <listitem>
            <para>
              Add processor test-and-test lock support for the <productname>SuperH</>
              architecture (Nobuhiro Iwamatsu)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow non-<application>GCC</> compilers to use inline functions if
              they support them (Kurt Harriman)
            </para>
          </listitem>

          <listitem>
            <para>
              Remove support for platforms that don't have a working 64-bit
              integer data types (Tom Lane)
            </para>

            <para>
              It is believed all supported platforms have working 64-bit integer
              data types.
            </para>
          </listitem>


        </itemizedlist>

      </sect4>

      <sect4>
        <title>Server Programming</title>
        <itemizedlist>

          <listitem>
            <para>
              Allow use of <productname>C++</> functions in backend code  (Kurt
              Harriman, Peter Eisentraut)
            </para>

            <para>
              This removes keyword conflicts that previously made <productname>C++</>
              usage difficult in backend code.  <literal>extern "C" { }</> might still
              be necessary.
            </para>
          </listitem>

          <listitem>
            <para>
              Add <link
              linkend="xaggr"><function>AggCheckCallContext()</></link>
              for use in detecting if a <productname>C</> function is
              being called as an aggregate (Hitoshi Harada)
            </para>
          </listitem>

          <listitem>
            <para>
              Require <function>fastgetattr()</> and <function>heap_getattr()</>
              backend macros to use a non-NULL fourth argument (Robert Haas)
              KEEP?
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Server Hooks</title>
        <itemizedlist>

          <listitem>
            <para>
              Add parser hooks to access column and parameter references in
              queries (Tom Lane)
            </para>
          </listitem>

          <listitem>
            <para>
              Add a hook so loadable modules can control utility commands (Itagaki
              Takahiro)
            </para>
          </listitem>

          <listitem>
            <para>
              Allow the calling of parser hooks from <acronym>SPI</> and cached
              plans (Tom Lane)
            </para>
          </listitem>

        </itemizedlist>

      </sect4>

      <sect4>
        <title>Binary Upgrade Support</title>
        <itemizedlist>

          <listitem>
            <para>
              Add support for preservation of all <link
              linkend="catalog-pg-class"><structname>relfilenodes</></link>,
              for use during binary upgrades (Bruce Momjian)
            </para>
          </listitem>

          <listitem>
            <para>
              Add support for binary upgrades to preserve <structname>pg_type</>
              and <structname>pg_enum</> <type>oids</> (Bruce Momjian)
            </para>

            <para>
              This is needed to allow binary upgrades of user-defined composite
              types, arrays, and enums (enumerated types).
            </para>
          </listitem>

          <listitem>
            <para>
              Move tablespace data directories into their own
              <productname>PostgreSQL</> version-specific subdirectory (Bruce Momjian)
            </para>

            <para>
              This simplifies binary upgrades.
            </para>
          </listitem>
d2569 6
a2574 1
        </itemizedlist>
d2576 1
a2576 1
      </sect4>
d2578 1
a2578 1
    </sect3>
d2580 3
a2582 3
    <sect3>
      <title>Contrib</title>
      <itemizedlist>
d2584 7
a2590 112
        <listitem>
          <para>
            Add multi-threaded option (<option>-j</>) to <link
            linkend="pgbench"><filename>/contrib/pgbench</></link>
            (Itagaki Takahiro)
          </para>

          <para>
            This allows multiple <acronym>CPU</>s to be used for pgbench tests.
          </para>
        </listitem>

        <listitem>
          <para>
            Add <command>\shell</> and <command>\setshell</> meta
            commands to <link
            linkend="pgbench"><filename>/contrib/pgbench</></link>
            (Michael Paquier)
          </para>
        </listitem>

        <listitem>
          <para>
            New features for <link
            linkend="dict-xsyn"><filename>/contrib/dict_xsyn</></link>
            (Sergey Karpov)
          </para>

          <para>
            The new options are <literal>matchorig</>, <literal>matchsynonyms</>,
            and <literal>keepsynonyms</>.
          </para>
        </listitem>

        <listitem>
          <para>
            Add full text dictionary <link
            linkend="unaccent"><filename>/contrib/unaccent</></link>
            (Teodor Sigaev)
          </para>

          <para>
            This filter dictionary removes accents from tokens.
          </para>
        </listitem>

        <listitem>
          <para>
            Add <link
            linkend="CONTRIB-DBLINK-GET-NOTIFY"><function>dblink_get_notify()</></link>
            to <filename>/contrib/dblink</> (Marcus Kempe)
          </para>

          <para>
            This allows async notifications in <productname>dblink</>.
          </para>
        </listitem>

        <listitem>
          <para>
            Greatly increase <link
            linkend="hstore"><filename>/contrib/hstore</></link>'s
            length limit and add btree and hash abilities so <literal>GROUP
            BY</> and <literal>DISTINCT</> operations are possible
            (Andrew Gierth)
          </para>

          <para>
            New functions and operators were also added.
          </para>
        </listitem>

        <listitem>
          <para>
            Add <link
            linkend="passwordcheck"><filename>/contrib/passwordcheck</></link>
            which can check the strength of assigned passwords (Laurenz
            Albe)
          </para>

          <para>
            The source code of this module should be modified to implement
            site-specific password policies.
          </para>
        </listitem>

        <listitem>
          <para>
            Add query text to <link
            linkend="auto-explain"><filename>/contrib/auto_explain</></link>
            output (Andrew Dunstan)
          </para>
        </listitem>

        <listitem>
          <para>
            Add buffer access counters to <link
            linkend="pgstatstatements"><filename>/contrib/pg_stat_statements</></link>
            (Itagaki Takahiro)
          </para>
        </listitem>

        <listitem>
          <para>
            Update <link
            linkend="server-start"><filename>/contrib/start-scripts/linux</></link>
            to use <filename>/proc/self/oom_adj</> to disable the
            <link linkend="linux-memory-overcommit"><productname>Linux</>
            out-of-memory</link> (<acronym>OOM</>) killer (Alex
            Hunsaker, Tom Lane)
          </para>
        </listitem>
d2592 5
a2596 1
      </itemizedlist>
d2598 5
a2602 3
    </sect3>
  </sect2>
</sect1>
d2604 5
d2610 2
a2611 60
<sect1 id="release-9-0-alpha">
  <title>Release 9.0alpha4</title>
  <sect2>
    <title>Overview</title>
    <para>
      PostgreSQL alpha releases are snapshots of development code. They
      are intended to preview and test upcoming features and to provide
      the possibility for early feedback. They should not be used in
      production installations or active development projects. While the
      PostgreSQL code is continuously subject to a number of automated
      and manual tests, alpha releases might have serious bugs. Also
      features may be changed incompatibly or removed at any time during
      the development cycle.
    </para>
    <para>
      The development cycle of a PostgreSQL major release alternates
      between periods of development and periods of integration work,
      called commit fests, normally one month each. Alpha releases are
      planned to be produced at the end of every commit fest, thus every
      two months. Since the first commit fest starts within a month from
      the beginning of development altogether, early alpha releases are
      not indicative of the likely feature set of the final release.
    </para>
    <para>
      The release notes below highlight user visible changes and new
      features. There are normally numerous bug fixes and performance
      improvements in every new snapshot of PostgreSQL, and it would be
      too bulky to attempt to list them all. Note that many bug fixes are
      also backported to stable releases of PostgreSQL, and you should be
      using those if you are looking for bug-fix-only upgrades for your
      current installations.
    </para>
    <para>
      The release notes are cumulative over all alpha releases.  Items
      that are new in the latest alpha release
      are <emphasis>emphasized</emphasis>.
    </para>
  </sect2>
  <sect2>
    <title>Migration</title>
    <para>
      To upgrade from any release to an alpha release or from an alpha
      release to any other release will most likely require a
      dump/restore upgrade procedure. It may happen that this is not
      necessary in particular cases, but that is not verified beforehand.
      (The server will warn you in any case when a dump/restore is
      necessary if you attempt to use it with an old data directory.)
      Note, however, that the dump/restore upgrade procedure is expected
      to work for alpha releases, and problems in this area should be
      reported.
    </para>
  </sect2>
  <sect2>
    <title>Testing</title>
    <para>
      The primary reason we release alphas is to get users to test new
      features as early as possible.  If you are interested in helping
      with organized testing, please see
      <ulink url="http://wiki.postgresql.org/wiki/HowToBetaTest">the
      testing information page</ulink>.
d2613 126
a2738 1124
  </sect2>
  <sect2>
    <title>Changes</title>
    <sect3>
      <title>SQL Features</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Disallow comments on columns of relation types
         other than tables, views, and composite types, that is,
         sequences and TOAST tables.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Adjust naming of indexes and their columns. Index
         expression columns are now named after the FigureColname
         result for their expressions, rather than always being
         "pg_expression_N".  Digits are appended to this name if
         needed to make the column name unique within the index.
         Default names for indexes and associated constraints now
         include the column names of all their columns, not only the
         first one as in previous practice.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Allow the index name to be omitted in CREATE INDEX,
         causing the system to choose an index name the same as it
         would do for an unnamed index constraint.  A necessary
         side-effect is to promote the word CONCURRENTLY to a more
         reserved status; it can't be a table/column/index name
         anymore unless quoted.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Improve the handling of SET CONSTRAINTS commands by
         having them search pg_constraint before searching pg_trigger.
         This allows saner handling of corner cases.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Typed table feature; this adds the CREATE TABLE
         name OF type command.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Tighten integrity checks on ALTER TABLE ... RENAME
         COLUMN in inheritance hierarchies.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Replace the pg_listener-based LISTEN/NOTIFY
         mechanism with an in-memory queue.  In addition, add support
         for a "payload" string to be passed along with each notify
         event.</emphasis>
        </para>
        <para>
         <emphasis>This implementation should be significantly more
         efficient than the old one, and is also more compatible with
         Hot Standby usage.  There is not yet any facility for HS
         slaves to receive notifications generated on the master,
         although such a thing is possible in future.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Have SELECT and CREATE TABLE AS queries return a
         row count.  While this is invisible in psql, other
         interfaces, like libpq, make this value visible.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Extend the set of frame options supported for
         window functions.  This allows the frame to start from
         CURRENT ROW (in either RANGE or ROWS mode), and it also adds
         support for ROWS n PRECEDING and ROWS n FOLLOWING start and
         end points.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Add DO statement to support execution of procedural language
         code without having to create a function for it.
        </para>
       </listitem>
       <listitem>
        <para>
         Support use of function argument names to identify which
         actual arguments match which function parameters. The syntax
         uses AS, for example funcname(value AS arg1, anothervalue AS
         arg2).
        </para>
       </listitem>
       <listitem>
        <para>
         Remove previously deprecated configuration
         parameter add_missing_from. The system now always behaves as
         though add_missing_from were off.
        </para>
       </listitem>
       <listitem>
        <para>
         Performance and behavioral improvements in UPDATE,
         DELETE, and SELECT FOR UPDATE/SHARE queries with joins.
         Fix various corner cases that could have resulted in duplicated output
         rows. Set-returning functions are now prohibited in the
         target list of SELECT FOR UPDATE/SHARE. FOR UPDATE does not
         propagate into a WITH query anymore.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix SELECT FOR UPDATE/SHARE in conjunction with LIMIT.
          Previously, it could return fewer rows than the limit specified.
        </para>
       </listitem>
       <listitem>
        <para>
         Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression
          to be checked to determine whether the trigger should be fired.
        </para>
        <para>
         For BEFORE triggers this is mostly a matter of spec compliance; but
          for AFTER triggers it can provide a noticeable performance
          improvement, since queuing of a deferred trigger event and
          re-fetching of the row(s) at end of statement can be
          short-circuited if the trigger does not need to be fired.
        </para>
       </listitem>
       <listitem>
        <para>
         Add exclusion constraints, which generalize the concept of
          uniqueness to support any indexable commutative operator, not just
          equality. Two rows violate the exclusion constraint if
          &quot;row1.col OP row2.col&quot; is TRUE for each of the columns in
          the constraint.
        </para>
       </listitem>
       <listitem>
        <para>
         Support ORDER BY within aggregate function calls, at long last
          providing a non-kluge method for controlling the order in which
          values are fed to an aggregate function. At the same time eliminate
          the old implementation restriction that DISTINCT was only supported
          for single-argument aggregates.
        </para>
        <para>
         Behavioral change: formerly, agg(DISTINCT x) dropped null values of
          x unconditionally. Now, it does so only if the aggregate's transition
          function is strict; otherwise nulls are treated as DISTINCT
          normally would, i.e., you get one copy.
        </para>
       </listitem>
       <listitem>
        <para>
         Add SQL-compliant triggers on columns, which fire only if
         certain columns are named in the UPDATE's SET list.
        </para>
       </listitem>
       <listitem>
        <para>
         Add CREATE LIKE INCLUDING COMMENTS and STORAGE, and INCLUDING
         ALL shortcut to allow users to make an exact copy of a table including
         all options and features.
        </para>
       </listitem>
       <listitem>
        <para>
         Define a new, more extensible syntax for COPY options
         in order to support additional COPY options in the future.
        </para>
       </listitem>
       <listitem>
        <para>
         Modify the definition of window-function PARTITION
         BY and ORDER BY clauses so that their elements are always
         taken as simple expressions over the query's input
         columns. This fixes a bug.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix bug with nested WITH RECURSIVE statements.
        </para>
       </listitem>
       <listitem>
        <para>
         Add surrogate pair support for U&amp; string and identifier
         syntax.
        </para>
       </listitem>
       <listitem>
        <para>
         Add Unicode escapes in E'...' strings.
        </para>
       </listitem>
        <listitem>
          <para>
            DROP COLUMN and DROP CONSTRAINT now support an IF EXISTS clause so
            that users can avoid fatal errors when running repeatable scripts.
          </para>
        </listitem>
        <listitem>
          <para>
            UNIQUE constraints can now be DEFERRABLE. This is primarily useful
            for incremental updates of numerical keys, e.g. &quot;ID = ID +
            1&quot;
          </para>
        </listitem>
        <listitem>
          <para>
            Allow parentheses around the query expression that follows a WITH
            clause.
          </para>
        </listitem>
        <listitem>
          <para>
            INFORMATION_SCHEMA, a catalog of standard views of database
            objects, has been updated to the SQL:2008 standard.
          </para>
        </listitem>
        <listitem>
          <para>
            Change character_octet_length to more sensible values in
            INFORMATION_SCHEMA.
          </para>
        </listitem>
        <listitem>
          <para>
            Allow * as parameter for FORCE QUOTE for COPY CSV, so that all
            columns will be quoted.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Performance</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Support "x IS NOT NULL" clauses as index-scan
         conditions.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>When estimating the selectivity of an inequality
         "column &gt; constant" or "column &lt; constant", and the
         comparison value is in the first or last histogram bin or
         outside the histogram entirely, try to fetch the actual
         column min or max value using an index scan (if there is an
         index on the column).  If successful, replace the lower or
         upper histogram bound with that value before carrying on with
         the estimate.  This limits the estimation error caused by
         moving min/max values when the comparison value is close to
         the min or max.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Generic implementation of red-black binary tree.
         For now, only GIN uses it during index creation.  Using
         self-balanced tree greatly speeds up index creation in corner
         cases with preordered data.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Allow rewriting forms of ALTER TABLE to skip WAL
          logging.
        </para>
       </listitem>
       <listitem>
        <para>
         Speed up INFORMATION_SCHEMA's privilege views.
        </para>
       </listitem>
       <listitem>
        <para>
         Make TRUNCATE do truncate-in-place when processing
         a relation that was created or previously truncated in the
         current (sub)transaction.
        </para>
       </listitem>
       <listitem>
        <para>
         Implement &quot;join removal&quot; for cases where the inner side
          of a left join is unique and is not referenced above the join.  This should
          speed up many ORM-generated and reporting tool queries.
        </para>
       </listitem>
       <listitem>
        <para>
         Remove the use of the flat files pg_auth and
         pg_database in order to improve performance. (Warning: pgbouncer
         and possibly other tools currently suggest referring to the pg_auth
         file for its user database. Such schemes will no longer work.)
        </para>
       </listitem>
        <listitem>
          <para>
            EXPLAIN allows output of plans in XML, JSON, or YAML format for automated
            processing of explain plans by analysis or visualization tools.
          </para>
        </listitem>
        <listitem>
          <para>
            EXPLAIN now supports the use of generic options in EXPLAIN ( option
            value, ... ) format, which permits the creation of additional
            EXPLAIN options.
          </para>
        </listitem>
        <listitem>
          <para>
            ALTER TABLE ... ALTER COLUMN ... SET STATISTICS DISTINCT allows
            users to manually tweak the number of distinct values estimated for
            a column, to fix cases where ANALYZE estimates are incorrect.
          </para>
        </listitem>
        <listitem>
          <para>
            Make GEQO's planning deterministic by having it start from a
            predictable random number seed each time.
          </para>
        </listitem>
        <listitem>
          <para>
            Rewrite GEQO's gimme_tree function so that it always finds a legal
            join sequence. Previously, it could have failed to produce a plan
            in some cases.
          </para>
        </listitem>
        <listitem>
          <para>
            Tweak TOAST code so that columns marked with MAIN storage strategy
            are not forced out-of-line unless that is necessary to make the row
            fit on a page. Previously, they were forced out-of-line if needed
            to get the row down to the default target size (1/4th page).
          </para>
        </listitem>
        <listitem>
          <para>
            Simplify the forms foo &lt;&gt; true and foo &lt;&gt; false to foo
            = false and foo = true during query optimization.
          </para>
        </listitem>
        <listitem>
          <para>
            Avoid per-send() system calls to manage SIGPIPE in libpq, if the
            platform provides either sockopt(SO_NOSIGPIPE) or the MSG_NOSIGNAL
            flag to send().
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Administration and Monitoring</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add the ability to store inheritance-tree
         statistics in pg_statistic, and teach ANALYZE to compute such
         stats for tables that have subclasses.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Revise pgstat's tracking of tuple changes to
         improve the reliability of decisions about when to
         auto-analyze.  The previous code depended on n_live_tuples +
         n_dead_tuples - last_anl_tuples, where all three of these
         numbers could be bad estimates from ANALYZE itself.  Even
         worse, in the presence of a steady flow of HOT updates and
         matching HOT-tuple reclamations, auto-analyze might never
         trigger at all, even if all three numbers are exactly right,
         because n_dead_tuples could hold steady.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Support ALTER TABLESPACE name SET/RESET (
         tablespace_options ), currently supporting seq_page_cost and
         random_page_cost as parameters.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>New faster implementation of VACUUM FULL.  The old
         idiom of using CLUSTER instead of VACUUM FULL for speed is
         now obsolete.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add buffer access counters to
         pg_stat_statements.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add some simple support and documentation for using
         process-specific oom_adj settings to prevent the postmaster
         from being OOM-killed on Linux systems.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Place tablespace directories in their own
         subdirectory so pg_migrator can upgrade clusters without
         renaming the tablespace directories.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Introduce Streaming Replication.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add pg_table_size() and pg_indexes_size() to
         provide more user-friendly wrappers around the
         pg_relation_size() function.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add pg_stat_reset_shared('bgwriter') to reset the
         cluster-wide shared statistics of the bgwriter.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Replace ALTER TABLE ... SET STATISTICS DISTINCT
         with a more general mechanism.  Attributes can now have
         options, just as relations and tablespaces do, and the
         reloptions code is used to parse, validate, and store
         them.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Fix longstanding gripe that we check for
         0000000001.history at start of archive recovery, even when we
         know it is never present.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Make standby server continuously retry restoring
         the next WAL segment with restore_command, if the connection
         to the primary server is lost.  This ensures that the standby
         can recover automatically, if the connection is lost for a
         long time and standby falls behind so much that the required
         WAL segments have been archived and deleted in the
         master.</emphasis>
        </para>
        <para>
         <emphasis>This also makes standby_mode useful without
         streaming replication; the server will keep retrying
         restore_command every few seconds until the trigger file is
         found.  That's the same basic functionality pg_standby
         offers, but without the bells and whistles.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add functions to reset the statistics counter for a
         single table/index or a single function.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Augment EXPLAIN output with more details on Hash
         nodes.</emphasis>
         </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Reindexing shared system catalogs is now fully
         transactional and crash-safe.</emphasis>
         </para>
       </listitem>
       <listitem>
        <para>
         Allow read-only connections during recovery, also
         known as Hot Standby.  This provides a built-in master-slave
         replication solution.
        </para>
       </listitem>
       <listitem>
        <para>
         Provide a parenthesized-options syntax for VACUUM, analogous to
          that recently adopted for EXPLAIN. This will allow additional
          options to be implemented in future without having to make them
          fully-reserved keywords. The old syntax remains available for
          existing options, however.
        </para>
       </listitem>
       <listitem>
        <para>
         Add support for an application_name parameter, which is displayed
          in pg_stat_activity and recorded in log entries.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix longstanding problems in VACUUM caused by untimely
          interruptions.
        </para>
       </listitem>
       <listitem>
        <para>
         Add YAML to list of EXPLAIN formats.
        </para>
       </listitem>
       <listitem>
        <para>
         Add an EXPLAIN (BUFFERS) option to show buffer-usage statistics.
        </para>
       </listitem>
       <listitem>
        <para>
         Add a hook to let loadable modules get control at ProcessUtility
          execution, and use it to extend contrib/pg_stat_statements to track
          utility commands.
        </para>
       </listitem>
       <listitem>
        <para>
         Add a Boolean server configuration parameter
         &quot;bonjour&quot; to control whether a Bonjour-enabled
         build actually attempts to advertise itself via Bonjour.
        </para>
       </listitem>
       <listitem>
        <para>
         When reloading postgresql.conf, log what parameters actually
         changed.
        </para>
       </listitem>
       <listitem>
        <para>
         Make it possibly to specify server configuration parameters
         per user-database combination. Add a \drds command to psql to
         display the settings.
        </para>
       </listitem>
       <listitem>
        <para>
         Allow the collection of statistics on sequences.
        </para>
       </listitem>
      <listitem>
       <para>
        Increase the maximum value of extra_float_digits to
        3, and have pg_dump use that value when the backend is new
        enough to allow it, because it is possible to need 3 extra
        digits for float4 values (but not for float8 values).
       </para>
      </listitem>
        <listitem>
          <para>
            Add the ability to include the SQLSTATE error code of any error
            messages in the PostgreSQL activity log with the new
            log_line_prefix placeholder %e.
          </para>
        </listitem>
        <listitem>
          <para>
            Show the exact value being complained of in
            unique-constraint-violation error messages, including unique-index
            build failures.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Security</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add support for RADIUS authentication.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         When querying a table with child tables, do not check permissions
          on the child tables, only on the parent table. The old behavior was
          found to be useless and confusing in virtually all cases, and also
          contrary to the SQL standard.
        </para>
       </listitem>
       <listitem>
        <para>
         Add a hook to CREATE/ALTER ROLE to allow an external module to
          check the strength of database passwords, and create a sample
          implementation of such a hook as a new contrib module
          &quot;passwordcheck&quot;.
        </para>
       </listitem>
       <listitem>
        <para>
         Add large object access control.
        </para>
       </listitem>
       <listitem>
        <para>
         Allow LDAP authentication to operate in search+bind
         mode, meaning it does a search for the user in the directory
         first, and then binds with the DN found for this user.  This
         allows for LDAP logins in scenarios where the DN of the user
         cannot be determined simply by prefix and suffix, such as the
         case where different users are located in different
         containers.  The old way of authentication can be
         significantly faster, so it's kept as an option.
        </para>
       </listitem>
       <listitem>
        <para>
         Add ALTER DEFAULT PRIVILEGES command, which allows
         users to adjust the privileges that will be applied to
         subsequently-created objects.
        </para>
       </listitem>
       <listitem>
        <para>
         Add GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS IN SCHEMA.
         This makes it easier to manage permissions on database objects.
        </para>
       </listitem>
       <listitem>
        <para>
         Support &quot;samehost&quot; and &quot;samenet&quot; specifications
         in pg_hba.conf.  This allows users with dynamic server addresses to run
         PostgreSQL without frequently modifying pg_hba.conf.
        </para>
       </listitem>
        <listitem>
          <para>
            New has_sequence_privilege() functions allow you to check sequence
            privileges for a given ROLE.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Built-In Functions</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Fix 3-parameter form of bit substring() to throw
         error for negative length, as required by SQL
         standard.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add get_bit/set_bit functions for bit strings,
         paralleling those for bytea, and implement OVERLAY() for bit
         strings and bytea.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add string_agg aggregate functions.  The
         one-argument version concatenates the input values into a
         string.  The two-argument version also does the same thing,
         but inserts delimiters between elements.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Honor to_char() "FM" specification in YYY, YY, and
         Y; it was already honored by YYYY.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Remove configuration parameter regex_flavor. It is now always
          &quot;advanced&quot;.
        </para>
       </listitem>
       <listitem>
        <para>
         Teach the regular expression functions to do case-insensitive
          matching and locale-dependent character classification properly
          when the database encoding is UTF8. This previously only worked
          correctly for single-byte encodings.  It is still broken for other
          multibyte encodings.
        </para>
       </listitem>
       <listitem>
        <para>
         Support POSIX-compatible interpretation of ? as well as {m,n}
         and related constructs in SIMILAR TO, per SQL:2008.
        </para>
       </listitem>
        <listitem>
          <para>
            The to_char() formatting functions now supports EEEE (scientific
            notation).
          </para>
        </listitem>
        <listitem>
          <para>
            Use floor() not rint() when reducing precision of fractional
            seconds in timestamp_trunc, timestamptz_trunc, and interval_trunc()
            for the float-datetime case. This improves accuracy of time
            calculations.
          </para>
        </listitem>
        <listitem>
          <para>
            Fix ancient bug in handling of to_char() modifier 'TH', when used
            with HH.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Data Types</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Allow enums to be created with zero labels, for use
         during binary upgrade.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         When doing &quot;ARRAY[...]::domain&quot;, where domain is a domain
          over an array type, we need to check domain constraints. Regression
          introduced in 8.4.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix integer-to-bit-string conversions to handle the first
          fractional byte correctly when the output bit width is wider than
          the given integer by something other than a multiple of 8 bits.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix encoding handling in binary input function of xml type.
        </para>
       </listitem>
       <listitem>
        <para>
         Tighten binary receive functions so that they reject values
         that the text input functions don't accept either.
        </para>
       </listitem>
        <listitem>
          <para>
            New hex-string input and output format options for type bytea. Hex
            output format is enabled by default, which is an incompatible
            change. See the new bytea_output parameter if you need to restore
            compatibility.
          </para>
        </listitem>
        <listitem>
          <para>
            Adds prefix support for text search synonym dictionary, allowing
            creation of synonyms on partial matches.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Server Tools</title>
      <itemizedlist>
       <listitem>
        <para>
         initdb now selects the encoding SQL_ASCII when the locale specifies
          US-ASCII. This case previously failed.
        </para>
       </listitem>
       <listitem>
        <para>
         Add init[db] option to pg_ctl.
        </para>
       </listitem>
       <listitem>
        <para>
         It is now reasonably safe to use pg_ctl to start
         the postmaster from a boot-time script.
        </para>
       </listitem>
       <listitem>
          <para>
            pg_dump/pg_restore --clean now drops large objects.
          </para>
        </listitem>
        <listitem>
          <para>
            Modify parallel pg_restore ordering logic to avoid a potential
            O(N^2) slowdown for some complex databases.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>libpq</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add user-specific .pg_service.conf file.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add new escaping functions PQescapeLiteral and
         PQescapeIdentifier.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Introduce two new libpq connection functions,
         PQconnectdbParams and PQconnectStartParams, which are
         analogous to PQconnectdb and PQconnectStart respectively, but
         accept two NULL-terminated arrays, keywords and values,
         rather than conninfo strings. This avoids the need to build
         the conninfo string in cases where it might be inconvenient
         to do so.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Throw error when a specified connection service name is not
          found in pg_service.conf, instead of ignoring it.
        </para>
       </listitem>
       <listitem>
        <para>
         Make libpq reject non-numeric and out-of-range port numbers with a
         suitable error message.
        </para>
       </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>psql</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Allow psql variables to be interpolated with
         literal or identifier escaping.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         In psql, show view definition only with \d+, not with \d.
        </para>
       </listitem>
       <listitem>
        <para>
         In psql, ignore UTF-8-encoded Unicode byte-order mark at the
          beginning of a file if the client encoding is UTF-8.
        </para>
       </listitem>
       <listitem>
        <para>
         Improve psql's tabular display of wrapped-around data by inserting
          markers in the formerly-always-blank columns just to left and right
          of the data. &quot;pset linestyle old-ascii&quot; is added to make
          the previous behavior available if anyone really wants it.
        </para>
       </listitem>
       <listitem>
        <para>
         Simplify psql's new linestyle behavior to default to
          linestyle=ascii all the time, rather than hoping we can tell
          whether the terminal supports UTF-8 characters.
        </para>
       </listitem>
       <listitem>
        <para>
         Implement significantly saner behavior when two or
         more psql sessions overlap in their use of the history file.
        </para>
       </listitem>
       <listitem>
        <para>
         Add &quot;pset linestyle ascii/unicode&quot; option to psql,
         allowing our traditional ASCII-art style of table output to
         be upgraded to use Unicode box drawing characters if
         desired.
        </para>
       </listitem>
        <listitem>
          <para>
            Have \d show child tables that inherit from the specified parent
          </para>
        </listitem>
        <listitem>
          <para>
            psql now shows the index methods in \di
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Procedural Languages</title>
      <sect4>
       <title>PL/pgSQL</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add "USING expressions" option to PL/pgSQL's OPEN
         cursor FOR EXECUTE.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         PL/pgSQL is installed by default.
        </para>
       </listitem>
       <listitem>
        <para>
         Remove PL/pgSQL's RENAME declaration, which has
          bizarre and mostly nonfunctional behavior, and is so little
          used that no one has been interested in fixing it. To ensure
          that possible uses are covered, remove the ALIAS declaration's
          arbitrary restriction that only $n identifiers can be
          aliased.
        </para>
       </listitem>
       <listitem>
        <para>
         The PL/pgSQL parser and scanner were reworked to behave much more
          sanely:
        </para>
        <para>
         A variable reference will only be recognized where it can validly
          go, ie, a place where a column value or parameter would be legal,
          instead of the former behavior that would replace any textual match
          including table names and column aliases (leading to syntax errors
          later on).
        </para>
        <para>
         When a name could refer either to a PL/pgSQL variable or a
          table column, PL/pgSQL formerly always assumed the variable was
          meant, sometimes resulting in surprising behavior.  Now, PL/pgSQL
          can assume the variable is meant, or assume the table column is
          meant, or throw an error in ambiguous cases.  For safety the default
          is to throw error.  To configure this see <link
          linkend="plpgsql-var-subst">the PL/pgSQL documentation</link>.
        </para>
        <para>
         Error reporting is much nicer: it no longer shows edited
          versions of statements that look significantly different from what
          you wrote.
        </para>
        <para>
         Note that this change affects the set of keywords that are
          reserved in PL/pgSQL (i.e., cannot be the name of a PL/pgSQL
          variable).  Now, all keywords shown as reserved in <link
          linkend="sql-keywords-appendix">Appendix C</link> are reserved for
          PL/pgSQL purposes as well.  However, many PL/pgSQL-only keywords
          that were formerly treated as reserved no longer are.  As in regular
          SQL, you can double-quote a variable's name if you want to use a
          name that conflicts with a reserved keyword.
        </para>
       </listitem>
       <listitem>
        <para>
         PL/pgSQL IN parameters now accept value assignments.
        </para>
       </listitem>
       <listitem>
        <para>
         Allow cursor commands MOVE FORWARD n, MOVE BACKWARD n,
         MOVE FORWARD ALL, MOVE BACKWARD ALL in PL/pgSQL.
        </para>
       </listitem>
        <listitem>
          <para>
            PL/pgSQL functions can now better cope with row types
            containing dropped columns.
          </para>
        </listitem>
      </itemizedlist>
      </sect4>

      <sect4>
       <title>PL/Perl</title>
       <itemizedlist>
        <listitem>
         <para>
          <emphasis>Add utility functions to PL/Perl: quote_literal,
          quote_nullable, quote_ident, encode_bytea, decode_bytea,
          looks_like_number, encode_array_literal,
          encode_array_constructor.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Add plperl.on_plperl_init, plperl.on_plperlu_init,
          and plperl.on_init settings for startup code.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Allow (ineffective) use of "require".  If the
          required module is not already loaded then it dies.  So "use
          strict;" now works in PL/Perl.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Pre-load the feature module if Perl &gt;= 5.10.
          So "use feature :5.10;" now works in PL/Perl.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Stored procedure subs are now given names.  The
          names are not visible in ordinary use, but they make tools
          like Devel::NYTProf and Devel::Cover much more
          useful.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Handle END blocks in PL/Perl.</emphasis>
         </para>
        </listitem>
       <listitem>
        <para>
         <emphasis>Clean up package namespace use and use of Safe.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Change log level of Perl warnings from NOTICE to
         WARNING.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Add support for anonymous code blocks (DO blocks) to PL/Perl.
        </para>
       </listitem>
       <listitem>
        <para>
         Improve error context reporting in PL/Perl, for
         easier debugging.
        </para>
       </listitem>
       <listitem>
        <para>
         Convert a Perl array to a PostgreSQL array when returned by
         set-returning functions as well as non-SRFs.
        </para>
       </listitem>
       </itemizedlist>
      </sect4>

      <sect4>
       <title>PL/Python</title>
       <itemizedlist>
        <listitem>
         <para>
          <emphasis>Improved printing of Python exceptions in
          PL/Python.</emphasis>
         </para>
        </listitem>
        <listitem>
         <para>
          <emphasis>Add PL/Python DO handler.</emphasis>
         </para>
        </listitem>
       <listitem>
        <para>
         Support arrays as parameters and return values of PL/Python
          functions.
        </para>
       </listitem>
       <listitem>
        <para>
         Add Python 3 support to PL/Python.  It behaves more or less
          unchanged compared to Python 2, but the new language variant is
          called plpython3u.
        </para>
       </listitem>
       <listitem>
        <para>
         Fix/improve bytea and boolean support in PL/Python. Data type
         conversion into and out of PL/Python previously went through
         an intermediate string representation, which caused various
         discrepancies especially with bytea and boolean data. This is
         now fixed by converting the values directly.
        </para>
       </listitem>
       <listitem>
        <para>
         PL/Python now accepts Unicode objects where it previously
         only accepted string objects (for example, as return
         value). Unicode objects are converted to the PostgreSQL
         server encoding as necessary.
        </para>
       </listitem>
        <listitem>
          <para>
            Improve error context reporting in PL/Python, for easier
            debugging.
          </para>
        </listitem>
        <listitem>
          <para>
            Greatly expand the regression testing for PL/Python.
          </para>
        </listitem>
      </itemizedlist>
      </sect4>
    </sect3>
d2740 2
a2741 297
    <sect3>
      <title>Additional Supplied Modules</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add query text to auto_explain output.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Add \shell and \setshell meta commands to pgbench.
        </para>
        <para>
         \shell runs an external shell command. \setshell
          does the same and assigns the result to a variable.
        </para>
       </listitem>
       <listitem>
        <para>
         Multiple improvements in contrib/hstore, including
         raising limits on keys and values, conversions to and from
         records and arrays, and support for GROUP BY and DISTINCT.
        </para>
       </listitem>
        <listitem>
          <para>
            pgbench is now multi-threaded, allowing it to use multiple CPU's
            for its client connections, and to do more realistic workload
            testing.
          </para>
        </listitem>
        <listitem>
          <para>
            Added the ability to retrieve asynchronous notifications using
            dblink, via the addition of the function dblink_get_notify().
          </para>
        </listitem>
        <listitem>
          <para>
            Added matchorig, matchsynonyms, and keepsynonyms options to
            contrib/dict_xsyn.
          </para>
        </listitem>
        <listitem>
          <para>
            Added contrib/unaccent.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>ECPG</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add sqlda support in both native and compatibility
         mode.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Fix SQL3 type return value: For non-SQL3 types ECPG
         used to return -OID. This will break if there are enough OIDs
         to fill the namespace.  Therefore we play it safe and return
         0 if there is no OID->SQL3 type mapping available.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Make char the default sqlda type.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add DESCRIBE [OUTPUT] statement.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add out-of-scope cursor support to native mode.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Refactor ECPG grammar so that it uses the core grammar's
          unreserved_keyword list, minus a few specific words that have to be
          treated specially. This de-reserves a number of words in ECPG.
        </para>
       </listitem>
       <listitem>
        <para>
         Added dynamic cursor names to ECPG.
        </para>
       </listitem>
      <listitem>
       <para>
        Add ECPG function that returns the current transaction status.
       </para>
      </listitem>
      <listitem>
       <para>
        Make ECPG more robust against applications freeing strings.
       </para>
      </listitem>
        <listitem>
          <para>
            ECPG now includes a STRING datatype for Informix compatibility
            mode.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Ports</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add basic build support for Visual Studio 2008,
         without resorting to generating the build files for 2005 and
         then converting them.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Added support for 64-bit Windows platforms.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         Disable triggering failover with a signal in pg_standby on Windows.
          It never really worked before anyway.
        </para>
       </listitem>
       <listitem>
        <para>
         Change the WIN32 API version to be 5.01 (Windows XP), to
         bring in the proper IPv6 headers in newer SDKs.
        </para>
       </listitem>
       <listitem>
        <para>
         Write to the Windows eventlog in UTF-16, converting the
         message encoding as necessary.
        </para>
       </listitem>
       <listitem>
        <para>
         Replace use of the long-deprecated Bonjour API
         DNSServiceRegistrationCreate with the not-so-deprecated
         DNSServiceRegister. The new code will fail on Mac OS X
         releases before 10.3.
        </para>
       </listitem>
       <listitem>
          <para>
            Reserve the shared memory region during backend startup on Windows,
            so that memory allocated by starting third party DLLs doesn't end
            up conflicting with it. Hopefully this solves the long-time issue
            with &quot;could not reattach to shared memory&quot; errors on
            Win32.
          </para>
        </listitem>
        <listitem>
          <para>
            Add s_lock support for SuperH architecture (not well tested).
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Source Code, Build Options</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Improve PGXS makefile system to allow the module's
         makefile to specify where to install DATA and DOCS files.
         This is mainly intended to allow versioned installation, eg,
         install into contrib/fooM.N/ rather than directly into
         contrib/.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Get rid of the need for manual maintenance of the
         initial contents of pg_attribute, by having genbki.pl derive
         the information from the various catalog header files.  This
         greatly simplifies modification of the "bootstrapped"
         catalogs.  This patch finally kills genbki.sh and
         Gen_fmgrtab.sh; we now rely entirely on Perl scripts for
         those build steps.  To avoid creating a Perl build dependency
         where there was not one before, they will be built and
         shipped in tarballs.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Move the default configuration for the MSVC build
         system to config_default.pl, and allow using config.pl to
         override the defaults.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Make configure check the version of Perl we're
         building with, and reject versions &lt; 5.8.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Remove all support for working around on systems
         that don't provide a working 64-bit integer type.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add new make targets "world", "install-world" and
         "installcheck-world" to build, install and check just about
         everything.  In addition to everything built installed and
         tested by all, install and installcheck targets, these build
         HTML documentation, build and test contrib, and test
         procedural languages and ECPG.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         configure --enable-thread-safety is now the default (but can still
          be turned off).
        </para>
       </listitem>
       <listitem>
        <para>
         Fix inclusions of readline/editline header files so that we
         only attempt to #include the version of history.h that is in
         the same directory as the readline.h we are using. This
         avoids problems in some scenarios where both readline and
         editline are installed.
        </para>
       </listitem>
       <listitem>
        <para>
         Derived files that are shipped in the distribution used to be
         built in the source directory even for out-of-tree
         builds. They are now built in the build tree. This
         should be more convenient for certain developers' workflows.
        </para>
       </listitem>
        <listitem>
          <para>
            Functions which conflict with C++ reserved words have been renamed,
            making backend header files now safe to use with C++ libraries.
          </para>
        </listitem>
        <listitem>
          <para>
            Add man pages for SPI functions.
          </para>
        </listitem>
        <listitem>
          <para>
            Upgrade to Autoconf 2.63 (not relevant to users of distribution
            tarballs).
          </para>
        </listitem>
        <listitem>
          <para>
            Minimum version of Flex is now 2.5.31, to support reentrant
            scanners (not relevant to users of distribution tarballs).
          </para>
        </listitem>
        <listitem>
          <para>
            Documentation build rules have been improved. The generated
            documentation files are now shipped &quot;loose&quot;, not in
            sub-tarballs.
          </para>
        </listitem>
        <listitem>
          <para>
            New toolchain to generate man pages. From now on, the man pages
            will be current in every release.
          </para>
        </listitem>
        <listitem>
          <para>
            Code-coverage testing support now extends to the entire source
            tree, not only src/backend/.
          </para>
        </listitem>
        <listitem>
          <para>
            Make the core scanner re-entrant, along with additional fixes that
            will let it be used directly by PL/pgSQL.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
  </sect2>
@


2.15
log
@Clean up description of 9.0's incompatible changes in SIMILAR TO and
SQL-style substring().
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.14 2010/04/03 07:22:55 petere Exp $ -->
d16 9
a24 1
    ADD HERE
d27 1
a27 1
    <!-- This list duplicates items below, but without authors or details-->
d29 139
a167 3
    <para>
      The above items are explained in more detail in the sections below.
    </para>
d174 1
a174 1
    <para>CURRENT AS OF 2010-03-15</para>
d207 9
a307 1

d373 1
a373 1
              (Simon, Heikki)
d387 1
a387 1
              standby system (Fujii Masao, Heikki)
d406 1
a406 1
              activity (Simon, Fujii Masao, Heikki)
d709 13
d727 14
d1020 1
a1020 1
              <command>GRANT</>/<command>REVOKE</>(KaiGai Kohei)
d1154 1
a1154 1
              (Itagaki Takahiro, Tom)
d1291 7
d1351 1
a1351 1
            <literal>'YYY'</> specifications (Bruce Momjian)
d1361 8
d1986 1
a1986 1
              in text output mode (Jim Cox, Tom)
d2146 7
d2222 1
a2222 1
            to kill backends (Alex Hunsaker, Tom)
d2380 1
a2380 1
            Improve speed of memory allocation (Tom, Greg Stark)
d2406 1
a2406 1
            and PL/Perl (Peter, Andrew)
d2412 2
a2413 2
            Remove the use of flat files for system table bootstrapping (Tom,
            Alvaro)
d2521 1
a2521 1
              Harriman, Peter)
d2735 1
a2735 1
            Hunsaker, Tom)
@


2.14
log
@Remove unnecessary xref endterm attributes and title ids

The endterm attribute is mainly useful when the toolchain does not support
automatic link target text generation for a particular situation.  In  the
past, this was required by the man page tools for all reference page links,
but that is no longer the case, and it now actually gets in the way of
proper automatic link text generation.  The only remaining use cases are
currently xrefs to refsects.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.13 2010/04/01 00:32:53 momjian Exp $ -->
d53 1
a53 1
  
d62 1
a62 1
      
d64 1
a64 1
      
d100 3
a102 24
          Fix <link linkend="functions-similarto-regexp"><literal>SIMILAR
          TO</></link> to match the SQL standard-specified behavior
          by processing <literal>?</> and <literal>{}</> the same way
          they are processed in regular expressions (Tom Lane)
        </para>
      </listitem>

      <listitem>
        <para>
          Properly treat <literal>^</> and <literal>$</> as literals in
          <literal>SIMILAR TO</> patterns, to match the SQL standard (Tom Lane)
        </para>

        <para>
          Previously these were treated using regular expression syntax.  This
          change breaks backward compatibility.  This also affects
          <function>substring()</>'s interpretation of regular expressions.
        </para>
      </listitem>

      <listitem>
        <para>
          Process parentheses as literals in <literal>SIMILAR TO</> expressions;
          also make character class handling more standards-compliant (Tom Lane)
d106 10
a115 2
          This also affects <function>substring()</>'s handling of regular
          expressions.
d121 3
a123 3
          Do not allow <link
          linkend="functions-string-sql"><function>substring()</></link>
          to have a negative third length, per the SQL standard (Tom Lane)
d1382 1
a1382 1
              Install server-side language PL/pgSQL by default (Bruce Momjian) 
@


2.13
log
@Add full names for release note item authors.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.12 2010/04/01 00:18:21 momjian Exp $ -->
d542 1
a542 1
              linkend="sql-alterrole-title">database/role</link>
@


2.12
log
@Improve 9.0 release notes by removing extra parentheses and linking to a
more appropriate place for exclusion constraints.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.11 2010/03/23 22:37:14 momjian Exp $ -->
d50 1
a50 1
            defaulted to off for many years (Tom)
d59 1
a59 1
            (e.g. Perl-regex compatible) for many years (Tom)
d75 1
a75 1
          returned as part of the query (Peter)
d86 1
a86 1
          round when using float-based dates/times (Tom)
d103 1
a103 1
          they are processed in regular expressions (Tom)
d110 1
a110 1
          <literal>SIMILAR TO</> patterns, to match the SQL standard (Tom)
d123 1
a123 1
          also make character class handling more standards-compliant (Tom)
d136 1
a136 1
          to have a negative third length, per the SQL standard (Tom)
d158 1
a158 1
            columns are renamed (Tom)
d181 1
a181 1
            column name used in a query (Tom)
d195 1
a195 1
            Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom)
d209 1
a209 1
            reserved words (Tom)
d281 1
a281 1
              Improve performance of finding inherited child tables (Tom)
d298 1
a298 1
              used in the same transaction as table creation (Tom)
d312 1
a312 1
              Allow <literal>IS NOT NULL</> restrictions to use indexes (Tom)
d337 1
a337 1
              tests (Tom)
d364 1
a364 1
              Improve GEQO plan selection (Tom).
d383 1
a383 1
              to support inheritance-tree statistics (Tom)
d394 1
a394 1
              detection of when re-analyze is necessary (Tom)
d401 1
a401 1
              (Tom)
d440 1
a440 1
              (Magnus)
d527 1
a527 1
              tables and indexes (Magnus)
d543 1
a543 1
              combinations (Alvaro)
d560 1
a560 1
              itself via <productname>Bonjour</> (Tom)
d571 1
a571 1
              reloaded (Peter)
d590 1
a590 1
            is always predictable (Tom)
d606 1
a606 1
            syntax in the same query (Tom)
d647 1
a647 1
              strings and identifiers (Peter)
d681 1
a681 1
            objects like indexes and <acronym>TOAST</> tables (Tom)
d689 1
a689 1
            no labels (Bruce)
d774 1
a774 1
              (Peter)
d892 1
a892 1
            on all system tables (Tom)
d1019 1
a1019 1
              <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link> (Tom)
d1026 1
a1026 1
              on system indexes (Tom)
d1036 1
a1036 1
              Add <literal>point_ops</> opclass for GiST (Teodor)
d1046 2
a1047 1
              Use red-black trees for <acronym>GIN</> index creation (Teodor)
d1070 1
a1070 1
            (Peter)
d1087 1
a1087 1
            to be increased to <literal>3</> (Tom)
d1104 1
a1104 1
          (Teodor)
d1110 1
a1110 1
              Add full text search filtering dictionaries (Teodor)
d1121 1
a1121 1
              Allow underscores in full text email addresses (Teodor)
d1178 1
a1178 1
            <literal>'YYY'</> specifications (Bruce)
d1190 1
a1190 1
            and "contains" operations over polygons (Teodor)
d1296 1
a1296 1
              (Peter)
d1375 1
a1375 1
            (Tom)
d1395 1
a1395 1
              Install server-side language PL/pgSQL by default (Bruce) 
d1414 1
a1414 1
              Improve error location reporting in PL/pgSQL (Tom)
d1420 1
a1420 1
              Have PL/pgSQL use the main lexer, rather than a custom version (Tom)
d1442 1
a1442 1
              variable (Tom)
d1541 1
a1541 1
              (Andrew)
d1579 1
a1579 1
              Add Unicode support in PL/Python (Peter)
d1604 1
a1604 1
              support</link> to PL/Python (Peter)
d1610 1
a1610 1
              Improve mapping of domains to Python base types in PL/Python (Peter)
d1616 1
a1616 1
              Add <application>Python</> 3 support to PL/Python (Peter)
d1627 1
a1627 1
              Improve error location and exception reporting in PL/Python (Peter)
d1644 1
a1644 1
          <option>--analyze-only</> option to only analyze (Bruce)
d1682 1
a1682 1
              (Bruce)
d1689 1
a1689 1
              if two <application>psql</> sessions are run simultaneously (Tom)
d1760 1
a1760 1
                not with <command>\d</> (Peter)
d1784 1
a1784 1
              standard_conforming_strings is enabled (Tom)
d1825 1
a1825 1
              <application>postmaster</> at boot-time (Tom)
d1893 1
a1893 1
              (Peter)
d1905 1
a1905 1
              cannot be found (Peter)
d1913 1
a1913 1
              password fails (Bruce)
d1959 1
a1959 1
              variable names without restriction (Michael)
d1965 2
a1966 1
              Have <application>ecpg</> return zero for non-SQL3 data types (Michael)
d2021 1
a2021 1
            Enable client thread safety by default (Bruce)
d2052 1
a2052 1
            building (Peter)
d2067 1
a2067 1
              (Andrew)
d2089 1
a2089 1
              <filename>Makefile</> rules (Peter)
d2103 1
a2103 1
              Require <application>Autoconf</> 2.63 for building from source (Peter)
d2110 1
a2110 1
              (Tom)
d2146 1
a2146 1
              2008</></link> (Magnus)
d2153 1
a2153 1
              C</> (Magnus)
d2170 1
a2170 1
            as tar archive files inside the main distribution tarball (Peter)
d2182 1
a2182 1
            Enable the server lexer to be reentrant (Tom)
d2199 1
a2199 1
            enforcement (Tom)
d2237 1
a2237 1
            (Peter)
d2244 1
a2244 1
            100 characters (Tom)
d2263 1
a2263 1
            <literal>SQLSTATE</> error code (Bruce)
d2270 1
a2270 1
            entries (Bruce)
d2287 1
a2287 1
              Use a more modern <acronym>API</> for <application>Bonjour</> (Tom)
d2312 1
a2312 1
              integer data types (Tom)
d2371 1
a2371 1
              queries (Tom)
d2385 1
a2385 1
              plans (Tom)
d2401 1
a2401 1
              for use during binary upgrades (Bruce)
d2408 1
a2408 1
              and <structname>pg_enum</> <type>oids</> (Bruce)
d2420 1
a2420 1
              <productname>PostgreSQL</> version-specific subdirectory (Bruce)
d2476 1
a2476 1
            (Teodor)
d2528 1
a2528 1
            output (Andrew)
@


2.11
log
@Typo fix from IRC breinbaas
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.10 2010/03/23 02:28:48 momjian Exp $ -->
d288 1
a288 1
              (<varname>seq_page_cost</>/(<varname>random_page_cost</>)) via
d814 1
a814 1
              linkend="SQL-CREATETABLE-description"><command>CREATE
@


2.10
log
@Add back other xlog() function author names.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.9 2010/03/22 22:56:52 momjian Exp $ -->
d817 1
a817 1
              the real value of this features is in using complex
@


2.9
log
@Properly credit Simon for functions pg_last_xlog_replay_location, etc.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.8 2010/03/21 22:12:27 momjian Exp $ -->
d267 1
a267 1
              activity (Simon)
@


2.8
log
@Remove 9.0 release notes xref's to HISTORY.html can be built.

Document this restriction.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.7 2010/03/21 02:24:29 momjian Exp $ -->
d267 1
a267 1
              activity (Fujii Masao, Heikki)
@


2.7
log
@Add more 9.0 release note documentation links.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.6 2010/03/21 00:43:40 momjian Exp $ -->
d356 3
a358 3
              identical queries.  You can modify <xref
              linkend="guc-geqo-seed"> to
              randomize the starting value of the random plan generator.
d944 3
a946 3
              log_*_stats log output, e.g. <xref
              linkend="runtime-config-statistics-monitor">, no longer shows
              this information.
d1073 6
a1078 4
            The variable <xref linkend="guc-bytea-output"> controls if hex (default)
            or octal escapes are used for <type>bytea</> output.  (SWITCH
            DEFAULT FOR BETA?  PETER)  Libpq's <function>PQescapeByteaConn()</>
            now uses the hex format for <productname>PostgreSQL</> 9.0 servers.
d1084 3
a1086 2
            Allow <xref linkend="guc-extra-float-digits"> to be increased to <literal>3</>
        (Tom)
d1478 4
a1481 2
              Add server variable <xref linkend="guc-plperl-on-init"> to specify a PL/Perl
              Perl initialization function (Tim Bunce)
d1485 4
a1488 2
              <xref linkend="guc-plperl-on-plperl-init"> and <varname>plperl.on_plperlu_init</>
              are also available for trusted/untrusted-specific initialization.
d1514 2
a1515 2
              This can be enabled with the server variable <xref
              linkend="guc-plperl-use-strict">.
@


2.6
log
@Add links to documentation sections in 9.0 release notes.

Also update tagging instructions, and add id tags to a few documentation
sections.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.5 2010/03/20 16:31:09 momjian Exp $ -->
d56 4
a59 3
            Remove server variable <varname>regex_flavor</>, which was defaulted
            to <literal>advanced</> (e.g. Perl-regex compatible) for many
            years (Tom)
d73 3
a75 2
          When querying a parent table, do not do additional permission
          checks on child tables returned as part of the query (Peter)
d85 2
a86 2
          Have fractional seconds truncate rather than round when using
          float-based dates/times (Tom)
d134 3
a136 2
          Do not allow <function>substring()</> to have a negative third
          length, per the SQL standard (Tom)
d289 2
a290 2
              <command>ALTER TABLESPACE
              ...  SET/RESET</> (Robert Haas)
d296 3
a298 2
              Improve performance of <command>TRUNCATE</> when used in the same
              transaction as table creation (Tom)
d324 2
a325 1
              Remove unnecessary outer joins (Robert Haas)
d344 1
a344 1
        <title>GEQO</title>
d382 2
a383 2
              Improve <command>ANALYZE</> to support inheritance-tree statistics
          (Tom)
d393 2
a394 1
              Improve autovacuum detection of when re-analyze is necessary (Tom)
d415 2
a416 1
              Allow setting of distinct statistics using <command>ALTER TABLE</>
d587 3
a589 2
            Do <command>SELECT FOR UPDATE</>/<literal>SHARE</> processing
            after applying <literal>LIMIT</>, so the number of rows returned
d604 3
a606 2
            Allow mixing of traditional and SQL-standard
            <literal>LIMIT</>/<literal>OFFSET</> syntax in the same query (Tom)
d671 3
a673 2
            Speed up <command>CREATE DATABASE</> by deferring flushes to disk
            (Andres Freund, Greg Stark)
d679 3
a681 3
            Allow comments only on columns of tables, views, and composite
            types, not other objects like indexes and <acronym>TOAST</> tables
            (Tom)
d687 3
a689 1
            Allow the creation of enumerate types with no labels (Bruce)
d700 1
a700 1
            main heap page unless it cannot fit (Kevin Grittner)
d794 2
a795 1
              Add deferrable unique constraints (Dean Rasheed)
d813 6
a818 4
              This is enabled with the <command>CREATE TABLE CONSTRAINT ...
              EXCLUDE</> clause.  While uniqueness checks could be specified
              using this syntax, the real value of this features is in using
              complex operators that do not have built-in constraints.
d846 2
a847 2
              linkend="SQL-GRANT"><command>GRANT</></link>/<command>REVOKE
              IN SCHEMA</> clause (Petr Jelinek)
d854 1
a854 1
              <command>GRANT</>/<command>REVOKE </>(KaiGai Kohei)
d871 4
a874 2
            Have <command>LISTEN</>/<command>NOTIFY</> store events in a memory
            queue, rather than a system table (Joachim Wieland)
d891 2
a892 1
            Allow <command>CLUSTER</> on all system tables (Tom)
d944 3
a946 2
              log_*_stats log output, e.g. <varname>log_statement_stats</>, no
              longer shows this information.
d1094 1
a1094 1
        <title>Full Text Search</title>
d1184 3
a1186 2
            Correct calculations of "overlap" and "contains" operations over
            polygons (Teodor)
d1290 2
a1291 1
              Have information schema properly display date type octet lengths
d1463 2
a1464 1
              Add new PL/Perl functions:  <function>quote_literal()</>,
d1467 2
a1468 1
              <function>looks_like_number()</>, <function>encode_array_literal()</>,
d1505 5
d1595 2
a1596 1
              Add array parameter/return support to PL/Python (Peter) 
d1672 3
a1674 2
              Fix <command>psql --file -</> to properly honor
              <option>--single-transaction</> (Bruce)
d2252 3
a2254 2
            Add a new <literal>ERRCODE_INVALID_PASSWORD</> <literal>SQLSTATE</> error
            code (Bruce)
d2443 4
a2446 2
            Add <command>\shell</> and <command>\setshell</> meta commands to
            <filename>/contrib/pgbench</> (Michael Paquier)
@


2.5
log
@In 9.0 release notes, move libpq/ecpg up into their own sections, like I
did with server-side languages.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.4 2010/03/20 14:03:31 momjian Exp $ -->
d98 4
a101 3
          Fix <literal>SIMILAR TO</> to match the SQL standard-specified behavior
          by processing <literal>?</> and <literal>{}</> the same way they are
          processed in regular expressions (Tom)
d182 5
a186 4
            This behavior can be changed via the server variable
            <varname>plpgsql.variable_conflict</>, or by the per-function option
            <literal>#variable_conflict</>. The former behavior was to bind to
            variable names over column names.
d196 4
a199 2
            Instead, use <literal>ALIAS</>, which can now alias any variable,
            not just dollar sign variables, e.g. <literal>$1</>.
d236 3
a238 2
              <filename>postgresql.conf</> and <filename>recovery.conf</> settings
              to enable this feature, as well as extensive documentation.
d245 1
a245 1
              standby system (Fujii Masao,  Heikki)
d252 3
a254 2
              and <filename>recovery.conf</> settings to enable this feature, as
              well as extensive documentation.
d260 5
a264 4
              Add <function>pg_last_xlog_receive_location()</> and
              <function>pg_last_xlog_replay_location()</>, which can be used to
              monitor standby server <acronym>WAL</> activity (Fujii Masao,
              Heikki)
d349 5
a353 4
              While the Genetic Query Optimizer (GEQO) still selects random plans,
              it now selects the same random plans for identical queries.  You
              can modify <varname>geqo_seed</> to randomize the starting value
              of the random plan generator.
d395 1
a395 1
          (Tom)
d430 4
a433 2
              Add support for <acronym>RADIUS</> (Remote Authentication Dial In
              User Service) authentication (Magnus)
d440 3
a442 3
              Allow <acronym>LDAP</> (Lightweight Directory Access Protocol)
              authentication to operate in "search/bind" mode (Robert Fleming,
              Magnus)
d453 3
a455 1
              Add <literal>samehost</> and <literal>samenet</> designations to
d475 4
a478 2
              Add the ability for clients to set an application name, which is
              displayed in <structname>pg_stat_activity</> (Dave Page)
d484 2
a485 1
              Add an SQL state option (<literal>%e</>) to <varname>log_line_prefix</>
d507 4
a510 2
              Add <function>pg_stat_reset_shared('bgwriter')</> to reset the
              cluster-wide shared statistics of the bgwriter (Greg Smith)
d516 5
a520 4
              Add <function>pg_stat_reset_single_table_counters()</> and
              <function>pg_stat_reset_single_function_counters()</> to allow the
              reseting of statistics counters for individual tables and indexes
              (Magnus)
d534 2
a535 1
              Allow setting of configuration variables based on database/role
d550 4
a553 3
              Add boolean variable <varname>bonjour</>, which controls whether
              a Bonjour-enabled binary advertises itself via <productname>Bonjour</>
              (Tom)
d603 2
a604 1
            Increase the supported frame options in window functions (Hitoshi
d615 11
d635 3
a637 1
              Add Unicode surrogate pair (dual 16-bit) support to <literal>U&amp;</>
d644 3
a646 1
              Allow Unicode escapes in <literal>E'...'</> strings (Marko Kreen)
a649 1

d705 3
a707 2
              Add <command>ALTER DEFAULT PRIVILEGES</> command to control privileges of
              all newly-created objects (Petr Jelinek)
d741 1
a741 1
        <title><command>CREATE TABLE</></title>
a771 12
          <listitem>
            <para>
              Have <command>SELECT</> and <command>CREATE TABLE AS</> return
              row counts to the client
              (Boszormenyi Zoltan)
            </para>

            <para>
              <application>psql</> does not display these counts.
            </para>
          </listitem>

d829 4
a832 3
              Add the ability to make mass permission changes per schema using
              the new <command>GRANT</>/<command>REVOKE IN SCHEMA</> clause
              (Petr Jelinek)
d867 2
a868 2
            Allow <command>NOTIFY</> to pass an optional string to listeners
            (Joachim Wieland)
d885 1
a885 1
        <title><command>COPY</></title>
d916 1
a916 1
        <title><command>EXPLAIN</></title>
d962 1
a962 1
        <title><command>VACUUM</></title>
d1000 1
a1000 1
              <command>CREATE INDEX</> (Tom)
d1006 2
a1007 1
              Allow <command>REINDEX</> on system indexes (Tom)
d1048 3
a1050 1
            Allow hex values to be specified in <type>bytea</> strings (Peter)
d1054 1
a1054 1
            The variable <varname>bytea_output</> controls if hex (default)
d1063 1
a1063 1
            Allow <varname>extra_float_digits</> to be increased to <literal>3</>
d1114 3
a1116 2
            Allow case-insensitive regular expression matching with <acronym>UTF-8</>
            server encodings.
d1142 5
a1146 2
            Add support for <function>to_char()</> scientific notation output
            (<literal>'EEEE'</>) (Pavel Stehule, Brendan Jurd)
d1152 4
a1155 3
            Have <function>to_char()</> honor <literal>'FM'</> (fill mode) in
            <literal>'Y'</>, <literal>'YY'</>, and <literal>'YYY'</> specifications
            (Bruce)
d1191 4
a1194 2
              Add the <function>string_agg()</> aggregate function which aggregates
              values into a single string (Pavel Stehule)
d1225 5
a1229 3
              Add <function>get_bit()</> and <function>set_bit()</> functions
              for <type>bit</> strings, mirroring those for <type>bytea</>
              (Leonardo F)
d1235 4
a1238 2
              Implement <function>OVERLAY()</> (replace) for <type>bit</> strings
              and <type>bytea</> (Leonardo F)
d1252 5
a1256 3
              Add <function>pg_table_size()</> and <function>pg_indexes_size()</>
              to provide a more user-friendly interface to the
              <function>pg_relation_size()</> function (Bernd Helmle)
d1262 3
a1264 2
              Add <function>has_sequence_privilege()</> for sequence permission
              checking (Abhijit Menon-Sen)
d1271 1
a1271 1
          (Peter)
d1296 3
a1298 2
              Implement anonymous functions using the <command>DO</> statement
              (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
d1309 3
a1311 1
              Allow SQL-compliant per-column triggers (Itagaki Takahiro)
d1323 4
a1326 2
              Add <literal>WHERE</> clause to <command>CREATE TRIGGER</> to
              allow control over whether a trigger is fired (Takahiro Itagaki)
d1348 3
a1350 2
            Add the <literal>OR REPLACE</> clause to <command>CREATE
            LANGUAGE</> (Tom)
d1363 2
a1364 1
        <title>PL/PgSQL Server-Side Language</title>
d1404 1
a1404 1
        <title>PL/pgSQL Cursors</title>
d1437 1
a1437 1
        <title>PL/Perl Server-Side Language</title>
d1452 1
a1452 1
              Add server variable <varname>plperl.on_init</> to specify a PL/Perl
d1457 1
a1457 1
              <varname>plperl.on_plperl_init</> and <varname>plperl.on_plperlu_init</>
d1538 1
a1538 1
        <title>PL/Python Server-Side Language</title>
d1583 2
a1584 1
              The new server-side language is called <literal>plpython3u</>.
d1606 2
a1607 2
          Add <command>vacuumdb</> <option>--analyze-only</> option to only
          analyze (Bruce)
d1614 1
a1614 1
        <title><application>psql</></title>
d1619 3
a1621 2
              Properly escape <application>psql</> variables and identifiers
              (Pavel Stehule, Robert Haas)
d1692 3
a1694 1
          <title><application>psql</> <command>\d</> Commands</title>
d1732 1
a1732 1
        <title><application>pg_dump</></title>
d1737 2
a1738 1
              Have <application>pg_dump</>/<application>pg_restore</> <option>--clean</>
d1764 4
a1767 3
              Have <application>pg_dump</> <option>--verbose</> output the
              <application>pg_dump</> and server versions in text output mode (Jim
              Cox, Tom)
d1780 2
a1781 1
        <title><application>pg_ctl</></title>
d1815 1
a1815 1
        <title><application>libpq</></title>
d1822 4
a1825 2
              <function>PQconnectdbParams()</> and <function>PQconnectStartParams()</>
              (Guillaume Lelarge)
d1838 3
a1840 2
              Add <application>libpq</> functions <function>PQescapeLiteral()</> and
              <function>PQescapeIdentifier()</> (Robert Haas)
d1852 4
a1855 2
              Add checking for a per-user service file (<filename>.pg_service.conf</>),
              which is checked before the site-wide service file (Peter)
d1873 3
a1875 2
              Issue a warning if the <filename>.pgpass</>-retrieved password fails
              (Bruce)
d1884 1
a1884 1
        <title><application>ecpg</></title>
d1889 2
a1890 1
              Add <acronym>SQLDA</> (SQL Descriptor Area) support to <application>ecpg</>
d1897 3
a1899 2
              Add the <command>DESCRIBE</> [<literal>OUTPUT</>] statement to
              <application>ecpg</> (Boszormenyi Zoltan)
d1905 3
a1907 2
              Add an <application>ecpg</> function to return the current transaction
              status (Bernd Helmle)
d1986 2
a1987 1
            Thread-safe builds can be disabled with <application>configure</>
d1999 8
a2006 6
            Now that <filename>/proc/self/oom_adj</> allows disabling of the
            <productname>Linux</> out-of-memory (<acronym>OOM</>) killer for the
            postmaster and its children, the new compile-time option
            <literal>-DLINUX_OOM_ADJ=0</> allows the killer to be enabled for
            <application>postmaster</> children.  <application>pg_config</> shows if
            this flag was used during compilation.
d2025 4
a2028 2
              New <filename>Makefile</> targets <literal>world</>,
              <literal>install-world</>, and <literal>installcheck-world</> (Andrew)
d2041 3
a2043 2
              Add data and documentation location control to <acronym>PGXS</>
              Makefiles (Mark Cave-Ayland)
d2092 4
a2095 2
              Add support for compiling on 64-bit <productname>Windows</> and running
              in 64-bit mode (Tsutomu Yamada, Magnus)
d2105 3
a2107 1
              Allow server builds using <productname>Visual Studio 2008</> (Magnus)
d2222 7
a2238 7
        <listitem>
          <para>
            Add a new <literal>ERRCODE_INVALID_PASSWORD</> <literal>SQLSTATE</> error
            code (Bruce)
          </para>
        </listitem>

d2305 4
a2308 3
              Add <function>AggCheckCallContext()</> for use in detecting if a
              <productname>C</> function is being called as an aggregate (Hitoshi
              Harada)
d2359 3
a2361 2
              Add support for preservation of all <structname>relfilenodes</>, for
              use during binary upgrades (Bruce)
d2400 3
a2402 2
            Add multi-threaded option (<option>-j</>) to
            <filename>/contrib/pgbench</> (Itagaki Takahiro)
d2419 3
a2421 1
            New features for <filename>/contrib/dict_xsyn</> (Sergey Karpov)
d2432 3
a2434 1
            Add full text dictionary <filename>/contrib/unaccent</> (Teodor)
d2444 3
a2446 2
            Add <function>dblink_get_notify()</> to <filename>/contrib/dblink</>
            (Marcus Kempe)
d2456 5
a2460 3
            Greatly increase <filename>/contrib/hstore</>'s length limit and add
            btree and hash abilities so <literal>GROUP BY</> and
            <literal>DISTINCT</> operations are possible (Andrew Gierth)
d2470 4
a2473 2
            Add <filename>/contrib/passwordcheck</> which can check the strength of
            assigned passwords (Laurenz Albe)
d2484 3
a2486 1
            Add query text to <filename>/contrib/auto_explain</> output (Andrew)
d2492 2
a2493 1
            Add buffer access counters to <filename>/contrib/pg_stat_statements</>
d2500 6
a2505 3
            Update <filename>/contrib/start-scripts/linux</> to use
            <filename>/proc/self/oom_adj</> to disable the <productname>Linux</>
            out-of-memory (<acronym>OOM</>) killer (Alex Hunsaker, Tom)
@


2.4
log
@Move server-side languages up one section in the 9.0 release notes.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.3 2010/03/20 03:30:12 momjian Exp $ -->
d1753 5
d1760 1
@


2.3
log
@Create 9.0 release notes;  keep 9.0-alpha release notes in place.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.2 2010/02/19 00:35:18 petere Exp $ -->
d1292 24
a1315 2
      <sect4>
        <title>Server-Side Languages</title>
d1321 1
a1321 2
              Add the <literal>OR REPLACE</> clause to <command>CREATE
              LANGUAGE</> (Tom)
d1323 1
d1325 1
d1327 1
a1327 3
              This is helpful to optionally install a language if it does not
              already exist, and is particularly helpful now that PL/pgSQL is
              installed by default.
d1331 6
a1336 1
          </itemizedlist>
d1338 5
a1342 2
          <sect5>
          <title>PL/PgSQL Server-Side Language</title>
d1344 5
a1348 1
          <itemizedlist>
d1350 1
a1350 5
            <listitem>
              <para>
                Install server-side language PL/pgSQL by default (Bruce) 
              </para>
            </listitem>
d1352 1
a1352 5
            <listitem>
              <para>
                Allow PL/pgSQL to handle row types with dropped columns (Pavel Stehule)
              </para>
            </listitem>
d1354 3
a1356 6
            <listitem>
              <para>
                Allow <literal>IN</> parameters to be assigned values within
                PL/pgSQL functions (Steve Prentice)
              </para>
            </listitem>
d1358 6
a1363 5
            <listitem>
              <para>
                Improve error location reporting in PL/pgSQL (Tom)
              </para>
            </listitem>
d1365 6
a1370 5
            <listitem>
              <para>
                Have PL/pgSQL use the main lexer, rather than a custom version (Tom)
              </para>
            </listitem>
d1372 5
a1376 1
          </itemizedlist>
d1378 4
a1381 1
        </sect5>
d1383 1
a1383 3
        <sect5>
          <title>PL/pgSQL Cursors</title>
          <itemizedlist>
d1385 1
a1385 6
            <listitem>
              <para>
                Add count and <literal>ALL</> options to <command>MOVE
                FORWARD</>/<literal>BACKWARD</> in PL/pgSQL (Pavel Stehule)
              </para>
            </listitem>
d1387 3
a1389 6
            <listitem>
              <para>
                Allow PL/pgSQL's <literal>WHERE CURRENT OF</> to use a cursor
                variable (Tom)
              </para>
            </listitem>
d1391 9
a1399 5
            <listitem>
              <para>
                Add PL/pgSQL's <command>OPEN cursor FOR EXECUTE</> to use parameters
                (Pavel Stehule, Itagaki Takahiro)
              </para>
d1401 5
a1405 4
              <para>
                This is accomplished with a new <literal>USING</> clause.
              </para>
            </listitem>
d1407 5
a1411 1
          </itemizedlist>
d1413 5
a1417 1
        </sect5>
d1419 4
a1422 3
        <sect5>
          <title>PL/Perl Server-Side Language</title>
          <itemizedlist>
d1424 4
a1427 9
            <listitem>
              <para>
                Add new PL/Perl functions:  <function>quote_literal()</>,
                <function>quote_nullable()</>, <function>quote_ident()</>,
                <function>encode_bytea()</>, <function>decode_bytea()</>,
                <function>looks_like_number()</>, <function>encode_array_literal()</>,
                <function>encode_array_constructor()</> (Tim Bunce)
              </para>
            </listitem>
d1429 5
a1433 5
            <listitem>
              <para>
                Add server variable <varname>plperl.on_init</> to specify a PL/Perl
                Perl initialization function (Tim Bunce)
              </para>
d1435 4
a1438 5
              <para>
                <varname>plperl.on_plperl_init</> and <varname>plperl.on_plperlu_init</>
                are also available for trusted/untrusted-specific initialization.
              </para>
            </listitem>
d1440 5
a1444 5
            <listitem>
              <para>
                Improve error context support in PL/Perl (Alexey Klyukin)
              </para>
            </listitem>
d1446 6
a1451 4
            <listitem>
              <para>
                Support <command>END</> blocks in PL/Perl (Tim Bunce)
              </para>
d1453 6
a1458 4
              <para>
                <command>END</> blocks do not currently allow database access.
              </para>
            </listitem>
d1460 5
a1464 5
            <listitem>
              <para>
                Allow <command>use strict</> in PL/Perl (Tim Bunce)
              </para>
            </listitem>
d1466 4
a1469 4
            <listitem>
              <para>
                Allow <command>require</> in PL/Perl (Tim Bunce)
              </para>
d1471 5
a1475 5
              <para>
                This basically tests to see if the module is loaded, and if not,
                generates an error.
              </para>
            </listitem>
d1477 6
a1482 6
            <listitem>
              <para>
                Allow <command>use feature</> in PL/Perl if Perl version 5.10 or
                later is used (Tim Bunce)
              </para>
            </listitem>
d1484 1
a1484 6
            <listitem>
              <para>
                Verify that PL/Perl return values are valid in the server encoding
                (Andrew)
              </para>
            </listitem>
d1486 1
a1486 5
            <listitem>
              <para>
                Improve PL/Perl code structure (Tim Bunce)
              </para>
            </listitem>
d1488 3
a1490 4
            <listitem>
              <para>
                PL/Perl subroutines are now given names (Tim Bunce)
              </para>
d1492 4
a1495 5
              <para>
                This is for the use of profiling and code coverage tools.  DIDN'T
                THEY HAVE NAMES BEFORE?
              </para>
            </listitem>
d1497 5
a1501 6
            <listitem>
              <para>
                PL/Perl no longer allows <application>Safe</> version 2.20 because
                it is unsafe (Tim Bunce)
              </para>
            </listitem>
d1503 4
a1506 1
          </itemizedlist>
d1508 7
a1514 1
        </sect5>
d1516 5
a1520 3
        <sect5>
          <title>PL/Python Server-Side Language</title>
          <itemizedlist>
d1522 5
a1526 4
            <listitem>
              <para>
                Add Unicode support in PL/Python (Peter)
              </para>
d1528 4
a1531 5
              <para>
                Strings are automatically converted from/to the server encoding as
                necessary.
              </para>
            </listitem>
d1533 4
a1536 4
            <listitem>
              <para>
                Improve <type>bytea</> support in PL/Python (Caleb Welton)
              </para>
d1538 5
a1542 7
              <para>
                <type>Bytea</> values passed into PL/Python now are represented as
                binary, rather than the Postgres <type>bytea</> text format.  Null
                bytes are now also output properly from PL/Python.  <type>Boolean</>
                and <type>numeric</> value passing in PL/Python was also improved.
              </para>
            </listitem>
d1544 1
a1544 31
            <listitem>
              <para>
                Add array parameter/return support to PL/Python (Peter) 
              </para>
            </listitem>

            <listitem>
              <para>
                Improve mapping of domains to Python base types in PL/Python (Peter)
              </para>
            </listitem>

            <listitem>
              <para>
                Add <application>Python</> 3 support to PL/Python (Peter)
              </para>

              <para>
                The new server-side language is called <literal>plpython3u</>.
              </para>
            </listitem>

            <listitem>
              <para>
                Improve error location and exception reporting in PL/Python (Peter)
              </para>
            </listitem>

          </itemizedlist>

        </sect5>
d1555 3
a1557 3
          <para>
            Add <command>vacuumdb</> <option>--analyze-only</> option to only
            analyze (Bruce)
@


2.2
log
@Preliminary release notes for 9.0alpha4
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.1 2010/02/17 04:19:37 tgl Exp $ -->
d3 2415
a2417 1
<sect1 id="release-9-0">
@


2.1
log
@Stamp HEAD as 9.0devel, and update various places that were referring to 8.5
(hope I got 'em all).  Per discussion, this release will be 9.0 not 8.5.
@
text
@d1 1
a1 1
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.5.sgml,v 1.14 2009/12/19 20:33:12 petere Exp $ -->
d4 1
a4 1
  <title>Release 9.0alpha3</title>
d72 94
a165 1
         <emphasis>Remove previously deprecated configuration
d167 1
a167 1
         though add_missing_from were off.</emphasis>
d172 1
a172 1
         <emphasis>Performance and behavioral improvements in UPDATE,
d177 1
a177 1
         propagate into a WITH query anymore.</emphasis>
d182 2
a183 2
         <emphasis>Fix SELECT FOR UPDATE/SHARE in conjunction with LIMIT.
          Previously, it could return fewer rows than the limit specified.</emphasis>
d188 2
a189 2
         <emphasis>Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression
          to be checked to determine whether the trigger should be fired.</emphasis>
d192 1
a192 1
         <emphasis>For BEFORE triggers this is mostly a matter of spec compliance; but
d196 1
a196 1
          short-circuited if the trigger does not need to be fired.</emphasis>
d201 1
a201 1
         <emphasis>Add exclusion constraints, which generalize the concept of
d205 1
a205 1
          the constraint.</emphasis>
d210 1
a210 1
         <emphasis>Support ORDER BY within aggregate function calls, at long last
d214 1
a214 1
          for single-argument aggregates.</emphasis>
d217 1
a217 1
         <emphasis>Behavioral change: formerly, agg(DISTINCT x) dropped null values of
d220 1
a220 1
          normally would, i.e., you get one copy.</emphasis>
d310 30
a339 2
         <emphasis>Allow rewriting forms of ALTER TABLE to skip WAL
          logging.</emphasis>
d344 1
a344 1
         <emphasis>Speed up INFORMATION_SCHEMA's privilege views.</emphasis>
d430 125
a554 1
         <emphasis>Allow read-only connections during recovery, also
d556 1
a556 1
         replication solution.</emphasis>
d561 1
a561 1
         <emphasis>Provide a parenthesized-options syntax for VACUUM, analogous to
d565 1
a565 1
          existing options, however.</emphasis>
d570 2
a571 2
         <emphasis>Add support for an application_name parameter, which is displayed
          in pg_stat_activity and recorded in log entries.</emphasis>
d576 2
a577 2
         <emphasis>Fix longstanding problems in VACUUM caused by untimely
          interruptions.</emphasis>
d582 1
a582 1
         <emphasis>Add YAML to list of EXPLAIN formats.</emphasis>
d587 1
a587 1
         <emphasis>Add an EXPLAIN (BUFFERS) option to show buffer-usage statistics.</emphasis>
d592 1
a592 1
         <emphasis>Add a hook to let loadable modules get control at ProcessUtility
d594 1
a594 1
          utility commands.</emphasis>
d651 6
a656 1
         <emphasis>When querying a table with child tables, do not check permissions
d659 1
a659 1
          contrary to the SQL standard.</emphasis>
d664 1
a664 1
         <emphasis>Add a hook to CREATE/ALTER ROLE to allow an external module to
d667 1
a667 1
          &quot;passwordcheck&quot;.</emphasis>
d672 1
a672 1
         <emphasis>Add large object access control.</emphasis>
d677 1
a677 1
         <emphasis>Allow LDAP authentication to operate in search+bind
d684 1
a684 1
         significantly faster, so it's kept as an option.</emphasis>
d720 3
a722 2
         <emphasis>Remove configuration parameter regex_flavor. It is now always
          &quot;advanced&quot;.</emphasis>
d727 28
a754 1
         <emphasis>Teach the regular expression functions to do case-insensitive
d758 1
a758 1
          multibyte encodings.</emphasis>
d794 7
a800 1
         <emphasis>When doing &quot;ARRAY[...]::domain&quot;, where domain is a domain
d802 1
a802 1
          introduced in 8.4.</emphasis>
d807 1
a807 1
         <emphasis>Fix integer-to-bit-string conversions to handle the first
d809 1
a809 1
          the given integer by something other than a multiple of 8 bits.</emphasis>
d844 2
a845 2
         <emphasis>initdb now selects the encoding SQL_ASCII when the locale specifies
          US-ASCII. This case previously failed.</emphasis>
d850 1
a850 1
         <emphasis>Add init[db] option to pg_ctl.</emphasis>
d877 24
a900 2
         <emphasis>Throw error when a specified connection service name is not
          found in pg_service.conf, instead of ignoring it.</emphasis>
d916 2
a917 1
         <emphasis>In psql, show view definition only with \d+, not with \d.</emphasis>
d922 1
a922 2
         <emphasis>In psql, ignore UTF-8-encoded Unicode byte-order mark at the
          beginning of a file if the client encoding is UTF-8.</emphasis>
d927 7
a933 1
         <emphasis>Improve psql's tabular display of wrapped-around data by inserting
d936 1
a936 1
          the previous behavior available if anyone really wants it.</emphasis>
d941 1
a941 1
         <emphasis>Simplify psql's new linestyle behavior to default to
d943 1
a943 1
          whether the terminal supports UTF-8 characters.</emphasis>
d972 1
d975 2
d980 7
a986 1
         <emphasis>PL/pgSQL is installed by default.</emphasis>
d991 1
a991 1
         <emphasis>Remove PL/pgSQL's RENAME declaration, which has
d996 1
a996 1
          aliased.</emphasis>
d1001 2
a1002 2
         <emphasis>The PL/pgSQL parser and scanner were reworked to behave much more
          sanely:</emphasis>
d1005 1
a1005 1
         <emphasis>A variable reference will only be recognized where it can validly
d1009 1
a1009 1
          later on).</emphasis>
d1012 1
a1012 1
         <emphasis>When a name could refer either to a PL/pgSQL variable or a
d1018 1
a1018 1
          linkend="plpgsql-var-subst">the PL/pgSQL documentation</link>.</emphasis>
d1021 1
a1021 1
         <emphasis>Error reporting is much nicer: it no longer shows edited
d1023 1
a1023 1
          you wrote.</emphasis>
d1026 1
a1026 1
         <emphasis>Note that this change affects the set of keywords that are
d1033 1
a1033 1
          name that conflicts with a reserved keyword.</emphasis>
d1038 1
a1038 1
         <emphasis>Add support for anonymous code blocks (DO blocks) to PL/Perl.</emphasis>
d1043 2
a1044 2
         <emphasis>Support arrays as parameters and return values of PL/Python
          functions.</emphasis>
d1047 52
d1101 1
a1101 3
         <emphasis>Add Python 3 support to PL/Python.  It behaves more or less
          unchanged compared to Python 2, but the new language variant is
          called plpython3u.</emphasis>
d1106 2
a1107 2
         Add DO statement to support execution of procedural language
         code without having to create a function for it.
d1112 1
a1112 4
         Support use of function argument names to identify which
         actual arguments match which function parameters. The syntax
         uses AS, for example funcname(value AS arg1, anothervalue AS
         arg2).
d1117 2
a1118 5
         Fix/improve bytea and boolean support in PL/Python. Data type
         conversion into and out of PL/Python previously went through
         an intermediate string representation, which caused various
         discrepancies especially with bytea and boolean data. This is
         now fixed by converting the values directly.
d1123 2
a1124 4
         PL/Python now accepts Unicode objects where it previously
         only accepted string objects (for example, as return
         value). Unicode objects are converted to the PostgreSQL
         server encoding as necessary.
d1127 17
d1146 2
a1147 2
         Improve error context reporting in PL/Perl, for
         easier debugging.
d1152 3
a1154 1
         PL/pgSQL IN parameters now accept value assignments.
d1159 5
a1163 2
         Convert a Perl array to a PostgreSQL array when returned by
         set-returning functions as well as non-SRFs.
d1168 4
a1171 2
         Allow cursor commands MOVE FORWARD n, MOVE BACKWARD n,
         MOVE FORWARD ALL, MOVE BACKWARD ALL in PL/pgSQL.
a1175 6
            PL/pgSQL functions can now better cope with row types
            containing dropped columns.
          </para>
        </listitem>
        <listitem>
          <para>
d1186 1
d1188 1
d1194 1
a1194 1
         <emphasis>Add \shell and \setshell meta commands to pgbench.</emphasis>
d1196 2
d1199 5
a1203 2
         <emphasis>\shell runs an external shell command. \setshell
          does the same and assigns the result to a variable.</emphasis>
d1240 1
a1240 1
      <title>ecpg</title>
d1244 30
a1273 1
         <emphasis>Refactor ECPG grammar so that it uses the core grammar's
d1275 1
a1275 1
          treated specially. This de-reserves a number of words in ECPG.</emphasis>
d1280 1
a1280 1
         <emphasis>Added dynamic cursor names to ECPG.</emphasis>
d1306 14
a1319 2
         <emphasis>Disable triggering failover with a signal in pg_standby on Windows.
          It never really worked before anyway.</emphasis>
d1363 53
a1415 2
         <emphasis>configure --enable-thread-safety is now the default (but can still
          be turned off).</emphasis>
@

