Hi,Attached is a draft of the release announcement for 2026-11-12. Please provide feedback (corrections, glaring omissions) no later than 2026-11-12 12:00 UTC (and preferably sooner please!).
In particular, I want to ensure I've gotten the updating instructions correct, both guidance and the instructions themselves.
Thanks! Jonathan
The PostgreSQL Global Development Group has released an update to all supported versions of PostgreSQL, including 18.7, 17.12, 16.16, 15.20, and 14.25, as well as the second release candidate of PostgreSQL 19. This release fixes over 140 bugs reported over the last several months. There are several issues that may require you to take extra steps after updating, which are described in detail below. See the "Updating" section for more information on post-update steps you may need to take. For the full list of changes, please review the [release notes](https://www.postgresql.org/docs/release/). PostgreSQL 14 EOL Notice ------------------------ **This is the final release of PostgreSQL 14**. PostgreSQL 14 is now end-of-life and will no longer receive security and bug fixes. If you are running PostgreSQL 14 in a production environment, we suggest that you make plans to upgrade to a newer, supported version of PostgreSQL. Please see our [versioning policy](https://www.postgresql.org/support/versioning/) for more information. Bug Fixes and Improvements -------------------------- This update fixes over 140 bugs that were reported in the last several months. The issues listed below affect PostgreSQL 18. Many of these issues also affect other supported versions of PostgreSQL. * Fix exporting and importing [snapshots](https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION) taken on a standby server. The issue was detected when running a parallel [`pg_dump`](https://www.postgresql.org/docs/current/app-pgdump.html) against a standby server, and could corrupt both the dump output and the standby server's data. More generally, a transaction that imported a snapshot taken on a standby server could return wrong results. * Several fixes for [GIN](https://www.postgresql.org/docs/current/gin.html) indexes that could lead to index corruption, causing queries to miss rows or to return unrelated rows. If you suspect a GIN index is affected, you should reindex it. See the release notes for more details on the issue, and the "Updating" section for post-update steps. * Fix possible index corruption in [`pg_trgm`](https://www.postgresql.org/docs/current/pgtrgm.html) GiST indexes that could cause searches to miss matching rows. You need to reindex after updating; see the "Updating" section. * Fix a case where, after [`REINDEX CONCURRENTLY`](https://www.postgresql.org/docs/current/sql-reindex.html) rebuilt an index on a [TOAST](https://www.postgresql.org/docs/current/storage-toast.html) table, later index updates could be missed, leading to `missing chunk number` errors. If you've encountered this issue, after updating, you'll need to reindex. See the "Updating" section. * Disallow `NOT NULL NO INHERIT` constraints on partitioned tables in all cases, including `CREATE TABLE ... LIKE`. Previously, this could allow a partition to contain `NULL` values when it should not. See the "Updating" section for how to find and repair affected constraints. * Disable B-tree index deduplication for columns declared as `bpchar` without a length, which could cause index-only scans to return wrong results. If you have B-tree indexes on `bpchar` columns, you should reindex them after updating. See the "Updating" section. * Several fixes for incremental backups that could produce corrupt backups. We recommend taking a new full backup after updating and using it for subsequent incremental backups. See the "Updating" section. * Several fixes for [base backups](https://www.postgresql.org/docs/current/app-pgbasebackup.html), including avoiding a torn copy of the `pg_control` file, and avoiding truncated or zero-padded copies of files such as `postgresql.auto.conf` that are replaced while the backup is running. * Rework the planner's join removal implementation. While this is a significant change for an update release, it was made to avoid continued bugs from the previous implementation. * Fix possible loss of rows during a table rewrite (for example, [`CLUSTER`](https://www.postgresql.org/docs/current/sql-cluster.html) or `VACUUM FULL`) when a row had been updated by a subtransaction that later aborted. * Fix parallel vacuum I/O timing reports. * Several fixes that could cause data loss or inconsistency after a crash, including starting a checkpoint while creating a multixact or while aborting a [prepared transaction](https://www.postgresql.org/docs/current/sql-prepare-transaction.html). This release also writes the state files of pending prepared transactions atomically, as a crash could previously leave behind an invalid file that prevented the server from starting. * Several fixes to the planner that could produce wrong query results, including queries with `LATERAL` references, outer joins, self-join elimination on tables using inheritance, `DISTINCT ON` in a subquery with set-returning functions, and queries using non-deterministic collations. * Several fixes to [partition pruning](https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITION-PRUNING) that could cause rows to be missed, including multi-column `RANGE`-partitioned tables when a query filters only on the leading columns, `DEFAULT` partitions on tables using `MINVALUE` or `MAXVALUE` bounds, and concurrent updates that could silently skip rows that should be updated. * Fix [`INSERT ... ON CONFLICT`](https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT) to acquire a predicate lock on the conflicting row under [`SERIALIZABLE`](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE) isolation. Previously, concurrent updates that should have failed with a serialization error could succeed. * Fix [`MERGE`](https://www.postgresql.org/docs/current/sql-merge.html) with `WHEN NOT MATCHED BY SOURCE` when the target row is concurrently deleted. Previously, a `WHEN NOT MATCHED BY TARGET` action could run instead, giving incorrect results. * Several fixes for [SQL/JSON](https://www.postgresql.org/docs/current/functions-json.html) functions such as `JSON_TABLE` and `JSON_VALUE` that could return incorrect results. * Several fixes for [logical replication](https://www.postgresql.org/docs/current/logical-replication.html) that could cause a subscriber to apply changes incorrectly. * Several fixes for [standby servers](https://www.postgresql.org/docs/current/hot-standby.html), including avoiding unnecessary replay delays and query cancellations in certain cases. * Fix [`psql`](https://www.postgresql.org/docs/current/app-psql.html) to accept multiple [`COPY ... FROM STDIN`](https://www.postgresql.org/docs/current/sql-copy.html) commands in a single command string. The fix for [CVE-2026-6464](https://www.postgresql.org/support/security/CVE-2026-6464/) caused `psql` to reject these. * Several fixes that could cause a dump to fail to restore, or cause a restored view to behave differently from the original. These include views and rules that use `AT TIME ZONE` in a `FROM` clause or a target alias named `set`, `tsvector` and `tsquery` values that could fail to reload. * Fix the server becoming stuck, instead of exiting, if the startup process crashes while the server is restarting after a crash. This release also updates time zone data files to tzdata release 2026f. Beginning in November 2026, Canada's Northwest Territories (America/Inuvik) are on year-round UTC-06 and Manitoba (America/Winnipeg) is on year-round UTC-05. This release assumes their TZ abbreviations will be CST and EST respectively (though this could change). It also reflects that Cuba will stay on daylight saving time this winter, and that the `EST5EDT`, `CST6CDT`, `MST7MDT`, and `PST8PDT` zone names now use their indicated UTC offsets for old timestamps instead of the history of their associated city-named zones. Updating -------- All PostgreSQL update releases are cumulative. As with other minor releases, users are not required to dump and reload their database or use `pg_upgrade` in order to apply this update release; you may simply stop PostgreSQL and update its binaries. If you suspect that a GIN index is affected by one of the corruption issues fixed in this release, you should [reindex](https://www.postgresql.org/docs/current/sql-reindex.html) it, for example: ``` REINDEX INDEX your_index_name; ``` If you use `pg_trgm`, you should reindex any GiST indexes that use the `gist_trgm_ops` operator class. If you see `missing chunk number` errors when reading a table, you should reindex the table, which also reindexes its TOAST table, for example: ``` REINDEX TABLE your_table_name; ``` If you use incremental backups, we recommend taking a new full backup after updating and using it as the basis for subsequent incremental backups. If you use partitioned tables, the following query finds `NOT NULL NO INHERIT` constraints on partitioned tables: ``` SELECT conrelid::regclass, conname FROM pg_constraint WHERE contype = 'n' AND connoinherit AND conrelid IN (SELECT oid FROM pg_class WHERE relkind = 'p'); ``` You can remove unwanted constraints with `ALTER TABLE ... DROP CONSTRAINT ...`. Constraints you want to keep should be repaired with `ALTER TABLE ... ALTER CONSTRAINT ... INHERIT`, which will fail if any of the table's partitions contain `NULL` values in that column. If you have B-tree indexes on `bpchar` columns (that is, columns declared as `bpchar` without a length), you should reindex them after updating. Columns declared as `char(n)` are not affected. Users who have skipped one or more update releases may need to run additional post-update steps; please see the release notes from earlier versions for details. For more details, please see the [release notes](https://www.postgresql.org/docs/release/). A Note on PostgreSQL 19 RC 2 ---------------------------- This release marks the second release candidate of PostgreSQL 19. As a release candidate, PostgreSQL 19 RC 2 will be mostly identical to the initial release of PostgreSQL 19, though some more fixes may be applied prior to the general availability of PostgreSQL 19. PostgreSQL 19 RC 2 also includes the fixes in this update release that apply to PostgreSQL 19. The planned date for the general availability of PostgreSQL 19 is November 19, 2026. Please see the "Release Schedule" section for more details. Upgrading to PostgreSQL 19 RC 2 ------------------------------- To upgrade to PostgreSQL 19 RC 2 from earlier versions of PostgreSQL, you will need to use a major version upgrade strategy, e.g. `pg_upgrade` or `pg_dump` / `pg_restore`. For more information, please visit the documentation section on [upgrading](https://www.postgresql.org/docs/19/upgrading.html): [https://www.postgresql.org/docs/19/upgrading.html](https://www.postgresql.org/docs/19/upgrading.html) If you use `pg_upgrade` and have indexes that use [full text search](https://www.postgresql.org/docs/19/textsearch.html), [`pg_trgm`](https://www.postgresql.org/docs/19/pgtrgm.html), or [`fuzzystrmatch`](https://www.postgresql.org/docs/19/fuzzystrmatch.html), please review the ["Migration to Version 19"](https://www.postgresql.org/docs/19/release-19.html#RELEASE-19-MIGRATION) section of the release notes, as you may need to reindex them after upgrading. Changes Since 19 RC 1 --------------------- Several bug fixes were applied to PostgreSQL 19 during the RC 1 period. These include: * Revert a change that allowed [`JSON_ARRAY()` and `JSON_OBJECT()`](https://www.postgresql.org/docs/19/functions-json.html#FUNCTIONS-JSON-CREATION-TABLE) expressions over arrays, composite types, and range types to be used in expression indexes, generated columns, and partition keys, as these indexes could become out-of-date. If you created any of these objects while testing PostgreSQL 19, you need to drop or redefine them before upgrading, as `pg_dump` / `pg_restore` and `pg_upgrade` will fail to recreate them. * Fix wrong results in [`GROUPING SETS`](https://www.postgresql.org/docs/19/queries-table-expressions.html#QUERIES-GROUPING-SETS) queries, where a column not included in the current grouping set could show a value instead of `NULL`. * Fix an infinite loop in `first_value()` and `nth_value()` when using [`IGNORE NULLS`](https://www.postgresql.org/docs/19/functions-window.html) with some `EXCLUDE` frame options. * Fix [eager aggregation](https://www.postgresql.org/docs/19/runtime-config-query.html#GUC-ENABLE-EAGER-AGGREGATE) running volatile functions in a join condition once per group instead of once per row. * Fix [promotion](https://www.postgresql.org/docs/19/warm-standby-failover.html) of a standby server waiting indefinitely if a session is blocked sending data to a client that has stopped reading. * Fix the [`LISTEN`](https://www.postgresql.org/docs/19/sql-listen.html) / [`NOTIFY`](https://www.postgresql.org/docs/19/sql-notify.html) queue becoming stuck if a session is interrupted while reading notifications. * Fix foreign key checks that could fail with an error when the referencing column's type needs a cast to be compared with the referenced column. * Fix performance regressions in hash-based query execution, including hash tables that could be sized far beyond the [`work_mem`](https://www.postgresql.org/docs/19/runtime-config-resource.html#GUC-WORK-MEM) limit based on the planner's row estimate. For a detailed list of fixes, please visit the [open items](https://wiki.postgresql.org/wiki/PostgreSQL_19_Open_Items#resolved_before_19rc2) page. Release Schedule ---------------- This is the second release candidate for PostgreSQL 19. Unless an issue is discovered that requires a delay or an additional release candidate, PostgreSQL 19 should be made generally available on November 19, 2026. For further information please see the [Beta Testing](https://www.postgresql.org/developer/beta/) page. Links ----- * [Download](https://www.postgresql.org/download/) * [Release Notes](https://www.postgresql.org/docs/release/) * [Security](https://www.postgresql.org/support/security/) * [Versioning Policy](https://www.postgresql.org/support/versioning/) * [Beta Testing Information](https://www.postgresql.org/developer/beta/) * [PostgreSQL 19 Beta Release Notes](https://www.postgresql.org/docs/19/release-19.html) * [PostgreSQL 19 Open Issues](https://wiki.postgresql.org/wiki/PostgreSQL_19_Open_Items) * [Submit a Bug](https://www.postgresql.org/account/submitbug/) * [Donate](https://www.postgresql.org/about/donate/) If you have corrections or suggestions for this release announcement, please send them to the [email protected]_ public [mailing list](https://www.postgresql.org/list/).
OpenPGP_signature.asc
Description: OpenPGP digital signature
