> For the complete documentation index, see [llms.txt](https://docs.postgresql.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.postgresql.tw/appendixes/release/release-18-3.md).

# E.3. Release 18.3 \#

[E.3.1. Migration to Version 18.3](#RELEASE-18-3-MIGRATION)

[E.3.2. Changes](#RELEASE-18-3-CHANGES)

\*\*Release date:\*\*2026-02-26

This release contains a small number of fixes from 18.2. For information about new features in major release 18, see [Section E.6](/appendixes/release/release-18.md).

## E.3.1. Migration to Version 18.3 [#](#RELEASE-18-3-MIGRATION)

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](/appendixes/release/release-18-2.md).

## E.3.2. Changes [#](#RELEASE-18-3-CHANGES)

* Fix failure after replaying a multixid truncation record from WAL that was generated by an older minor version (Heikki Linnakangas) [§](https://postgr.es/c/817f74600)

  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.
* Avoid incorrect complaint of invalid encoding when `substring()` is applied to “toasted” data (Noah Misch) [§](https://postgr.es/c/6e045e1a6) [§](https://postgr.es/c/d04b34d68) [§](https://postgr.es/c/4174e41b9)

  The fix for CVE-2026-2006 was too aggressive and could raise an error about an incomplete character in cases that are actually valid.
* Fix oversight in the fix for CVE-2026-2007 (Zsolt Parragi) [§](https://postgr.es/c/041e02e6a)

  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.
* Fix the volatility marking of `json_strip_nulls()` and `jsonb_strip_nulls()` (Andrew Dunstan) [§](https://postgr.es/c/2f6ee7b38)

  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.
* Fix computation of the set of potentially-nulling outer joins for the output of a `LATERAL UNION ALL` subquery (Richard Guo) [§](https://postgr.es/c/ed57c207c)

  This error could lead to skipping `NOT NULL` tests in the mistaken belief that they were unnecessary, resulting in wrong query output.
* Avoid name collisions between user-written constraints and automatically-named `NOT NULL` constraints (Laurenz Albe) [§](https://postgr.es/c/8d9a97e0b)

  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.
* Fix `pg_stat_get_backend_wait_event()` and `pg_stat_get_backend_wait_event_type()` to report values for auxiliary processes (Heikki Linnakangas) [§](https://postgr.es/c/53463b4b2)

  Previously these functions returned NULL for auxiliary processes, but that's inconsistent with the `pg_stat_activity` view.
* Fix casting a composite-type variable to a domain type when returning its value from a PL/pgSQL function (Tom Lane) [§](https://postgr.es/c/ce4b7e3a1)

  If the variable's value is NULL, a “cache lookup failed for type 0” error resulted.
* Fix potential null pointer dereference in `contrib/hstore`'s binary input function (Michael Paquier) [§](https://postgr.es/c/4a0843c53)

  `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.

***

原文：[PostgreSQL 18.6 Documentation](https://www.postgresql.org/docs/18/release-18-3.html)（英文原文，待翻譯）


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.postgresql.tw/appendixes/release/release-18-3.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
