postgresql/doc/src/sgml/release-9.0.sgml

2743 lines
67 KiB
Plaintext
Raw Normal View History

<!-- $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>
<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 &lt;&gt; <type>boolean</>
tests (Tom Lane)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title><link linkend="geqo">GEQO</link></title>
<itemizedlist>
<listitem>
<para>
Use the same random seed everytime GEQO plans a query (Andres
Freund)
</para>
<para>
While the Genetic Query Optimizer (GEQO) still selects
random plans, it now selects the same random plans for
identical queries. You can modify <link
linkend="guc-geqo-seed">geqo_seed</link> to randomize
the starting value of the random plan generator.
</para>
</listitem>
<listitem>
<para>
Improve GEQO plan selection (Tom Lane).
</para>
<para>
This avoids the rare error, "failed to make a valid plan".
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Optimizer Statistics</title>
<itemizedlist>
<listitem>
<para>
Improve <link linkend="SQL-ANALYZE"><command>ANALYZE</></link>
to support inheritance-tree statistics (Tom Lane)
</para>
<para>
This is particularly useful for partitioned tables.
</para>
</listitem>
<listitem>
<para>
Improve <link linkend="routine-vacuuming">autovacuum</link>
detection of when re-analyze is necessary (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Improve optimizer statistics for greater/less-than comparisons
(Tom Lane)
</para>
<para>
When looking up optimizer statistics for greater/less-than comparisons,
if the comparison value is in the first or last histogram bucket,
use an index to generate the actual statistics. This is particularly
useful for columns that are always increasing, and hence often have
inaccurate statistics.
</para>
</listitem>
<listitem>
<para>
Allow setting of distinct statistics using <link
linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>
(Robert Haas)
</para>
<para>
This allows user-override of the number or percentage of distinct
values for a column and optionally its child tables. This value
is normally computed by <command>ANALYZE</>.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Authentication</title>
<itemizedlist>
<listitem>
<para>
Add support for <link
linkend="auth-radius"><acronym>RADIUS</></link> (Remote
Authentication Dial In User Service) authentication
(Magnus Hagander)
</para>
</listitem>
<listitem>
<para>
Allow <link linkend="auth-ldap"><acronym>LDAP</></link>
(Lightweight Directory Access Protocol) authentication
to operate in "search/bind" mode (Robert Fleming, Magnus)
</para>
<para>
This allows the user to be looked up first, then the system uses
the <acronym>DN</> (Distinguished Name) returned for that user.
</para>
</listitem>
<listitem>
<para>
Add <link
linkend="auth-pg-hba-conf"><literal>samehost</></link>
and <literal>samenet</> designations to
<filename>pg_hba.conf</> (Stef Walter)
</para>
<para>
These match the server's <acronym>IP</> address and network address
respectively.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Monitoring</title>
<itemizedlist>
<listitem>
<para>
Add the ability for clients to set an <link
linkend="libpq-connect-application-name">application
name</link>, which is displayed in
<structname>pg_stat_activity</> (Dave Page)
</para>
</listitem>
<listitem>
<para>
Add an SQL state option (<literal>%e</>) to <link
linkend="guc-log-line-prefix"><varname>log_line_prefix</></link>
(Guillaume Smet)
</para>
</listitem>
<listitem>
<para>
Write to the Windows event log in <acronym>UTF16</> encoding
(Itagaki Takahiro)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Statistics Counters</title>
<itemizedlist>
<listitem>
<para>
Add <link
linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared('bgwriter')</></link>
to reset the cluster-wide shared statistics of the
bgwriter (Greg Smith)
</para>
</listitem>
<listitem>
<para>
Add <link
linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</></link>
and <function>pg_stat_reset_single_function_counters()</>
to allow the reseting of statistics counters for individual
tables and indexes (Magnus Hagander)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Server Settings</title>
<itemizedlist>
<listitem>
<para>
Allow setting of configuration variables based on <link
linkend="sql-alterrole">database/role</link>
combinations (Alvaro Herrera)
</para>
<para>
Previously only per-database and per-role setting were possible,
not combinations. All role and database settings are now stored
in the new <structname>pg_db_role_setting</> system table. A new
<application>psql</> <literal>\drds</> command shows these settings.
Backwards-compatible system views do not show this information.
</para>
</listitem>
<listitem>
<para>
Add boolean variable <link
linkend="guc-bonjour"><varname>bonjour</></link>, which
controls whether a Bonjour-enabled binary advertises
itself via <productname>Bonjour</> (Tom Lane)
</para>
<para>
The default is off, meaning it does not advertise.
</para>
</listitem>
<listitem>
<para>
Add boolean variable <link
linkend="guc-enable-material"><varname>enable_material</></link>, which
controls the use of materialize nodes in the optimizer
(Robert Haas)
</para>
<para>
The default is on.
</para>
</listitem>
<listitem>
<para>
Log changed parameter values when <filename>postgresql.conf</> is
reloaded (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Add proper permissions for custom variables (Tom Lane)
</para>
<para>
Custom variables can now only be created by super-users,
but can be modified by ordinary users if variable
permissions allow it. This makes custom variables
appropriate for security settings. Previously, any user
could create or modify custom variables.
</para>
</listitem>
</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&amp;</></link>
strings and identifiers (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Allow Unicode escapes in <link
linkend="sql-syntax-strings-escape"><literal>E'...'</></link>
strings (Marko Kreen)
</para>
</listitem>
</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>
<sect3>
<title>Client Applications</title>
<itemizedlist>
<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>
2009-08-18 00:14:44 +02:00
<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 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>
2009-08-18 00:14:44 +02:00
</sect1>