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

2015-02-05

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

9.4.1 HistoricalSupport ends 2020-02-13

Security records mentioned in this release 6 CVEs
CVEs mentioned in these notes, including possible follow-up fixes for earlier vulnerabilities
CVE / issueSeverityFixed version
CVE-2015-0244

Fix possible loss of frontend/backend protocol synchronization after an error

8.19.4.1
CVE-2014-0067

Lock down regression testing's temporary installations on Windows

7.09.4.1
CVE-2015-0243

Fix buffer overruns in contrib/pgcrypto

6.59.4.1
CVE-2015-0242

Fix buffer overrun in replacement *printf() functions

4.29.4.1
CVE-2015-0241

Fix buffer overruns in to_char()

4.29.4.1
CVE-2014-8161

Fix information leak via constraint-violation error messages

3.19.4.1

PostgreSQL 9.4.1

Migration and compatibility

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

However, if you are a Windows user and are using the "Norwegian (Bokmål)" locale, manual action is needed after the upgrade to replace any "Norwegian (Bokmål)_Norway" or "norwegian-bokmal" locale names stored in PostgreSQL system catalogs with the plain-ASCII alias "Norwegian_Norway". For details see http://wiki.postgresql.org/wiki/Changes_To_Norwegian_Locale

SecurityFix buffer overruns in to_char()

Changes

Fix buffer overruns in to_char() (Bruce Momjian)

When to_char() processes a numeric formatting template calling for a large number of digits, PostgreSQL would read past the end of a buffer. When processing a crafted timestamp formatting template, PostgreSQL would write past the end of a buffer. Either case could crash the server. We have not ruled out the possibility of attacks that lead to privilege escalation, though they seem unlikely. (CVE-2015-0241)

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.

SecurityFix buffer overrun in replacement *printf() functions

Changes

Fix buffer overrun in replacement *printf() functions (Tom Lane)

PostgreSQL includes a replacement implementation of printf and related functions. This code will overrun a stack buffer when formatting a floating point number (conversion specifiers e, E, f, F, g or G) with requested precision greater than about 500. This will crash the server, and we have not ruled out the possibility of attacks that lead to privilege escalation. A database user can trigger such a buffer overrun through the to_char() SQL function. While that is the only affected core PostgreSQL functionality, extension modules that use printf-family functions may be at risk as well.

This issue primarily affects PostgreSQL on Windows. PostgreSQL uses the system implementation of these functions where adequate, which it is on other modern platforms. (CVE-2015-0242)

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.

SecurityFix buffer overruns in contrib/pgcrypto

Changes

Fix buffer overruns in contrib/pgcrypto (Marko Tiikkaja, Noah Misch)

Errors in memory size tracking within the pgcrypto module permitted stack buffer overruns and improper dependence on the contents of uninitialized memory. The buffer overrun cases can crash the server, and we have not ruled out the possibility of attacks that lead to privilege escalation. (CVE-2015-0243)

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.

SecurityFix possible loss of frontend/backend protocol synchronization after an error

Changes

Fix possible loss of frontend/backend protocol synchronization after an error (Heikki Linnakangas)

If any error occurred while the server was in the middle of reading a protocol message from the client, it could lose synchronization and incorrectly try to interpret part of the message's data as a new protocol message. An attacker able to submit crafted binary data within a command parameter might succeed in injecting his own SQL commands this way. Statement timeout and query cancellation are the most likely sources of errors triggering this scenario. Particularly vulnerable are applications that use a timeout and also submit arbitrary user-crafted data as binary query parameters. Disabling statement timeout will reduce, but not eliminate, the risk of exploit. Our thanks to Emil Lenngren for reporting this issue. (CVE-2015-0244)

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.

SecurityFix information leak via constraint-violation error messages

Changes

Fix information leak via constraint-violation error messages (Stephen Frost)

Some server error messages show the values of columns that violate a constraint, such as a unique constraint. If the user does not have SELECT privilege on all columns of the table, this could mean exposing values that the user should not be able to see. Adjust the code so that values are displayed only when they came from the SQL command or could be selected by the user. (CVE-2014-8161)

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.

SecurityLock down regression testing's temporary installations on Windows

Changes

Lock down regression testing's temporary installations on Windows (Noah Misch)

Use SSPI authentication to allow connections only from the OS user who launched the test suite. This closes on Windows the same vulnerability previously closed on other platforms, namely that other users might be able to connect to the test postmaster. (CVE-2014-0067)

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.

