E.1. Release 13.23

E.1.1. Migration to Version 13.23
E.1.2. Changes

Release date: 2025-11-13

This release contains a variety of fixes from 13.22. For information about new features in major release 13, see Section E.24.

This is expected to be the last PostgreSQL release in the 13.X series. Users are encouraged to update to a newer release branch soon.

E.1.1. Migration to Version 13.23

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

However, if you are upgrading from a version earlier than 13.21, see Section E.3.

E.1.2. Changes

  • Check for CREATE privileges on the schema in CREATE STATISTICS (Jelte Fennema-Nio) §

    This omission allowed table owners to create statistics in any schema, potentially leading to unexpected naming conflicts.

    The PostgreSQL Project thanks Jelte Fennema-Nio for reporting this problem. (CVE-2025-12817)

  • Avoid integer overflow in allocation-size calculations within libpq (Jacob Champion) §

    Several places in libpq were not sufficiently careful about computing the required size of a memory allocation. Sufficiently large inputs could cause integer overflow, resulting in an undersized buffer, which would then lead to writing past the end of the buffer.

    The PostgreSQL Project thanks Aleksey Solovev of Positive Technologies for reporting this problem. (CVE-2025-12818)

  • Further fix processing of character classes within SIMILAR TO regular expressions (Laurenz Albe) §

    The previous fix for translating SIMILAR TO pattern matching expressions to POSIX-style regular expressions broke a corner case that formerly worked: if there is an escape character right after the opening bracket and then a closing bracket right after the escape sequence (for example [\w]), the closing bracket was no longer seen as terminating the character class.

  • Fix parsing of aggregate functions whose arguments contain a sub-select with a FROM reference to a CTE outside the aggregate function (Tom Lane) §

    Such a CTE reference must act like a outer-level column reference when determining the aggregate's semantic level; but it was not being accounted for, leading to obscure planner or executor errors.

  • Fix no relation entry for relid errors in corner cases while estimating SubPlan costs (Richard Guo) §

  • Remove faulty assertion in btree index cleanup (Peter Geoghegan) §

  • Fix possible infinite loop in GIN index scans with multiple scan conditions (Tom Lane) §

    GIN can handle scan conditions that can reject non-matching entries but are not useful for searching for relevant entries, for example a tsquery clause like !term. But such a condition must not be first in the array of scan conditions. The code failed to ensure that in all cases, with the result that a query having a mix of such conditions with normal conditions might work or not depending on the order in which the conditions were given in the query.

  • Ensure that GIN index scans can be canceled (Tom Lane) §

    Some code paths were capable of running for a long time without checking for interrupts.

  • Ensure that BRIN autosummarization provides a snapshot for index expressions that need one (Álvaro Herrera) § §

    Previously, autosummarization would fail for such indexes, and then leave placeholder index tuples behind, causing the index to bloat over time.

  • Fix integer-overflow hazard in BRIN index scans when the table contains close to 232 pages (Sunil S) §

    This oversight could result in an infinite loop or scanning of unneeded table pages.

  • Fix incorrect zero-extension of stored values in JIT-generated tuple deforming code (David Rowley) §

    When not using JIT, the equivalent code does sign-extension not zero-extension, leading to a different Datum representation of small integer data types. This inconsistency was masked in most cases, but it is known to lead to could not find memoization table entry errors when using Memoize plan nodes, and there might be other symptoms.

  • Add missing EvalPlanQual rechecks for TID Scan and TID Range Scan plan nodes (Sophie Alpert, David Rowley) §

    This omission led to possibly not rechecking a condition on ctid during concurrent-update situations, causing the update's behavior to vary depending on which plan type had been selected.

  • Fix EvalPlanQual handlin