↑↓ select↵ open⌫ change scopeOpen full search

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

DocumentationVersion comparison

POSTGRESQL · VERSION COMPARE

PostgreSQL 18.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.

Complete release changes

18.3

2026-02-26

Export JSON ↓
9changesFeatures, fixes, improvements
1releasesGrouped by release
2CVEDistinct vulnerability IDs

18.3stableSupport ends 2030-11-14

Security changes
CVE / issueSeverityFixed versionSelection status
CVE-2026-2006

Avoid incorrect complaint of invalid encoding when substring() is applied to “toasted” data

18.2Recorded fix
CVE-2026-2007

Fix oversight in the fix for CVE-2026-2007

18.2Recorded fix

PostgreSQL 18.3

Migration and compatibility

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

However, if you are upgrading from a version earlier than 18.2, see Section E.4.

Bug fixesFix failure after replaying a multixid truncation record from WAL that was generated by an older minor version

Changes

Fix failure after replaying a multixid truncation record from WAL that was generated by an older minor version (Heikki Linnakangas) §

Erroneous logic for coping with the way that previous versions handled multixid wraparound led to replay failure, with messages like “could not access status of transaction”. A typical scenario in which this could occur is a standby server of the latest minor version consuming WAL from a primary server of an older version.

Related records (4)
SecurityAvoid incorrect complaint of invalid encoding when substring() is applied to “toasted” data

Changes

Avoid incorrect complaint of invalid encoding when substring() is applied to “toasted” data (Noah Misch) § § §

The fix for CVE-2026-2006 was too aggressive and could raise an error about an incomplete character in cases that are actually valid.

Related records (4)
SecurityFix oversight in the fix for CVE-2026-2007

Changes

Fix oversight in the fix for CVE-2026-2007 (Zsolt Parragi) §

If the “bounds” array needed to be expanded, because the input contained more trigrams than the initial guess, generate_trgm_only didn't return the modified array pointer to its caller. That would lead to incorrect output from strict_word_similarity() and related functions, or in rare cases a crash. The faulty code is reached if the input string becomes longer when it's converted to lower case. The only known instances of that occur when an ICU locale is used with certain single-byte encodings.

Bug fixesFix the volatility marking of json_strip_nulls() and jsonb_strip_nulls()

Changes

Fix the volatility marking of json_strip_nulls() and jsonb_strip_nulls() (Andrew Dunstan) §

These functions have always been considered immutable, but refactoring in version 18 accidentally marked them stable instead. That prevents their use in index expressions and could cause unnecessary repeat evaluations in queries. This fix corrects the marking in newly-initialized database clusters (including clusters that are pg_upgrade'd to 18.3 or later). However it will not help existing clusters made using 18.0 through 18.2.

If this mistake affects your usage of these functions, the recommended fix for an existing cluster is a manual catalog update. As superuser, perform

UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');

in each affected database. Update template0 and template1 as well, so that databases made in future will have the fix.

Bug fixesFix computation of the set of potentially-nulling outer joins for the output of a LATERAL UNION ALL subquery

Changes

Fix computation of the set of potentially-nulling outer joins for the output of a LATERAL UNION ALL subquery (Richard Guo) §

This error could lead to skipping NOT NULL tests in the mistaken belief that they were unnecessary, resulting in wrong query output.

Related records (2)
ImprovementsAvoid name collisions between user-written constraints and automatically-named NOT NULL constraints

Changes

Avoid name collisions between user-written constraints and automatically-named NOT NULL constraints (Laurenz Albe) §

As of version 18, NOT NULL constraints have full-fledged pg_constraint entries, and therefore require names. The logic for choosing a name for an unnamed NOT NULL constraint failed to avoid conflicts with user-written constraints elsewhere in the same CREATE TABLE statement.

Bug fixesFix pg_stat_get_backend_wait_event() and pg_stat_get_backend_wait_event_type() to report values for auxiliary processes

Changes

Fix pg_stat_get_backend_wait_event() and pg_stat_get_backend_wait_event_type() to report values for auxiliary processes (Heikki Linnakangas) §

Previously these functions returned NULL for auxiliary processes, but that's inconsistent with the pg_stat_activity view.

Related records (4)
Bug fixesFix casting a composite-type variable to a domain type when returning its value from a PL/pgSQL function

Changes

Fix casting a composite-type variable to a domain type when returning its value from a PL/pgSQL function (Tom Lane) §

If the variable's value is NULL, a “cache lookup failed for type 0” error resulted.

Related records (4)
Bug fixesFix potential null pointer dereference in contrib/hstore's binary input function

Changes

Fix potential null pointer dereference in contrib/hstore's binary input function (Michael Paquier) §

hstore's receive function crashed on input containing duplicate keys. hstore values generated by Postgres would never contain duplicate keys, so this mistake has gone unnoticed. The crash could be provoked by malicious or corrupted data.

Related records (4)
How is this comparison generated?

The comparison follows PostgreSQL release notes from just after the source through the target version. Confirmed backport duplicates are merged conservatively, with every original explanation retained. Related commits can represent independent changes; they remain separate records.

Release snapshot: 2026-09-26 · Security snapshot: 2026-09-26

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