-
Noah Misch authored
Oversight in commit 7cbe57c3. Back-patch to 9.4, where that commit first appeared. In passing, release-note the FDW API postcondition change from the same commit.
Noah Misch authoredOversight in commit 7cbe57c3. Back-patch to 9.4, where that commit first appeared. In passing, release-note the FDW API postcondition change from the same commit.
release-9.4.sgml 66.66 KiB
<!-- doc/src/sgml/release-9.4.sgml -->
<!-- See header comment in release.sgml about typical markup -->
<sect1 id="release-9-4">
<title>Release 9.4</title>
<note>
<title>Release Date</title>
<simpara>2014-??-??</simpara>
<simpara>Current as of 2014-08-17</simpara>
</note>
<sect2>
<title>Overview</title>
<para>
Major enhancements in <productname>PostgreSQL</> 9.4 include:
</para>
<!-- This list duplicates items below, but without authors or details-->
<itemizedlist>
<listitem>
<para>
Allow <link linkend="rules-materializedviews">materialized views</>
to be refreshed without blocking reads
</para>
</listitem>
<listitem>
<para>
Add support for <link linkend="logicaldecoding">logical decoding</>
of WAL data, to allow database changes to be streamed out in a
customizable format
</para>
</listitem>
<listitem>
<para>
Allow <link linkend="bgworker">background worker processes</>
to be dynamically registered, started and terminated
</para>
</listitem>
<listitem>
<para>
Add <link linkend="datatype-json"><type>jsonb</></link>, a more
capable and efficient data type for for storing <acronym>JSON</> data
</para>
</listitem>
<listitem>
<para>
Add new <acronym>SQL</> command <xref linkend="SQL-ALTERSYSTEM">
for updating <filename>postgresql.conf</> configuration file entries
</para>
</listitem>
<listitem>
<para>
Reduce lock strength for some <xref linkend="SQL-ALTERTABLE">
commands
</para>
</listitem>
</itemizedlist>
<para>
The above items are explained in more detail in the sections below.
</para>
</sect2>
<sect2>
<title>Migration to Version 9.4</title>
<para>
A dump/restore using <xref linkend="app-pg-dumpall">, or use
of <xref linkend="pgupgrade">, is required for those wishing to migrate
data from any previous release.
</para>
<para>
Version 9.4 contains a number of changes that may affect compatibility
with previous releases. Observe the following incompatibilities:
</para>
<itemizedlist>
<listitem>
<para>
Tighten checks for multidimensional <link
linkend="arrays">array</link> input (Bruce Momjian)
</para>
<para>
Previously, an input array string that started with a single-element
array dimension could later contain multidimensional segments,
e.g. <literal>'{{1}, {2,3}}'::int[]</>.
</para>
</listitem>
<listitem>
<para>
Unicode escapes in <link linkend="datatype-json"><type>JSON</type></link>
text values are no longer rendered with the backslash escaped
(Andrew Dunstan)
</para>
<para>
Previously, all backslashes in text values being formed into JSON
were escaped. Now a backslash followed by <literal>u</> and four
hexadecimal digits is not escaped, as this is a legal sequence in a
JSON string value, and escaping the backslash led to some perverse
results.
</para>
</listitem>
<listitem>
<para>
When converting values of type <type>date</>, <type>timestamp</>
or <type>timestamptz</>
to <link linkend="datatype-json"><type>JSON</type></link>, render the
values in a format compliant with ISO 8601 (Andrew Dunstan)
</para>
<para>
Previously such values were rendered according to the current
<xref linkend="guc-datestyle"> setting; but many JSON processors
require timestamps to be in ISO 8601 format. If necessary, the
previous behavior can be obtained by explicitly casting the datetime
value to <type>text</> before passing it to the JSON conversion
function.
</para>
</listitem>
<listitem>
<para>
Cause consecutive whitespace in <link
linkend="functions-formatting-table"><function>to_timestamp()</></link>
and <function>to_date()</> format strings to consume a corresponding
number of characters in the input string (whitespace or not), then
conditionally consume adjacent whitespace, if not in <literal>FX</>
mode (Jeevan Chalke)
</para>
<para>
Previously, consecutive whitespace characters in a non-<literal>FX</>
format string behaved like a single whitespace character and consumed
all adjacent whitespace in the input string. For example, previously
a format string of three spaces would consume only the first space in
<literal>' 12'</>, but it will now consume all three characters.
</para>
</listitem>
<listitem>
<para>
Fix <link
linkend="textsearch-functions-table"><function>ts_rank_cd()</></link>
to ignore stripped lexemes (Alex Hill)
</para>
<para>
Previously, stripped lexemes were treated as if they had a default
location, producing a rank of dubious usefulness.
</para>
</listitem>
<listitem>
<para>
For functions declared to
take <link linkend="xfunc-sql-variadic-functions"><literal>VARIADIC
"any"</></link>, an actual parameter marked as <literal>VARIADIC</>
must be of a determinable array type (Pavel Stehule)
</para>
<para>
Such parameters can no longer be written as an undecorated string
literal or <literal>NULL</>; a cast to an appropriate array data type
will now be required. Note that this does not affect parameters not
marked <literal>VARIADIC</>.
</para>
</listitem>
<listitem>
<para>
<xref linkend="sql-discard"> now also discards sequence-related state
(Fabrízio de Royes Mello, Robert Haas)
</para>
</listitem>
<listitem>
<para>
Writable foreign data wrappers must return all columns when the foreign
table has an <literal>AFTER ROW</> trigger (Noah Misch)
</para>
<para>
Previously, foreign tables never had triggers, and
the <literal>RETURNING</> clause alone dictated the columns required.
</para>
</listitem>
<listitem>
<para>
Rename <link linkend="SQL-EXPLAIN"><command>EXPLAIN
ANALYZE</></link>'s <quote>total runtime</quote> output
to <quote>execution time</quote> (Tom Lane)
</para>
<para>
Now that planning time is also reported, the previous name was
confusing.
</para>
</listitem>
<listitem>
<para>
<link linkend="SQL-SHOW"><command>SHOW TIME ZONE</></link> now
outputs simple numeric UTC offsets in <acronym>POSIX</> timezone
format (Tom Lane)
</para>
<para>
Previously, such timezone settings were displayed as <link
linkend="datatype-interval-output"><type>interval</></link> values.
The new output is properly interpreted by <command>SET TIME ZONE</>
when passed as a simple string, whereas the old output required
special treatment to be re-parsed correctly.
</para>
</listitem>
<listitem>
<para>
Prevent <link
linkend="ddl-constraints-check-constraints"><literal>CHECK</></link>
constraints from referencing system columns, except
<structfield>tableoid</> (Amit Kapila)
</para>
<para>
Previously such check constraints were allowed, but they would often
cause errors during restores.
</para>
</listitem>
<listitem>
<para>
Use the last specified <xref linkend="recovery-target"> if multiple
values are specified (Heikki Linnakangas)
</para>
</listitem>
<listitem>
<para>
On Windows, automatically preserve quotes in command strings supplied
by the user (Heikki Linnakangas)
</para>
<para>
User commands that did their own quote preservation might need
adjustment. This is likely to be an issue for commands used in
<xref linkend="guc-archive-command">, <xref linkend="restore-command">,
and <link linkend="sql-copy"><command>COPY TO/FROM PROGRAM</></link>.
</para>
</listitem>
<listitem>
<para>
Remove catalog column <link
linkend="catalog-pg-class"><structfield>pg_class.reltoastidxid</></link>
(Michael Paquier)
</para>
</listitem>
<listitem>
<para>
Remove catalog column <link
linkend="catalog-pg-rewrite"><structfield>pg_rewrite.ev_attr</></link>
(Kevin Grittner)
</para>
<para>
Per-column rules have not been supported since
<application>PostgreSQL</> 7.3.
</para>
</listitem>
<listitem>
<para>
Remove native support for <application>Kerberos</> authentication
(<option>--with-krb5</>, etc)
(Magnus Hagander)
</para>
<para>
The supported way to use <application>Kerberos</> authentication is
with <acronym>GSSAPI</>. The native code has been deprecated since
<productname>PostgreSQL</> 8.3.
</para>
</listitem>
<listitem>
<para>
In <application>PL/Python</>, handle domains over arrays like the
underlying array type (Rodolfo Campero)
</para>
<para>
Previously such values were treated as strings.
</para>
</listitem>
<listitem>
<para>
Make libpq's <link
linkend="libpq-pqconnectdbparams"><function>PQconnectdbParams()</></link>
and <link
linkend="libpq-pqpingparams"><function>PQpingParams()</></link>
functions process zero-length strings as defaults (Adrian
Vondendriesch)
</para>
<para>
Previously, these functions treated zero-length string values as
selecting the default in only some cases.
</para>
</listitem>
<listitem>
<para>
Change empty arrays returned by the <xref linkend="intarray"> module
to be zero-dimensional arrays (Bruce Momjian)
</para>
<para>
Previously, empty arrays were returned as zero-length one-dimensional
arrays, whose text representation looked the same as zero-dimensional
arrays (<literal>{}</>), but they acted differently in array
operations. <application>intarray</>'s behavior in this area now
matches the built-in array operators.
</para>
</listitem>
<listitem>
<para>
<xref linkend="pgupgrade"> now uses <option>-U</>
or <option>--username</> to specify the user name (Bruce Momjian)
</para>
<para>
Previously this option was spelled <option>-u</> or <option>--user</>,
but that was inconsistent with other tools.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Changes</title>
<para>
Below you will find a detailed account of the changes between
<productname>PostgreSQL</productname> 9.4 and the previous major
release.
</para>
<sect3>
<title>Server</title>
<itemizedlist>
<listitem>
<para>
Allow <link linkend="bgworker">background worker processes</link>
to be dynamically registered, started and terminated (Robert Haas)
</para>
<para>
The <filename>contrib/worker_spi</> module shows an example of use
of this feature.
</para>
</listitem>
<listitem>
<para>
Allow dynamic allocation of shared memory segments (Robert Haas,
Amit Kapila)
</para>
<para>
This feature is illustrated in <xref linkend="test-shm-mq">.
</para>
</listitem>
<listitem>
<para>
During crash recovery or immediate shutdown, send uncatchable
termination signals (<systemitem>SIGKILL</>) to child processes
that do not shut down promptly (MauMau, Álvaro Herrera)
</para>
<para>
This reduces the likelihood of leaving orphaned child processes
behind after <xref linkend="app-postmaster"> shutdown, as well
as ensuring that crash recovery can proceed if some child processes
have become <quote>stuck</>.
</para>
</listitem>
<listitem>
<para>
Improve randomness of the database system identifier (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="SQL-VACUUM"> properly report dead but
not-yet-removable rows to the statistics collector (Hari Babu)
</para>
<para>
Previously these were reported as live rows.
</para>
</listitem>
</itemizedlist>
<sect4>
<title>Indexes</title>
<itemizedlist>
<listitem>
<para>
Reduce <link linkend="GIN"><acronym>GIN</></link> index size
(Alexander Korotkov, Heikki Linnakangas)
</para>
<para>
Indexes upgraded via <xref linkend="pgupgrade"> will work fine
but will still be in the old, larger <acronym>GIN</> format.
Use <xref linkend="SQL-REINDEX"> to recreate such an index in the
new format.
</para>
</listitem>
<listitem>
<para>
Improve speed of multi-key <link
linkend="GIN"><acronym>GIN</></link> lookups (Alexander Korotkov,
Heikki Linnakangas)
</para>
</listitem>
<listitem>
<para>
Add <link linkend="GiST"><acronym>GiST</></link> index support
for <link linkend="datatype-inet"><type>inet</></link> and
<link linkend="datatype-cidr"><type>cidr</></link> data types
(Emre Hasegeli)
</para>
<para>
Such indexes improve <link
linkend="cidr-inet-operators-table">subnet and supernet</link>
lookups and ordering comparisons.
</para>
</listitem>
<listitem>
<para>
Fix rare race condition in B-tree page deletion (Heikki Linnakangas)
</para>
</listitem>
<listitem>
<para>
Make the handling of interrupted B-tree page splits more robust
(Heikki Linnakangas)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>General Performance</title>
<itemizedlist>
<listitem>
<para>
Allow multiple backends to insert
into <link linkend="wal"><acronym>WAL</></link> buffers
concurrently (Heikki Linnakangas)
</para>
<para>
This improves parallel write performance.
</para>
</listitem>
<listitem>
<para>
Conditionally write only the modified portion of updated rows to
<link linkend="wal"><acronym>WAL</></link> (Amit Kapila)
</para>
</listitem>
<listitem>
<para>
Improve performance of aggregate functions used as <link
linkend="syntax-window-functions">window functions</link>
(David Rowley, Florian Pflug, Tom Lane)
</para>
</listitem>
<listitem>
<para>
Improve speed of aggregates that
use <link linkend="datatype-numeric"><type>numeric</></link> state
values (Hadi Moshayedi)
</para>
</listitem>
<listitem>
<para>
Attempt to <link linkend="vacuum-for-wraparound">freeze</link>
tuples when tables are rewritten with <xref
linkend="SQL-CLUSTER"> or <link
linkend="SQL-VACUUM"><command>VACUUM FULL</></link> (Robert Haas,
Andres Freund)
</para>
<para>
This can avoid the need to freeze the tuples in the future.
</para>
</listitem>
<listitem>
<para>
Improve speed of <xref linkend="SQL-COPY">
with <literal>DEFAULT</> <link
linkend="functions-sequence-table"><function>nextval()</></link>
columns (Simon Riggs)
</para>
</listitem>
<listitem>
<para>
Improve speed of accessing many different <link
linkend="SQL-CREATESEQUENCE">sequences</link> in the same session
(David Rowley)
</para>
</listitem>
<listitem>
<para>
Raise hard limit on the number of tuples held in memory during sorting
and B-tree index builds (Noah Misch)
</para>
</listitem>
<listitem>
<para>
Reduce memory allocated by <application>PL/pgSQL</>
<xref linkend="SQL-DO"> blocks (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Make the planner more aggressive in extracting restriction clauses
from mixed <literal>AND</>/<literal>OR</> clauses (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Disallow pushing volatile <literal>WHERE</> clauses down
into <literal>DISTINCT</> subqueries (Tom Lane)
</para>
<para>
Pushing down a <literal>WHERE</> clause can produce a more
efficient plan overall, but at the cost of evaluating the clause
more often than is implied by the text of the query; so don't do it
if the clause contains any volatile functions.
</para>
</listitem>
<listitem>
<para>
Auto-resize the catalog caches (Heikki Linnakangas)
</para>
<para>
This reduces memory consumption for sessions accessing only a few
tables, and improves performance for sessions accessing many tables.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Monitoring</title>
<itemizedlist>
<listitem>
<para>
Add <xref linkend="pg-stat-archiver-view"> system view to
report <link linkend="wal"><acronym>WAL</></link> archiver activity
(Gabriele Bartolini)
</para>
</listitem>
<listitem>
<para>
Add <structfield>n_mod_since_analyze</> columns to
<xref linkend="pg-stat-all-tables-view"> and related system views
(Mark Kirkwood)
</para>
<para>
These columns expose the system's estimate of the number of changed
tuples since the table's last <xref linkend="sql-analyze">. This
estimate drives decisions about when to auto-analyze.
</para>
</listitem>
<listitem>
<para>
Add <structfield>backend_xid</> and <structfield>backend_xmin</>
columns to the system view <xref linkend="pg-stat-activity-view">,
and a <structfield>backend_xmin</> column to
<xref linkend="pg-stat-replication-view"> (Christian Kruse)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title><acronym>SSL</></title>
<itemizedlist>
<listitem>
<para>
Add support for <acronym>SSL</> <acronym>ECDH</> key exchange
(Marko Kreen)
</para>
<para>
This allows use of Elliptic Curve keys for server authentication.
Such keys are faster and have better security than <acronym>RSA</>
keys. The new configuration parameter
<xref linkend="guc-ssl-ecdh-curve">
controls which curve is used for <acronym>ECDH</>.
</para>
</listitem>
<listitem>
<para>
Improve the default <xref linkend="guc-ssl-ciphers"> setting
(Marko Kreen)
</para>
</listitem>
<listitem>
<para>
By default, the server not the client now controls the preference
order of <acronym>SSL</> ciphers
(Marko Kreen)
</para>
<para>
Previously, the order specified by <xref linkend="guc-ssl-ciphers">
was usually ignored in favor of client-side defaults, which are not
configurable in most <productname>PostgreSQL</> clients. If
desired, the old behavior can be restored via the new configuration
parameter <xref linkend="guc-ssl-prefer-server-ciphers">.
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="guc-log-connections"> show <acronym>SSL</>
encryption information (Andreas Kunert)
</para>
</listitem>
<listitem>
<para>
Improve <acronym>SSL</> renegotiation handling (Álvaro
Herrera)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Server Settings</title>
<itemizedlist>
<listitem>
<para>
Add new <acronym>SQL</> command <xref linkend="SQL-ALTERSYSTEM">
for updating <filename>postgresql.conf</> configuration file entries
(Amit Kapila)
</para>
<para>
Previously such settings could only be changed by manually
editing <filename>postgresql.conf</>.
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="guc-autovacuum-work-mem"> configuration parameter
to control the amount of memory used by autovacuum workers
(Peter Geoghegan)
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="guc-huge-pages"> parameter to allow using huge
memory pages on Linux (Christian Kruse, Richard Poole, Abhijit
Menon-Sen)
</para>
<para>
This can improve performance on large-memory systems.
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="guc-max-worker-processes"> parameter
to limit the number of background workers (Robert Haas)
</para>
<para>
This is helpful in configuring a standby server to have the
required number of worker processes (the same as the primary).
</para>
</listitem>
<listitem>
<para>
Add superuser-only <xref linkend="guc-session-preload-libraries">
parameter to load libraries at session start (Peter Eisentraut)
</para>
<para>
In contrast to <xref linkend="guc-local-preload-libraries">, this
parameter can load any shared library, not just those in
the <filename>$libdir/plugins</> directory.
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="guc-wal-log-hints"> parameter to enable WAL
logging of hint-bit changes (Sawada Masahiko)
</para>
<para>
Hint bit changes are not normally logged, except when checksums are
enabled. This is useful for external tools
like <application>pg_rewind</>.
</para>
</listitem>
<listitem>
<para>
Increase the default settings of <xref linkend="guc-work-mem">
and <xref linkend="guc-maintenance-work-mem"> by four times (Bruce
Momjian)
</para>
<para>
The new defaults are 4MB and 64MB respectively.
</para>
</listitem>
<listitem>
<para>
Increase the default setting of <xref
linkend="guc-effective-cache-size">
to 4GB (Bruce Momjian, Tom Lane)
</para>
</listitem>
<listitem>
<para>
Allow <function>printf</function>-style space padding to be
specified in <xref linkend="guc-log-line-prefix"> (David Rowley)
</para>
</listitem>
<listitem>
<para>
Allow terabyte units (<literal>TB</>) to be used when specifying
configuration variable values (Simon Riggs)
</para>
</listitem>
<listitem>
<para>
Show <acronym>PID</>s of lock holders and waiters and improve
information about relations in <xref linkend="guc-log-lock-waits">
log messages (Christian Kruse)
</para>
</listitem>
<listitem>
<para>
Reduce server logging level when loading shared libraries (Peter
Geoghegan)
</para>
<para>
The previous level was <literal>LOG</>, which was too verbose
for per-session libraries.
</para>
</listitem>
<listitem>
<para>
On Windows, make <literal>SQL_ASCII</>-encoded databases and server
processes (e.g., <xref linkend="app-postmaster">) emit messages in
the character encoding of the server's Windows user locale
(Alexander Law, Noah Misch)
</para>
<para>
Previously these messages were output in the Windows
<acronym>ANSI</> code page.
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Replication and Recovery</title>
<itemizedlist>
<listitem>
<para>
Add <link linkend="streaming-replication-slots">replication
slots</link> to coordinate activity on streaming standbys with the
node they are streaming from (Andres Freund, Robert Haas)
</para>
<para>
Replication slots allow preservation of resources like
<acronym>WAL</> files on the primary until they are no longer
needed by standby servers.
</para>
</listitem>
<listitem>
<para>
Add <link linkend="recovery-config"><filename>recovery.conf</></link>
parameter <xref linkend="recovery-min-apply-delay">
to delay replication (Robert Haas, Fabrízio de Royes Mello,
Simon Riggs)
</para>
<para>
Delaying replay on standby servers can be useful for recovering
from user errors.
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="recovery-target">
option <option>immediate</> to stop <link
linkend="wal"><acronym>WAL</></link> recovery as soon as a
consistent state is reached (MauMau, Heikki Linnakangas)
</para>
</listitem>
<listitem>
<para>
Improve recovery target processing (Heikki Linnakangas)
</para>
<para>
The timestamp reported
by <link linkend="functions-recovery-info-table"><function>pg_last_xact_replay_timestamp()</></link>
now reflects already-committed records, not transactions about to
be committed. Recovering to a restore point now replays the restore
point, rather than stopping just before the restore point.
</para>
</listitem>
<listitem>
<para>
<link
linkend="functions-admin-backup-table"><function>pg_switch_xlog()</></link>
now clears any unused trailing space in the old <acronym>WAL</> file
(Heikki Linnakangas)
</para>
<para>
This improves the compression ratio for <acronym>WAL</> files.
</para>
</listitem>
<listitem>
<para>
Report failure return codes from <link
linkend="archive-recovery-settings">external recovery commands</>
(Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Reduce spinlock contention during <acronym>WAL</> replay (Heikki
Linnakangas)
</para>
</listitem>
<listitem>
<para>
Write <acronym>WAL</> records of running transactions more
frequently (Andres Freund)
</para>
<para>
This allows standby servers to start faster and clean up resources
more aggressively.
</para>
</listitem>
</itemizedlist>
<sect4>
<title><link linkend="logicaldecoding">Logical Decoding</></title>
<para>
Logical decoding allows database changes to be streamed in a
configurable format. The data is read from
the <link linkend="wal"><acronym>WAL</></link> and transformed into the
desired target format. To implement this feature, the following changes
were made:
</para>
<itemizedlist>
<listitem>
<para>
Add support for <link linkend="logicaldecoding">logical decoding</>
of WAL data, to allow database changes to be streamed out in a
customizable format
(Andres Freund)
</para>
</listitem>
<listitem>
<para>
Add new <xref linkend="guc-wal-level"> setting <option>logical</>
to enable logical change-set encoding in <acronym>WAL</> (Andres
Freund)
</para>
</listitem>
<listitem>
<para>
Add table-level parameter <link
linkend="catalog-pg-class"><literal>REPLICA IDENTITY</></link>
to control logical replication (Andres Freund)
</para>
</listitem>
<listitem>
<para>
Add relation option <link
linkend="SQL-CREATETABLE-storage-parameters"><option>user_catalog_table</></link>
to identify user-created tables involved in logical change-set
encoding (Andres Freund)
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="app-pgrecvlogical"> application to receive
logical-decoding data (Andres Freund)
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="test-decoding"> module to illustrate logical
decoding at the <acronym>SQL</> level (Andres Freund)
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Queries</title>
<itemizedlist>
<listitem>
<para>
Add <link linkend="queries-tablefunctions"><literal>WITH
ORDINALITY</></link> syntax to number rows returned from
set-returning functions in the <literal>FROM</> clause
(Andrew Gierth, David Fetter)
</para>
<para>
This is particularly useful for functions like
<function>unnest()</>.
</para>
</listitem>
<listitem>
<para>
Add <link linkend="queries-tablefunctions"><literal>ROWS
FROM()</></link> syntax to allow horizontal concatenation of
set-returning functions in the <literal>FROM</> clause (Andrew Gierth)
</para>
</listitem>
<listitem>
<para>
Allow <xref linkend="SQL-SELECT"> to have
an empty target list (Tom Lane)
</para>
<para>
This was added so that views that select from a table with zero
columns can be dumped and restored correctly.
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Utility Commands</title>
<itemizedlist>
<listitem>
<para>
Add <link linkend="SQL-DISCARD"><command>DISCARD
SEQUENCES</></link> command to discard cached sequence-related state
(Fabrízio de Royes Mello, Robert Haas)
</para>
<para>
<command>DISCARD ALL</> will now also discard such information.
</para>
</listitem>
<listitem>
<para>
Add <literal>FORCE NULL</> option
to <link linkend="SQL-COPY"><command>COPY FROM</></link>, which
causes quoted strings matching the specified null string to be
converted to NULLs in <literal>CSV</> mode (Ian Barwick, Michael
Paquier)
</para>
<para>
Without this option, only unquoted matching strings will be imported
as null values.
</para>
</listitem>
<listitem>
<para>
Issue warnings for commands used outside of transaction blocks
when they can have no effect (Bruce Momjian)
</para>
<para>
New warnings are issued for <command>SET
LOCAL</>, <command>SET CONSTRAINTS</>, <command>SET TRANSACTION</> and
<command>ABORT</> when used outside a transaction block.
</para>
</listitem>
</itemizedlist>
<sect4>
<title><xref linkend="SQL-EXPLAIN"></title>
<itemizedlist>
<listitem>
<para>
Make <command>EXPLAIN ANALYZE</> show planning time (Andreas
Karlsson)
</para>
</listitem>
<listitem>
<para>
Make <command>EXPLAIN</> show the grouping columns in Agg and
Group nodes (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Make <command>EXPLAIN ANALYZE</> show exact and lossy
block counts in bitmap heap scans (Etsuro Fujita)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Views</title>
<itemizedlist>
<listitem>
<para>
Allow <link linkend="rules-materializedviews">materialized views</>
to be refreshed without blocking reads
(Kevin Grittner)
</para>
<para>
This is done with <link
linkend="SQL-REFRESHMATERIALIZEDVIEW"><command>REFRESH MATERIALIZED
VIEW CONCURRENTLY</></link>.
</para>
</listitem>
<listitem>
<para>
Allow views to be <link
linkend="SQL-CREATEVIEW-updatable-views">automatically
updated</link> even if they contain some non-updatable columns
(Dean Rasheed)
</para>
<para>
Previously the presence of non-updatable output columns such as
expressions, literals, and function calls prevented automatic
updates. Now <command>INSERT</>s, <command>UPDATE</>s and
<command>DELETE</>s are supported, provided that they do not
attempt to assign new values to any of the non-updatable columns.
</para>
</listitem>
<listitem>
<para>
Allow control over whether <command>INSERT</>s and
<command>UPDATE</>s can add rows to an auto-updatable view that
would not appear in the view (Dean Rasheed)
</para>
<para>
This is controlled with the new <xref linkend="SQL-CREATEVIEW">
clause <literal>WITH CHECK OPTION</>.
</para>
</listitem>
<listitem>
<para>
Allow <link linkend="rules-privileges">security barrier views</>
to be automatically updatable (Dean Rasheed)
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Object Manipulation</title>
<itemizedlist>
<listitem>
<para>
Support triggers on <link linkend="SQL-CREATEFOREIGNTABLE">foreign
tables</> (Ronan Dunklau)
</para>
</listitem>
<listitem>
<para>
Allow moving groups of objects from one tablespace to another
using <xref linkend="SQL-ALTERTABLESPACE"> ... <literal>MOVE</>
(Stephen Frost)
</para>
</listitem>
<listitem>
<para>
Allow changing foreign key constraint deferrability
via <xref linkend="SQL-ALTERTABLE"> ... <literal>ALTER
CONSTRAINT</> (Simon Riggs)
</para>
</listitem>
<listitem>
<para>
Reduce lock strength for some <xref linkend="SQL-ALTERTABLE">
commands
(Simon Riggs, Noah Misch, Robert Haas)
</para>
<para>
Specifically, <literal>VALIDATE CONSTRAINT</>, <literal>CLUSTER
ON</>, <literal>SET WITHOUT CLUSTER</>, <literal>ALTER COLUMN
SET STATISTICS</>, <literal>ALTER COLUMN</> <literal>SET</>
<option>(attribute_option)</>, <literal>ALTER COLUMN RESET</>
<option>(attribute_option)</> no longer require <literal>ACCESS
EXCLUSIVE</> locks.
</para>
</listitem>
<listitem>
<para>
Allow tablespace options to be set
in <xref linkend="SQL-CREATETABLESPACE"> (Vik Fearing)
</para>
<para>
Formerly these options could only be set
via <xref linkend="SQL-ALTERTABLESPACE">.
</para>
</listitem>
<listitem>
<para>
Allow <xref linkend="SQL-CREATEAGGREGATE"> to define the estimated
size of the aggregate's transition state data (Hadi Moshayedi)
</para>
<para>
Proper use of this feature allows the planner to better estimate
how much memory will be used by aggregates.
</para>
</listitem>
<listitem>
<para>
Fix <command>DROP IF EXISTS</> to avoid errors for non-existent
objects in more cases (Pavel Stehule, Dean Rasheed)
</para>
</listitem>
<listitem>
<para>
Improve how system relations are identified (Andres Freund,
Robert Haas)
</para>
<para>
Previously, relations once moved into the <literal>pg_catalog</>
schema could no longer be modified or dropped.
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Data Types</title>
<itemizedlist>
<listitem>
<para>
Fully implement the <link
linkend="datatype-line"><type>line</></link> data type (Peter
Eisentraut)
</para>
<para>
The line <emphasis>segment</> data type (<link
linkend="datatype-lseg"><type>lseg</></link>) has always been
fully supported. The previous <type>line</> data type (enabled
only via a compile-time option) is not binary or dump-compatible.
</para>
</listitem>
<listitem>
<para>
Add <link linkend="datatype-pg-lsn"><type>pg_lsn</></link>
data type to represent a <acronym>WAL</> log sequence number
(<acronym>LSN</>) (Robert Haas, Michael Paquier)
</para>
</listitem>
<listitem>
<para>
Allow single-point <link
linkend="datatype-polygon"><type>polygon</></link>s to be converted
to <link linkend="datatype-circle"><type>circle</></link>s
(Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Allow 5+ digit years for non-<acronym>ISO</> <link
linkend="datatype-datetime"><type>timestamp</></link> and
<type>date</> strings, where appropriate (Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Add checks for overflow/underflow of <link
linkend="datatype-datetime"><type>interval</></link> values
(Bruce Momjian)
</para>
</listitem>
</itemizedlist>
<sect4>
<title><link linkend="datatype-json"><acronym>JSON</></link></title>
<itemizedlist>
<listitem>
<para>
Add <link linkend="datatype-json"><type>jsonb</></link>, a more
capable and efficient data type for for storing <acronym>JSON</> data
(Oleg Bartunov, Teodor Sigaev, Alexander
Korotkov, Peter Geoghegan, Andrew Dunstan)
</para>
<para>
This new type allows faster access to values in a JSON
document and faster and more useful indexing of JSON columns.
Scalar values in <type>jsonb</> documents are stored as appropriate
scalar SQL types, and the JSON document structure is pre-parsed
rather than being stored as text as in the original <type>json</>
data type.
</para>
</listitem>
<listitem>
<para>
Add new JSON functions to allow for the construction
of arbitrarily complex JSON trees (Andrew Dunstan, Laurence Rowe)
</para>
<para>
New functions include <link
linkend="functions-json-processing-table"><function>json_array_elements_text()</></link>,
<function>json_build_array()</>, <function>json_object()</>,
<function>json_object_agg()</>, <function>json_to_record()</>,
and <function>json_to_recordset()</>.
</para>
</listitem>
<listitem>
<para>
Add <link
linkend="functions-json-processing-table"><function>json_typeof()</></link>
to return the data type of a <type>json</> value (Andrew Tipton)
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Functions</title>
<itemizedlist>
<listitem>
<para>
Add <link
linkend="functions-datetime-delay"><function>pg_sleep_for(interval)</></link>
and <function>pg_sleep_until(timestamp)</> to specify
delays more flexibly (Vik Fearing, Julien Rouhaud)
</para>
<para>
The existing <function>pg_sleep()</> function only supports delays
specified in seconds.
</para>
</listitem>
<listitem>
<para>
Add <link
linkend="array-functions-table"><function>cardinality()</></link>
function for arrays (Marko Tiikkaja)
</para>
<para>
This returns the total number of elements in the array, or zero
for an array with no elements.
</para>
</listitem>
<listitem>
<para>
Add <acronym>SQL</> functions to allow <link linkend="lo-funcs">large
object reads/writes</link> at arbitrary offsets (Pavel Stehule)
</para>
</listitem>
<listitem>
<para>
Allow <link
linkend="array-functions-table"><function>unnest()</></link>
to take multiple arguments, which are individually unnested then
horizontally concatenated (Andrew Gierth)
</para>
</listitem>
<listitem>
<para>
Add functions to construct <type>time</>s, <type>date</>s,
<type>timestamp</>s, <type>timestamptz</>s, and <type>interval</>s
from individual values, rather than strings (Pavel Stehule)
</para>
<para>
These functions' names are prefixed with <literal>make_</>,
e.g. <link linkend="functions-datetime-table"><function>make_date()</></link>.
</para>
</listitem>
<listitem>
<para>
Make <link
linkend="functions-formatting-table"><function>to_char()</></link>'s
<literal>TZ</> format specifier return a useful value for simple
numeric time zone offsets (Tom Lane)
</para>
<para>
Previously, <literal>to_char(CURRENT_TIMESTAMP, 'TZ')</> returned
an empty string if the <literal>timezone</> was set to a constant
like <literal>-4</>.
</para>
</listitem>
<listitem>
<para>
Add timezone offset format specifier <literal>OF</> to <link
linkend="functions-formatting-table"><function>to_char()</></link>
(Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Improve the random seed used for <link
linkend="functions-math-random-table"><function>random()</></link>
(Honza Horak)
</para>
</listitem>
<listitem>
<para>
Tighten validity checking for Unicode code points in <link
linkend="functions-string-other"><function>chr(int)</></link>
(Tom Lane)
</para>
<para>
This function now only accepts values that are valid UTF8 characters
according to RFC 3629.
</para>
</listitem>
</itemizedlist>
<sect4>
<title>System Information Functions</title>
<itemizedlist>
<listitem>
<para>
Add functions for looking up objects in <structname>pg_class</>,
<structname>pg_proc</>, <structname>pg_type</>, and
<structname>pg_operator</> that do not generate errors for
non-existent objects (Yugo Nagata, Nozomi Anzai,
Robert Haas)
</para>
<para>
For example, <link
linkend="functions-info-catalog-table"><function>to_regclass()</></link>
does a lookup in <structname>pg_class</> similarly to
the <type>regclass</> input function, but it returns NULL for a
non-existent object instead of failing.
</para>
</listitem>
<listitem>
<para>
Add function <link
linkend="functions-admin-dblocation"><function>pg_filenode_relation()</></link>
to allow for more efficient lookup of relation names from filenodes
(Andres Freund)
</para>
</listitem>
<listitem>
<para>
Add <structfield>parameter_default</> column to <link
linkend="infoschema-parameters"><structname>information_schema.parameters</></link>
view (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Make <link
linkend="infoschema-schemata"><structname>information_schema.schemata</></link>
show all accessible schemas (Peter Eisentraut)
</para>
<para>
Previously it only showed schemas owned by the current user.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title>Aggregates</title>
<itemizedlist>
<listitem>
<para>
Add control over which rows are passed
into aggregate functions using the <link
linkend="syntax-aggregates"><literal>FILTER</></link> clause
(David Fetter)
</para>
</listitem>
<listitem>
<para>
Support ordered-set (<link
linkend="syntax-aggregates"><literal>WITHIN GROUP</></link>)
aggregates (Atri Sharma, Andrew Gierth, Tom Lane)
</para>
</listitem>
<listitem>
<para>
Add aggregates <link
linkend="functions-orderedset-table"><function>percentile_cont()</></link>,
<function>percentile_disc()</>, <function>mode()</>, <link
linkend="functions-hypothetical-table"><function>rank()</></link>,
<function>dense_rank()</>, <function>percent_rank()</>, and
<function>cume_dist()</>
(Atri Sharma, Andrew Gierth)
</para>
</listitem>
<listitem>
<para>
Support <link
linkend="xfunc-sql-variadic-functions"><literal>VARIADIC</></link>
aggregate functions (Tom Lane)
</para>
</listitem>
<listitem>
<para>
Allow polymorphic aggregates to have non-polymorphic state data
types (Tom Lane)
</para>
<para>
This allows proper declaration of aggregates like the built-in
aggregate <function>array_agg()</> in SQL.
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Server-Side Languages</title>
<itemizedlist>
<listitem>
<para>
Add event trigger support to <link linkend="plperl">PL/Perl</>
and <link linkend="pltcl">PL/Tcl</> (Dimitri Fontaine)
</para>
</listitem>
<listitem>
<para>
Convert <link linkend="datatype-numeric"><type>numeric</></link>
values to <type>decimal</> in <link linkend="plpython">PL/Python</link>
(Szymon Guz, Ronan Dunklau)
</para>
<para>
Previously such values were converted to Python <type>float</> values,
risking loss of precision.
</para>
</listitem>
</itemizedlist>
<sect4>
<title><link linkend="plpgsql">PL/pgSQL</link> Server-Side Language</title>
<itemizedlist>
<listitem>
<para>
Add ability to store the PL/PgSQL
call stack into a variable using <link
linkend="plpgsql-get-diagnostics-context"><literal>PG_CONTEXT</></link>
(Pavel Stehule, Stephen Frost)
</para>
</listitem>
<listitem>
<para>
Add option <link
linkend="plpgsql-statements-assignment"><option>print_strict_params</></link>
to output parameters passed to queries generating <link
linkend="plpgsql-statements-sql-onerow"><literal>STRICT</></link>
errors (Marko Tiikkaja)
</para>
</listitem>
<listitem>
<para>
Add variables <link
linkend="plpgsql-extra-checks"><varname>plpgsql.extra_warnings</></link>
and <varname>plpgsql.extra_errors</> to enable additional PL/pgSQL
warnings and errors (Marko Tiikkaja, Petr Jelinek)
</para>
<para>
Currently only shadowed variable errors/warnings are available.
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title><link linkend="libpq"><application>libpq</></link></title>
<itemizedlist>
<listitem>
<para>
Add libpq function <link
linkend="libpq-pqhostaddr"><function>PQhostaddr()</></link>
to return the server's <acronym>IP</> address (Fujii Masao)
</para>
</listitem>
<listitem>
<para>
Make libpq's <link
linkend="libpq-pqconndefaults"><function>PQconndefaults()</></link>
function ignore invalid service files (Steve Singer, Bruce Momjian)
</para>
<para>
Previously it returned NULL if an incorrect service file was
encountered.
</para>
</listitem>
<listitem>
<para>
Accept <acronym>TLS</> protocol versions beyond <literal>TLSv1</>
in libpq (Marko Kreen)
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Client Applications</title>
<itemizedlist>
<listitem>
<para>
Add <xref linkend="APP-CREATEUSER"> option <option>-g</>
to specify role membership (Chistopher Browne)
</para>
</listitem>
<listitem>
<para>
Add <xref linkend="APP-VACUUMDB">
option <option>--analyze-in-stages</> to analyze in stages of
increasing granularity (Peter Eisentraut)
</para>
<para>
This allows minimal statistics to be created quickly.
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="APP-PGRESETXLOG"> with option <option>-n</>
output current and potentially changed values (Rajeev Rastogi)
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="app-initdb"> throw error for incorrect locale
settings, rather than silently falling back to a default choice
(Tom Lane)
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="app-pg-ctl"> return exit code <literal>4</> for
an inaccessible data directory (Amit Kapila, Bruce Momjian)
</para>
<para>
This behavior more closely matches the Linux Standard Base
(<acronym>LSB</>) Core Specification.
</para>
</listitem>
<listitem>
<para>
On Windows, ensure that a non-absolute <option>-D</> path
specification is interpreted relative
to <xref linkend="app-pg-ctl">'s current directory
(Kumar Rajeev Rastogi)
</para>
<para>
Previously it would be interpreted relative to whichever directory
the underlying Windows service was started in.
</para>
</listitem>
<listitem>
<para>
Allow <function>sizeof()</> in <link linkend="ecpg">ECPG</link>
C array definitions (Michael Meskes)
</para>
</listitem>
<listitem>
<para>
Make <link linkend="ecpg">ECPG</link> properly handle nesting
of C-style comments in both C and <acronym>SQL</> text
(Michael Meskes)
</para>
</listitem>
</itemizedlist>
<sect4>
<title><xref linkend="APP-PSQL"></title>
<itemizedlist>
<listitem>
<para>
Suppress <quote>No rows</quote> output in <application>psql</> <link
linkend="APP-PSQL-meta-commands"><option>expanded</></link>
mode when the footer is disabled (Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Allow Control-C to abort <application>psql</> when hung at connection
startup (Peter Eisentraut)
</para>
</listitem>
</itemizedlist>
<sect5>
<title><link linkend="APP-PSQL-meta-commands">Backslash Commands</link></title>
<itemizedlist>
<listitem>
<para>
Make <application>psql</> <command>\db+</> show tablespace options
(Magnus Hagander)
</para>
</listitem>
<listitem>
<para>
Make <application>psql</> <command>\do+</> display the functions
which implement the operators (Marko Tiikkaja)
</para>
</listitem>
<listitem>
<para>
Make <application>psql</> <command>\d+</> output an
<literal>OID</> line only if an <literal>oid</literal> column
exists in a table (Bruce Momjian)
</para>
<para>
Previously, the presence or absence of an <literal>oid</literal>
column was always reported.
</para>
</listitem>
<listitem>
<para>
Make <command>\d</> show disabled system triggers (Bruce
Momjian)
</para>
<para>
Previously, if you disabled all triggers, only user triggers
would show as disabled.
</para>
</listitem>
<listitem>
<para>
Fix <application>psql</> <command>\copy</> to no longer require
a space between <literal>stdin</> and a semicolon (Etsuro Fujita)
</para>
</listitem>
<listitem>
<para>
Output the row count at the end
of <application>psql</> <command>\copy</> just
like <xref linkend="SQL-COPY"> (Kumar Rajeev Rastogi)
</para>
</listitem>
<listitem>
<para>
Fix <application>psql</> <command>\conninfo</> to display the
server's <acronym>IP</> address for clients that connect using
<literal>hostaddr</> (Fujii Masao)
</para>
<para>
Previously <command>\conninfo</> could not display the server's
<acronym>IP</> address in such cases.
</para>
</listitem>
<listitem>
<para>
Mention the <acronym>SSL</> protocol version in
<application>psql</>'s <command>\conninfo</> (Marko Kreen)
</para>
</listitem>
<listitem>
<para>
Add <application>psql</> tab completion for <command>\pset</>
(Pavel Stehule)
</para>
</listitem>
<listitem>
<para>
Allow <application>psql</> <command>\pset</> with no arguments
to show all settings (Gilles Darold)
</para>
</listitem>
<listitem>
<para>
In <application>psql</>, display the history file name written by
<command>\s</> without converting it to an absolute path (Tom Lane)
</para>
<para>
The code previously attempted to convert a relative file name to
an absolute path for display, but frequently got it wrong.
</para>
</listitem>
</itemizedlist>
</sect5>
</sect4>
<sect4>
<title><xref linkend="APP-PGDUMP"></title>
<itemizedlist>
<listitem>
<para>
Allow <xref linkend="APP-PGRESTORE"> options
<option>-I</>, <option>-P</>, <option>-T</> and <option>-n</>
to be specified multiple times (Heikki Linnakangas)
</para>
<para>
This allows multiple objects to be restored in one operation.
</para>
</listitem>
<listitem>
<para>
Optionally add <literal>IF EXISTS</> clauses to the <command>DROP</>
commands emitted when removing old objects during a restore (Pavel
Stehule)
</para>
<para>
This change prevents unnecessary errors when removing old objects.
The new <option>--if-exists</> option
for <xref linkend="APP-PGDUMP">, <xref linkend="APP-PG-DUMPALL">,
and <xref linkend="APP-PGRESTORE"> is only available
when <option>--clean</> is also specified.
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title><xref linkend="app-pgbasebackup"></title>
<itemizedlist>
<listitem>
<para>
Add <application>pg_basebackup</> option <option>--xlogdir</>
to specify the <filename>pg_xlog</> directory location (Haribabu
Kommi)
</para>
</listitem>
<listitem>
<para>
Allow <application>pg_basebackup</> to relocate tablespaces in
the backup copy (Steeve Lennmark)
</para>
<para>
This is particularly useful for using <application>pg_basebackup</>
on the same machine as the primary.
</para>
</listitem>
<listitem>
<para>
Allow network-stream base backups to be throttled (Antonin Houska)
</para>
<para>
This can be controlled with the <application>pg_basebackup</>
<option>--max-rate</> parameter.
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3>
<title>Source Code</title>
<itemizedlist>
<listitem>
<para>
Improve the way tuples are frozen to preserve forensic information
(Robert Haas, Andres Freund)
</para>
<para>
This change removes the main objection to freezing tuples as soon
as possible. Code that inspects tuple flag bits will need to be
modified.
</para>
</listitem>
<listitem>
<para>
No longer require function prototypes for functions marked with the
<link linkend="xfunc-c"><function>PG_FUNCTION_INFO_V1</></link>
macro (Peter Eisentraut)
</para>
<para>
This change eliminates the need to write boilerplate prototypes.
Note that the <function>PG_FUNCTION_INFO_V1</> macro must appear
before the corresponding function definition to avoid compiler
warnings.
</para>
</listitem>
<listitem>
<para>
Remove <varname>SnapshotNow</> and
<function>HeapTupleSatisfiesNow()</> (Robert Haas)
</para>
<para>
All existing uses have been switched to more appropriate snapshot
types. Catalog scans now use <acronym>MVCC</> snapshots.
</para>
</listitem>
<listitem>
<para>
Add an <acronym>API</> to allow memory allocations over one gigabyte
(Noah Misch)
</para>
</listitem>
<listitem>
<para>
Add <function>psprintf()</> to simplify memory allocation during
string composition (Peter Eisentraut, Tom Lane)
</para>
</listitem>
<listitem>
<para>
Support <function>printf()</> size modifier <literal>z</> to
print <type>size_t</> values (Andres Freund)
</para>
</listitem>
<listitem>
<para>
Change <acronym>API</> of <function>appendStringInfoVA()</>
to better use <function>vsnprintf()</> (David Rowley, Tom Lane)
</para>
</listitem>
<listitem>
<para>
Allow new types of external toast datums to be created (Andres
Freund)
</para>
</listitem>
<listitem>
<para>
Add single-reader, single-writer, lightweight shared message queue
(Robert Haas)
</para>
</listitem>
<listitem>
<para>
Improve spinlock speed on x86_64 <acronym>CPU</>s (Heikki
Linnakangas)
</para>
</listitem>
<listitem>
<para>
Remove spinlock support for unsupported platforms
<productname>SINIX</>, <productname>Sun3</>, and
<productname>NS32K</> (Robert Haas)
</para>
</listitem>
<listitem>
<para>
Remove <acronym>IRIX</> port (Robert Haas)
</para>
</listitem>
<listitem>
<para>
Reduce the number of semaphores required by
<option>--disable-spinlocks</> builds (Robert Haas)
</para>
</listitem>
<listitem>
<para>
Rewrite <application>duplicate_oids</> Unix shell script in
<application>Perl</> (Andrew Dunstan)
</para>
</listitem>
<listitem>
<para>
Add Test Anything Protocol (<acronym>TAP</>) tests for client
programs (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Add make targets <option>check-tests</> and
<option>installcheck-tests</>, which allow selection of individual
tests to be run (Andrew Dunstan)
</para>
</listitem>
<listitem>
<para>
Remove <option>maintainer-check</> makefile rule (Peter Eisentraut)
</para>
<para>
The default build rules now include all the formerly-optional tests.
</para>
</listitem>
<listitem>
<para>
Improve support for <envar>VPATH</> builds of <acronym>PGXS</>
modules (Cédric Villemain, Andrew Dunstan)
</para>
</listitem>
<listitem>
<para>
Upgrade to Autoconf 2.69 (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Add a <application>configure</> flag that appends custom text to the
<envar>PG_VERSION</> string (Oskari Saarenmaa)
</para>
<para>
This is useful for packagers building custom binaries.
</para>
</listitem>
<listitem>
<para>
Improve DocBook <acronym>XML</> validity (Peter Eisentraut)
</para>
</listitem>
<listitem>
<para>
Various minor security and sanity fixes reported by the
<productname>Coverity</> scanner (Stephen Frost)
</para>
</listitem>
<listitem>
<para>
Improve <application>Valgrind</> detection of invalid memory usage
(Noah Misch)
</para>
</listitem>
<listitem>
<para>
Improve sample <application>Emacs</> configuration file
<filename>emacs.samples</> (Peter Eisentraut)
</para>
<para>
Also add <filename>.dir-locals.el</> to the top of the source tree.
</para>
</listitem>
<listitem>
<para>
Allow <application>pgindent</> to accept a command-line list
of typedefs (Bruce Momjian)
</para>
<para>
<application>pgindent</> is also now smarter about blank lines
around preprocessor conditionals.
</para>
</listitem>
<listitem>
<para>
Avoid most uses of <command>dlltool</command>
in <productname>Cygwin</> and
<productname>Mingw</> builds (Marco Atzeri, Hiroshi Inoue)
</para>
</listitem>
<listitem>
<para>
Support client-only installs in <acronym>MSVC</> (Windows) builds
(MauMau)
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Additional Modules</title>
<itemizedlist>
<listitem>
<para>
Add <xref linkend="pgprewarm"> extension to preload relation data
into the shared buffer cache at server start (Robert Haas)
</para>
<para>
This allows reaching full operating performance more quickly.
</para>
</listitem>
<listitem>
<para>
Add <acronym>UUID</> random number generator
<function>gen_random_uuid()</> to <xref linkend="pgcrypto">
(Oskari Saarenmaa)
</para>
<para>
This allows creation of version 4 <acronym>UUID</>s without
requiring installation of <xref linkend="uuid-ossp">.
</para>
</listitem>
<listitem>
<para>
Allow <xref linkend="uuid-ossp"> to work with
the <systemitem>BSD</> or <systemitem>e2fsprogs</> UUID libraries,
not only the <systemitem>OSSP</> UUID library (Matteo Beccati)
</para>
<para>
This improves the <application>uuid-ossp</> module's portability
since it no longer has to have the increasingly-obsolete OSSP
library. The module's name is now rather a misnomer, but we won't
change it.
</para>
</listitem>
<listitem>
<para>
Add option to <xref linkend="auto-explain"> to include trigger
execution time (Horiguchi Kyotaro)
</para>
</listitem>
<listitem>
<para>
Fix <xref linkend="pgstattuple"> to not report rows from
uncommitted transactions as dead (Robert Haas)
</para>
</listitem>
<listitem>
<para>
Make <xref linkend="pgstattuple"> functions
use <type>regclass</type>-type arguments (Satoshi Nagayasu)
</para>
<para>
While <type>text</type>-type arguments are still supported, they
may be removed in a future major release.
</para>
</listitem>
<listitem>
<para>
Improve consistency of <xref linkend="pgrowlocks"> output to honor
snapshot rules more consistently (Robert Haas)
</para>
</listitem>
<listitem>
<para>
Improve <xref linkend="pgtrgm">'s choice of trigrams for indexed
regular expression searches by discouraging the selection of
trigrams containing whitespace (Alexander Korotkov)
</para>
</listitem>
<listitem>
<para>
Allow <xref linkend="pgxlogdump"> to report a live log stream
with <option>--follow</> (Heikki Linnakangas)
</para>
</listitem>
<listitem>
<para>
Store <xref linkend="cube"> data more compactly (Stas Kelvich)
</para>
<para>
Existing data must be dumped/restored to use the new format.
The old format can still be read.
</para>
</listitem>
<listitem>
<para>
Reduce <xref linkend="vacuumlo"> client-side memory usage by using
a cursor (Andrew Dunstan)
</para>
</listitem>
<listitem>
<para>
Dramatically reduce memory consumption
in <xref linkend="pgupgrade"> (Bruce Momjian)
</para>
</listitem>
<listitem>
<para>
Pass <xref linkend="pgupgrade"> user name (<option>-U</> option) to
analyze scripts (Bruce Momjian)
</para>
</listitem>
</itemizedlist>
<sect4>
<title><xref linkend="pgbench"></title>
<itemizedlist>
<listitem>
<para>
Remove line length limit for <application>pgbench</> scripts (Sawada
Masahiko)
</para>
<para>
The previous line limit was <envar>BUFSIZ</>.
</para>
</listitem>
<listitem>
<para>
Add long option names to <application>pgbench</> (Fabien Coelho)
</para>
</listitem>
<listitem>
<para>
Add <application>pgbench</> option <option>--rate</> to control
the transaction rate (Fabien Coelho)
</para>
</listitem>
<listitem>
<para>
Add <application>pgbench</> option <option>--progress</> to
print periodic progress reports
(Fabien Coelho)
</para>
</listitem>
</itemizedlist>
</sect4>
<sect4>
<title><xref linkend="pgstatstatements"></title>
<itemizedlist>
<listitem>
<para>
Make <application>pg_stat_statements</> use a file, rather than
shared memory, for query text storage (Peter Geoghegan)
</para>
<para>
This removes the previous limitation on query text length, and
allows a higher number of unique statements to be tracked by default.
</para>
</listitem>
<listitem>
<para>
Allow reporting of <application>pg_stat_statements</>'s internal
query hash identifier (Daniel Farina, Sameer Thakur, Peter
Geoghegan)
</para>
</listitem>
<listitem>
<para>
Add the ability to retrieve all <application>pg_stat_statements</>
information except the query text (Peter Geoghegan)
</para>
<para>
This allows monitoring tools to only fetch query text for newly
created entries, improving performance for repeated querying of the
statistics.
</para>
</listitem>
<listitem>
<para>
Save the statistics file into <filename>$PGDATA/pg_stat</> at server
shutdown, rather than <filename>$PGDATA/global</> (Fujii Masao)
</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
</sect2>
</sect1>