Commit 005e427a authored by Tom Lane's avatar Tom Lane

Make an editorial pass over the 9.0 release notes.

This is mostly about grammar, style, and presentation, though I did find
a few small factual errors.
parent d8986332
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.306 2010/08/22 02:37:32 momjian Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.307 2010/08/23 02:43:25 tgl Exp $ -->
<chapter Id="runtime-config"> <chapter Id="runtime-config">
<title>Server Configuration</title> <title>Server Configuration</title>
...@@ -3507,7 +3507,7 @@ local0.* /var/log/postgresql ...@@ -3507,7 +3507,7 @@ local0.* /var/log/postgresql
</row> </row>
<row> <row>
<entry><literal>%e</literal></entry> <entry><literal>%e</literal></entry>
<entry>SQL state</entry> <entry>SQLSTATE error code</entry>
<entry>no</entry> <entry>no</entry>
</row> </row>
<row> <row>
...@@ -3578,7 +3578,7 @@ FROM pg_stat_activity; ...@@ -3578,7 +3578,7 @@ FROM pg_stat_activity;
<para> <para>
<application>Syslog</> produces its own <application>Syslog</> produces its own
time stamp and process ID information, so you probably do not want to time stamp and process ID information, so you probably do not want to
use those escapes if you are logging to <application>syslog</>. include those escapes if you are logging to <application>syslog</>.
</para> </para>
</tip> </tip>
</listitem> </listitem>
...@@ -3705,7 +3705,7 @@ FROM pg_stat_activity; ...@@ -3705,7 +3705,7 @@ FROM pg_stat_activity;
virtual transaction ID, virtual transaction ID,
regular transaction ID, regular transaction ID,
error severity, error severity,
SQL state code, SQLSTATE code,
error message, error message,
error message detail, error message detail,
hint, hint,
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.95 2010/08/20 13:59:45 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.96 2010/08/23 02:43:25 tgl Exp $ -->
<chapter id="ddl"> <chapter id="ddl">
<title>Data Definition</title> <title>Data Definition</title>
...@@ -846,7 +846,7 @@ CREATE TABLE order_items ( ...@@ -846,7 +846,7 @@ CREATE TABLE order_items (
</para> </para>
</sect2> </sect2>
<sect2> <sect2 id="ddl-constraints-exclusion">
<title>Exclusion constraints</title> <title>Exclusion constraints</title>
<indexterm> <indexterm>
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.49 2010/08/17 04:37:21 petere Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/release-9.0.sgml,v 2.50 2010/08/23 02:43:25 tgl Exp $ -->
<sect1 id="release-9-0"> <sect1 id="release-9-0">
<title>Release 9.0</title> <title>Release 9.0</title>
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
<title>Overview</title> <title>Overview</title>
<para> <para>
Based on overwhelming user demand, this release of This release of
<productname>PostgreSQL</> adds features that have been requested <productname>PostgreSQL</> adds features that have been requested
for years, like easy-to-use replication, a mass permission for years, such as easy-to-use replication, a mass permission-changing
facility, and anonymous blocks. While past major releases have facility, and anonymous code blocks. While past major releases have
been conservative in their scope, this release shows a been conservative in their scope, this release shows a
bold new desire to provide facilities that new and existing bold new desire to provide facilities that new and existing
users of <productname>PostgreSQL</> will embrace. This has all users of <productname>PostgreSQL</> will embrace. This has all
been done with few incompatibilities. Major enhancements are: been done with few incompatibilities. Major enhancements include:
</para> </para>
<itemizedlist> <itemizedlist>
...@@ -31,32 +31,24 @@ ...@@ -31,32 +31,24 @@
<listitem> <listitem>
<para> <para>
Built-in, binary, log-based replication. This advance consists of two Built-in replication based on log shipping. This advance consists of
features: Hot Standby allows continuous archive standby database servers two features: Streaming Replication, allowing continuous archive
to accept read-only queries, and Streaming Replication allows continuous (<acronym>WAL</>) files to be streamed over a network connection to a
archive (<acronym>WAL</>) files to be streamed over a network port to a standby server, and Hot Standby, allowing continuous archive standby
standby database server. servers to execute read-only queries. The net effect is to support a
single master with multiple read-only slave servers.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Easier database object permissions management. <link Easier database object permissions management. <link
linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE IN
IN SCHEMA</></link> supports mass permissions changes, and SCHEMA</></link> supports mass permissions changes on existing objects,
the <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER while <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER DEFAULT
DEFAULT PRIVILEGES</></link> command controls privileges PRIVILEGES</></link> allows control of privileges for objects created in
of all newly-created objects. Large object permissions now the future. Large objects (BLOBs) now support privilege management as
support <command>GRANT</>/<command>REVOKE</> as well. well.
</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> </para>
</listitem> </listitem>
...@@ -64,7 +56,8 @@ ...@@ -64,7 +56,8 @@
<para> <para>
Broadly enhanced stored procedure support. Broadly enhanced stored procedure support.
The <link linkend="SQL-DO"><command>DO</></link> statement permits The <link linkend="SQL-DO"><command>DO</></link> statement permits
anonymous code blocks. Functions can now be called using named execution of <quote>anonymous</> code blocks, without having to
define a function first. Functions can now be called using named
parameters. PL/pgSQL is now installed by default, and PL/Perl and parameters. PL/pgSQL is now installed by default, and PL/Perl and
PL/Python have been enhanced in several ways, including support for PL/Python have been enhanced in several ways, including support for
Python3. Python3.
...@@ -73,17 +66,24 @@ ...@@ -73,17 +66,24 @@
<listitem> <listitem>
<para> <para>
More advanced reporting queries with additional windowing functions Full support for <link linkend="install-win32">64-bit
(PRECEDING and FOLLOWING) and the ability to ORDER BY inside aggregate <productname>Windows</></link>.
functions.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Triggers now support two new features, More advanced reporting queries, including additional windowing options
SQL-compliant <link (<literal>PRECEDING</> and <literal>FOLLOWING</>) and the ability to
linkend="SQL-CREATETRIGGER">per-column triggers</link>, and control the order in which values are fed to aggregate functions.
</para>
</listitem>
<listitem>
<para>
New trigger features, including
SQL-standard-compliant <link
linkend="SQL-CREATETRIGGER">per-column triggers</link> and
conditional trigger execution. conditional trigger execution.
</para> </para>
</listitem> </listitem>
...@@ -98,66 +98,71 @@ ...@@ -98,66 +98,71 @@
<listitem> <listitem>
<para> <para>
New and enhanced security features, including RADIUS authentication, <link linkend="ddl-constraints-exclusion">Exclusion constraints</link>.
LDAP authentication improvements, and the new <filename>checkpassword</> optional module These provide a generalized version of unique constraints, allowing
for testing password strength. enforcement of complex conditions.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link New and enhanced security features, including RADIUS authentication,
linkend="SQL-NOTIFY"><command>NOTIFY</></link> LDAP authentication improvements, and a new contrib module
feature has been overhauled to make it into <link linkend="passwordcheck"><filename>passwordcheck</></link>
a high-performance event queuing system. It now stores for testing password strength.
events in a memory-based queue, and it now allows delivery
of a string payload to listeners with each event.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add <link linkend="pgupgrade"><filename>contrib/pg_upgrade</></link> New high-performance implementation of the
to support in-place upgrades from 8.3 or 8.4 to 9.0. <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
linkend="SQL-NOTIFY"><command>NOTIFY</></link> feature.
Pending events are now stored in a memory-based queue rather than
a table. Also, a <quote>payload</> string can be sent with each
event, rather than transmitting just an event name as before.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Multiple performance enhancements for specific types of queries, New implementation of
including join elimination, which optimizes automatically generated <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link>.
queries, such as those produced by object-relational mappers (ORMs). This command now rewrites the entire table and indexes, rather than
moving individual rows to compact space. It is substantially faster
in most cases, and no longer results in index bloat.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Exclusion constraints let database designers define uniqueness New contrib module
based on complex criteria, including for non-scalar data such <link linkend="pgupgrade"><filename>pg_upgrade</></link>
as time periods, ranges and arrays. to support in-place upgrades from 8.3 or 8.4 to 9.0.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
As part of our decade-long effort to eliminate the pain of VACUUM, Multiple performance enhancements for specific types of queries,
<command>VACUUM FULL</> is now substantially faster by including elimination of unnecessary joins. This helps optimize some
rewriting the entire table and automatically-generated queries, such as those produced by
indexes, rather than moving around single rows to compact space. object-relational mappers (ORMs).
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<command>EXPLAIN</> plans are now available in JSON, XML, and YAML format, and include <link linkend="SQL-EXPLAIN "><command>EXPLAIN</></link> enhancements.
The output is now available in JSON, XML, or YAML format, and includes
buffer utilization and other data not previously available. buffer utilization and other data not previously available.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <filename>hstore</> optional module has been improved with new functions and greater <link linkend="hstore"><filename>hstore</></link> improvements,
data capacity to make it a high-performance key-value store. including new functions and greater data capacity.
</para> </para>
</listitem> </listitem>
...@@ -174,14 +179,14 @@ ...@@ -174,14 +179,14 @@
<title>Migration to Version 9.0</title> <title>Migration to Version 9.0</title>
<para> <para>
A dump/restore using <application>pg_dump</application> A dump/restore using <application>pg_dump</application>,
or use of <application>pg_upgrade</application> is required or use of <application>pg_upgrade</application>, is required
for those wishing to migrate data from any previous for those wishing to migrate data from any previous
release. release.
</para> </para>
<para> <para>
Version 9.0 contains a number of changes which selectively break backwards Version 9.0 contains a number of changes that selectively break backwards
compatibility in order to support new features and code quality compatibility in order to support new features and code quality
improvements. Particularly, users who make extensive use of PL/pgSQL improvements. Particularly, users who make extensive use of PL/pgSQL
and/or PITR and Warm Standby should test their solutions for breakage. and/or PITR and Warm Standby should test their solutions for breakage.
...@@ -195,34 +200,32 @@ ...@@ -195,34 +200,32 @@
<listitem> <listitem>
<para> <para>
Remove server variable <varname>add_missing_from</>, which was Remove server parameter <varname>add_missing_from</>, which was
defaulted to off for many years (Tom Lane) defaulted to off for many years (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Remove server variable <varname>regex_flavor</>, which Remove server parameter <varname>regex_flavor</>, which
was defaulted to <link was defaulted to <link
linkend="posix-syntax-details"><literal>advanced</></link> linkend="posix-syntax-details"><literal>advanced</></link>
(i.e., Perl compatible) for many years. (Tom Lane) for many years (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
It is now necessary to set <link <link linkend="guc-wal-level"><varname>wal_level</></link> should now be
linkend="guc-wal-level"><varname>wal_level</></link> to set to <literal>archive</>, not <literal>on</>, to do continuous
<literal>archive</> to do continuous archiving. archiving (Heikki Linnakangas)
(Heikki Linnakangas)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Adjust <link <link linkend="guc-log-temp-files"><varname>log_temp_files</></link>
linkend="guc-log-temp-files"><varname>log_temp_files</></link> to now uses default file size units of kilobytes (Robert Haas)
use default file size units of kilobytes (Robert Haas)
</para> </para>
</listitem> </listitem>
...@@ -232,24 +235,32 @@ ...@@ -232,24 +235,32 @@
<sect3> <sect3>
<title>Queries</title> <title>Queries</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
When querying a <link linkend="ddl-inherit">parent table</link>, When querying a <link linkend="ddl-inherit">parent table</link>,
do not do additional permission checks on child tables do not do any separate permission checks on child tables
returned as part of the query (Peter Eisentraut) scanned as part of the query (Peter Eisentraut)
</para> </para>
<para> <para>
The SQL standard specifies this behavior. The SQL standard specifies this behavior, and it is also much more
convenient in practice than the former behavior of checking permissions
on each child as well as the parent.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Have fractional seconds conversion truncate rather than Make <function>date_trunc</> truncate rather than round when reducing
round when using float-based dates/times (Tom Lane) fractional-seconds precision (Tom Lane)
</para>
<para>
The code always acted this way for integer-based dates/times.
Now float-based dates/times behave similarly.
</para> </para>
</listitem> </listitem>
...@@ -258,9 +269,24 @@ ...@@ -258,9 +269,24 @@
</sect3> </sect3>
<sect3> <sect3>
<title>String Handling</title> <title>Data Types</title>
<itemizedlist> <itemizedlist>
<listitem>
<para>
<link linkend="datatype-binary"><type>bytea</></link> output now
appears in hex format by default (Peter Eisentraut)
</para>
<para>
The server parameter <link
linkend="guc-bytea-output"><varname>bytea_output</></link> can be
used to select the traditional output format if needed for
compatibility.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Improve standards compliance of <link Improve standards compliance of <link
...@@ -296,25 +322,27 @@ ...@@ -296,25 +322,27 @@
<sect3> <sect3>
<title>Object Renaming</title> <title>Object Renaming</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Tighten enforcement of column renaming when a child table inherits Tighten enforcement of column name consistency during <command>RENAME</>
the renamed column from an unrelated parent (KaiGai Kohei) when a child table inherits the same column from multiple unrelated
parents (KaiGai Kohei)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
No longer rename index names and index column names when table No longer automatically rename indexes and index columns when the
columns are renamed (Tom Lane) underlying table columns are renamed (Tom Lane)
</para> </para>
<para> <para>
Administrators still can rename such columns manually. This change Administrators can still rename such indexes and columns manually.
will require an update of the JDBC driver and possibly other drivers This change will require an update of the JDBC driver, and possibly other
so that unique indexes are correctly recognized. drivers, so that unique indexes are correctly recognized after a rename.
</para> </para>
</listitem> </listitem>
...@@ -325,10 +353,11 @@ ...@@ -325,10 +353,11 @@
</para> </para>
<para> <para>
In order to support named-parameter calls, it is In order to avoid creating ambiguity in named-parameter calls, it is
no longer allowed to change the aliases for input variables no longer allowed to change the aliases for input parameters
in the declaration of an existing function. You now have to in the declaration of an existing function (although names can still
<command>DROP</command> and recreate the function. be assigned to previously unnamed parameters). You now have to
<command>DROP</command> and recreate the function to do that.
</para> </para>
</listitem> </listitem>
...@@ -338,6 +367,7 @@ ...@@ -338,6 +367,7 @@
<sect3> <sect3>
<title>PL/pgSQL</title> <title>PL/pgSQL</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -347,12 +377,12 @@ ...@@ -347,12 +377,12 @@
</para> </para>
<para> <para>
The former behavior was to bind to variable names in preference to The former behavior was to bind ambiguous names to PL/pgSQL variables
query column names, which often resulted in surprising misbehavior. in preference to query columns, which often resulted in surprising
Throwing an error allows easy detection of ambiguous situations. misbehavior. Throwing an error allows easy detection of ambiguous
Although it's recommended that functions encountering this type of situations. Although it's recommended that functions encountering this
error be modified to remove the conflict, the old behavior can be type of error be modified to remove the conflict, the old behavior can
restored if necessary via the configuration parameter <link be restored if necessary via the configuration parameter <link
linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>, linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>,
or via the per-function option <literal>#variable_conflict</>. or via the per-function option <literal>#variable_conflict</>.
</para> </para>
...@@ -360,7 +390,7 @@ ...@@ -360,7 +390,7 @@
<listitem> <listitem>
<para> <para>
PL/pgSQL no longer allows variable names that match SQL PL/pgSQL no longer allows variable names that match certain SQL
reserved words (Tom Lane) reserved words (Tom Lane)
</para> </para>
...@@ -388,14 +418,14 @@ ...@@ -388,14 +418,14 @@
<listitem> <listitem>
<para> <para>
Remove PL/pgSQL's <literal>RENAME</> declaration option (Tom Lane) Remove PL/pgSQL's <literal>RENAME</> declaration (Tom Lane)
</para> </para>
<para> <para>
Instead of <literal>RENAME</>, use <link Instead of <literal>RENAME</>, use <link
linkend="plpgsql-declaration-alias"><literal>ALIAS</></link>, linkend="plpgsql-declaration-alias"><literal>ALIAS</></link>,
which can now alias any variable, not just dollar sign which can now create an alias for any variable, not only dollar sign
parameter names (such as <literal>$1</>). parameter names (such as <literal>$1</>) as before.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -404,7 +434,23 @@ ...@@ -404,7 +434,23 @@
<sect3> <sect3>
<title>Other Incompatibilities</title> <title>Other Incompatibilities</title>
<itemizedlist> <itemizedlist>
<listitem>
<para>
Deprecate use of <literal>=&gt;</> as an operator name (Robert Haas)
</para>
<para>
Future versions of <productname>PostgreSQL</> will probably reject
this operator name entirely, in order to support the SQL-standard
notation for named function parameters. For the moment, it is
still allowed, but a warning is emitted when such an operator is
defined.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Remove support for platforms that don't have a working 64-bit Remove support for platforms that don't have a working 64-bit
...@@ -433,11 +479,11 @@ ...@@ -433,11 +479,11 @@
<title>Server</title> <title>Server</title>
<sect4> <sect4>
<title>Continuous Archiving and Binary Replication</title> <title>Continuous Archiving and Streaming Replication</title>
<para> <para>
PostgreSQL's native standby capability has been expanded both to PostgreSQL's existing standby-server capability has been expanded both to
support read-only queries on standby slaves and to greatly reduce support read-only queries on standby servers and to greatly reduce
the lag between master and standby servers. For many users, this the lag between master and standby servers. For many users, this
will be a useful and low-administration form of replication, either will be a useful and low-administration form of replication, either
for high availability or for horizontal scalability. for high availability or for horizontal scalability.
...@@ -446,32 +492,33 @@ ...@@ -446,32 +492,33 @@
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow a standby system to accept read-only queries Allow a standby server to accept read-only queries
(Simon Riggs, Heikki Linnakangas) (Simon Riggs, Heikki Linnakangas)
</para> </para>
<para> <para>
This feature is called Hot Standby. There are new This feature is called Hot Standby. There are new
<filename>postgresql.conf</> and <filename>recovery.conf</> <filename>postgresql.conf</> and <filename>recovery.conf</>
settings to enable this feature, as well as extensive settings to control this feature, as well as extensive
<link linkend="hot-standby">documentation</link>. <link linkend="hot-standby">documentation</link>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow write-ahead log (<acronym>WAL</>) files to be streamed to a Allow write-ahead log (<acronym>WAL</>) data to be streamed to a
standby system (Fujii Masao, Heikki Linnakangas) standby server (Fujii Masao, Heikki Linnakangas)
</para> </para>
<para> <para>
This feature is called Streaming Replication. This feature is called Streaming Replication.
Previously <acronym>WAL</> files could be sent to standby systems only Previously <acronym>WAL</> data could be sent to standby servers only
as 16 megabytes files; Streaming Replication allows master changes to be sent to the in units of entire <acronym>WAL</> files (normally 16 megabytes each).
standby with very little delay. There are new <filename>postgresql.conf</> Streaming Replication eliminates this inefficiency and allows updates
and <filename>recovery.conf</> settings to enable this on the master to be propagated to standby servers with very little
feature, as well as extensive <link delay. There are new <filename>postgresql.conf</> and
linkend="streaming-replication">documentation</link>. <filename>recovery.conf</> settings to control this feature, as well as
extensive <link linkend="streaming-replication">documentation</link>.
</para> </para>
</listitem> </listitem>
...@@ -492,34 +539,28 @@ ...@@ -492,34 +539,28 @@
<sect4> <sect4>
<title>Performance</title> <title>Performance</title>
<para>
Version 9.0 also contains several performance and optimizer enhancements
to improve specific uses of PostgreSQL and remedy certain poor-performing
cases.
</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Improve performance of finding inherited child tables (Tom Lane) Allow per-tablespace values to be set for sequential and random page
cost estimates (<varname>seq_page_cost</>/<varname>random_page_cost</>)
via <link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE
... SET/RESET</></link> (Robert Haas)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow per-tablespace sequential and random page cost variables Improve performance of <link
(<varname>seq_page_cost</>/<varname>random_page_cost</>) via linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
<link linkend="SQL-ALTERTABLESPACE"><command>ALTER TABLESPACE used in the same transaction as table creation (Tom Lane)
... SET/RESET</></link> (Robert Haas)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve performance of <link Improve performance of finding inheritance child tables (Tom Lane)
linkend="SQL-TRUNCATE"><command>TRUNCATE</></link> when
used in the same transaction as table creation (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -542,7 +583,7 @@ ...@@ -542,7 +583,7 @@
Outer joins where the inner side is unique and not referenced in Outer joins where the inner side is unique and not referenced in
the query are unnecessary and are therefore now removed. This will the query are unnecessary and are therefore now removed. This will
accelerate many automatically generated queries, such as those created accelerate many automatically generated queries, such as those created
by object-relational mappers (ORM). by object-relational mappers (ORMs).
</para> </para>
</listitem> </listitem>
...@@ -553,15 +594,15 @@ ...@@ -553,15 +594,15 @@
<para> <para>
This is particularly useful for finding This is particularly useful for finding
<function>MAX()</>/<function>MIN()</> values in indexes that also <function>MAX()</>/<function>MIN()</> values in indexes that
contain null values. contain many null values.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve optimizer equivalence detection of &lt;&gt; <type>boolean</> Improve the optimizer's equivalence detection for expressions involving
tests (Tom Lane) <type>boolean</> <literal>&lt;&gt;</> operators (Tom Lane)
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -569,6 +610,7 @@ ...@@ -569,6 +610,7 @@
<sect4> <sect4>
<title><link linkend="geqo">GEQO</link></title> <title><link linkend="geqo">GEQO</link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -579,26 +621,20 @@ ...@@ -579,26 +621,20 @@
<para> <para>
While the Genetic Query Optimizer (GEQO) still selects While the Genetic Query Optimizer (GEQO) still selects
random plans, it now selects the same random plans for random plans, it now always selects the same random plans for identical
identical queries. You can modify <link queries, thus giving more consistent performance. You can modify <link
linkend="guc-geqo-seed"><varname>geqo_seed</></link> to randomize linkend="guc-geqo-seed"><varname>geqo_seed</></link> to experiment with
the starting value of the random plan generator. alternative plans.
</para> </para>
<para>
This gives GEQO query response times and resource usage
repeatability and predictability.
</para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve GEQO plan selection (Tom Lane). Improve GEQO plan selection (Tom Lane)
</para> </para>
<para> <para>
This avoids the rare error, "failed to make a valid plan". This avoids the rare error <quote>failed to make a valid plan</>.
</para> </para>
</listitem> </listitem>
...@@ -608,6 +644,7 @@ ...@@ -608,6 +644,7 @@
<sect4> <sect4>
<title>Optimizer Statistics</title> <title>Optimizer Statistics</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -618,30 +655,31 @@ ...@@ -618,30 +655,31 @@
<para> <para>
This is particularly useful for partitioned tables. However, This is particularly useful for partitioned tables. However,
autovacuum does not yet properly analyze parent tables based on autovacuum does not yet automatically re-analyze parent tables
child table changes. when child tables change.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve <link linkend="routine-vacuuming">autovacuum</link> Improve <link linkend="routine-vacuuming">autovacuum</link>'s
detection of when re-analyze is necessary (Tom Lane) detection of when re-analyze is necessary (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve optimizer statistics for greater/less-than comparisons Improve optimizer's estimation for greater/less-than comparisons
(Tom Lane) (Tom Lane)
</para> </para>
<para> <para>
When looking up optimizer statistics for greater/less-than comparisons, When looking up statistics for greater/less-than comparisons,
if the comparison value is in the first or last histogram bucket, if the comparison value is in the first or last histogram bucket,
use an index to generate the actual statistics. This is particularly use an index (if available) to fetch the current actual column
useful for columns that are always increasing, and hence often have minimum or maximum. This greatly improves the accuracy of estimates
inaccurate statistics. for comparison values near the ends of the data range, particularly
if the range is constantly changing due to addition of new data.
</para> </para>
</listitem> </listitem>
...@@ -653,11 +691,10 @@ ...@@ -653,11 +691,10 @@
</para> </para>
<para> <para>
This allows user-override of the number or percentage of distinct This allows users to override the estimated number or percentage of
values for a column and optionally its child tables. This value distinct values for a column. This statistic is normally computed by
is normally computed by <command>ANALYZE</>. Database administrators <command>ANALYZE</>, but the estimate can be poor, especially on tables
can use this feature to fix some poor statistics, especially on with very large numbers of rows.
tables with millions or billions of rows.
</para> </para>
</listitem> </listitem>
...@@ -667,10 +704,6 @@ ...@@ -667,10 +704,6 @@
<sect4> <sect4>
<title>Authentication</title> <title>Authentication</title>
<para>
Version 9.0 further extends PostgreSQL's support for multiple
authentication methods, including RADIUS and improved LDAP support.
</para>
<itemizedlist> <itemizedlist>
...@@ -687,7 +720,8 @@ ...@@ -687,7 +720,8 @@
<para> <para>
Allow <link linkend="auth-ldap"><acronym>LDAP</></link> Allow <link linkend="auth-ldap"><acronym>LDAP</></link>
(Lightweight Directory Access Protocol) authentication (Lightweight Directory Access Protocol) authentication
to operate in "search/bind" mode (Robert Fleming, Magnus) to operate in <quote>search/bind</> mode
(Robert Fleming, Magnus Hagander)
</para> </para>
<para> <para>
...@@ -705,7 +739,7 @@ ...@@ -705,7 +739,7 @@
</para> </para>
<para> <para>
These match the server's <acronym>IP</> address and network address These match the server's <acronym>IP</> address and subnet address
respectively. respectively.
</para> </para>
</listitem> </listitem>
...@@ -723,11 +757,6 @@ ...@@ -723,11 +757,6 @@
<sect4> <sect4>
<title>Monitoring</title> <title>Monitoring</title>
<para>
With increased use of PostgreSQL in high-end production systems,
users need increased monitoring. PostgreSQL 9.0 continues to add
more ways to monitor PostgreSQL applications.
</para>
<itemizedlist> <itemizedlist>
...@@ -740,21 +769,21 @@ ...@@ -740,21 +769,21 @@
</para> </para>
<para> <para>
This allows DBAs to characterize database traffic This allows administrators to characterize database traffic
and troubleshoot problems by source application. and troubleshoot problems by source application.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add an SQL state option (<literal>%e</>) to <link Add a SQLSTATE option (<literal>%e</>) to <link
linkend="guc-log-line-prefix"><varname>log_line_prefix</></link> linkend="guc-log-line-prefix"><varname>log_line_prefix</></link>
(Guillaume Smet) (Guillaume Smet)
</para> </para>
<para> <para>
This allows users to compile statistics on errors and messages This allows users to compile statistics on errors and messages
by type. by error code number.
</para> </para>
</listitem> </listitem>
...@@ -777,13 +806,14 @@ ...@@ -777,13 +806,14 @@
<sect4> <sect4>
<title>Statistics Counters</title> <title>Statistics Counters</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add <link Add <link
linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared('bgwriter')</></link> linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_shared('bgwriter')</></link>
to reset the cluster-wide shared statistics of the to reset the cluster-wide shared statistics for the
background writer (Greg Smith) background writer (Greg Smith)
</para> </para>
</listitem> </listitem>
...@@ -793,7 +823,7 @@ ...@@ -793,7 +823,7 @@
Add <link Add <link
linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</></link> linkend="monitoring-stats-funcs-table"><function>pg_stat_reset_single_table_counters()</></link>
and <function>pg_stat_reset_single_function_counters()</> and <function>pg_stat_reset_single_function_counters()</>
to allow the resetting of statistics counters for individual to allow resetting of the statistics counters for individual
tables and indexes (Magnus Hagander) tables and indexes (Magnus Hagander)
</para> </para>
</listitem> </listitem>
...@@ -804,89 +834,93 @@ ...@@ -804,89 +834,93 @@
<sect4> <sect4>
<title>Server Settings</title> <title>Server Settings</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow setting of configuration variables based on <link Allow setting of configuration parameters based on <link
linkend="sql-alterrole">database/role</link> linkend="sql-alterrole">database/role combinations</link>
combinations (Alvaro Herrera) (Alvaro Herrera)
</para> </para>
<para> <para>
Previously only per-database and per-role setting were possible, Previously only per-database and per-role settings were possible,
not combinations. All role and database settings are now stored not combinations. All role and database settings are now stored
in the new <structname>pg_db_role_setting</> system table. A new in the new <structname>pg_db_role_setting</> system table. A new
<application>psql</> <literal>\drds</> command shows these settings. <application>psql</> command <literal>\drds</> shows these settings.
Backwards-compatible system views do not show this information. Backwards-compatible system views do not show combination settings.
The primary use of this feature is setting schema
<link linkend="guc-search-path"><varname>search_path</varname></link>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add Boolean variable <link Add server parameter <link
linkend="guc-bonjour"><varname>bonjour</></link>, which linkend="guc-bonjour"><varname>bonjour</></link>, which
controls whether a Bonjour-enabled binary advertises controls whether a Bonjour-enabled server advertises
itself via <productname>Bonjour</> (Tom Lane) itself via <productname>Bonjour</> (Tom Lane)
</para> </para>
<para> <para>
The default is off, meaning it does not advertise. The default is off, meaning it does not advertise. This allows
packagers to distribute Bonjour-enabled builds without worrying
that individual users might not want the feature.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add Boolean variable <link Add server parameter <link
linkend="guc-enable-material"><varname>enable_material</></link>, which linkend="guc-enable-material"><varname>enable_material</></link>, which
controls the use of materialize nodes in the optimizer controls the use of materialize nodes in the optimizer
(Robert Haas) (Robert Haas)
</para> </para>
<para> <para>
The default is on. The default is on. When off, the optimizer will not add
materialize nodes purely for performance reasons, though they
will still be used when necessary for correctness.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Log changed parameter values when <filename>postgresql.conf</> is Log changes of parameter values when <filename>postgresql.conf</> is
reloaded (Peter Eisentraut) reloaded (Peter Eisentraut)
</para> </para>
<para> <para>
This lets DBAs and security staff audit when database settings This lets administrators and security staff audit changes of database
were changed. settings, and is also very convenient for checking the effects of
<filename>postgresql.conf</> edits.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add proper permissions for custom variables (Tom Lane) Add proper permissions for custom server parameters (Tom Lane)
</para> </para>
<para> <para>
Custom variables can now only be created by super-users, Custom parameters can now only be created by super-users,
but can be modified by ordinary users if variable but then can be modified by ordinary users if the parameter's
permissions allow it. This makes custom variables permissions allow it. This makes custom parameters
appropriate for security settings. Previously, any user appropriate for security-related settings. Previously, any user
could create or modify custom variables. could create or modify custom parameters.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Adjust <link Change server parameter <link
linkend="guc-log-temp-files"><varname>log_temp_files</></link> to linkend="guc-log-temp-files"><varname>log_temp_files</></link> to
use default file sizes units of kilobytes (Robert Haas) use default file size units of kilobytes (Robert Haas)
</para> </para>
<para> <para>
Previously this setting defaulted to bytes if no units were Previously this setting was interpreted in bytes if no units were
specified. specified.
</para> </para>
</listitem> </listitem>
...@@ -899,22 +933,23 @@ ...@@ -899,22 +933,23 @@
<sect3> <sect3>
<title>Queries</title> <title>Queries</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Do <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT Perform <link linkend="SQL-FOR-UPDATE-SHARE"><command>SELECT
FOR UPDATE</>/<literal>SHARE</></link> processing after FOR UPDATE</>/<literal>SHARE</></link> processing after
applying <literal>LIMIT</>, so the number of rows returned applying <literal>LIMIT</>, so the number of rows returned
is always predictable (Tom Lane) is always predictable (Tom Lane)
</para> </para>
<para> <para>
Previously, concurrent transactions could potentially cause Previously, changes made by concurrent transactions could cause a
<command>SELECT</> to return fewer rows than specified by <command>SELECT FOR UPDATE</> to unexpectedly return fewer rows than
<literal>LIMIT</>. <literal>FOR UPDATE</> can still affect specified by its <literal>LIMIT</>. <literal>FOR UPDATE</> in combination
<literal>ORDER BY</> ordering, but this can be corrected by using with <literal>ORDER BY</> can still produce surprising results, but that
<literal>FOR UPDATE</> in a subquery. can be corrected by placing <literal>FOR UPDATE</> in a subquery.
</para> </para>
</listitem> </listitem>
...@@ -928,33 +963,29 @@ ...@@ -928,33 +963,29 @@
<listitem> <listitem>
<para> <para>
Increase the supported frame options in <link Extend the supported frame options in <link
linkend="SQL-WINDOW">window functions</link> (Hitoshi linkend="SQL-WINDOW">window functions</link> (Hitoshi
Harada) Harada)
</para> </para>
<para> <para>
This allows frames (<literal>RANGE</> or <literal>ROWS</>) to start Frames can now start with <literal>CURRENT ROW</>, and the <literal>ROWS
with <literal>CURRENT ROW</>, and to use the <literal>ROWS n <replaceable>n</> PRECEDING</>/<literal>FOLLOWING</> options are now
PRECEDING</>/<literal>FOLLOWING</> clause. supported.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Have <command>SELECT</> and <command>CREATE TABLE AS</> return Make <command>SELECT INTO</> and <command>CREATE TABLE AS</> return
row counts to the client row counts to the client in their command tags
(Boszormenyi Zoltan) (Boszormenyi Zoltan)
</para> </para>
<para> <para>
For drivers that support this feature, this saves an entire This can save an entire round-trip to the client, allowing result counts
round-trip to the client, allowing result counts and pagination and pagination to be calculated without an additional
to be calculated without a second <command>COUNT</command> query. <command>COUNT</command> query.
</para>
<para>
<application>psql</> does not display these counts.
</para> </para>
</listitem> </listitem>
...@@ -962,6 +993,7 @@ ...@@ -962,6 +993,7 @@
<sect4> <sect4>
<title>Unicode Strings</title> <title>Unicode Strings</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -975,7 +1007,7 @@ ...@@ -975,7 +1007,7 @@
<listitem> <listitem>
<para> <para>
Allow Unicode escapes in <link Support Unicode escapes in <link
linkend="sql-syntax-strings-escape"><literal>E'...'</></link> linkend="sql-syntax-strings-escape"><literal>E'...'</></link>
strings (Marko Kreen) strings (Marko Kreen)
</para> </para>
...@@ -989,6 +1021,7 @@ ...@@ -989,6 +1021,7 @@
<sect3> <sect3>
<title>Object Manipulation</title> <title>Object Manipulation</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1002,32 +1035,28 @@ ...@@ -1002,32 +1035,28 @@
<listitem> <listitem>
<para> <para>
Allow <link linkend="SQL-COMMENT">comments</link> on Allow <link linkend="SQL-COMMENT">comments</link> on
columns only of tables, views, and composite types, not other columns of tables, views, and composite types only, not other
objects like indexes and <acronym>TOAST</> tables (Tom Lane) relation types such as indexes and <acronym>TOAST</> tables (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow the creation of <link Allow the creation of <link
linkend="SQL-CREATETYPE-enum">enumerate types</link> with linkend="SQL-CREATETYPE-enum">enumerated types</link> containing
no labels (Bruce Momjian) no values (Bruce Momjian)
</para>
<para>
This is useful for supporting binary upgrades.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Have columns defined with storage type <literal>MAIN</> remain on Let values of columns having storage type <literal>MAIN</> remain on
the main heap page unless it cannot fit (Kevin Grittner) the main heap page unless the row cannot fit on a page (Kevin Grittner)
</para> </para>
<para> <para>
Previously <literal>MAIN</> values were forced to <acronym>TOAST</> Previously <literal>MAIN</> values were forced out to <acronym>TOAST</>
tables until the row size was one-quarter of the page size. tables until the row size was less than one-quarter of the page size.
</para> </para>
</listitem> </listitem>
...@@ -1035,20 +1064,21 @@ ...@@ -1035,20 +1064,21 @@
<sect4> <sect4>
<title><command>ALTER</></title> <title><command>ALTER</></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER Add <link linkend="SQL-ALTERDEFAULTPRIVILEGES"><command>ALTER
DEFAULT PRIVILEGES</></link> command to control privileges DEFAULT PRIVILEGES</></link> command to control privileges
of newly-created objects (Petr Jelinek) of objects created later (Petr Jelinek)
</para> </para>
<para> <para>
This greatly simplifies the assignment of object privileges in This greatly simplifies the assignment of object privileges in a
a complex database application. Defaults currently support tables, complex database application. Default privileges can be set for
views, sequences, and functions. Defaults may be assigned on a tables, views, sequences, and functions. Defaults may be assigned on a
per-schema basis or database-wide. per-schema basis, or database-wide.
</para> </para>
</listitem> </listitem>
...@@ -1061,14 +1091,15 @@ ...@@ -1061,14 +1091,15 @@
<listitem> <listitem>
<para> <para>
Allow <command>ALTER TABLE</> commands which rewrite tables to skip Allow <command>ALTER TABLE</> commands that rewrite tables to skip
<acronym>WAL</> logging (Itagaki Takahiro) <acronym>WAL</> logging (Itagaki Takahiro)
</para> </para>
<para> <para>
Such operations either complete fully or are rolled back, so Such operations either produce a new copy of the table or are rolled
<acronym>WAL</> archiving can be skipped, unless running in continuous back, so <acronym>WAL</> archiving can be skipped, unless running in
archiving mode. This reduces I/O overhead and improves performance. continuous archiving mode. This reduces I/O overhead and improves
performance.
</para> </para>
</listitem> </listitem>
...@@ -1078,31 +1109,33 @@ ...@@ -1078,31 +1109,33 @@
<sect4> <sect4>
<title><link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link></title> <title><link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add support for copying <literal>COMMENTS</> and <literal>STORAGE</> Add support for copying <literal>COMMENTS</> and <literal>STORAGE</>
to the <command>CREATE TABLE ... LIKE INCLUDING</> command (Itagaki settings in <command>CREATE TABLE ... LIKE</> commands
Takahiro) (Itagaki Takahiro)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add support for copying all attributes to the <command>CREATE Add support for copying all attributes in <command>CREATE
TABLE LIKE INCLUDING</> command (Itagaki Takahiro) TABLE ... LIKE</> commands (Itagaki Takahiro)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add the SQL-standard <command>CREATE TABLE ... OF type</> command Add the SQL-standard
<literal>CREATE TABLE ... OF <replaceable>type</></literal> command
(Peter Eisentraut) (Peter Eisentraut)
</para> </para>
<para> <para>
This allows the creation of a table to match an existing composite This allows creation of a table that matches an existing composite
type. Additional constraints and defaults can be specified in the type. Additional constraints and defaults can be specified in the
command. command.
</para> </para>
...@@ -1114,6 +1147,7 @@ ...@@ -1114,6 +1147,7 @@
<sect4> <sect4>
<title>Constraints</title> <title>Constraints</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1123,50 +1157,47 @@ ...@@ -1123,50 +1157,47 @@
</para> </para>
<para> <para>
This allows <command>UPDATE tab SET col = col + 1</> to work reliably This allows mass updates, such as
<literal>UPDATE tab SET col = col + 1</>,
to work reliably
on columns that have unique indexes or are marked as primary keys. on columns that have unique indexes or are marked as primary keys.
If the constraint is specified as <literal>DEFERRABLE</> it will be If the constraint is specified as <literal>DEFERRABLE</> it will be
checked at the end of the statement, rather than after each row is checked at the end of the statement, rather than after each row is
updated. The constraint check may also be deferred until the end of the updated. The constraint check can also be deferred until the end of the
current transaction, allowing updates to be spread over multiple SQL current transaction, allowing such updates to be spread over multiple
commands. SQL commands.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Exclusion Constraints: generalize uniqueness constraints by allowing arbitrary operator Add
comparisons, not just equality (Jeff Davis) <link linkend="ddl-constraints-exclusion">exclusion constraints</link>
</para> (Jeff Davis)
<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> </para>
<para> <para>
The primary use of exclusion constraints is to allow defining Exclusion constraints generalize uniqueness constraints by allowing
non-overlapping uniqueness, such as for time periods, arrays arbitrary comparison operators, not just equality. They are created
or ranges of values. This supports data integrity at the with the <link linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
table level for calendaring, time-management, and scientific TABLE CONSTRAINT ... EXCLUDE</></link> clause.
applications. The most common use of exclusion constraints is to specify that column
entries must not overlap, rather than simply not be equal. This is
useful for time periods and other ranges, as well as arrays.
This feature enhances checking of data integrity for many
calendaring, time-management, and scientific applications.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improve the constraint violation error message to report the values Improve uniqueness-constraint violation error messages to
causing the failure (Itagaki Takahiro) report the values causing the failure (Itagaki Takahiro)
</para> </para>
<para> <para>
For example, a uniqueness constraint violation now reports <literal>Key For example, a uniqueness constraint violation might now report
(x)=(2) already exists</>. <literal>Key (x)=(2) already exists</>.
</para> </para>
</listitem> </listitem>
...@@ -1176,18 +1207,19 @@ ...@@ -1176,18 +1207,19 @@
<sect4> <sect4>
<title>Object Permissions</title> <title>Object Permissions</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add the ability to make mass permission changes per Add the ability to make mass permission changes across a whole
schema using the new <link schema using the new <link
linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE linkend="SQL-GRANT"><command>GRANT</>/<command>REVOKE
IN SCHEMA</></link> clause (Petr Jelinek) IN SCHEMA</></link> clause (Petr Jelinek)
</para> </para>
<para> <para>
This simplifies the assignment of object permissions This simplifies management of object permissions
and makes it easier to utilize database roles for application and makes it easier to utilize database roles for application
data security. data security.
</para> </para>
...@@ -1196,9 +1228,15 @@ ...@@ -1196,9 +1228,15 @@
<listitem> <listitem>
<para> <para>
Add the ability to control large object permissions with Add the ability to control large object (BLOB) permissions with
<command>GRANT</>/<command>REVOKE</> (KaiGai Kohei) <command>GRANT</>/<command>REVOKE</> (KaiGai Kohei)
</para> </para>
<para>
Formerly, any database user could read or modify any large object.
Read and write permissions can now be granted and revoked per
large object.
</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -1214,34 +1252,40 @@ ...@@ -1214,34 +1252,40 @@
<listitem> <listitem>
<para> <para>
Have <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link Make <link linkend="SQL-LISTEN"><command>LISTEN</></link>/<link
linkend="SQL-NOTIFY"><command>NOTIFY</></link> store events linkend="SQL-NOTIFY"><command>NOTIFY</></link> store pending events
in a memory queue, rather than a system table (Joachim in a memory queue, rather than in a system table (Joachim
Wieland) Wieland)
</para> </para>
<para> <para>
LISTEN/NOTIFY may now be used as a full-featured, high-performance This substantially improves performance, while retaining the existing
event queue system for PostgreSQL, with transactional support features of transactional support and guaranteed delivery.
and guaranteed delivery.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link> Allow <link linkend="SQL-NOTIFY"><command>NOTIFY</></link>
to pass an optional string to listeners (Joachim Wieland) to pass an optional <quote>payload</> string to listeners
(Joachim Wieland)
</para>
<para>
This greatly improves the usefulness of
<command>LISTEN</>/<command>NOTIFY</> as a
general-purpose event queue system.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow <link linkend="SQL-CLUSTER"><command>CLUSTER</></link> Allow <link linkend="SQL-CLUSTER"><command>CLUSTER</></link>
on all system tables (Tom Lane) on all per-database system catalogs (Tom Lane)
</para> </para>
<para> <para>
Global system tables still cannot be clustered. Global catalogs still cannot be clustered.
</para> </para>
</listitem> </listitem>
...@@ -1249,28 +1293,30 @@ ...@@ -1249,28 +1293,30 @@
<sect4> <sect4>
<title><link linkend="SQL-COPY"><command>COPY</></link></title> <title><link linkend="SQL-COPY"><command>COPY</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow <literal>*</> as a parameter in <literal>FORCE QUOTE</> for Accept <literal>COPY ... CSV FORCE QUOTE *</>
<literal>COPY CSV</> (Itagaki Takahiro) (Itagaki Takahiro)
</para> </para>
<para> <para>
This forces quotes for all <acronym>CSV</> output columns. Now <literal>*</> can be used as shorthand for <quote>all columns</>
in the <literal>FORCE QUOTE</> clause.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add new <command>COPY</> syntax that allows parameters to be Add new <command>COPY</> syntax that allows options to be
specified in parentheses (Robert Haas, Emmanuel Cecchet) specified inside parentheses (Robert Haas, Emmanuel Cecchet)
</para> </para>
<para> <para>
This allows greater flexibility for future <command>COPY</> options. This allows greater flexibility for future <command>COPY</> options.
The old syntax is still supported. The old syntax is still supported, but only for pre-existing options.
</para> </para>
</listitem> </listitem>
...@@ -1280,31 +1326,33 @@ ...@@ -1280,31 +1326,33 @@
<sect4> <sect4>
<title><link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link></title> <title><link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow <command>EXPLAIN</> output in <acronym>XML</>, <acronym>JSON</>, Allow <command>EXPLAIN</> to output in <acronym>XML</>,
and <acronym>YAML</> formats (Robert Haas, Greg Sabino Mullane) <acronym>JSON</>, or <acronym>YAML</> format (Robert Haas, Greg
Sabino Mullane)
</para> </para>
<para> <para>
The new output formats will support the development of new tools The new output formats are easily machine-readable, supporting the
for analysis of EXPLAIN output. development of new tools for analysis of <command>EXPLAIN</> output.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add new <command>EXPLAIN (BUFFERS)</> to report query buffer Add new <literal>BUFFERS</> option to report query
activity (Itagaki Takahiro) buffer usage during <command>EXPLAIN ANALYZE</> (Itagaki Takahiro)
</para> </para>
<para> <para>
This allows better query profiling for individual queries. This allows better query profiling for individual queries.
log_*_stats log output, e.g. <link Buffer usage is no longer reported in the output for <link
linkend="runtime-config-statistics-monitor">log_statement_stats</link>, linkend="runtime-config-statistics-monitor">log_statement_stats</link>
no longer shows this information. and related settings.
</para> </para>
</listitem> </listitem>
...@@ -1317,13 +1365,13 @@ ...@@ -1317,13 +1365,13 @@
<listitem> <listitem>
<para> <para>
Allow <command>EXPLAIN</> options to be specified inside parentheses Add new <command>EXPLAIN</> syntax that allows options to be
(Robert Haas) specified inside parentheses (Robert Haas)
</para> </para>
<para> <para>
This allows for the expansion of <command>EXPLAIN</> options. The This allows greater flexibility for future <command>EXPLAIN</> options.
old syntax is still supported. The old syntax is still supported, but only for pre-existing options.
</para> </para>
</listitem> </listitem>
...@@ -1333,32 +1381,34 @@ ...@@ -1333,32 +1381,34 @@
<sect4> <sect4>
<title><link linkend="SQL-VACUUM"><command>VACUUM</></link></title> <title><link linkend="SQL-VACUUM"><command>VACUUM</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Change <command>VACUUM FULL</> to rewrite the entire table and Change <command>VACUUM FULL</> to rewrite the entire table and
indexes, rather than moving around single rows to compact space rebuild its indexes, rather than moving individual rows around to
(Itagaki Takahiro, Tom Lane) compact space (Itagaki Takahiro, Tom Lane)
</para> </para>
<para> <para>
The previous method was usually slower and caused index bloat. The previous method was usually slower and caused index bloat.
Note that the new method may use more disk space during VACUUM Note that the new method will use more disk space transiently
FULL. during <command>VACUUM FULL</>; potentially as much as twice
the space normally occupied by the table and its indexes.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add new <command>VACUUM</> syntax that allows parameters to be Add new <command>VACUUM</> syntax that allows options to be
specified in parentheses (Itagaki Takahiro) specified inside parentheses (Itagaki Takahiro)
</para> </para>
<para> <para>
This allows greater flexibility for future <command>VACUUM</> This allows greater flexibility for future <command>VACUUM</> options.
options. The old syntax is still supported. The old syntax is still supported, but only for pre-existing options.
</para> </para>
</listitem> </listitem>
...@@ -1368,48 +1418,54 @@ ...@@ -1368,48 +1418,54 @@
<sect4> <sect4>
<title>Indexes</title> <title>Indexes</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow an index to be auto-named by not supplying an index name to Allow an index to be named automatically by omitting the index name in
<link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link> (Tom Lane) <link linkend="SQL-CREATEINDEX"><command>CREATE INDEX</></link>
(Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow <link linkend="SQL-REINDEX"><command>REINDEX</></link> Reindexing shared system catalogs is now fully transactional
on system indexes (Tom Lane) and crash-safe (Tom Lane)
</para> </para>
<para> <para>
WAS THIS POSSIBLE ON ANY SYSTEM TABLE BEFORE? NON-HARDWIRED ONES? Formerly, reindexing a shared index was only allowed in standalone
mode, and a crash during the operation could leave the index in
worse condition than it was before.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add <literal>point_ops</> operator class for GiST (Teodor Sigaev) Add <literal>point_ops</> operator class for <acronym>GiST</>
(Teodor Sigaev)
</para> </para>
<para> <para>
This feature supports GiST indexing of point operations on polygons, This feature permits <acronym>GiST</> indexing of <type>point</>
circles, and other points, such as "point is in polygon". Previously columns. The index can be used for several types of queries
indexing only worked for bounding boxes. This should make many such as <replaceable>point</> <literal>&lt;@</> <replaceable>polygon</>
PostGIS queries faster. (point is in polygon). This should make many
<productname>PostGIS</> queries faster.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Use red-black trees for <acronym>GIN</> index creation Use red-black binary trees for <acronym>GIN</> index creation
(Teodor Sigaev) (Teodor Sigaev)
</para> </para>
<para> <para>
Red-black trees are self-balanced. This means much faster Red-black trees are self-balancing. This avoids slowdowns in
GIN index creation. cases where the input is in nonrandom order.
</para> </para>
</listitem> </listitem>
...@@ -1422,41 +1478,51 @@ ...@@ -1422,41 +1478,51 @@
<sect3> <sect3>
<title>Data Types</title> <title>Data Types</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow hex values to be specified in <link Allow <link linkend="datatype-binary"><type>bytea</></link> values
linkend="datatype-binary"><type>bytea</></link> strings to be written in hex notation (Peter Eisentraut)
(Peter Eisentraut)
</para> </para>
<para> <para>
The variable <link The server parameter <link
linkend="guc-bytea-output"><varname>bytea_output</></link> controls linkend="guc-bytea-output"><varname>bytea_output</></link> controls
if hex (default) or octal escapes are used for <type>bytea</> whether hex or traditional format is used for <type>bytea</>
output. (SWITCH DEFAULT FOR BETA? PETER) Libpq's output. Libpq's <function>PQescapeByteaConn()</> function automatically
<function>PQescapeByteaConn()</> now uses the hex format uses the hex format when connected to <productname>PostgreSQL</> 9.0
for <productname>PostgreSQL</> 9.0 servers. or newer servers.
</para> </para>
<para> <para>
The new hex format will be directly compatible with more applications The new hex format will be directly compatible with more applications
which use binary data, allowing them to store and retrieve that use binary data, allowing them to store and retrieve it without
it without conversion. extra conversion. It is also significantly faster to read and write
than the traditional format.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow <link Allow server parameter <link
linkend="guc-extra-float-digits">extra_float_digits</link> linkend="guc-extra-float-digits">extra_float_digits</link>
to be increased to <literal>3</> (Tom Lane) to be increased to <literal>3</> (Tom Lane)
</para> </para>
<para> <para>
The previous maximum <varname>extra_float_digits</> was <literal>2</>. The previous maximum <varname>extra_float_digits</> setting was
<literal>2</>. There are cases where 3 digits are needed to dump and
restore <type>float4</> values exactly. <application>pg_dump</> will
now use the setting of 3 when dumping from a server that allows it.
</para>
</listitem>
<listitem>
<para>
Tighten input requirements for <type>int2vector</> input (Caleb
Welton)
</para> </para>
</listitem> </listitem>
...@@ -1464,36 +1530,37 @@ ...@@ -1464,36 +1530,37 @@
<sect4> <sect4>
<title><link linkend="textsearch">Full Text Search</link></title> <title><link linkend="textsearch">Full Text Search</link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add prefix support for the full text search synonym dictionary Add prefix support in <literal>synonym</> dictionaries
(Teodor Sigaev) (Teodor Sigaev)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add full text search filtering dictionaries (Teodor Sigaev) Add <firstterm>filtering</> dictionaries (Teodor Sigaev)
</para> </para>
<para> <para>
Filtering dictionaries allow tokens to be modified and passed to Filtering dictionaries allow tokens to be modified then passed to
subsequent dictionaries. subsequent dictionaries.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow underscores in full text email addresses (Teodor Sigaev) Allow underscores in email-address tokens (Teodor Sigaev)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Use more standards-compliant rules for <acronym>URL</> Use more standards-compliant rules for parsing <acronym>URL</> tokens
parsing (Tom Lane) (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -1505,20 +1572,23 @@ ...@@ -1505,20 +1572,23 @@
<sect3> <sect3>
<title>Functions</title> <title>Functions</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow case-insensitive <link Support locale-specific <link
linkend="functions-posix-regexp">regular expression</link> linkend="functions-posix-regexp">regular expression</link>
matching with <acronym>UTF-8</> server encodings. processing with <acronym>UTF-8</> server encoding (Tom Lane)
</para> </para>
<para> <para>
Previously, only <acronym>ASCII</> characters and single-byte Locale-specific regular expression functionality includes
encodings worked properly. Multibyte encodings other than <acronym>UTF-8</> case-insensitive matching and locale-specific character classes.
are still broken for case-insensitive regular expression Previously, these features only worked correctly for
matching. non-<acronym>ASCII</> characters when using a single-byte server
encoding (such as LATIN1). They will still misbehave in multi-byte
encodings other than <acronym>UTF-8</>.
</para> </para>
</listitem> </listitem>
...@@ -1537,24 +1607,24 @@ ...@@ -1537,24 +1607,24 @@
<listitem> <listitem>
<para> <para>
Add support for <link Add support for scientific notation in <link
linkend="functions-formatting"><function>to_char()</></link> linkend="functions-formatting"><function>to_char()</></link>
scientific notation output (<link (<link linkend="functions-formatting-numeric-table"><literal>EEEE</>
linkend="functions-formatting-numeric-table"><literal>'EEEE'</></link>) specification</link>)
(Pavel Stehule, Brendan Jurd) (Pavel Stehule, Brendan Jurd)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Have <function>to_char()</> honor <link Make <function>to_char()</> honor <link
linkend="functions-formatting-datetimemod-table"><literal>'FM'</></link> linkend="functions-formatting-datetimemod-table"><literal>FM</></link>
(fill mode) in <literal>'Y'</>, <literal>'YY'</>, and (fill mode) in <literal>Y</>, <literal>YY</>, and
<literal>'YYY'</> specifications (Bruce Momjian, Tom Lane) <literal>YYY</> specifications (Bruce Momjian, Tom Lane)
</para> </para>
<para> <para>
It was already honored by <literal>'YYYY'</>. It was already honored by <literal>YYYY</>.
</para> </para>
</listitem> </listitem>
...@@ -1569,8 +1639,8 @@ ...@@ -1569,8 +1639,8 @@
<listitem> <listitem>
<para> <para>
Correct calculations of <link Correct calculations of <link
linkend="functions-geometry-op-table">"overlap"</link> linkend="functions-geometry-op-table"><quote>overlap</quote></link>
and "contains" operations over polygons (Teodor Sigaev) and <quote>contains</quote> operations over polygons (Teodor Sigaev)
</para> </para>
</listitem> </listitem>
...@@ -1578,6 +1648,7 @@ ...@@ -1578,6 +1648,7 @@
<sect4> <sect4>
<title>Aggregates</title> <title>Aggregates</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1587,10 +1658,10 @@ ...@@ -1587,10 +1658,10 @@
</para> </para>
<para> <para>
For example, this is now supported, <literal>array_agg(a ORDER BY For example, this is now supported: <literal>array_agg(a ORDER BY
b)</>. This is useful for aggregates where the order of values is b)</>. This is useful with aggregates for which the order of input
significant, and eliminates the need to have a subquery for values is significant, and eliminates the need to use a nonstandard
the ordering. subquery to determine the ordering.
</para> </para>
</listitem> </listitem>
...@@ -1598,13 +1669,9 @@ ...@@ -1598,13 +1669,9 @@
<para> <para>
Add the <link Add the <link
linkend="functions-aggregate-table"><function>string_agg()</></link> linkend="functions-aggregate-table"><function>string_agg()</></link>
aggregate function which aggregates values into a single aggregate function to combine values into a single
string (Pavel Stehule) string (Pavel Stehule)
</para> </para>
<para>
An optional second argument allows specification of a delimiter.
</para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -1615,8 +1682,9 @@ ...@@ -1615,8 +1682,9 @@
</para> </para>
<para> <para>
For example, <literal>agg(DISTINCT x)</> might pass NULL <literal>x</> For example, <literal>agg(DISTINCT x)</> might pass a NULL <literal>x</>
values to <function>agg()</>. value to <function>agg()</>. This is more consistent with the behavior
in non-<literal>DISTINCT</> cases.
</para> </para>
</listitem> </listitem>
...@@ -1626,6 +1694,7 @@ ...@@ -1626,6 +1694,7 @@
<sect4> <sect4>
<title>Bit Strings</title> <title>Bit Strings</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1653,6 +1722,7 @@ ...@@ -1653,6 +1722,7 @@
<sect4> <sect4>
<title>Object Information Functions</title> <title>Object Information Functions</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1675,20 +1745,16 @@ ...@@ -1675,20 +1745,16 @@
<listitem> <listitem>
<para> <para>
Have <link linkend="information-schema">information Make the <link linkend="information-schema">information_schema</link>
schema</link> properly display date type octet lengths views properly display maximum octet lengths for <type>char</> and
(Peter Eisentraut) <type>varchar</> columns, as well as the proper precision for datetime
</para> columns (Peter Eisentraut)
<para>
The reported length is now the maximum octet length; previously,
a huge value was reported.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Speed up information schema privilege views (Joachim Wieland) Speed up information_schema privilege views (Joachim Wieland)
</para> </para>
</listitem> </listitem>
...@@ -1698,46 +1764,49 @@ ...@@ -1698,46 +1764,49 @@
<sect4> <sect4>
<title>Function and Trigger Creation</title> <title>Function and Trigger Creation</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Implement anonymous functions using the <link Support execution of anonymous code blocks using the <link
linkend="SQL-DO"><command>DO</></link> statement, a.k.a anonymous linkend="SQL-DO"><command>DO</></link> statement
blocks (Petr Jelinek, Joshua Tolley, Hannu Valtonen) (Petr Jelinek, Joshua Tolley, Hannu Valtonen)
</para> </para>
<para> <para>
This allows execution of server-side code without the need to create This allows execution of server-side code without the need to create
a new function and execute it. and delete a temporary function definition. Code can be executed in
any language for which the user has permissions to define a function.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow SQL-compliant <link Implement SQL-standard-compliant <link
linkend="SQL-CREATETRIGGER">per-column triggers</link> linkend="SQL-CREATETRIGGER">per-column triggers</link>
(Itagaki Takahiro) (Itagaki Takahiro)
</para> </para>
<para> <para>
Such triggers are fired only if the specified columns are affected Such triggers are fired only when the specified column(s) are affected
by the query, e.g. in <command>UPDATE</>'s <literal>SET</> list. by the query, e.g. appear in an <command>UPDATE</>'s <literal>SET</>
information_schema now also shows this information. list.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add <literal>WHEN</> clause to <link Add the <literal>WHEN</> clause to <link
linkend="SQL-CREATETRIGGER"><command>CREATE TRIGGER</></link> linkend="SQL-CREATETRIGGER"><command>CREATE TRIGGER</></link>
to allow control over whether a trigger is fired (Takahiro to allow control over whether a trigger is fired (Itagaki
Itagaki) Takahiro)
</para> </para>
<para> <para>
While a check can be performed inside the trigger, doing it in an While the same type of check can always be performed inside the
external <literal>WHEN</> clause has performance benefits. trigger, doing it in an external <literal>WHEN</> clause can have
performance benefits.
</para> </para>
</listitem> </listitem>
...@@ -1778,6 +1847,45 @@ ...@@ -1778,6 +1847,45 @@
<para> <para>
Install PL/pgSQL by default (Bruce Momjian) Install PL/pgSQL by default (Bruce Momjian)
</para> </para>
<para>
The language can still be removed from a particular database if the
administrator has security or performance concerns about making it
available.
</para>
</listitem>
<listitem>
<para>
Improve handling of cases where PL/pgSQL variable names conflict with
identifiers used in queries within a function
(Tom Lane)
</para>
<para>
The default behavior is now to throw an error when there is a conflict,
so as to avoid surprising behaviors. This can be modified, via the
configuration parameter <link
linkend="plpgsql-var-subst"><varname>plpgsql.variable_conflict</></link>
or the per-function option <literal>#variable_conflict</>, to allow
either the variable or the query-supplied column to be used. In any
case PL/pgSQL will no longer attempt to substitute variables in places
where they would not be syntactically valid.
</para>
</listitem>
<listitem>
<para>
Make PL/pgSQL use the main lexer, rather than its own version
(Tom Lane)
</para>
<para>
This ensures accurate tracking of the main system's behavior for details
such as string escaping. Some user-visible details, such as the set
of keywords considered reserved in PL/pgSQL, have changed in
consequence.
</para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -1795,7 +1903,8 @@ ...@@ -1795,7 +1903,8 @@
<para> <para>
Formerly, input parameters were treated as being declared Formerly, input parameters were treated as being declared
<literal>CONST</>. This restriction has been removed to simplify <literal>CONST</>, so the function's code could not change their
values. This restriction has been removed to simplify
porting of functions from other DBMSes that do not impose the porting of functions from other DBMSes that do not impose the
equivalent restriction. An input parameter now acts like a local equivalent restriction. An input parameter now acts like a local
variable initialized to the passed-in value. variable initialized to the passed-in value.
...@@ -1808,18 +1917,6 @@ ...@@ -1808,18 +1917,6 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Make PL/pgSQL use the main lexer, rather than its own version
(Tom Lane)
</para>
<para>
This ensures accurate tracking of the main system's behavior for details
such as string escaping.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Add <replaceable>count</> and <literal>ALL</> options to <command>MOVE Add <replaceable>count</> and <literal>ALL</> options to <command>MOVE
...@@ -1851,6 +1948,7 @@ ...@@ -1851,6 +1948,7 @@
<sect4> <sect4>
<title><link linkend="plperl">PL/Perl</link> Server-Side Language</title> <title><link linkend="plperl">PL/Perl</link> Server-Side Language</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1867,23 +1965,19 @@ ...@@ -1867,23 +1965,19 @@
<listitem> <listitem>
<para> <para>
Add server variable <link Add server parameter <link
linkend="guc-plperl-on-init"><varname>plperl.on_init</></link> to linkend="guc-plperl-on-init"><varname>plperl.on_init</></link> to
specify a PL/Perl Perl initialization function (Tim specify a PL/Perl initialization function (Tim
Bunce) Bunce)
</para> </para>
<para> <para>
<link <link
linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperl_init</></link> linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperl_init</></link>
and <varname>plperl.on_plperlu_init</> are also available and <link
for trusted/untrusted-specific initialization. linkend="guc-plperl-on-plperl-init"><varname>plperl.on_plperlu_init</></link>
</para> are also available for initialization that is specific to the trusted
</listitem> or untrusted language respectively.
<listitem>
<para>
Improve error context support in PL/Perl (Alexey Klyukin)
</para> </para>
</listitem> </listitem>
...@@ -1903,7 +1997,8 @@ ...@@ -1903,7 +1997,8 @@
</para> </para>
<para> <para>
This can be globally enabled with the server variable <link Perl <literal>strict</> checks can also be globally enabled with the
new server parameter <link
linkend="guc-plperl-use-strict"><varname>plperl.use_strict</></link>. linkend="guc-plperl-use-strict"><varname>plperl.use_strict</></link>.
</para> </para>
</listitem> </listitem>
...@@ -1915,7 +2010,8 @@ ...@@ -1915,7 +2010,8 @@
<para> <para>
This basically tests to see if the module is loaded, and if not, This basically tests to see if the module is loaded, and if not,
generates an error. generates an error. It will not allow loading of modules that
the administrator has not preloaded via the initialization parameters.
</para> </para>
</listitem> </listitem>
...@@ -1933,18 +2029,13 @@ ...@@ -1933,18 +2029,13 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Improve PL/Perl code structure (Tim Bunce)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect4> </sect4>
<sect4> <sect4>
<title><link linkend="plpython">PL/Python</link> Server-Side Language</title> <title><link linkend="plpython">PL/Python</link> Server-Side Language</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -1964,7 +2055,7 @@ ...@@ -1964,7 +2055,7 @@
</para> </para>
<para> <para>
<type>Bytea</> values passed into PL/Python now are represented as <type>Bytea</> values passed into PL/Python are now represented as
binary, rather than the PostgreSQL <type>bytea</> text format. Null binary, rather than the PostgreSQL <type>bytea</> text format. Null
bytes are now also output properly from PL/Python. <type>boolean</> bytes are now also output properly from PL/Python. <type>boolean</>
and <type>numeric</> value passing in PL/Python was also improved. and <type>numeric</> value passing in PL/Python was also improved.
...@@ -1992,7 +2083,7 @@ ...@@ -1992,7 +2083,7 @@
<para> <para>
The new server-side language is called <link The new server-side language is called <link
linkend="plpython-python23"><literal>plpython3u</></link>. This linkend="plpython-python23"><literal>plpython3u</></link>. This
cannot be used in the same backend with the usual cannot be used in the same session with the
<application>Python</> 2 server-side language. <application>Python</> 2 server-side language.
</para> </para>
</listitem> </listitem>
...@@ -2011,12 +2102,14 @@ ...@@ -2011,12 +2102,14 @@
<sect3> <sect3>
<title>Client Applications</title> <title>Client Applications</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add <link linkend="APP-VACUUMDB"><command>vacuumdb</></link> Add <link linkend="APP-VACUUMDB"><command>vacuumdb</></link>
<option>--analyze-only</> option to only analyze (Bruce Momjian) <option>--analyze-only</> option to analyze without vacuuming
(Bruce Momjian)
</para> </para>
</listitem> </listitem>
...@@ -2024,29 +2117,34 @@ ...@@ -2024,29 +2117,34 @@
<sect4> <sect4>
<title><link linkend="APP-PSQL"><application>psql</></link></title> <title><link linkend="APP-PSQL"><application>psql</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Properly escape <application>psql</> <link Add support for quoting/escaping the values of <application>psql</>
linkend="APP-PSQL-variables">variables</link> and <link linkend="APP-PSQL-variables">variables</link> as SQL strings or
identifiers (Pavel Stehule, Robert Haas) identifiers (Pavel Stehule, Robert Haas)
</para> </para>
<para> <para>
For example, <literal>:'var'</> will be escaped as a literal string, and For example, <literal>:'var'</> will produce the value of
<literal>:"var"</> will be escaped as an SQL identifier. <literal>var</> quoted and properly escaped as a literal string, while
<literal>:"var"</> will produce its value quoted and escaped as an
identifier.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Ignore leading UTF-8-encoded Unicode byte-order marker in Ignore a leading UTF-8-encoded Unicode byte-order marker in
<application>psql</> (Itagaki Takahiro) script files read by <application>psql</> (Itagaki Takahiro)
</para> </para>
<para> <para>
This is enabled when the client encoding is <acronym>UTF-8</>. This is enabled when the client encoding is <acronym>UTF-8</>.
It improves compatibility with certain editors, mostly on Windows,
that insist on inserting such markers.
</para> </para>
</listitem> </listitem>
...@@ -2060,8 +2158,8 @@ ...@@ -2060,8 +2158,8 @@
<listitem> <listitem>
<para> <para>
Prevent overwriting of <application>psql</>'s command-line history Avoid overwriting of <application>psql</>'s command-line history when
if two <application>psql</> sessions are run simultaneously (Tom Lane) two <application>psql</> sessions are run concurrently (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -2074,7 +2172,7 @@ ...@@ -2074,7 +2172,7 @@
<listitem> <listitem>
<para> <para>
Show <literal>\timing</> output when enabled, regardless of Show <literal>\timing</> output when it is enabled, regardless of
<quote>quiet</> mode (Peter Eisentraut) <quote>quiet</> mode (Peter Eisentraut)
</para> </para>
</listitem> </listitem>
...@@ -2083,14 +2181,8 @@ ...@@ -2083,14 +2181,8 @@
<sect5> <sect5>
<title><application>psql</> Display</title> <title><application>psql</> Display</title>
<itemizedlist>
<listitem> <itemizedlist>
<para>
Allow <application>psql</> to use fancy Unicode line-drawing
characters via <command>\pset linestyle unicode</> (Roger Leigh)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
...@@ -2099,11 +2191,19 @@ ...@@ -2099,11 +2191,19 @@
</para> </para>
<para> <para>
The previous format is available by using <command>\pset linestyle This behavior is now the default.
The previous formatting is available by using <command>\pset linestyle
old-ascii</>. old-ascii</>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Allow <application>psql</> to use fancy Unicode line-drawing
characters via <command>\pset linestyle unicode</> (Roger Leigh)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect5> </sect5>
...@@ -2112,11 +2212,12 @@ ...@@ -2112,11 +2212,12 @@
<title><application>psql</> <link <title><application>psql</> <link
linkend="APP-PSQL-meta-commands"><command>\d</></link> linkend="APP-PSQL-meta-commands"><command>\d</></link>
Commands</title> Commands</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Have <command>\d</> show child tables that inherit from the specified Make <command>\d</> show child tables that inherit from the specified
parent (Damien Clochard) parent (Damien Clochard)
</para> </para>
...@@ -2128,7 +2229,8 @@ ...@@ -2128,7 +2229,8 @@
<listitem> <listitem>
<para> <para>
Show definition of indexes in <command>\d index_name</> (Khee Chin) Show definitions of index columns in <command>\d index_name</>
(Khee Chin)
</para> </para>
<para> <para>
...@@ -2138,8 +2240,12 @@ ...@@ -2138,8 +2240,12 @@
<listitem> <listitem>
<para> <para>
In <application>psql</>, show the view definition only with <command>\d+</>, Show a view's defining query only in
not with <command>\d</> (Peter Eisentraut) <command>\d+</>, not in <command>\d</> (Peter Eisentraut)
</para>
<para>
Always including the query was deemed overly verbose.
</para> </para>
</listitem> </listitem>
...@@ -2150,11 +2256,12 @@ ...@@ -2150,11 +2256,12 @@
<sect4> <sect4>
<title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title> <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Have <application>pg_dump</>/<application>pg_restore</> Make <application>pg_dump</>/<application>pg_restore</>
<link linkend="pg-dump-options"><option>--clean</></link> <link linkend="pg-dump-options"><option>--clean</></link>
also remove large objects (Itagaki Takahiro) also remove large objects (Itagaki Takahiro)
</para> </para>
...@@ -2162,13 +2269,26 @@ ...@@ -2162,13 +2269,26 @@
<listitem> <listitem>
<para> <para>
Fix <application>pg_dump</> to properly dump large objects if Fix <application>pg_dump</> to properly dump large objects when
standard_conforming_strings is enabled (Tom Lane) <literal>standard_conforming_strings</> is enabled (Tom Lane)
</para> </para>
<para> <para>
Large objects dumps now use hex format for output. (SWITCH DEFAULT The previous coding could fail when dumping to an archive file
FOR BETA? TOM) and then generating script output from <application>pg_restore</>.
</para>
</listitem>
<listitem>
<para>
<application>pg_restore</> now emits large-object data in hex format
when generating script output (Tom Lane)
</para>
<para>
This could cause compatibility problems if the script is then
loaded into a pre-9.0 server. To work around that, restore
directly to the server, instead.
</para> </para>
</listitem> </listitem>
...@@ -2181,14 +2301,14 @@ ...@@ -2181,14 +2301,14 @@
<listitem> <listitem>
<para> <para>
Have <application>pg_dump</> <link Make <application>pg_dump</> <link
linkend="pg-dump-options"><option>--verbose</></link> linkend="pg-dump-options"><option>--verbose</></link>
output the <application>pg_dump</> and server versions output the <application>pg_dump</> and server versions
in text output mode (Jim Cox, Tom Lane) in text output mode (Jim Cox, Tom Lane)
</para> </para>
<para> <para>
These were already present in custom output mode. These were already provided in custom output mode.
</para> </para>
</listitem> </listitem>
...@@ -2199,29 +2319,30 @@ ...@@ -2199,29 +2319,30 @@
<sect4> <sect4>
<title><link <title><link
linkend="app-pg-ctl"><application>pg_ctl</></link></title> linkend="app-pg-ctl"><application>pg_ctl</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow <application>pg_ctl</> to be safely used to start the Allow <application>pg_ctl</> to be used safely to start the
<application>postmaster</> at boot-time (Tom Lane) <application>postmaster</> during a system reboot (Tom Lane)
</para> </para>
<para> <para>
Previously the <application>pg_ctl</> process could have been mistakenly Previously the <application>pg_ctl</> process could have been mistakenly
identified as a running <application>postmaster</> based on a stale identified as a running <application>postmaster</> based on a stale
<application>postmaster</> lock file. <application>postmaster</> lock file, resulting in a transient failure
to start the database.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Give <application>pg_ctl</> the ability to initialize the database Give <application>pg_ctl</> the ability to initialize the database
(like <application>initdb</>) (Zdenek Kotala) (by invoking <application>initdb</>) (Zdenek Kotala)
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</sect4> </sect4>
...@@ -2247,9 +2368,9 @@ ...@@ -2247,9 +2368,9 @@
<para> <para>
These functions are similar to <function>PQconnectdb()</> and These functions are similar to <function>PQconnectdb()</> and
<function>PQconnectStart()</> except they allow a null-terminated <function>PQconnectStart()</> except that they accept a null-terminated
array of connection options, rather than requiring all options to array of connection options, rather than requiring all options to
be sent in a single string. be provided in a single string.
</para> </para>
</listitem> </listitem>
...@@ -2261,29 +2382,31 @@ ...@@ -2261,29 +2382,31 @@
</para> </para>
<para> <para>
These functions return appropriately quoted and escaped literal These functions return appropriately quoted and escaped SQL string
strings and identifiers. The caller is not required to pre-allocate literals and identifiers. The caller is not required to pre-allocate
the string result, as is required by <function>PQescapeStringConn()</>. the string result, as is required by <function>PQescapeStringConn()</>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add checking for a per-user service file (<link Add support for a per-user service file (<link
linkend="libpq-pgservice"><filename>.pg_service.conf</></link>), linkend="libpq-pgservice"><filename>.pg_service.conf</></link>),
which is checked before the site-wide service file which is checked before the site-wide service file
(Peter Eisentraut) (Peter Eisentraut)
</para> </para>
</listitem>
<listitem>
<para> <para>
The file <filename>.pg_service.conf</> is assumed to be in the Properly report an error if the specified <application>libpq</> service
user's home directory. cannot be found (Peter Eisentraut)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add <link linkend="libpq-keepalives">keepalive settings</link> Add <link linkend="libpq-keepalives">TCP keepalive settings</link>
in libpq (Tollef Fog Heen, Fujii Masao, Robert Haas) in libpq (Tollef Fog Heen, Fujii Masao, Robert Haas)
</para> </para>
...@@ -2295,16 +2418,9 @@ ...@@ -2295,16 +2418,9 @@
<listitem> <listitem>
<para> <para>
Properly report an error if the specified <application>libpq</> service When a <link linkend="libpq-pgpass"><filename>.pgpass</></link>-supplied
cannot be found (Peter Eisentraut) password fails, mention where the password came from in the error
</para> message (Bruce Momjian)
</listitem>
<listitem>
<para>
Issue a warning if the <link
linkend="libpq-pgpass"><filename>.pgpass</></link>-retrieved
password fails (Bruce Momjian)
</para> </para>
</listitem> </listitem>
...@@ -2314,8 +2430,7 @@ ...@@ -2314,8 +2430,7 @@
</para> </para>
<para> <para>
This improves handling of indirectly-signed SSL client This improves support for indirectly-signed SSL certificates.
certificates.
</para> </para>
</listitem> </listitem>
...@@ -2325,6 +2440,7 @@ ...@@ -2325,6 +2440,7 @@
<sect4> <sect4>
<title><link linkend="ecpg"><application>ecpg</></link></title> <title><link linkend="ecpg"><application>ecpg</></link></title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2345,8 +2461,8 @@ ...@@ -2345,8 +2461,8 @@
<listitem> <listitem>
<para> <para>
Add an <application>ecpg</> <link Add an <application>ecpg</> function <link
linkend="ecpg-library">function</link> to return the linkend="ecpg-library">ECPGtransactionStatus</link> to return the
current transaction status (Bernd Helmle) current transaction status (Bernd Helmle)
</para> </para>
</listitem> </listitem>
...@@ -2368,25 +2484,26 @@ ...@@ -2368,25 +2484,26 @@
<listitem> <listitem>
<para> <para>
Allow <application>ecpg</> to use variable names in Allow <application>ecpg</> to use variable names in
<function>free()</>(Michael Meskes) <function>free()</> (Michael Meskes)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Have <application>ecpg</> return zero for non-SQL3 data types Make <function>ecpg_dynamic_type()</> return zero for non-SQL3 data
(Michael Meskes)) types (Michael Meskes)
</para> </para>
<para> <para>
Previously it returned the negative of the data type <type>oid</>. Previously it returned the negative of the data type OID.
This could be confused with valid type OIDs, however.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support <type>long long</> types on platforms that already have 64-bit Support <type>long long</> types on platforms that already have 64-bit
<type>long</>s (Michael Meskes)) <type>long</> (Michael Meskes)
</para> </para>
</listitem> </listitem>
...@@ -2394,6 +2511,7 @@ ...@@ -2394,6 +2511,7 @@
<sect5> <sect5>
<title><application>ecpg</> Cursors</title> <title><application>ecpg</> Cursors</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2433,6 +2551,7 @@ ...@@ -2433,6 +2551,7 @@
<sect3> <sect3>
<title>Build Options</title> <title>Build Options</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2442,33 +2561,25 @@ ...@@ -2442,33 +2561,25 @@
<para> <para>
Thread-safe builds can be disabled with <link Thread-safe builds can be disabled with <link
linkend="configure"><application>configure</></link> linkend="configure"><literal>configure</></link>
<option>--disable-thread-safety</>. <option>--disable-thread-safety</>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add a compile-time option to allow the Linux out-of-memory killer Add support for controlling the Linux out-of-memory killer
to kill backends (Alex Hunsaker, Tom Lane) (Alex Hunsaker, Tom Lane)
</para> </para>
<para> <para>
Now that <filename>/proc/self/oom_adj</> allows disabling Now that <filename>/proc/self/oom_adj</> allows disabling
of the <productname>Linux</> out-of-memory (<acronym>OOM</>) of the <productname>Linux</> out-of-memory (<acronym>OOM</>)
killer for the postmaster and its children, the new killer, it's recommendable to disable OOM kills for the postmaster.
compile-time option <link It may then be desirable to re-enable OOM kills for the postmaster's
linkend="linux-memory-overcommit"><literal>-DLINUX_OOM_ADJ=0</></link> child processes. The new compile-time option <link
allows the killer to be enabled for <application>postmaster</> linkend="linux-memory-overcommit"><literal>LINUX_OOM_ADJ</></link>
children. <application>pg_config</> shows if this flag allows the killer to be reactivated for child processes.
was used during compilation.
</para>
</listitem>
<listitem>
<para>
Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
building (Peter Eisentraut)
</para> </para>
</listitem> </listitem>
...@@ -2476,6 +2587,7 @@ ...@@ -2476,6 +2587,7 @@
<sect4> <sect4>
<title>Makefiles</title> <title>Makefiles</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2502,13 +2614,6 @@ ...@@ -2502,13 +2614,6 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Restructure the <acronym>HTML</> documentation build
<filename>Makefile</> rules (Peter Eisentraut)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Add a Makefile rule to build documentation as a single text file Add a Makefile rule to build documentation as a single text file
...@@ -2516,55 +2621,21 @@ ...@@ -2516,55 +2621,21 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Restructure use of <literal>LDFLAGS</> to be more consistent
across platforms (Tom Lane)
</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 Dunstan)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect4> </sect4>
<sect4> <sect4>
<title>Windows</title> <title>Windows</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add support for compiling on <link Support compiling on <link
linkend="install-win32-full">64-bit linkend="install-win32">64-bit
<productname>Windows</></link> and running in 64-bit <productname>Windows</></link> and running in 64-bit
mode (Tsutomu Yamada, Magnus) mode (Tsutomu Yamada, Magnus Hagander)
</para> </para>
<para> <para>
...@@ -2574,7 +2645,7 @@ ...@@ -2574,7 +2645,7 @@
<listitem> <listitem>
<para> <para>
Allow server builds using <link Support server builds using <link
linkend="install-win32-full"><productname>Visual Studio linkend="install-win32-full"><productname>Visual Studio
2008</></link> (Magnus Hagander) 2008</></link> (Magnus Hagander)
</para> </para>
...@@ -2582,7 +2653,7 @@ ...@@ -2582,7 +2653,7 @@
<listitem> <listitem>
<para> <para>
Allow multiprocessor compilation using <productname>Microsoft Visual Support multiprocessor compilation using <productname>Microsoft Visual
C</> (Magnus Hagander) C</> (Magnus Hagander)
</para> </para>
</listitem> </listitem>
...@@ -2595,24 +2666,26 @@ ...@@ -2595,24 +2666,26 @@
<sect3> <sect3>
<title>Source Code</title> <title>Source Code</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Distribute documentation in a proper directory tree, rather than Distribute prebuilt documentation in a subdirectory tree, rather than
as tar archive files inside the main distribution tarball (Peter Eisentraut) as tar archive files inside the distribution tarball
(Peter Eisentraut)
</para> </para>
<para> <para>
For example, the <acronym>HTML</> documentation is now in For example, the prebuilt <acronym>HTML</> documentation is now in
<filename>doc/src/sgml/html</>; the manual pages are packaged <filename>doc/src/sgml/html/</>; the manual pages are packaged
similarly. similarly.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Enable the server's lexer to be reentrant (Tom Lane) Make the server's lexer reentrant (Tom Lane)
</para> </para>
<para> <para>
...@@ -2628,20 +2701,37 @@ ...@@ -2628,20 +2701,37 @@
<listitem> <listitem>
<para> <para>
Add system columns to better document the use of indexes for constraint User-defined constraint triggers now have entries in
<structname>pg_constraint</> as well as <structname>pg_trigger</>
(Tom Lane)
</para>
<para>
Because of this change,
<structname>pg_constraint</>.<structfield>pgconstrname</> is now
redundant and has been removed.
</para>
</listitem>
<listitem>
<para>
Add system catalog columns
<structname>pg_constraint</>.<structfield>conindid</> and
<structname>pg_trigger</>.<structfield>tgconstrindid</>
to better document the use of indexes for constraint
enforcement (Tom Lane) enforcement (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow multiple actions to be communicated using the same operating Allow multiple conditions to be communicated to backends using a single
system signal (Fujii Masao) operating system signal (Fujii Masao)
</para> </para>
<para> <para>
This allows improved backend communication as new features are This allows new features to be added without a platform-specific
added. constraint on the number of signal conditions.
</para> </para>
</listitem> </listitem>
...@@ -2659,8 +2749,8 @@ ...@@ -2659,8 +2749,8 @@
</para> </para>
<para> <para>
This also improves performance when using millions of users and This improves performance when using many roles or
databases. databases, and eliminates some possible failure conditions.
</para> </para>
</listitem> </listitem>
...@@ -2673,19 +2763,12 @@ ...@@ -2673,19 +2763,12 @@
<listitem> <listitem>
<para> <para>
Reduce the length of some file names so file paths are less than Reduce the length of some file names so that all file paths in the
100 characters (Tom Lane) distribution tarball are less than 100 characters (Tom Lane)
</para> </para>
<para> <para>
Some decompression programs have problems with long file names. Some decompression programs have problems with longer file paths.
</para>
</listitem>
<listitem>
<para>
Tighten input requirements for <type>int2</> vector input (Caleb
Welton)
</para> </para>
</listitem> </listitem>
...@@ -2699,8 +2782,8 @@ ...@@ -2699,8 +2782,8 @@
<listitem> <listitem>
<para> <para>
Properly remove the few remaining personal source code copyright With authors' permissions, remove the few remaining personal source code
entries (Bruce Momjian) copyright notices (Bruce Momjian)
</para> </para>
<para> <para>
...@@ -2711,16 +2794,78 @@ ...@@ -2711,16 +2794,78 @@
<listitem> <listitem>
<para> <para>
New documentation <link linkend="non-durability">section</link> Add new documentation <link linkend="non-durability">section</link>
about running <productname>PostgreSQL</> in non-durable mode, about running <productname>PostgreSQL</> in non-durable mode
to improve performance (Bruce Momjian) to improve performance (Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Restructure the <acronym>HTML</> documentation build
<filename>Makefile</> rules (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Use <productname>DocBook</> <acronym>XSL</> stylesheets for man page
building (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Improve PL/Perl code structure (Tim Bunce)
</para>
</listitem>
<listitem>
<para>
Improve error context support in PL/Perl (Alexey Klyukin)
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<sect4> <sect4>
<title>Feature Support</title> <title>New Build Requirements</title>
<para>
Note that these requirements do not apply when building from a
distribution tarball, since tarballs include the files that these
programs are used to build.
</para>
<itemizedlist>
<listitem>
<para>
Require <application>Autoconf</> 2.63 to build
<application>configure</> (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Require <application>Flex</> 2.5.31 or later to build
from a <acronym>CVS</> checkout (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Require <application>Perl</> version 5.8 or later to build
from a <acronym>CVS</> checkout (John Naylor, Andrew Dunstan)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Portability</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2729,13 +2874,14 @@ ...@@ -2729,13 +2874,14 @@
</para> </para>
<para> <para>
Bonjour now requires <productname>OS X</> 10.3 or later. Bonjour support now requires <productname>OS X</> 10.3 or later.
The older API has been deprecated by Apple.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add processor test-and-test lock support for the <productname>SuperH</> Add spinlock support for the <productname>SuperH</>
architecture (Nobuhiro Iwamatsu) architecture (Nobuhiro Iwamatsu)
</para> </para>
</listitem> </listitem>
...@@ -2750,22 +2896,24 @@ ...@@ -2750,22 +2896,24 @@
<listitem> <listitem>
<para> <para>
Remove support for platforms that don't have a working 64-bit Remove support for platforms that don't have a working 64-bit
integer data types (Tom Lane) integer data type (Tom Lane)
</para> </para>
</listitem>
<listitem>
<para> <para>
It is believed all supported platforms have working 64-bit integer Restructure use of <literal>LDFLAGS</> to be more consistent
data types. across platforms (Tom Lane)
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</sect4> </sect4>
<sect4> <sect4>
<title>Server Programming</title> <title>Server Programming</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2775,11 +2923,12 @@ ...@@ -2775,11 +2923,12 @@
</para> </para>
<para> <para>
While this removes keyword conflicts that previously made These changes remove keyword conflicts that previously made
<productname>C++</> usage difficult in backend code, there are <productname>C++</> usage difficult in backend code. However, there
still other complexities when using <productname>C++</> for backend are still other complexities when using <productname>C++</> for backend
functions. <literal>extern "C" { }</> is still necessary in functions. <literal>extern "C" { }</> is still necessary in
appropriate places. appropriate places, and memory management and error handling are
still problematic.
</para> </para>
</listitem> </listitem>
...@@ -2794,9 +2943,9 @@ ...@@ -2794,9 +2943,9 @@
<listitem> <listitem>
<para> <para>
Require <function>fastgetattr()</> and <function>heap_getattr()</> Require calls of <function>fastgetattr()</> and
backend macros to use a non-NULL fourth argument (Robert Haas) <function>heap_getattr()</> backend macros to use a non-NULL fourth
KEEP? argument (Robert Haas)
</para> </para>
</listitem> </listitem>
...@@ -2806,6 +2955,7 @@ ...@@ -2806,6 +2955,7 @@
<sect4> <sect4>
<title>Server Hooks</title> <title>Server Hooks</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2817,15 +2967,15 @@ ...@@ -2817,15 +2967,15 @@
<listitem> <listitem>
<para> <para>
Add a hook so loadable modules can control utility commands (Itagaki Allow the calling of parser hooks from <acronym>SPI</> and cached
Takahiro) plans (Tom Lane)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Allow the calling of parser hooks from <acronym>SPI</> and cached Add a ProcessUtility hook so loadable modules can control utility
plans (Tom Lane) commands (Itagaki Takahiro)
</para> </para>
</listitem> </listitem>
...@@ -2835,6 +2985,7 @@ ...@@ -2835,6 +2985,7 @@
<sect4> <sect4>
<title>Binary Upgrade Support</title> <title>Binary Upgrade Support</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
...@@ -2845,36 +2996,33 @@ ...@@ -2845,36 +2996,33 @@
<para> <para>
This avoids the requirement of dumping/reloading the database when This avoids the requirement of dumping/reloading the database when
upgrading to a new major release of PostgreSQL and speeds up offline upgrading to a new major release of PostgreSQL, thus reducing downtime
upgrades by orders of magnitude. It supports upgrades to 9.0 by orders of magnitude. It supports upgrades to 9.0
from PostgreSQL 8.3 and 8.4. from PostgreSQL 8.3 and 8.4.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add support for preservation of all <link Add support for preserving relation <link
linkend="catalog-pg-class"><structname>relfilenodes</></link>, linkend="catalog-pg-class"><structname>relfilenode</></link> values
for use during binary upgrades (Bruce Momjian) during binary upgrades (Bruce Momjian)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Add support for binary upgrades to preserve <structname>pg_type</> Add support for preserving <structname>pg_type</>
and <structname>pg_enum</> <type>oids</> (Bruce Momjian) and <structname>pg_enum</> OIDs during binary upgrades
</para> (Bruce Momjian)
<para>
This is needed to allow binary upgrades of user-defined composite
types, arrays, and enums (enumerated types).
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Move tablespace data directories into their own Move data files within tablespaces into
<productname>PostgreSQL</> version-specific subdirectory (Bruce Momjian) <productname>PostgreSQL</>-version-specific subdirectories
(Bruce Momjian)
</para> </para>
<para> <para>
...@@ -2890,17 +3038,19 @@ ...@@ -2890,17 +3038,19 @@
<sect3> <sect3>
<title>Contrib</title> <title>Contrib</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Add multithreaded option (<option>-j</>) to <link Add multithreading option (<option>-j</>) to <link
linkend="pgbench"><filename>contrib/pgbench</></link> linkend="pgbench"><filename>contrib/pgbench</></link>
(Itagaki Takahiro) (Itagaki Takahiro)
</para> </para>
<para> <para>
This allows multiple <acronym>CPU</>s to be used for pgbench tests. This allows multiple <acronym>CPU</>s to be used by pgbench,
reducing the risk of pgbench itself becoming the test bottleneck.
</para> </para>
</listitem> </listitem>
...@@ -2953,29 +3103,31 @@ ...@@ -2953,29 +3103,31 @@
<listitem> <listitem>
<para> <para>
Improve <filename>contrib/dblink</>s handling of dropped columns Improve <filename>contrib/dblink</>'s handling of dropped columns
(Tom Lane) (Tom Lane)
</para> </para>
<para> <para>
This affects <link This affects <link
linkend="CONTRIB-DBLINK-BUILD-SQL-INSERT"><function>dblink_build_sql_insert()</></link> linkend="CONTRIB-DBLINK-BUILD-SQL-INSERT"><function>dblink_build_sql_insert()</></link>
and related functions. and related functions. These functions now number columns according
to logical not physical column numbers.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Greatly increase <link Greatly increase <link
linkend="hstore"><filename>contrib/hstore</></link>'s linkend="hstore"><filename>contrib/hstore</></link>'s data
length limit and add B-tree and hash abilities so <literal>GROUP length limit, and add B-tree and hash support so <literal>GROUP
BY</> and <literal>DISTINCT</> operations are possible BY</> and <literal>DISTINCT</> operations are possible on
(Andrew Gierth) <type>hstore</> columns (Andrew Gierth)
</para> </para>
<para> <para>
New functions and operators were also added. These improvements New functions and operators were also added. These improvements
make hstore a full-functional key-value store embedded in PostgreSQL. make <type>hstore</> a full-function key-value store embedded in
<productname>PostgreSQL</>.
</para> </para>
</listitem> </listitem>
...@@ -2983,7 +3135,7 @@ ...@@ -2983,7 +3135,7 @@
<para> <para>
Add <link Add <link
linkend="passwordcheck"><filename>contrib/passwordcheck</></link> linkend="passwordcheck"><filename>contrib/passwordcheck</></link>
which can check the strength of assigned passwords (Laurenz to support site-specific password strength policies (Laurenz
Albe) Albe)
</para> </para>
...@@ -3001,8 +3153,9 @@ ...@@ -3001,8 +3153,9 @@
</para> </para>
<para> <para>
This is designed to be used by the <literal>archive_cleanup_command</literal> This is designed to be used in the
setting to remove unnecessary archive files. <literal>archive_cleanup_command</literal>
server parameter, to remove no-longer-needed archive files.
</para> </para>
</listitem> </listitem>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment