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

2011-01-31

Export JSON
12changesFeatures, fixes, improvements
1releaseGrouped by release
1CVEVulnerability IDs mentioned in these notes

9.0.3 HistoricalSupport ends 2015-10-08

Security records mentioned in this release 1 CVE
CVEs mentioned in these notes, including possible follow-up fixes for earlier vulnerabilities
CVE / issueSeverityFixed version
CVE-2010-4015

Fix buffer overrun in contrib/intarray's input function for the query_int type

—9.0.3

PostgreSQL 9.0.3

Migration and compatibility

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

ImprovementsBefore exiting walreceiver, ensure all the received WAL is fsync'd to disk

Changes

Before exiting walreceiver, ensure all the received WAL is fsync'd to disk (Heikki Linnakangas)

Otherwise the standby server could replay some un-synced WAL, conceivably leading to data corruption if the system crashes just at that point.

ImprovementsAvoid excess fsync activity in walreceiver

Changes

Avoid excess fsync activity in walreceiver (Heikki Linnakangas)

ImprovementsMake ALTER TABLE revalidate uniqueness and exclusion constraints when needed

Changes

Make ALTER TABLE revalidate uniqueness and exclusion constraints when needed (Noah Misch)

This was broken in 9.0 by a change that was intended to suppress revalidation during VACUUM FULL and CLUSTER, but unintentionally affected ALTER TABLE as well.

Bug fixesFix EvalPlanQual for UPDATE of an inheritance tree in which the tables are not all alike

Changes

Fix EvalPlanQual for UPDATE of an inheritance tree in which the tables are not all alike (Tom Lane)

Any variation in the table row types (including dropped columns present in only some child tables) would confuse the EvalPlanQual code, leading to misbehavior or even crashes. Since EvalPlanQual is only executed during concurrent updates to the same row, the problem was only seen intermittently.

ImprovementsAvoid failures when EXPLAIN tries to display a simple-form CASE expression

Changes

Avoid failures when EXPLAIN tries to display a simple-form CASE expression (Tom Lane)

If the CASE's test expression was a constant, the planner could simplify the CASE into a form that confused the expression-display code, resulting in "unexpected CASE WHEN clause" errors.

Bug fixesFix assignment to an array slice that is before the existing range of subscripts

Changes

Fix assignment to an array slice that is before the existing range of subscripts (Tom Lane)

If there was a gap between the newly added subscripts and the first pre-existing subscript, the code miscalculated how many entries needed to be copied from the old array's null bitmap, potentially leading to data corruption or crash.

Bug fixesAvoid unexpected conversion overflow in planner for very distant date values

Changes

Avoid unexpected conversion overflow in planner for very distant date values (Tom Lane)

The date type supports a wider range of dates than can be represented by the timestamp types, but the planner assumed it could always convert a date to timestamp with impunity.

Bug fixesFix PL/Python crash when an array contains null entries

Changes

Fix PL/Python crash when an array contains null entries (Alex Hunsaker)

Bug fixesRemove ecpg's fixed length limit for constants defining an array dimension

Changes

Remove ecpg's fixed length limit for constants defining an array dimension (Michael Meskes)

Bug fixesFix erroneous parsing of tsquery values containing ... & !(subexpression) | ...

Changes

Fix erroneous parsing of tsquery values containing ... & !(subexpression) | ... (Tom Lane)

Queries containing this combination of operators were not executed correctly. The same error existed in contrib/intarray's query_int type and contrib/ltree's ltxtquery type.

SecurityFix buffer overrun in contrib/intarray's input function for the query_int type

Changes

Fix buffer overrun in contrib/intarray's input function for the query_int type (Apple)

This bug is a security risk since the function's return address could be overwritten. Thanks to Apple Inc's security team for reporting this issue and supplying the fix. (CVE-2010-4015)

Bug fixesFix bug in contrib/seg's GiST picksplit algorithm

Changes

Fix bug in contrib/seg's GiST picksplit algorithm (Alexander Korotkov)

This could result in considerable inefficiency, though not actually incorrect answers, in a GiST index on a seg column. If you have such an index, consider REINDEXing it after installing this update. (This is identical to the bug that was fixed in contrib/cube in the previous update.)

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.