↑↓ 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.3.2 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.3.2

2013-12-05

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

9.3.2 HistoricalSupport ends 2018-11-08

PostgreSQL 9.3.2

Migration and compatibility

A dump/restore is not required for those running 9.3.X.

However, this release corrects a number of potential data corruption issues. See the first three changelog entries below to find out whether your installation has been affected and what steps you can take if so.

Also, if you are upgrading from a version earlier than 9.3.1, see Section E.25.

Bug fixesFix VACUUM's tests to see whether it can update relfrozenxid

Changes

Fix VACUUM's tests to see whether it can update relfrozenxid (Andres Freund)

In some cases VACUUM (either manual or autovacuum) could incorrectly advance a table's relfrozenxid value, allowing tuples to escape freezing, causing those rows to become invisible once 2^31 transactions have elapsed. The probability of data loss is fairly low since multiple incorrect advancements would need to happen before actual loss occurs, but it's not zero. In 9.2.0 and later, the probability of loss is higher, and it's also possible to get "could not access status of transaction" errors as a consequence of this bug. Users upgrading from releases 9.0.4 or 8.4.8 or earlier are not affected, but all later versions contain the bug.

The issue can be ameliorated by, after upgrading, vacuuming all tables in all databases while having vacuum_freeze_table_age set to zero. This will fix any latent corruption but will not be able to fix all pre-existing data errors. However, an installation can be presumed safe after performing this vacuuming if it has executed fewer than 2^31 update transactions in its lifetime (check this with SELECT txid_current() < 2^31).

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 multiple bugs in MultiXactId freezing

Changes

Fix multiple bugs in MultiXactId freezing (Andres Freund, Álvaro Herrera)

These bugs could lead to "could not access status of transaction" errors, or to duplicate or vanishing rows. Users upgrading from releases prior to 9.3.0 are not affected.

The issue can be ameliorated by, after upgrading, vacuuming all tables in all databases while having vacuum_freeze_table_age set to zero. This will fix latent corruption but will not be able to fix all pre-existing data errors.

As a separate issue, these bugs can also cause standby servers to get out of sync with the primary, thus exhibiting data errors that are not in the primary. Therefore, it's recommended that 9.3.0 and 9.3.1 standby servers be re-cloned from the primary (e.g., with a new base backup) after upgrading.

Bug fixesFix initialization of pg_clog and pg_subtrans during hot standby startup

Changes

Fix initialization of pg_clog and pg_subtrans during hot standby startup (Andres Freund, Heikki Linnakangas)

This bug can cause data loss on standby servers at the moment they start to accept hot-standby queries, by marking committed transactions as uncommitted. The likelihood of such corruption is small unless, at the time of standby startup, the primary server has executed many updating transactions since its last checkpoint. Symptoms include missing rows, rows that should have been deleted being still visible, and obsolete versions of updated rows being still visible alongside their newer versions.

This bug was introduced in versions 9.3.0, 9.2.5, 9.1.10, and 9.0.14. Standby servers that have only been running earlier releases are not at risk. It's recommended that standby servers that have ever run any of the buggy releases be re-cloned from the primary (e.g., with a new base backup) after upgrading.

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 multiple bugs in update chain traversal

Changes

Fix multiple bugs in update chain traversal (Andres Freund, Álvaro Herrera)

These bugs could result in incorrect behavior, such as locking or even updating the wrong row, in the presence of concurrent updates. Spurious "unable to fetch updated version of tuple" errors were also possible.

Bug fixesFix dangling-pointer problem in fast-path locking

Changes

Fix dangling-pointer problem in fast-path locking (Tom Lane)

This could lead to corruption of the lock data structures in shared memory, causing "lock already held" and other odd errors.

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 assorted race conditions in timeout management

Changes

Fix assorted race conditions in timeout management (Tom Lane)

These errors could result in a server process becoming unresponsive because it had blocked SIGALRM and/or SIGINT.

ImprovementsTruncate pg_multixact contents during WAL replay

Changes

Truncate pg_multixact contents during WAL replay (Andres Freund)

This avoids ever-increasing disk space consumption in standby servers.

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.

ImprovementsEnsure an anti-wraparound VACUUM counts a page as scanned when it's only verified that no tuples need freezing

Changes

Ensure an anti-wraparound VACUUM counts a page as scanned when it's only verified that no tuples need freezing (Sergey Burladyan, Jeff Janes)

This bug could result in failing to advance relfrozenxid, so that the table would still be thought to need another anti-wraparound vacuum. In the worst case the database might even shut down to prevent wraparound.

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 full-table-vacuum request mechanism for MultiXactIds

Changes

Fix full-table-vacuum request mechanism for MultiXactIds (Andres Freund)

This bug could result in large amounts of useless autovacuum activity.

Bug fixesFix race condition in GIN index posting tree page deletion

Changes

Fix race condition in GIN index posting tree page deletion (Heikki Linnakangas)

This could lead to transient wrong answers or query failures.

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 "unexpected spgdoinsert() failure" error during SP-GiST index creation

Changes

Fix "unexpected spgdoinsert() failure" error during SP-GiST index creation (Teodor Sigaev)

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 assorted bugs in materialized views

Changes

Fix assorted bugs in materialized views (Kevin Grittner, Andres Freund)

ImprovementsRe-allow duplicate table aliases if they're within aliased JOINs

Changes

Re-allow duplicate table aliases if they're within aliased JOINs (Tom Lane)

Historically PostgreSQL has accepted queries like

SELECT ... FROM tab1 x CROSS JOIN (tab2 x CROSS JOIN tab3 y) z

