Throw an error if a tuple to be updated or deleted has already
been updated or deleted by a BEFORE
trigger (Kevin Grittner)

Formerly, the originally-intended update was silently skipped,
resulting in logical inconsistency since the trigger might have
propagated data to other places based on the intended update. Now
an error is thrown to prevent the inconsistent results from being
committed. If this change affects your application, the best
solution is usually to move the data-propagation actions to an
AFTER trigger.

This error will also be thrown if a query invokes a volatile
function that modifies rows that are later modified by the query
itself. Such cases likewise previously resulted in silently
skipping updates.

Change multicolumn ON UPDATE SET NULL/SET DEFAULT foreign key
actions to affect all columns of the constraint, not just those
changed in the UPDATE (Tom Lane)

Previously, we would set only those referencing columns that
correspond to referenced columns that were changed by the
UPDATE. This was what was required by
SQL-92, but more recent editions of the SQL standard specify the
new behavior.

Force cached plans to be replanned if the search_path changes (Tom Lane)

Previously, cached plans already generated in the current
session were not redone if the query was re-executed with a new
search_path setting, resulting in
surprising behavior.

Fix to_number() to properly handle a period used
as a thousands separator (Tom Lane)

Previously, a period was considered to be a decimal point even
when the locale says it isn't and the D
format code is used to specify use of the locale-specific decimal
point. This resulted in wrong answers if FM format was also used.

This change improves concurrency and reduces the probability of
deadlocks when updating tables involved in a foreign-key
constraint. UPDATEs that do not change any
columns referenced in a foreign key now take the new NO KEY UPDATE lock mode on the row, while foreign
key checks use the new KEY SHARE lock
mode, which does not conflict with NO KEY
UPDATE. So there is no blocking unless a foreign-key column is
changed.

Add configuration variable lock_timeout to allow limiting how long a
session will wait to acquire any one lock (Zoltán Böszörményi)

This information is useful for determining which WAL files are needed for restore.

Allow tools like pg_receivexlog to run on computers with
different architectures (Heikki Linnakangas)

WAL files can still only be replayed on servers with the same
architecture as the primary; but they can now be transmitted to and
stored on machines of any architecture, since the streaming
replication protocol is now machine-independent.

This allows clients to retrieve table, column, data type, or
constraint name error details. Previously such information had to
be extracted from error strings. Client library support is required
to access these fields.

Unlike ordinary views, where the base tables are read on every
access, materialized views create physical tables at creation or
refresh time. Access to the materialized view then reads from its
physical table. There is not yet any facility for incrementally
refreshing materialized views or auto-accessing them via base table
access.

Table and column renamings can produce cases where, if we merely
substitute the new name into the original text of a rule or view,
the result is ambiguous. This change fixes the rule-dumping code to
insert manufactured table and column aliases when needed to
preserve the original semantics.

At the end of any failed subtransaction, the core SPI code now
releases any SPI tuple tables that were created during that
subtransaction. This avoids the need for SPI-using code to keep
track of such tuple tables and release them manually in
error-recovery code. Failure to do so caused a number of
transaction-lifespan memory leakage issues in PL/pgSQL and perhaps
other SPI clients. SPI_freetuptable() now protects itself
against multiple freeing requests, so any existing code that did
take care to clean up shouldn't be broken by this change.

Allow SPI functions to access
the number of rows processed by COPY (Pavel Stehule)

On a platform that does not have the wcstombs() or towlower()
library functions, this could result in an incompatible change in
the contents of pg_trgm indexes
for non-ASCII data. In such cases, REINDEX
those indexes to ensure correct search results.

Add a pgstattuple function to
report the size of the pending-insertions list of a GIN index (Fujii Masao)

Create a dedicated foreign data wrapper, with its own option
validator function, for dblink (Shigeru
Hanada)

When using this FDW to define the target of a dblink connection, instead of using a
hard-wired list of connection options, the underlying libpq library is consulted to see what
connection options it supports.

Submit correction

If you see anything in the documentation that is not correct, does not match
your experience with the particular feature or requires further clarification,
please use
this form
to report a documentation issue.