↑↓ select ↵ open ⌫ change scope Open full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

DocumentationVersion comparison

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.6.1 release changes

All features, fixes, and compatibility notes in this release, with related records from other versions.

All changes in this release
All changes in this release

Includes changes after the source version through the target. A major version name means its initial release.

From PostgreSQL 9.0 onward: 17 major branches and 352 release notes. Updated 2026-09-26.

Complete release changes

9.6.1

2016-10-27

Export JSON
28changesFeatures, fixes, improvements
1releaseGrouped by release
0CVEsVulnerability IDs mentioned in these notes

9.6.1 HistoricalSupport ends 2021-11-11

PostgreSQL 9.6.1

Migration and compatibility

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.

Bug fixesFix WAL-logging of truncation of relation free space maps and visibility maps

Changes

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 enabled.

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.

Related records (3)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix possible data corruption when pg_upgrade rewrites a relation visibility map into 9.6 format

Changes

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 contrib/pg_visibility's pg_truncate_visibility_map() function. For more information see https://wiki.postgresql.org/wiki/Visibility_Map_Problems.

ImprovementsDon't throw serialization errors for self-conflicting insertions in INSERT ... ON CONFLICT

Changes

Don't throw serialization errors for self-conflicting insertions in INSERT ... ON CONFLICT (Thomas Munro, Peter Geoghegan)

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix use-after-free hazard in execution of aggregate functions using DISTINCT

Changes

Fix use-after-free hazard in execution of aggregate functions using DISTINCT (Peter Geoghegan)

This could lead to a crash or incorrect query results.

Bug fixesFix incorrect handling of polymorphic aggregates used as window functions

Changes

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.

Bug fixesFix COPY with a column name list from a table that has row-level security enabled

Changes

Fix COPY with a column name list from a table that has row-level security enabled (Adam Brightwell)

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix EXPLAIN to emit valid XML when track_io_timing is on

Changes

Fix 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 rendered as <I-O-Read-Time>.

Related records (4)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix statistics update for TRUNCATE in a prepared transaction

Changes

Fix statistics update for TRUNCATE in a prepared transaction (Stas Kelvich)

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix bugs in merging inherited CHECK constraints while creating or altering a table

Changes

Fix bugs in merging inherited CHECK constraints while creating or altering a table (Tom Lane, Amit Langote)

Allow identical CHECK 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 NOT VALID constraint on the child. Likewise, prevent merging of a NO INHERIT child constraint with an inherited constraint.

Related records (4)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsShow a sensible value in pg_settings.unit for min_wal_size and max_wal_size

Changes

Show a sensible value in pg_settings.unit for min_wal_size and max_wal_size (Tom Lane)

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix replacement of array elements in jsonb_set()

Changes

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.

Bug fixesAvoid very-low-probability data corruption due to testing tuple visibility without holding buffer lock

Changes

Avoid very-low-probability data corruption due to testing tuple visibility without holding buffer lock (Thomas Munro, Peter Geoghegan, Tom Lane)

Related records (5)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsPreserve commit timestamps across server restart

Changes

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.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix logical WAL decoding to work properly when a subtransaction's WAL output is large enough to spill to disk

Changes

Fix logical WAL decoding to work properly when a subtransaction's WAL output is large enough to spill to disk (Andres Freund)

Related records (2)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix dangling-pointer problem in logical WAL decoding

Changes

Fix dangling-pointer problem in logical WAL decoding (Stas Kelvich)

ImprovementsRound shared-memory allocation request to a multiple of the actual huge page size when attempting to use huge pages on Linux

Changes

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.

Related records (2)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsDon't try to share SSL contexts across multiple connections in libpq

Changes

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.

Related records (5)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesAvoid corner-case memory leak in libpq

Changes

Avoid corner-case memory leak in libpq (Tom Lane)

The reported problem involved leaking an error report during PQreset(), but there might be related cases.

Related records (5)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsIn pg_upgrade, check library loadability in name order

Changes

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.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix pg_upgrade to work correctly for extensions containing index access methods

Changes

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.

ImprovementsImprove error reporting in pg_upgrade's file copying/linking/rewriting steps

Changes

Improve error reporting in pg_upgrade's file copying/linking/rewriting steps (Tom Lane, Álvaro Herrera)

Bug fixesFix pg_dump to work against pre-7.4 servers

Changes

Fix pg_dump to work against pre-7.4 servers (Amit Langote, Tom Lane)

ImprovementsDisallow specifying both --source-server and --source-target options to pg_rewind

Changes

Disallow specifying both --source-server and --source-target options to pg_rewind (Michael Banck)

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsMake pg_rewind turn off synchronous_commit in its session on the source server

Changes

Make pg_rewind turn off synchronous_commit in its session on the source server (Michael Banck, Michael Paquier)

This allows pg_rewind to work even when the source server is using synchronous replication that is not working for some reason.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

ImprovementsIn pg_xlogdump, retry opening new WAL segments when using --follow option

Changes

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.

Related records (3)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

Bug fixesFix contrib/pg_visibility to report the correct TID for a corrupt tuple that has been the subject of a rolled-back update

Changes

Fix contrib/pg_visibility to report the correct TID for a corrupt tuple that has been the subject of a rolled-back update (Tom Lane)

Bug fixesFix makefile dependencies so that parallel make of PL/Python by itself will succeed reliably

Changes

Fix makefile dependencies so that parallel make of PL/Python by itself will succeed reliably (Pavel Raiskup)

ImprovementsUpdate 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.

Changes

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 pg_timezone_names view 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.

Related records (5)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

How is this comparison generated?

The comparison follows PostgreSQL release notes from just after the source through the target version. For a major upgrade, maintenance releases from each older branch are included only up to the next major release date, and never after the target date. A major version such as 18 means its initial release, 18.0. Previews and development snapshots are labeled separately.

Entries come from the original English manuals. Release coverage and commit evidence are verified against upstream sources. Every entry retains its complete explanation and source link. Categories aid browsing; read the full notes for impact, conditions, and migration steps.

Fixes can be backported to several branches. Confirmed duplicates are merged conservatively, with every branch explanation retained. A note describing several independent fixes is excluded only when all are already present in the source. Major-release features remain distinct from related maintenance patches unless their complete original descriptions match. Uncertain matches are retained. This is a release-note history, not an exhaustive comparison of compiled binaries.

CVE results are calculated independently from the PostgreSQL security registry and vulnerability records. A CVE counts as gained protection only when the source is affected and the target is fixed or unaffected. Remaining vulnerabilities are listed separately. Security entries and distinct CVEs are counted separately.

Interaction inspired by pgversions.com and pgversionreport. Content comes from PostgreSQL release notes. See the release notes archive.