although a strict reading of the SQL standard would forbid the duplicate usage of table alias x. A misguided change in 9.3.0 caused it to reject some such cases that were formerly accepted. Restore the previous behavior.

ImprovementsAvoid flattening a subquery whose SELECT list contains a volatile function wrapped inside a sub-SELECT

Changes

Avoid flattening a subquery whose SELECT list contains a volatile function wrapped inside a sub-SELECT (Tom Lane)

This avoids unexpected results due to extra evaluations of the volatile function.

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 planner's processing of non-simple-variable subquery outputs nested within outer joins

Changes

Fix planner's processing of non-simple-variable subquery outputs nested within outer joins (Tom Lane)

This error could lead to incorrect plans for queries involving multiple levels of subqueries within JOIN syntax.

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 incorrect planning in cases where the same non-strict expression appears in multiple WHERE and outer JOIN equality clauses

Changes

Fix incorrect planning in cases where the same non-strict expression appears in multiple WHERE and outer JOIN equality clauses (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 planner crash with whole-row reference to a subquery

Changes

Fix planner crash with whole-row reference to a subquery (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 incorrect generation of optimized MIN()/MAX() plans for inheritance trees

Changes

Fix incorrect generation of optimized MIN()/MAX() plans for inheritance trees (Tom Lane)

The planner could fail in cases where the MIN()/MAX() argument was an expression rather than a simple variable.

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 premature deletion of temporary files

Changes

Fix premature deletion of temporary files (Andres Freund)

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 fixesPrevent intra-transaction memory leak when printing range values

Changes

Prevent intra-transaction memory leak when printing range values (Tom Lane)

This fix actually cures transient memory leaks in any datatype output function, but range types are the only ones known to have had a significant problem.

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 memory leaks when reloading configuration files

Changes

Fix memory leaks when reloading configuration files (Heikki Linnakangas, Hari Babu)

ImprovementsPrevent incorrect display of dropped columns in NOT NULL and CHECK constraint violation messages

Changes

Prevent incorrect display of dropped columns in NOT NULL and CHECK constraint violation messages (Michael Paquier and 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.

ImprovementsAllow default arguments and named-argument notation for window functions

Changes

Allow default arguments and named-argument notation for window functions (Tom Lane)

Previously, these cases were likely to crash.

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.

ImprovementsSuppress trailing whitespace on each line when pretty-printing rules and views

Changes

Suppress trailing whitespace on each line when pretty-printing rules and views (Tom Lane)

9.3.0 generated such whitespace in many more cases than previous versions did. To reduce unexpected behavioral changes, suppress unnecessary whitespace in all cases.

Bug fixesFix possible read past end of memory in rule printing

Changes

Fix possible read past end of memory in rule printing (Peter Eisentraut)

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 array slicing of int2vector and oidvector values

Changes

Fix array slicing of int2vector and oidvector values (Tom Lane)

Expressions of this kind are now implicitly promoted to regular int2 or oid arrays.

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.

ImprovementsReturn a valid JSON value when converting an empty hstore value to json

Changes

Return a valid JSON value when converting an empty hstore value to json (Oskari Saarenmaa)

Bug fixesFix incorrect behaviors when using a SQL-standard, simple GMT offset timezone

Changes

Fix incorrect behaviors when using a SQL-standard, simple GMT offset timezone (Tom Lane)

In some cases, the system would use the simple GMT offset value when it should have used the regular timezone setting that had prevailed before the simple offset was selected. This change also causes the timeofday function to honor the simple GMT offset zone.

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.

ImprovementsPrevent possible misbehavior when logging translations of Windows error codes

Changes

Prevent possible misbehavior when logging translations of Windows error codes (Tom Lane)

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.

ImprovementsProperly quote generated command lines in pg_ctl

Changes

Properly quote generated command lines in pg_ctl (Naoya Anzai and Tom Lane)

This fix applies only to Windows.

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 pg_dumpall to work when a source database sets default_transaction_read_only via ALTER DATABASE SET

Changes

Fix pg_dumpall to work when a source database sets default_transaction_read_only via ALTER DATABASE SET (Kevin Grittner)

Previously, the generated script would fail during restore.

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 pg_isready to handle its -d option properly

Changes

Fix pg_isready to handle its -d option properly (Fabrízio de Royes Mello and Fujii Masao)

Bug fixesFix parsing of WAL file names in pg_receivexlog

Changes

Fix parsing of WAL file names in pg_receivexlog (Heikki Linnakangas)

This error made pg_receivexlog unable to restart streaming after stopping, once at least 4 GB of WAL had been written.

ImprovementsReport out-of-disk-space failures properly in pg_upgrade

Changes

Report out-of-disk-space failures properly in pg_upgrade (Peter Eisentraut)

ImprovementsMake ecpg search for quoted cursor names case-sensitively

Changes

Make ecpg search for quoted cursor names case-sensitively (Zoltán Böszörményi)

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 ecpg's processing of lists of variables declared varchar

Changes

Fix ecpg's processing of lists of variables declared varchar (Zoltán Böszörményi)

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.

ImprovementsMake contrib/lo defend against incorrect trigger definitions

Changes

Make contrib/lo defend against incorrect trigger definitions (Marc Cousin)

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.

ImprovementsUpdate time zone data files to tzdata release 2013h for DST law changes in Argentina, Brazil, Jordan, Libya, Liechtenstein, Morocco, and Palestine. Also, new timezone abbreviations WIB, WIT, WITA for Indonesia.

Changes

Update time zone data files to tzdata release 2013h for DST law changes in Argentina, Brazil, Jordan, Libya, Liechtenstein, Morocco, and Palestine. Also, new timezone abbreviations WIB, WIT, WITA for Indonesia.

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.

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.