<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.5.sgml,v 1.6 2009/10/21 19:43:06 petere Exp $ -->

<sect1 id="release-8-5">
  <title>Release 8.5alpha2</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>.
      </para>
  </sect2>
  <sect2>
    <title>Changes</title>
    <sect3>
      <title>SQL Features</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add SQL-compliant triggers on columns, which fire only if
         certain columns are named in the UPDATE's SET list.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>Define a new, more extensible syntax for COPY options
         in order to support additional COPY options in the future.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>Fix bug with nested WITH RECURSIVE statements.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add surrogate pair support for U&amp; string and identifier
         syntax.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>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>
         <emphasis>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.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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.)</emphasis>
        </para>
       </listitem>
        <listitem>
          <para>
            EXPLAIN allows output of plans in XML or JSON 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 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>
         <emphasis>When reloading postgresql.conf, log what parameters actually
         changed.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>Allow the collection of statistics on sequences.</>
        </para>
       </listitem>
      <listitem>
       <para>
        <emphasis>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 ALTER DEFAULT PRIVILEGES command, which allows
         users to adjust the privileges that will be applied to
         subsequently-created objects.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Add GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS IN SCHEMA.
         This makes it easier to manage permissions on database objects.</emphasis>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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</emphasis>
        </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>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>Fix encoding handling in binary input function of xml type.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>It is now reasonably safe to use pg_ctl to start
         the postmaster from a boot-time script.</emphasis>
        </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>psql</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Implement significantly saner behavior when two or
         more psql sessions overlap in their use of the history file.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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. By default, psql will use the Unicode characters
         whenever client_encoding is UTF8.</>
        </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>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>Add DO statement to support execution of procedural language
         code without having to create a function for it.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>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>
         <emphasis>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>
         <emphasis>Improve error context reporting in PL/Perl, for
         easier debugging.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>PL/pgSQL IN parameters now accept value assignments.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Convert a Perl array to a PostgreSQL array when returned by
         set-returning functions as well as non-SRFs.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
        <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>
    </sect3>
    <sect3>
      <title>Additional Supplied Modules</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>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.</emphasis>
        </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>Development</title>
      <itemizedlist>
      <listitem>
       <para>
        <emphasis>Add ECPG function that returns the current transaction status.</>
       </para>
      </listitem>
      <listitem>
       <para>
        <emphasis>Make ECPG more robust against applications freeing strings.</>
       </para>
      </listitem>
      <listitem>
       <para>
        <emphasis>Make libpq reject non-numeric and out-of-range port numbers with a
        suitable error message.</emphasis>
       </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>
            ECPG now includes a STRING datatype for Informix compatibility
            mode.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
    <sect3>
      <title>Ports</title>
      <itemizedlist>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>Write to the Windows eventlog in UTF-16, converting the
         message encoding as necessary.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>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>
         <emphasis>Install a hopefully-temporary workaround for Mac OS X Snow Leopard
         readdir() bug.</>
        </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>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>
         <emphasis>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 also built in the build tree. This
         should be more convenient for certain developers' workflows.</>
        </para>
       </listitem>
       <listitem>
        <para>
         <emphasis>Translations were updated.</>
        </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>
</sect1>