ImprovementsCope with the Windows locale named "Norwegian (Bokmål)"

Changes

Cope with the Windows locale named "Norwegian (Bokmål)" (Heikki Linnakangas)

Non-ASCII locale names are problematic since it's not clear what encoding they should be represented in. Map the troublesome locale name to a plain-ASCII alias, "Norwegian_Norway".

9.4.0 mapped the troublesome name to "norwegian-bokmal", but that turns out not to work on all Windows configurations. "Norwegian_Norway" is now recommended instead.

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-of-already-freed-memory problem in EvalPlanQual processing

Changes

Fix use-of-already-freed-memory problem in EvalPlanQual processing (Tom Lane)

In READ COMMITTED mode, queries that lock or update recently-updated rows could crash as a result of this bug.

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 fixesAvoid possible deadlock while trying to acquire tuple locks in EvalPlanQual processing

Changes

Avoid possible deadlock while trying to acquire tuple locks in EvalPlanQual processing (Álvaro Herrera, Mark Kirkwood)

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 failure to wait when a transaction tries to acquire a FOR NO KEY EXCLUSIVE tuple lock, while multiple other transactions currently hold FOR SHARE locks

Changes

Fix failure to wait when a transaction tries to acquire a FOR NO KEY EXCLUSIVE tuple lock, while multiple other transactions currently hold FOR SHARE locks (Álvaro Herrera)

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.

PerformanceImprove performance of EXPLAIN with large range tables

Changes

Improve performance of EXPLAIN with large range tables (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 jsonb Unicode escape processing, and in consequence disallow \u0000

Changes

Fix jsonb Unicode escape processing, and in consequence disallow \u0000 (Tom Lane)

Previously, the JSON Unicode escape \u0000 was accepted and was stored as those six characters; but that is indistinguishable from what is stored for the input \\u0000, resulting in ambiguity. Moreover, in cases where de-escaped textual output is expected, such as the ->> operator, the sequence was printed as \u0000, which does not meet the expectation that JSON escaping would be removed. (Consistent behavior would require emitting a zero byte, but PostgreSQL does not support zero bytes embedded in text strings.) 9.4.0 included an ill-advised attempt to improve this situation by adjusting JSON output conversion rules; but of course that could not fix the fundamental ambiguity, and it turned out to break other usages of Unicode escape sequences. Revert that, and to avoid the core problem, reject \u0000 in jsonb input.

If a jsonb column contains a \u0000 value stored with 9.4.0, it will henceforth read out as though it were \\u0000, which is the other valid interpretation of the data stored by 9.4.0 for this case.

The json type did not have the storage-ambiguity problem, but it did have the problem of inconsistent de-escaped textual output. Therefore \u0000 will now also be rejected in json values when conversion to de-escaped form is required. This change does not break the ability to store \u0000 in json columns so long as no processing is done on the values. This is exactly parallel to the cases in which non-ASCII Unicode escapes are allowed when the database encoding is not UTF8.

Bug fixesFix namespace handling in xpath()

Changes

Fix namespace handling in xpath() (Ali Akbar)

Previously, the xml value resulting from an xpath() call would not have namespace declarations if the namespace declarations were attached to an ancestor element in the input xml value, rather than to the specific element being returned. Propagate the ancestral declaration so that the result is correct when considered in isolation.

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 assorted oversights in range-operator selectivity estimation

Changes

Fix assorted oversights in range-operator selectivity estimation (Emre Hasegeli)

This patch fixes corner-case "unexpected operator NNNN" planner errors, and improves the selectivity estimates for some other cases.

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.

ImprovementsRevert unintended reduction in maximum size of a GIN index item

Changes

Revert unintended reduction in maximum size of a GIN index item (Heikki Linnakangas)

9.4.0 could fail with "index row size exceeds maximum" errors for data that previous versions would accept.

Bug fixesFix query-duration memory leak during repeated GIN index rescans

Changes

Fix query-duration memory leak during repeated GIN index rescans (Heikki Linnakangas)

Bug fixesFix possible crash when using nonzero gin_fuzzy_search_limit

Changes

Fix possible crash when using nonzero gin_fuzzy_search_limit (Heikki Linnakangas)

Bug fixesAssorted fixes for logical decoding

Changes

Assorted fixes for logical decoding (Andres Freund)

Bug fixesFix incorrect replay of WAL parameter change records that report changes in the wal_log_hints setting

Changes

Fix incorrect replay of WAL parameter change records that report changes in the wal_log_hints setting (Petr Jelinek)

ImprovementsChange "pgstat wait timeout" warning message to be LOG level, and rephrase it to be more understandable

Changes

Change "pgstat wait timeout" warning message to be LOG level, and rephrase it to be more understandable (Tom Lane)

This message was originally thought to be essentially a can't-happen case, but it occurs often enough on our slower buildfarm members to be a nuisance. Reduce it to LOG level, and expend a bit more effort on the wording: it now reads "using stale statistics instead of current ones because stats collector is not responding".

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.

ImprovementsWarn if macOS's setlocale() starts an unwanted extra thread inside the postmaster

Changes

Warn if macOS's setlocale() starts an unwanted extra thread inside the postmaster (Noah Misch)

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 libpq's behavior when /etc/passwd isn't readable

Changes

Fix libpq's behavior when /etc/passwd isn't readable (Tom Lane)

While doing PQsetdbLogin(), libpq attempts to ascertain the user's operating system name, which on most Unix platforms involves reading /etc/passwd. As of 9.4, failure to do that was treated as a hard error. Restore the previous behavior, which was to fail only if the application does not provide a database role name to connect as. This supports operation in chroot environments that lack an /etc/passwd file.

ImprovementsImprove consistency of parsing of psql's special variables

Changes

Improve consistency of parsing of psql's special variables (Tom Lane)

Allow variant spellings of on and off (such as 1/0) for ECHO_HIDDEN and ON_ERROR_ROLLBACK. Report a warning for unrecognized values for COMP_KEYWORD_CASE, ECHO, ECHO_HIDDEN, HISTCONTROL, ON_ERROR_ROLLBACK, and VERBOSITY. Recognize all values for all these variables case-insensitively; previously there was a mishmash of case-sensitive and case-insensitive behaviors.

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 pg_dump to handle comments on event triggers without failing

Changes

Fix pg_dump to handle comments on event triggers without failing (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 parallel pg_dump to use --serializable-deferrable

Changes

Allow parallel pg_dump to use --serializable-deferrable (Kevin Grittner)

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.

ImprovementsPrevent WAL files created by pg_basebackup -x/-X from being archived again when the standby is promoted

Changes

Prevent WAL files created by pg_basebackup -x/-X from being archived again when the standby is promoted (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.

ImprovementsHandle unexpected query results, especially NULLs, safely in contrib/tablefunc's connectby()

Changes

Handle unexpected query results, especially NULLs, safely in contrib/tablefunc's connectby() (Michael Paquier)

connectby() previously crashed if it encountered a NULL key value. It now prints that row but doesn't recurse further.

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.

ImprovementsNumerous cleanups of warnings from Coverity static code analyzer

Changes

Numerous cleanups of warnings from Coverity static code analyzer (Andres Freund, Tatsuo Ishii, Marko Kreen, Tom Lane, Michael Paquier)

These changes are mostly cosmetic but in some cases fix corner-case bugs, for example a crash rather than a proper error report after an out-of-memory failure. None are believed to represent security issues.

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.

ImprovementsAllow CFLAGS from configure's environment to override automatically-supplied CFLAGS

Changes

Allow CFLAGS from configure's environment to override automatically-supplied CFLAGS (Tom Lane)

Previously, configure would add any switches that it chose of its own accord to the end of the user-specified CFLAGS string. Since most compilers process switches left-to-right, this meant that configure's choices would override the user-specified flags in case of conflicts. That should work the other way around, so adjust the logic to put the user's string at the end not the beginning.

ImprovementsMake pg_regress remove any temporary installation it created upon successful exit

Changes

Make pg_regress remove any temporary installation it created upon successful exit (Tom Lane)

This results in a very substantial reduction in disk space usage during make check-world, since that sequence involves creation of numerous temporary installations.

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.

ImprovementsAdd CST (China Standard Time) to our lists of timezone abbreviations

Changes

Add CST (China Standard Time) to our lists of timezone abbreviations (Tom Lane)

ImprovementsUpdate time zone data files to tzdata release 2015a for DST law changes in Chile and Mexico, plus historical changes in Iceland.

Changes

Update time zone data files to tzdata release 2015a for DST law changes in Chile and Mexico, plus historical changes in Iceland.

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.