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

2011-04-18

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

9.0.4 HistoricalSupport ends 2015-10-08

PostgreSQL 9.0.4

Migration and compatibility

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

However, if your installation was upgraded from a previous major release by running pg_upgrade, you should take action to prevent possible data loss due to a now-fixed bug in pg_upgrade. The recommended solution is to run VACUUM FREEZE on all TOAST tables. More information is available at http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix.

Bug fixesFix pg_upgrade's handling of TOAST tables

Changes

Fix pg_upgrade's handling of TOAST tables (Bruce Momjian)

The pg_class.relfrozenxid value for TOAST tables was not correctly copied into the new installation during pg_upgrade. This could later result in pg_clog files being discarded while they were still needed to validate tuples in the TOAST tables, leading to "could not access status of transaction" failures.

This error poses a significant risk of data loss for installations that have been upgraded with pg_upgrade. This patch corrects the problem for future uses of pg_upgrade, but does not in itself cure the issue in installations that have been processed with a buggy version of pg_upgrade.

ImprovementsSuppress incorrect "PD_ALL_VISIBLE flag was incorrectly set" warning

Changes

Suppress incorrect "PD_ALL_VISIBLE flag was incorrectly set" warning (Heikki Linnakangas)

VACUUM would sometimes issue this warning in cases that are actually valid.

ImprovementsUse better SQLSTATE error codes for hot standby conflict cases

Changes

Use better SQLSTATE error codes for hot standby conflict cases (Tatsuo Ishii and Simon Riggs)

All retryable conflict errors now have an error code that indicates that a retry is possible. Also, session closure due to the database being dropped on the master is now reported as ERRCODE_DATABASE_DROPPED, rather than ERRCODE_ADMIN_SHUTDOWN, so that connection poolers can handle the situation correctly.

Bug fixesPrevent intermittent hang in interactions of startup process with bgwriter process

Changes

Prevent intermittent hang in interactions of startup process with bgwriter process (Simon Riggs)

This affected recovery in non-hot-standby cases.

ImprovementsDisallow including a composite type in itself

Changes

Disallow including a composite type in itself (Tom Lane)

This prevents scenarios wherein the server could recurse infinitely while processing the composite type. While there are some possible uses for such a structure, they don't seem compelling enough to justify the effort required to make sure it always works safely.

Bug fixesAvoid potential deadlock during catalog cache initialization

Changes

Avoid potential deadlock during catalog cache initialization (Nikhil Sontakke)

In some cases the cache loading code would acquire share lock on a system index before locking the index's catalog. This could deadlock against processes trying to acquire exclusive locks in the other, more standard order.

Bug fixesFix dangling-pointer problem in BEFORE ROW UPDATE trigger handling when there was a concurrent update to the target tuple

Changes

Fix dangling-pointer problem in BEFORE ROW UPDATE trigger handling when there was a concurrent update to the target tuple (Tom Lane)

This bug has been observed to result in intermittent "cannot extract system attribute from virtual tuple" failures while trying to do UPDATE RETURNING ctid. There is a very small probability of more serious errors, such as generating incorrect index entries for the updated tuple.

ImprovementsDisallow DROP TABLE when there are pending deferred trigger events for the table

Changes

Disallow DROP TABLE when there are pending deferred trigger events for the table (Tom Lane)

Formerly the DROP would go through, leading to "could not open relation with OID nnn" errors when the triggers were eventually fired.

ImprovementsAllow "replication" as a user name in pg_hba.conf

Changes

Allow "replication" as a user name in pg_hba.conf (Andrew Dunstan)

"replication" is special in the database name column, but it was mistakenly also treated as special in the user name column.

Bug fixesPrevent crash triggered by constant-false WHERE conditions during GEQO optimization

Changes

Prevent crash triggered by constant-false WHERE conditions during GEQO optimization (Tom Lane)

ImprovementsImprove planner's handling of semi-join and anti-join cases

Changes

Improve planner's handling of semi-join and anti-join cases (Tom Lane)

Bug fixesFix handling of SELECT FOR UPDATE in a sub-SELECT

Changes

Fix handling of SELECT FOR UPDATE in a sub-SELECT (Tom Lane)

This bug typically led to "cannot extract system attribute from virtual tuple" errors.

Bug fixesFix selectivity estimation for text search to account for NULLs

Changes

Fix selectivity estimation for text search to account for NULLs (Jesper Krogh)

Bug fixesFix get_actual_variable_range() to support hypothetical indexes injected by an index adviser plugin

Changes

Fix get_actual_variable_range() to support hypothetical indexes injected by an index adviser plugin (Gurjeet Singh)

Bug fixesFix PL/Python memory leak involving array slices

Changes

Fix PL/Python memory leak involving array slices (Daniel Popowich)

ImprovementsAllow libpq's SSL initialization to succeed when user's home directory is unavailable

Changes

Allow libpq's SSL initialization to succeed when user's home directory is unavailable (Tom Lane)

If the SSL mode is such that a root certificate file is not required, there is no need to fail. This change restores the behavior to what it was in pre-9.0 releases.

Bug fixesFix libpq to return a useful error message for errors detected in conninfo_array_parse

Changes

Fix libpq to return a useful error message for errors detected in conninfo_array_parse (Joseph Adams)

A typo caused the library to return NULL, rather than the PGconn structure containing the error message, to the application.

Bug fixesFix ecpg preprocessor's handling of float constants

Changes

Fix ecpg preprocessor's handling of float constants (Heikki Linnakangas)

Bug fixesFix parallel pg_restore to handle comments on POST_DATA items correctly

Changes

Fix parallel pg_restore to handle comments on POST_DATA items correctly (Arnd Hannemann)

Bug fixesFix pg_restore to cope with long lines (over 1KB) in TOC files

Changes

Fix pg_restore to cope with long lines (over 1KB) in TOC files (Tom Lane)

ImprovementsPut in more safeguards against crashing due to division-by-zero with overly enthusiastic compiler optimization

Changes

Put in more safeguards against crashing due to division-by-zero with overly enthusiastic compiler optimization (Aurelien Jarno)

ImprovementsSupport use of dlopen() in FreeBSD and OpenBSD on MIPS

Changes

Support use of dlopen() in FreeBSD and OpenBSD on MIPS (Tom Lane)

There was a hard-wired assumption that this system function was not available on MIPS hardware on these systems. Use a compile-time test instead, since more recent versions have it.

Bug fixesFix compilation failures on HP-UX

Changes

Fix compilation failures on HP-UX (Heikki Linnakangas)

Bug fixesAvoid crash when trying to write to the Windows console very early in process startup

Changes

Avoid crash when trying to write to the Windows console very early in process startup (Rushabh Lathia)

ImprovementsSupport building with MinGW 64 bit compiler for Windows

Changes

Support building with MinGW 64 bit compiler for Windows (Andrew Dunstan)

Bug fixesFix version-incompatibility problem with libintl on Windows

Changes

Fix version-incompatibility problem with libintl on Windows (Hiroshi Inoue)

Bug fixesFix usage of xcopy in Windows build scripts to work correctly under Windows 7

Changes

Fix usage of xcopy in Windows build scripts to work correctly under Windows 7 (Andrew Dunstan)

This affects the build scripts only, not installation or usage.

Bug fixesFix path separator used by pg_regress on Cygwin

Changes

Fix path separator used by pg_regress on Cygwin (Andrew Dunstan)

ImprovementsUpdate time zone data files to tzdata release 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii.

Changes

Update time zone data files to tzdata release 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii.

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.