Release date: 2016-10-27
This release contains a variety of fixes from 9.6.0. For information about new features in the 9.6 major release, see Section E.21.
A dump/restore is not required for those running 9.6.X.
However, if your installation has been affected by the bugs described in the first two changelog entries below, then after updating you may need to take action to repair corrupted free space maps and/or visibility maps.
Fix WAL-logging of truncation of relation free space maps and visibility maps (Pavan Deolasee, Heikki Linnakangas)
It was possible for these files to not be correctly
restored during crash recovery, or to be written
incorrectly on a standby server. Bogus entries in a free
space map could lead to attempts to access pages that
have been truncated away from the relation itself,
typically producing errors like “could not read block
XXX: read only
0 of 8192 bytes”. Checksum failures in the
visibility map are also possible, if checksumming is
Procedures for determining whether there is a problem and repairing it if so are discussed at https://wiki.postgresql.org/wiki/Free_Space_Map_Problems.
Fix possible data corruption when pg_upgrade rewrites a relation visibility map into 9.6 format (Tom Lane)
On big-endian machines, bytes of the new visibility map were written in the wrong order, leading to a completely incorrect map. On Windows, the old map was read using text mode, leading to incorrect results if the map happened to contain consecutive bytes that matched a carriage return/line feed sequence. The latter error would almost always lead to a pg_upgrade failure due to the map file appearing to be the wrong length.
If you are using a big-endian machine (many non-Intel
architectures are big-endian) and have used pg_upgrade to upgrade from a pre-9.6
release, you should assume that all visibility maps are
incorrect and need to be regenerated. It is sufficient to
truncate each relation's visibility map with
For more information see https://wiki.postgresql.org/wiki/Visibility_Map_Problems.
Don't throw serialization errors for self-conflicting
INSERT ... ON
CONFLICT (Thomas Munro, Peter Geoghegan)
Fix use-after-free hazard in execution of aggregate
This could lead to a crash or incorrect query results.
Fix incorrect handling of polymorphic aggregates used as window functions (Tom Lane)
The aggregate's transition function was told that its first argument and result were of the aggregate's output type, rather than the state type. This led to errors or crashes with polymorphic transition functions.
COPY with a column
name list from a table that has row-level security
enabled (Adam Brightwell)
EXPLAIN to emit valid
XML when track_io_timing
is on (Markus Winand)
Previously the XML output-format option produced
syntactically invalid tags such as
<I/O-Read-Time>. That is now
Fix statistics update for
TRUNCATE in a prepared transaction (Stas
Fix bugs in merging inherited
CHECK constraints while creating or
altering a table (Tom Lane, Amit Langote)
constraints to be added to a parent and child table in
either order. Prevent merging of a valid constraint from
the parent table with a
VALID constraint on the child. Likewise, prevent
merging of a
child constraint with an inherited constraint.
Show a sensible value in
max_wal_size (Tom Lane)
Fix replacement of array elements in
jsonb_set() (Tom Lane)
If the target is an existing JSON array element, it got deleted instead of being replaced with a new value.
Avoid very-low-probability data corruption due to testing tuple visibility without holding buffer lock (Thomas Munro, Peter Geoghegan, Tom Lane)
Preserve commit timestamps across server restart (Julien Rouhaud, Craig Ringer)
With track_commit_timestamp turned on, old commit timestamps became inaccessible after a clean server restart.
Fix logical WAL decoding to work properly when a subtransaction's WAL output is large enough to spill to disk (Andres Freund)
Fix dangling-pointer problem in logical WAL decoding (Stas Kelvich)
Round shared-memory allocation request to a multiple of the actual huge page size when attempting to use huge pages on Linux (Tom Lane)
This avoids possible failures during
munmap() on systems with atypical
default huge page sizes. Except in crash-recovery cases,
there were no ill effects other than a log message.
Don't try to share SSL contexts across multiple connections in libpq (Heikki Linnakangas)
This led to assorted corner-case bugs, particularly when trying to use different SSL parameters for different connections.
Avoid corner-case memory leak in libpq (Tom Lane)
The reported problem involved leaking an error report
PQreset(), but there
might be related cases.
In pg_upgrade, check library loadability in name order (Tom Lane)
This is a workaround to deal with cross-extension dependencies from language transform modules to their base language and data type modules.
Fix pg_upgrade to work correctly for extensions containing index access methods (Tom Lane)
To allow this, the server has been extended to support
ALTER EXTENSION ADD/DROP ACCESS
METHOD. That functionality should have been
included in the original patch to support dynamic
creation of access methods, but it was overlooked.
Improve error reporting in pg_upgrade's file copying/linking/rewriting steps (Tom Lane, Álvaro Herrera)
Fix pg_dump to work against pre-7.4 servers (Amit Langote, Tom Lane)
Disallow specifying both
--source-target options to pg_rewind (Michael Banck)
Make pg_rewind turn
its session on the source server (Michael Banck, Michael
This allows pg_rewind to work even when the source server is using synchronous replication that is not working for some reason.
In pg_xlogdump, retry
opening new WAL segments when using
--follow option (Magnus Hagander)
This allows for a possible delay in the server's creation of the next segment.
contrib/pg_visibility to report the
correct TID for a corrupt tuple that has been the subject
of a rolled-back update (Tom Lane)
Fix makefile dependencies so that parallel make of PL/Python by itself will succeed reliably (Pavel Raiskup)
Update time zone data files to tzdata release 2016h for DST law changes in Palestine and Turkey, plus historical corrections for Turkey and some regions of Russia. Switch to numeric abbreviations for some time zones in Antarctica, the former Soviet Union, and Sri Lanka.
The IANA time zone database previously provided
textual abbreviations for all time zones, sometimes
making up abbreviations that have little or no currency
among the local population. They are in process of
reversing that policy in favor of using numeric UTC
offsets in zones where there is no evidence of real-world
use of an English abbreviation. At least for the time
being, PostgreSQL will
continue to accept such removed abbreviations for
timestamp input. But they will not be shown in the
nor used for output.
In this update,
AMT is no
longer shown as being in use to mean Armenia Time.
Therefore, we have changed the
Default abbreviation set to interpret it
as Amazon Time, thus UTC-4 not UTC+4.
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.