-<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.16 2010/04/29 20:43:22 momjian Exp $ -->
-
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.17 2010/04/29 20:54:28 momjian Exp $ -->
<sect1 id="release-9-0">
<title>Release 9.0</title>
- <note>
- <title>Release date</title>
- <simpara>2010-??-??</simpara>
- </note>
+ <note>
+ <title>Release date</title>
+ <simpara>2010-??-??</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ 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>
+
+ <itemizedlist>
+
+ <!-- This list duplicates items below, but without authors or details-->
+
+ <listitem>
+ <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>
+
+ <listitem>
+ <para>
+ Allow SQL-compliant <link
+ linkend="SQL-CREATETRIGGER">per-column triggers</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
+ unique constraints</link>
+ </para>
+ </listitem>
+
+ <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>
+
+ <listitem>
+ <para>
+ Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
+ to pass an optional string to listeners
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Change <command>VACUUM FULL</> to rewrite the entire table and
+ indexes, rather than moving around single rows to compact space
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add prefix support for the full text search synonym dictionary
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use red-black trees for <acronym>GIN</> index creation
+ </para>
+ </listitem>
+
+ <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>
+
+ <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>
+
+ <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>
+
+ <listitem>
+ <para>
+ The above items are explained in more detail in the sections below.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect2>
+
+ <sect2>
+
+ <title>Migration to Version 9.0</title>
+ <para>CURRENT AS OF 2010-04-29</para>
+
+ <para>
+ A dump/restore using <application>pg_dump</application> is
+ required for those wishing to migrate data from any previous
+ release.
+ </para>
+
+ <para>
+ Observe the following incompatibilities:
+ </para>
+
+ <sect3>
+ <title>Server Settings</title>
+
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Queries</title>
+ <itemizedlist>
+
+ <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>
+
+ <listitem>
+ <para>
+ Have fractional seconds conversion truncate rather than
+ round when using float-based dates/times (Tom Lane)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>String Handling</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Object Renaming</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>PL/pgSQL Variables</title>
+ <itemizedlist>
+
+
+ <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>
+
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Changes</title>
+
+ <sect3>
+ <title>Server</title>
+
+ <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 <> <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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Queries</title>
+ <itemizedlist>
+
+ <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&</></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>
+
+ </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> 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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Utility Operations</title>
+
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Data Types</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Functions</title>
+ <itemizedlist>
+
+ <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>
+
+ </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 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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
- <sect2>
- <title>Overview</title>
+ <sect3>
+ <title>Client Applications</title>
+ <itemizedlist>
+ <listitem>
<para>
- 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>
+ 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>
- <!-- This list duplicates items below, but without authors or details-->
+ <listitem>
+ <para>
+ Properly escape <application>psql</> <link
+ linkend="APP-PSQL-variables">variables</link> and
+ identifiers (Pavel Stehule, Robert Haas)
+ </para>
- <listitem>
- <para>
- Allow continuous archive standby systems to accept read-only queries
- </para>
- </listitem>
+ <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>
- Allow continuous archive (<acronym>WAL</>) files to be streamed to a
- standby system
- </para>
- </listitem>
+ <listitem>
+ <para>
+ Ignore leading UTF-8-encoded Unicode byte-order marker in
+ <application>psql</> (Itagaki Takahiro)
+ </para>
- <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>
+ <para>
+ This is enabled when the client encoding is <acronym>UTF-8</>.
+ </para>
+ </listitem>
- <listitem>
- <para>
- Add the ability to control large object permissions with
- <command>GRANT</>/<command>REVOKE</>
- </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>
- Implement anonymous functions using the <link
- linkend="SQL-DO"><command>DO</></link> statement
- </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>
- Allow function calls to supply parameter names and match them to named
- parameters in the function definition (Pavel Stehule)
- </para>
- </listitem>
+ <listitem>
+ <para>
+ Improve <application>psql</>'s tab completion support (Itagaki
+ Takahiro)
+ </para>
+ </listitem>
- <listitem>
- <para>
- Install server-side language PL/pgSQL by default
- </para>
- </listitem>
+ </itemizedlist>
- <listitem>
- <para>
- Major PL/Perl enhancements
- </para>
- </listitem>
+ <sect5>
+ <title><application>psql</> Display</title>
+ <itemizedlist>
<listitem>
- <para>
- Allow SQL-compliant <link
- linkend="SQL-CREATETRIGGER">per-column triggers</link>
- </para>
+ <para>
+ Allow <application>psql</> to use fancy Unicode line-drawing
+ characters via <command>\pset linestyle unicode</> (Roger Leigh)
+ </para>
</listitem>
<listitem>
- <para>
- Add <link linkend="SQL-CREATETABLE-compatibility">deferrable
- unique constraints</link>
- </para>
- </listitem>
+ <para>
+ Improve display of wrapped columns in <application>psql</> (Roger
+ Leigh)
+ </para>
- <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>
+ <para>
+ The previous format is available by using <command>\pset linestyle
+ old-ascii</>.
+ </para>
</listitem>
- <listitem>
- <para>
- Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
- to pass an optional string to listeners
- </para>
- </listitem>
+ </itemizedlist>
- <listitem>
- <para>
- Change <command>VACUUM FULL</> to rewrite the entire table and
- indexes, rather than moving around single rows to compact space
- </para>
- </listitem>
+ </sect5>
- <listitem>
- <para>
- Add prefix support for the full text search synonym dictionary
- </para>
- </listitem>
+ <sect5>
+ <title><application>psql</> <link
+ linkend="APP-PSQL-meta-commands"><command>\d</></link>
+ Commands</title>
+ <itemizedlist>
<listitem>
- <para>
- Use red-black trees for <acronym>GIN</> index creation
- </para>
- </listitem>
+ <para>
+ Have <command>\d</> show child tables that inherit from the specified
+ parent (Damien Clochard)
+ </para>
- <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>
+ <para>
+ <command>\d</> shows only the number of child tables, while
+ <command>\d+</> shows the names of all child tables.
+ </para>
</listitem>
<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>
+ <para>
+ Show definition of indexes in <command>\d index_name</> (Khee Chin)
+ </para>
- <listitem>
- <para>
- Add support for compiling on <link
- linkend="install-win32-full">64-bit
- <productname>Windows</></link> and running in 64-bit
- mode
- </para>
+ <para>
+ The definition is useful for expression indexes.
+ </para>
</listitem>
<listitem>
- <para>
- The above items are explained in more detail in the sections below.
- </para>
+ <para>
+ In <application>psql</>, show the view definition only with <command>\d+</>,
+ not with <command>\d</> (Peter Eisentraut)
+ </para>
</listitem>
- </itemizedlist>
-
- </sect2>
+ </itemizedlist>
- <sect2>
+ </sect5>
+ </sect4>
- <title>Migration to Version 9.0</title>
- <para>CURRENT AS OF 2010-04-29</para>
+ <sect4>
+ <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
+ <itemizedlist>
- <para>
- A dump/restore using <application>pg_dump</application> is
- required for those wishing to migrate data from any previous
- release.
- </para>
+ <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>
- <para>
- Observe the following incompatibilities:
- </para>
+ <listitem>
+ <para>
+ Fix <application>pg_dump</> to properly dump large objects if
+ standard_conforming_strings is enabled (Tom Lane)
+ </para>
- <sect3>
- <title>Server Settings</title>
+ <para>
+ Large objects dumps now use hex format for output. (SWITCH DEFAULT
+ FOR BETA? TOM)
+ </para>
+ </listitem>
- <itemizedlist>
+ <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>
- <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>
-
- </itemizedlist>
-
- </sect3>
-
- <sect3>
- <title>Queries</title>
- <itemizedlist>
+ <para>
+ These were already present in custom output mode.
+ </para>
+ </listitem>
- <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>
+ </itemizedlist>
- <listitem>
- <para>
- Have fractional seconds conversion truncate rather than
- round when using float-based dates/times (Tom Lane)
- </para>
- </listitem>
+ </sect4>
- </itemizedlist>
+ <sect4>
+ <title><link
+ linkend="app-pg-ctl"><application>pg_ctl</></link></title>
+ <itemizedlist>
- </sect3>
+ <listitem>
+ <para>
+ Allow <application>pg_ctl</> to be safely used to start the
+ <application>postmaster</> at boot-time (Tom Lane)
+ </para>
- <sect3>
- <title>String Handling</title>
- <itemizedlist>
+ <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>
- 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>
+ Give <application>pg_ctl</> the ability to initialize the database
+ (like <application>initdb</>) (Zdenek Kotala)
+ </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>
</itemizedlist>
- </sect3>
+ </sect4>
- <sect3>
- <title>Object Renaming</title>
- <itemizedlist>
+ </sect3>
- <listitem>
- <para>
- Tighten enforcement of column renaming when a child table inherits
- the renamed column from an unrelated parent (KaiGai Kohei)
- </para>
- </listitem>
+ <sect3>
+ <title><application>Development Tools</></title>
- <listitem>
- <para>
- No longer rename index names and index column names when table
- columns are renamed (Tom Lane)
- </para>
+ <sect4>
+ <title><link linkend="libpq"><application>libpq</></link></title>
- <para>
- Administrators still can rename such columns manually. Expression
- index names are also not renamed. WHY ARE EXPRESSION INDEXES
- SIGNIFICANT?
- </para>
- </listitem>
+ <itemizedlist>
- </itemizedlist>
+ <listitem>
+ <para>
+ Add new <application>libpq</> functions
+ <link
+ linkend="libpq-connect"><function>PQconnectdbParams()</></link>
+ and <function>PQconnectStartParams()</> (Guillaume
+ Lelarge)
+ </para>
- </sect3>
+ <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>
- <sect3>
- <title>PL/pgSQL Variables</title>
- <itemizedlist>
+ <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>
- <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>
-
- </sect3>
- </sect2>
+ <para>
+ The file <filename>.pg_service.conf</> is assumed to be in the
+ user's home directory.
+ </para>
+ </listitem>
- <sect2>
- <title>Changes</title>
-
- <sect3>
- <title>Server</title>
-
- <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 <> <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Queries</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Properly report an error if the specified <application>libpq</> service
+ cannot be found (Peter Eisentraut)
+ </para>
+ </listitem>
- <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&</></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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Object Manipulation</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Issue a warning if the <link
+ linkend="libpq-pgpass"><filename>.pgpass</></link>-retrieved
+ password fails (Bruce Momjian)
+ </para>
+ </listitem>
- <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Utility Operations</title>
+ </itemizedlist>
- <itemizedlist>
+ </sect4>
- <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Data Types</title>
- <itemizedlist>
+ <sect4>
+ <title><link linkend="ecpg"><application>ecpg</></link></title>
+ <itemizedlist>
- <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Functions</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>
- 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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Server-Side Languages</title>
+ <listitem>
+ <para>
+ Add the <link linkend="ecpg-descriptors"><command>DESCRIBE</>
+ [<literal>OUTPUT</>]</link> statement to <application>ecpg</>
+ (Boszormenyi Zoltan)
+ </para>
+ </listitem>
- <itemizedlist>
+ <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>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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Client Applications</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Add the <literal>string</> data type in <application>ecpg</>
+ Informix-compatibility mode (Zoltan Boszormenyi)
+ </para>
+ </listitem>
- <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>
-
- </sect5>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Build Options</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Allow <application>ecpg</> to use <literal>new</> and <literal>old</>
+ variable names without restriction (Michael Meskes)
+ </para>
+ </listitem>
- <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Source Code</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Allow <application>ecpg</> to use variable names in
+ <function>free()</>(Michael Meskes)
+ </para>
+ </listitem>
- <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>
-
- </itemizedlist>
-
- </sect4>
-
- </sect3>
-
- <sect3>
- <title>Contrib</title>
- <itemizedlist>
+ <listitem>
+ <para>
+ Have <application>ecpg</> return zero for non-SQL3 data types
+ (Michael Meskes))
+ </para>
- <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>
-
- </itemizedlist>
-
- </sect3>
- </sect2>
-</sect1>
+ <para>
+ Previously it returned the negative of the data type <type>oid</>.
+ </para>
+ </listitem>
+ </itemizedlist>
-<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>.
- </para>
- </sect2>
- <sect2>
- <title>Changes</title>
- <sect3>
- <title>SQL Features</title>
+ <sect5>
+ <title><application>ecpg</> Cursors</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
- "row1.col OP row2.col" 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& 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. "ID = ID +
- 1"
- </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 > constant" or "column < 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 "join removal" 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 <> true and foo <> 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
- "bonjour" 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).
+ 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>
- 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
- "passwordcheck".
- </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 "samehost" and "samenet" 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
- "advanced".
- </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 "ARRAY[...]::domain", 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. "pset linestyle old-ascii" 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 "pset linestyle ascii/unicode" 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 >= 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>
-
- <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.
+ Allow dynamic <application>ecpg</> cursor names (Boszormenyi Zoltan)
</para>
</listitem>
+
<listitem>
<para>
- Make ECPG more robust against applications freeing strings.
+ Allow <application>ecpg</> to use noise words <literal>FROM</> and
+ <literal>IN</> in <command>FETCH</> and <command>MOVE</> (Zoltan
+ Boszormenyi)
</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 "could not reattach to shared memory" 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 < 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 "loose", 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>
+
+ </itemizedlist>
+
+ </sect5>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Build Options</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Source Code</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Contrib</title>
+ <itemizedlist>
+
+ <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>
+
+ </itemizedlist>
+
+ </sect3>
+ </sect2>
</sect1>
--- /dev/null
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-alpha.sgml,v 2.1 2010/04/29 20:54:28 momjian Exp $ -->
+
+<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>.
+ </para>
+ </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
+ "row1.col OP row2.col" 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& 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. "ID = ID +
+ 1"
+ </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 > constant" or "column < 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 "join removal" 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 <> true and foo <> 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
+ "bonjour" 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
+ "passwordcheck".
+ </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 "samehost" and "samenet" 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
+ "advanced".
+ </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 "ARRAY[...]::domain", 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. "pset linestyle old-ascii" 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 "pset linestyle ascii/unicode" 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 >= 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>
+
+ <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 "could not reattach to shared memory" 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 < 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 "loose", 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>