-<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.2 2010/02/19 00:35:18 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.3 2010/03/20 03:30:12 momjian Exp $ -->
-<sect1 id="release-9-0">
+
+ <sect1 id="release-9-0">
+ <title>Release 9.0</title>
+
+ <note>
+ <title>Release date</title>
+ <simpara>2010-??-??</simpara>
+ </note>
+
+ <sect2>
+ <title>Overview</title>
+
+ <para>
+ ADD HERE
+ </para>
+
+ <!-- This list duplicates items below, but without authors or details-->
+
+ <para>
+ The above items are explained in more detail in the sections below.
+ </para>
+
+ </sect2>
+
+ <sect2>
+
+ <title>Migration to Version 9.0</title>
+ <para>CURRENT AS OF 2010-03-15</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)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove server variable <varname>regex_flavor</>, which was defaulted
+ to <literal>advanced</> (e.g. Perl-regex compatible) for many
+ years (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Queries</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ When querying a parent table, do not do additional permission
+ checks on child tables returned as part of the query (Peter)
+ </para>
+
+ <para>
+ The SQL standard specifies this behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have fractional seconds truncate rather than round when using
+ float-based dates/times (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>String Handling</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Fix <literal>SIMILAR TO</> to match the SQL standard-specified behavior
+ by processing <literal>?</> and <literal>{}</> the same way they are
+ processed in regular expressions (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Properly treat <literal>^</> and <literal>$</> as literals in
+ <literal>SIMILAR TO</> patterns, to match the SQL standard (Tom)
+ </para>
+
+ <para>
+ Previously these were treated using regular expression syntax. This
+ change breaks backward compatibility. This also affects
+ <function>substring()</>'s interpretation of regular expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Process parentheses as literals in <literal>SIMILAR TO</> expressions;
+ also make character class handling more standards-compliant (Tom)
+ </para>
+
+ <para>
+ This also affects <function>substring()</>'s handling of regular
+ expressions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Do not allow <function>substring()</> to have a negative third
+ length, per the SQL standard (Tom)
+ </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)
+ </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)
+ </para>
+
+ <para>
+ This behavior can be changed via the server variable
+ <varname>plpgsql.variable_conflict</>, or by the per-function option
+ <literal>#variable_conflict</>. The former behavior was to bind to
+ variable names over column names.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom)
+ </para>
+
+ <para>
+ Instead, use <literal>ALIAS</>, 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)
+ </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, Heikki)
+ </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 documentation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow continuous archive (<acronym>WAL</>) files to be streamed to a
+ standby system (Fujii Masao, Heikki)
+ </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 documentation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_last_xlog_receive_location()</> and
+ <function>pg_last_xlog_replay_location()</>, which can be used to
+ monitor standby server <acronym>WAL</> activity (Fujii Masao,
+ Heikki)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>Performance</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Improve performance of finding inherited child tables (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow per-tablespace sequential and random page cost variables
+ (<varname>seq_page_cost</>/(<varname>random_page_cost</>)) via
+ <command>ALTER TABLESPACE
+ ... SET/RESET</> (Robert Haas)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve performance of <command>TRUNCATE</> when used in the same
+ transaction as table creation (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>Optimizer</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Allow <literal>IS NOT NULL</> restrictions to use indexes (Tom)
+ </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 outer joins (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)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect4>
+
+ <sect4>
+ <title>GEQO</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 <varname>geqo_seed</> to randomize the starting value
+ of the random plan generator.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve GEQO plan selection (Tom).
+ </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 <command>ANALYZE</> to support inheritance-tree statistics
+ (Tom)
+ </para>
+
+ <para>
+ This is particularly useful for partitioned tables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve autovacuum detection of when re-analyze is necessary (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve optimizer statistics for greater/less-than comparisons
+ (Tom)
+ </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 <command>ALTER TABLE</>
+ (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 <acronym>RADIUS</> (Remote Authentication Dial In
+ User Service) authentication (Magnus)
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Allow <acronym>LDAP</> (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 <literal>samehost</> 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 application name, which is
+ displayed in <structname>pg_stat_activity</> (Dave Page)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add an SQL state option (<literal>%e</>) to <varname>log_line_prefix</>
+ (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 <function>pg_stat_reset_shared('bgwriter')</> to reset the
+ cluster-wide shared statistics of the bgwriter (Greg Smith)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>pg_stat_reset_single_table_counters()</> and
+ <function>pg_stat_reset_single_function_counters()</> to allow the
+ reseting of statistics counters for individual tables and indexes
+ (Magnus)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>Server Settings</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow setting of configuration variables based on database/role
+ combinations (Alvaro)
+ </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 <varname>bonjour</>, which controls whether
+ a Bonjour-enabled binary advertises itself via <productname>Bonjour</>
+ (Tom)
+ </para>
+
+ <para>
+ The default is off, meaning it does not advertise.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Log changed parameter values when <filename>postgresql.conf</> is
+ reloaded (Peter)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Queries</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Do <command>SELECT FOR UPDATE</>/<literal>SHARE</> processing
+ after applying <literal>LIMIT</>, so the number of rows returned
+ is always predictable (Tom)
+ </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
+ <literal>LIMIT</>/<literal>OFFSET</> syntax in the same query (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Increase the supported frame options in window functions (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>
+
+
+ </itemizedlist>
+
+ <sect4>
+ <title>Unicode Strings</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add Unicode surrogate pair (dual 16-bit) support to <literal>U&</>
+ strings and identifiers (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow Unicode escapes in <literal>E'...'</> strings (Marko Kreen)
+ </para>
+ </listitem>
+
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Object Manipulation</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Speed up <command>CREATE DATABASE</> by deferring flushes to disk
+ (Andres Freund, Greg Stark)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow comments only on columns of tables, views, and composite
+ types, not other objects like indexes and <acronym>TOAST</> tables
+ (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow the creation of enumerate types with no labels (Bruce)
+ </para>
+
+ <para>
+ This is useful for supporting binary upgrades.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have columns defined with storage type <literal>MAIN</> remain on
+ 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 <command>ALTER DEFAULT PRIVILEGES</> 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><command>CREATE TABLE</></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)
+ </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>
+
+ <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>
+
+ <sect4>
+ <title>Constraints</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add deferrable unique constraints (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 <command>CREATE TABLE CONSTRAINT ...
+ EXCLUDE</> clause. While uniqueness checks could be specified
+ using this syntax, the real value of this features is in using
+ complex operators that do not have built-in constraints.
+ </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 <command>GRANT</>/<command>REVOKE IN SCHEMA</> 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 <command>LISTEN</>/<command>NOTIFY</> 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 <command>NOTIFY</> to pass an optional string to listeners
+ (Joachim Wieland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <command>CLUSTER</> on all system tables (Tom)
+ </para>
+
+ <para>
+ Global system tables still cannot be clustered.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect4>
+ <title><command>COPY</></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><command>EXPLAIN</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add new <command>EXPLAIN (BUFFERS)</> to report query buffer
+ activity (Itagaki Takahiro)
+ </para>
+
+ <para>
+ log_*_stats log output, e.g. <varname>log_statement_stats</>, 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><command>VACUUM</></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)
+ </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
+ <command>CREATE INDEX</> (Tom)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <command>REINDEX</> on system indexes (Tom)
+ </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)
+ </para>
+
+ <para>
+ DETAILS?
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use red-black trees for <acronym>GIN</> index creation (Teodor)
+ </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 <type>bytea</> strings (Peter)
+ </para>
+
+ <para>
+ The variable <varname>bytea_output</> controls if hex (default)
+ or octal escapes are used for <type>bytea</> output. (SWITCH
+ DEFAULT FOR BETA? PETER) Libpq's <function>PQescapeByteaConn()</>
+ now uses the hex format for <productname>PostgreSQL</> 9.0 servers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <varname>extra_float_digits</> to be increased to <literal>3</>
+ (Tom)
+ </para>
+
+ <para>
+ The previous maximum <varname>extra_float_digits</> was <literal>2</>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect4>
+ <title>Full Text Search</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add prefix support for the full text search synonym dictionary
+ (Teodor)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add full text search filtering dictionaries (Teodor)
+ </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)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Functions</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow case-insensitive regular expression 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 <function>to_char()</> scientific notation output
+ (<literal>'EEEE'</>) (Pavel Stehule, Brendan Jurd)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <function>to_char()</> honor <literal>'FM'</> (fill mode) in
+ <literal>'Y'</>, <literal>'YY'</>, and <literal>'YYY'</> specifications
+ (Bruce)
+ </para>
+
+ <para>
+ It was already honored by <literal>'YYYY'</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Correct calculations of "overlap" and "contains" operations over
+ polygons (Teodor)
+ </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 <function>string_agg()</> 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 <function>get_bit()</> and <function>set_bit()</> functions
+ for <type>bit</> strings, mirroring those for <type>bytea</>
+ (Leonardo F)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Implement <function>OVERLAY()</> (replace) for <type>bit</> strings
+ and <type>bytea</> (Leonardo F)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>Object Information Functions</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <function>pg_table_size()</> and <function>pg_indexes_size()</>
+ to provide a more user-friendly interface to the
+ <function>pg_relation_size()</> function (Bernd Helmle)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>has_sequence_privilege()</> for sequence permission
+ checking (Abhijit Menon-Sen)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have information schema properly display date type octet lengths
+ (Peter)
+ </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 <command>DO</> 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 per-column triggers (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 <command>CREATE TRIGGER</> 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>
+
+ <sect4>
+ <title>Server-Side Languages</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add the <literal>OR REPLACE</> clause to <command>CREATE
+ LANGUAGE</> (Tom)
+ </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>
+
+ <sect5>
+ <title>PL/PgSQL Server-Side Language</title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Install server-side language PL/pgSQL by default (Bruce)
+ </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)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have PL/pgSQL use the main lexer, rather than a custom version (Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect5>
+
+ <sect5>
+ <title>PL/pgSQL Cursors</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)
+ </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>
+
+ </sect5>
+
+ <sect5>
+ <title>PL/Perl Server-Side Language</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add new PL/Perl functions: <function>quote_literal()</>,
+ <function>quote_nullable()</>, <function>quote_ident()</>,
+ <function>encode_bytea()</>, <function>decode_bytea()</>,
+ <function>looks_like_number()</>, <function>encode_array_literal()</>,
+ <function>encode_array_constructor()</> (Tim Bunce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add server variable <varname>plperl.on_init</> to specify a PL/Perl
+ Perl initialization function (Tim Bunce)
+ </para>
+
+ <para>
+ <varname>plperl.on_plperl_init</> 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>
+ </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)
+ </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>
+
+ </sect5>
+
+ <sect5>
+ <title>PL/Python Server-Side Language</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add Unicode support in PL/Python (Peter)
+ </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 array parameter/return support to PL/Python (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve mapping of domains to Python base types in PL/Python (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <application>Python</> 3 support to PL/Python (Peter)
+ </para>
+
+ <para>
+ The new server-side language is called <literal>plpython3u</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve error location and exception reporting in PL/Python (Peter)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect5>
+
+ </sect4>
+
+ </sect3>
+
+ <sect3>
+ <title>Client Applications</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <command>vacuumdb</> <option>--analyze-only</> option to only
+ analyze (Bruce)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect4>
+ <title><application>psql</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Properly escape <application>psql</> variables 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
+ <option>--single-transaction</> (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Prevent overwriting of <application>psql</>'s command-line history
+ if two <application>psql</> sessions are run simultaneously (Tom)
+ </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</> <command>\d</> 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)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect5>
+ </sect4>
+
+ <sect4>
+ <title><application>pg_dump</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Have <application>pg_dump</>/<application>pg_restore</> <option>--clean</>
+ 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)
+ </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</> <option>--verbose</> output the
+ <application>pg_dump</> and server versions in text output mode (Jim
+ Cox, Tom)
+ </para>
+
+ <para>
+ These were already present in custom output mode.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title><application>pg_ctl</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow <application>pg_ctl</> to be safely used to start the
+ <application>postmaster</> at boot-time (Tom)
+ </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>
+
+ <sect4>
+ <title><application>libpq</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add new <application>libpq</> functions
+ <function>PQconnectdbParams()</> 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 <function>PQescapeLiteral()</> 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 (<filename>.pg_service.conf</>),
+ which is checked before the site-wide service file (Peter)
+ </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)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Issue a warning if the <filename>.pgpass</>-retrieved password fails
+ (Bruce)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title><application>ecpg</></title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add <acronym>SQLDA</> (SQL Descriptor Area) support to <application>ecpg</>
+ (Boszormenyi Zoltan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add the <command>DESCRIBE</> [<literal>OUTPUT</>] statement to
+ <application>ecpg</> (Boszormenyi Zoltan)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add an <application>ecpg</> function to return the current transaction
+ status (Bernd Helmle)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add the <literal>string</> data type in <application>ecpg</>
+ Informix-compatibility mode (Zoltan Boszormenyi)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <application>ecpg</> to use <literal>new</> and <literal>old</>
+ variable names without restriction (Michael)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Have <application>ecpg</> return zero for non-SQL3 data types (Michael)
+ </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>
+ Enable client thread safety by default (Bruce)
+ </para>
+
+ <para>
+ Thread-safe builds can be disabled with <application>configure</>
+ <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)
+ </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
+ <literal>-DLINUX_OOM_ADJ=0</> allows the killer to be enabled for
+ <application>postmaster</> children. <application>pg_config</> shows if
+ this flag was used during compilation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
+ building (Peter)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect4>
+ <title>Makefiles</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ New <filename>Makefile</> targets <literal>world</>,
+ <literal>install-world</>, and <literal>installcheck-world</> (Andrew)
+ </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 <acronym>PGXS</>
+ Makefiles (Mark Cave-Ayland)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Restructure the <acronym>HTML</> documentation build
+ <filename>Makefile</> rules (Peter)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>New Requirements</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Require <application>Autoconf</> 2.63 for building from source (Peter)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Require <application>Flex</> 2.5.31 or later to build from source
+ (Tom)
+ </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 64-bit <productname>Windows</> 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 <productname>Visual Studio 2008</> (Magnus)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow multi-processor compilation using <productname>Microsoft Visual
+ C</> (Magnus)
+ </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)
+ </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)
+ </para>
+
+ <para>
+ This was needed for use of the lexer by PL/pgSQL.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve speed of memory allocation (Tom, Greg Stark)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add system columns to better document the use of indexes for constraint
+ enforcement (Tom)
+ </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, Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Remove the use of flat files for system table bootstrapping (Tom,
+ Alvaro)
+ </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)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reduce the length of some file names so file paths are less than
+ 100 characters (Tom)
+ </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>
+ Properly remove the few remaining personal source code copyright
+ entries (Bruce)
+ </para>
+
+ <para>
+ The personal copyright notices were insignificant but the community
+ occasionally had to answer questions about them.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add a new <literal>ERRCODE_INVALID_PASSWORD</> <literal>SQLSTATE</> error
+ code (Bruce)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect4>
+ <title>Feature Support</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Use a more modern <acronym>API</> for <application>Bonjour</> (Tom)
+ </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)
+ </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)
+ </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 <function>AggCheckCallContext()</> 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)
+ </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)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
+ <sect4>
+ <title>Binary Upgrade Support</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Add support for preservation of all <structname>relfilenodes</>, for
+ use during binary upgrades (Bruce)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add support for binary upgrades to preserve <structname>pg_type</>
+ and <structname>pg_enum</> <type>oids</> (Bruce)
+ </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)
+ </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
+ <filename>/contrib/pgbench</> (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
+ <filename>/contrib/pgbench</> (Michael Paquier)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ New features for <filename>/contrib/dict_xsyn</> (Sergey Karpov)
+ </para>
+
+ <para>
+ The new options are <literal>matchorig</>, <literal>matchsynonyms</>,
+ and <literal>keepsynonyms</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add full text dictionary <filename>/contrib/unaccent</> (Teodor)
+ </para>
+
+ <para>
+ This filter dictionary removes accents from tokens.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <function>dblink_get_notify()</> to <filename>/contrib/dblink</>
+ (Marcus Kempe)
+ </para>
+
+ <para>
+ This allows async notifications in <productname>dblink</>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Greatly increase <filename>/contrib/hstore</>'s length limit and add
+ btree and hash abilities so <literal>GROUP BY</> and
+ <literal>DISTINCT</> operations are possible (Andrew Gierth)
+ </para>
+
+ <para>
+ New functions and operators were also added.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <filename>/contrib/passwordcheck</> 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 <filename>/contrib/auto_explain</> output (Andrew)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add buffer access counters to <filename>/contrib/pg_stat_statements</>
+ (Itagaki Takahiro)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Update <filename>/contrib/start-scripts/linux</> to use
+ <filename>/proc/self/oom_adj</> to disable the <productname>Linux</>
+ out-of-memory (<acronym>OOM</>) killer (Alex Hunsaker, Tom)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect3>
+ </sect2>
+</sect1>
+
+
+<sect1 id="release-9-0-alpha">
<title>Release 9.0alpha4</title>
<sect2>
<title>Overview</title>