diff --git a/doc/src/sgml/release-19.sgml b/doc/src/sgml/release-19.sgml
index 8d242b5b281..eeb25095954 100644
--- a/doc/src/sgml/release-19.sgml
+++ b/doc/src/sgml/release-19.sgml
@@ -6,11 +6,3387 @@
Release date:
- 2026-??-??
+ 2026-??-??, AS OF 2026-04-13
-
- This is just a placeholder for now.
-
+
+ Overview
+
+
+ PostgreSQL 19 contains many new features
+ and enhancements, including:
+
+
+
+
+ fill in later
+
+
+
+
+ The above items and other new features of
+ PostgreSQL 19 are explained in more detail
+ in the sections below.
+
+
+
+
+
+
+ Migration to Version 19
+
+
+ A dump/restore using or use of
+ or logical replication is required for
+ those wishing to migrate data from any previous release. See for general information on migrating to new
+ major releases.
+
+
+
+ Version 19 contains a number of changes that may affect compatibility
+ with previous releases. Observe the following incompatibilities:
+
+
+
+
+
+
+
+
+Add server variable password_expiration_warning_threshold to warn about password expiration (Gilles Darold, Nathan Bossart)
+§
+
+
+
+The default warning period is seven days.
+
+
+
+
+
+
+
+Issue a warning after successful MD5 password authentication (Nathan Bossart)
+§
+
+
+
+The warning can be disabled via server variable md5_password_warnings. MD5 passwords were marked marked as deprecated in Postgres 18.
+
+
+
+
+
+
+
+Remove RADIUS support (Thomas Munro)
+§
+
+
+
+Postgres only supported RADIUS over UDP, which is unfixably insecure.
+
+
+
+
+
+
+
+Force standard_conforming_strings to always be "on" in the database server (Tom Lane)
+§
+
+
+
+Server variable escape_string_warning has been removed as unnecessary. Client applications still support "standard_conforming_strings = off" for compatibility with old servers.
+
+
+
+
+
+
+
+Prevent carriage returns and line feeds in database, role, and tablespace names (Mahendra Singh Thalor)
+§
+
+
+
+This was changed to avoid security problems. pg_upgrade will also disallow upgrading from clusters that use such names.
+
+
+
+
+
+
+
+Change the default index opclasses for inet and cidr data types from btree_gist to GiST (Tom Lane)
+§
+§
+
+
+
+The btree_gist inet/cidr opclasses are broken because they can exclude rows that should be returned. Pg_upgrade will fail to upgrade if btree_gist inet/cidr indexes exist in the old
+server.
+
+
+
+
+
+
+
+Stop reordering non-schema objects created by CREATE SCHEMA (Tom Lane, Jian He)
+§
+§
+
+
+
+The goal of the reordering was to avoid dependencies, but it was imperfect. Postgres now uses the specified object ordering, except for foreign keys which are created last.
+
+
+
+
+
+
+
+Disallow system columns from being used in COPY FROM ... WHERE (Tom Lane)
+§
+
+
+
+The values of such columns were not well-defined.
+
+
+
+
+
+
+
+Cause transactions to pass their READ ONLY and DEFERRABLE status to postgres_fdw sessions (Etsuro Fujita)
+§
+
+
+
+This means READ ONLY transactions can no longer modify rows processed by postgres_fdw sessions.
+
+
+
+
+
+
+
+Change default of max_locks_per_transactions from 64 to 128 (Heikki Linnakangas)
+§
+
+
+
+Lock size allocation has changed, so effectively settings must now be doubled to match their capacity in previous releases.
+
+
+
+
+
+
+
+Change JIT to be disabled by default (Jelte Fennema-Nio)
+§
+
+
+
+Previously JIT was enabled by default, and activated based on optimizer costs. Unfortunately, this costing has been determined to be unreliable, so require sites that are doing many
+large analytical queries to manually enable JIT.
+
+
+
+
+
+
+
+Rename wait event type BUFFERPIN to BUFFER (Andres Freund)
+§
+
+
+
+
+
+
+
+Change index access method handlers to use a static IndexAmRoutines structure, rather than dynamically allocated ones (Matthias van de Meent)
+§
+
+
+
+This is a backwardly incompatible.
+
+
+
+
+
+
+
+Remove optimizer hook get_relation_info_hook and add better-placed hook build_simple_rel_hook (Robert Haas)
+§
+
+
+
+
+
+
+
+Remove MULE_INTERNAL encoding (Thomas Munro)
+§
+
+
+
+This encoding was complex and rarely used. Databases using it will need to be dumped and restored with a different encoding.
+
+
+
+
+
+
+
+
+ Changes
+
+
+ Below you will find a detailed account of the changes between
+ PostgreSQL 19 and the previous major
+ release.
+
+
+
+ Server
+
+
+ Optimizer
+
+
+
+
+
+
+Allow NOT INs to be converted to more efficient ANTI JOINs when NULLs are not present (Richard Guo)
+§
+
+
+
+
+
+
+
+Allow more LEFT JOINs to be converted to ANTI JOINs (Tender Wang)
+§
+
+
+
+
+
+
+
+Allow use of Memoize for ANTI JOINS with unique inner sides (Richard Guo)
+§
+
+
+
+
+
+
+
+Improve the planning of semijoins (Richard Guo)
+§
+
+
+
+
+
+
+
+Improve hash join's handling of tuples with NULL join keys (Tom Lane)
+§
+
+
+
+
+
+
+
+Allow IS [NOT] DISTINCT FROM NULL to be converted to IS [NOT] NULL for proven null arguments (Richard Guo)
+§
+
+
+
+The latter form is more easily optimized.
+
+
+
+
+
+
+
+Perform earlier constant folding of "Var IS [NOT] NULL" in the optimizer (Richard Guo)
+§
+
+
+
+This allows for later optimizations.
+
+
+
+
+
+
+
+Allow Append and MergeAppend to consider explicit incremental sorts (Richard Guo)
+§
+
+
+
+
+
+
+
+Allow some aggregate processing to be performed before joins (Richard Guo, Antonin Houska)
+§
+§
+§
+
+
+
+This can reduce the number of rows needed to be processed.
+
+
+
+
+
+
+
+Allow negative values of pg_aggregate.aggtransspace to indicate unbounded memory usage (Richard Guo)
+§
+
+
+
+This information is used by the optimizer in planning memory usage.
+
+
+
+
+
+
+
+Speed up join selectivity computations for large optimizer statistics targets (Ilia Evdokimov, David Geier)
+§
+
+
+
+
+
+
+
+Enable proper optimizer statistics for functions returning boolean values (Tom Lane)
+§
+
+
+
+
+
+
+
+Allow extended statistics on virtual generated columns (Yugo Nagata)
+§
+
+
+
+
+
+
+
+Allow function pg_restore_extended_stats() to restore optimizer extended statistics (Corey Huinker, Michael Paquier, Chao Li)
+§
+§
+§
+§
+
+
+
+
+
+
+
+Add function pg_clear_extended_stats() to remove extended statistics (Corey Huinker, Michael Paquier)
+§
+
+
+
+
+
+
+
+Adjust the optimizer to consider startup costs of partial paths (Robert Haas, Tomas Vondra)
+§
+
+
+
+
+
+
+
+
+ General Performance
+
+
+
+
+
+
+Improve performance of foreign key constraint checks (Junwang Zhao, Amit Langote, Chao Li)
+§
+§
+§
+§
+
+
+
+
+
+
+
+Improve asynchronous I/O read-ahead scheduling for large requests (Andres Freund)
+§
+§
+§
+
+
+
+
+
+
+
+Allow io_method method "worker" to automatically control needed background workers (Thomas Munro)
+§
+
+
+
+New server variables are io_min_workers, io_max_workers, io_worker_idle_timeout, and io_worker_launch_interval.
+
+
+
+
+
+
+
+Allow autovacuum to use parallel vacuum workers (Daniil Davydov, Aleksander Alekseev)
+§
+§
+
+
+
+This is enabled via server variable autovacuum_max_parallel_workers and per-table storage parameter autovacuum_parallel_workers.
+
+
+
+
+
+
+
+Allow TID Range Scans to be parallelized (Cary Huang, David Rowley)
+§
+
+
+
+
+
+
+
+Improve COPY FROM performance for text and CSV output using SIMD CPU instructions (Nazir Bilal Yavuz, Shinya Kato)
+§
+
+
+
+
+
+
+
+Improve NOTIFY to only wake up backends that are listening to specified notifications (Joel Jacobson)
+§
+
+
+
+Previously most backends were woken by NOTIFY.
+
+
+
+
+
+
+
+Allow the addition of columns based on domains containing constraints to usually avoid a table rewrite (Jian He)
+§
+
+
+
+Previously this always required a table rewrite.
+
+
+
+
+
+
+
+Allow IS [NOT] TRUE/FALSE/UNKNOWN to be evaluated earlier for proven non-null arguments (Richard Guo)
+§
+
+
+
+
+
+
+
+Simplify COALESCE and ROW(...) IS [NOT] NULL to avoid evaluating unnecessary arguments (Richard Guo)
+§
+§
+
+
+
+
+
+
+
+Allow IS DISTINCT FROM to be evaluated earlier for non-constant arguments (Richard Guo)
+§
+
+
+
+
+
+
+
+Change the default TOAST compression method from pglz to the more efficient lz4 (Euler Taveira)
+§
+
+
+
+This is done by changing the default for server variable default_toast_compression.
+
+
+
+
+
+
+
+Improve performance of internal row formation (David Rowley)
+§
+
+
+
+
+
+
+
+Improve performance of hash index bulk-deletion by using streaming reads (Xuneng Zhou)
+§
+
+
+
+
+
+
+
+Improve sort performance using radix sorts (John Naylor)
+§
+
+
+
+
+
+
+
+Improve timing performance measurements (Lukas Fittl, Andres Freund, David Geier, Lukas Fittl, David Geier)
+§
+§
+
+
+
+This benefits EXPLAIN (ANALYZE, TIMING) and pg_test_timing, and is controlled via server variable timing_clock_source.
+
+
+
+
+
+
+
+Optimize plpgsql syntax SELECT simple-expression INTO var (Tom Lane)
+§
+
+
+
+
+
+
+
+Improve performance of numeric operations on platforms without 128-bit integer support (Dean Rasheed)
+§
+
+
+
+
+
+
+
+
+ System Views
+
+
+
+
+
+
+Add system view pg_stat_lock and function pg_stat_get_lock() to report per-lock type statistics (Bertrand Drouvot)
+§
+
+
+
+
+
+
+
+Add system view pg_stat_recovery to report recovery status (Xuneng Zhou, Shinya Kato)
+§
+§
+
+
+
+
+
+
+
+Add mem_exceeded_count column to system view pg_stat_replication_slots (Bertrand Drouvot)
+§
+
+
+
+This reports the number of times that logical_decoding_work_mem was exceeded.
+
+
+
+
+
+
+
+Add stats_reset column to system views pg_stat_all_tables, pg_stat_all_indexes, and pg_statio_all_sequences (Bertrand Drouvot, Sami Imseih, Shihao Zhong)
+§
+
+
+
+It also appears in the "sys" and "user" view variants.
+
+
+
+
+
+
+
+Add stats_reset column to system views pg_stat_user_functions and pg_stat_database_conflicts (Bertrand Drouvot, Shihao Zhong)
+§
+§
+
+
+
+
+
+
+
+Add system view pg_stat_autovacuum_scores to report per-table autovacuum details (Sami Imseih)
+§
+
+
+
+
+
+
+
+Add vacuum initiation details to system view pg_stat_progress_vacuum (Shinya Kato)
+§
+
+
+
+The new "started_by" column reports the initiator of the vacuum, and "mode" indicates its aggressiveness.
+
+
+
+
+
+
+
+Add analyze initiation details to system view pg_stat_progress_analyze (Shinya Kato)
+§
+
+
+
+The new "started_by" column reports the initiator of the analyze.
+
+
+
+
+
+
+
+Add a column to system view pg_stat_progress_basebackup to report the type of backup (Shinya Kato)
+§
+
+
+
+Possible values are "full" or "incremental".
+
+
+
+
+
+
+
+Add reporting of the bytes written to WAL for full page images (Shinya Kato)
+§
+
+
+
+This is accessible via system view pg_stat_wal and function pg_stat_get_backend_wal().
+
+
+
+
+
+
+
+Add "connecting" status to system view column pg_stat_wal_receiver.status (Xuneng Zhou)
+§
+
+
+
+
+
+
+
+Add columns to system views pg_stats, pg_stats_ext, and pg_stats_ext_exprs (Corey Huinker)
+§
+
+
+
+Adds table OID and attribute number columns to pg_stats, and table OID and statistics object OID columns to the other two.
+
+
+
+
+
+
+
+Add information about range type extended statistics to system view pg_stats_ext_exprs (Corey Huinker, Michael Paquier)
+§
+
+
+
+
+
+
+
+Add system view pg_dsm_registry_allocations to report dynamic shared memory details (Florents Tselai, Nathan Bossart)
+§
+§
+
+
+
+
+
+
+
+Add column "location" to system views pg_available_extensions and pg_available_extension_versions to report the file system directory of extensions (Matheus Alcantara)
+§
+
+
+
+
+
+
+
+ Monitoring
+
+
+
+
+
+
+Allow log_min_messages log levels to be specified by process type (Euler Taveira)
+§
+
+
+
+The new format is "type:level". A value without a colon controls unspecified process types, enabling backward compatibility.
+
+
+
+
+
+
+
+Add server variable log_autoanalyze_min_duration to log long-running autoanalyze operations (Shinya Kato)
+§
+
+
+
+Server variable log_autovacuum_min_duration now only controls logging of automatic vacuum operations.
+
+
+
+
+
+
+
+Enable server variable log_lock_waits by default (Laurenz Albe)
+§
+
+
+
+
+
+
+
+Add server variable debug_print_raw_parse to log the raw parse tree (Chao Li)
+§
+
+
+
+This is also enabled when the server is started with debug level 3 and higher.
+
+
+
+
+
+
+
+Make messages coming from remote servers appear in the server logs in the same format as local server messages (Vignesh C)
+§
+
+
+
+These include replication, postgres_fdw, and dblink servers.
+
+
+
+
+
+
+
+Add WAL full page write bytes reporting to VACUUM and ANALYZE logging (Shinya Kato)
+§
+
+
+
+
+
+
+
+Add IO wait events for COPY FROM/TO on a pipe/file/program (Nikolay Samokhvalov)
+§
+
+
+
+
+
+
+
+Add wait events for WAL write and flush LSNs (Xuneng Zhou)
+§
+
+
+
+
+
+
+
+Have pg_get_sequence_data function return the sequence page LSN (Vignesh C)
+§
+
+
+
+
+
+
+
+Add function pg_get_multixact_stats() to report multixact activity (Naga Appani)
+§
+
+
+
+
+
+
+
+Issue warnings when the wraparound of xid and multi-xids is less then 100 million (Nathan Bossart)
+§
+
+
+
+The previous warning was 40 million. Warnings are issued to clients and the server log.
+
+
+
+
+
+
+
+
+ Server Configuration
+
+
+
+
+
+
+Allow online enabling and disabling of data checksums (Daniel Gustafsson, Magnus Hagander, Tomas Vondra, Lakshmi N)
+§
+§
+
+
+
+Previously the checksum status could only be set at initialization and changed only while the cluster was offline using pg_checksums.
+
+
+
+
+
+
+
+Add server-side report for SNI (Server Name Indication) Daniel Gustafsson, Jacob Champion)
+§
+
+
+
+New configuration file PGDATA/pg_hosts.conf specifies hostname/key pairs.
+
+
+
+
+
+
+
+Add a new OAUTH flow hook PQAUTHDATA_OAUTH_BEARER_TOKEN_V2 (Jacob Champion)
+§
+§
+
+
+
+This is an improved version of PQAUTHDATA_OAUTH_BEARER_TOKEN by adding the issuer identifier and error message specification.
+
+
+
+
+
+
+
+Allow background workers to be configured to terminate before database-level operations (Aya Iwata)
+§
+
+
+
+
+
+
+
+Allow server variables that represent lists to be emptied by setting the value to NULL (Tom Lane)
+§
+
+
+
+
+
+
+
+Update GB18030 encoding from version 2000 to 2022 (Chao Li, Zheng Tao)
+§
+
+
+
+See the commit message for compatibility details.
+
+
+
+
+
+
+
+
+ Streaming Replication and Recovery
+
+
+
+
+
+
+Allow standbys to wait for LSN values to be replayed via WAIT FOR (Kartyshov Ivan, Alexander Korotkov, Xuneng Zhou)
+§
+§
+
+
+
+
+
+
+
+Improve function pg_sync_replication_slots() to wait for the synchronization completion (Ajin Cherian, Zhijie Hou)
+§
+
+
+
+Previously, certain synchronization failures would not be reported.
+
+
+
+
+
+
+
+Add server variable wal_sender_shutdown_timeout to limit replica synchronization waits during shutdown (Andrey Silitskiy, Hayato Kuroda)
+§
+
+
+
+By default, senders still wait forever for synchronization.
+
+
+
+
+
+
+
+Allow wal_receiver_timeout to be set per subscription and user (Fujii Masao)
+§
+§
+
+
+
+This allows subscriptions to use different wal_receiver_timeout values.
+
+
+
+
+
+
+
+Add optional pid parameter to pg_replication_origin_session_setup() to allow parallelization of SQL-level replication solutions (Doruk Yilmaz, Hayato Kuroda)
+§
+
+
+
+
+
+
+
+
+ Logical Replication
+
+
+
+
+
+
+Allow sequence values stored in subscribers to match the publisher (Vignesh C)
+§
+§
+§
+
+
+
+This is enabled during CREATE SUBSCRIPTION, ALTER SUBSCRIPTION ... REFRESH PUBLICATION, and ALTER SUBSCRIPTION ... REFRESH SEQUENCES. The latter only updates values, not sequence
+existence. Function pg_get_sequence_data() allows inspection of sequence synchronization.
+
+
+
+
+
+
+
+Allow publications to be publish all sequences via the ALL SEQUENCES clause (Vignesh C, Tomas Vondra)
+§
+
+
+
+
+
+
+
+Enhance ALTER SUBSCRIPTION on publications to synchronize the existence of sequences on subscribers to match the publisher (Vignesh C)
+§
+
+
+
+
+
+
+
+Allow CREATE/ALTER PUBLICATION to exclude some tables using the EXCEPT TABLE clause (Vignesh C, Shlok Kyal)
+§
+§
+§
+§
+
+
+
+This is useful when specifying ALL TABLES.
+
+
+
+
+
+
+
+Allow CREATE SUBSCRIPTION to use postgres_fdw foreign data wrapper connection parameters (Jeff Davis)
+§
+
+
+
+The connection parameters are referenced via CREATE SUBSCRIPTION ... SERVER.
+
+
+
+
+
+
+
+When server variable wal_level is "replica", allow the automatic enablement of logical replication when needed (Masahiko Sawada)
+§
+
+
+
+New server variable effective_wal_level reports the effective WAL level.
+
+
+
+
+
+
+
+Add logical subscriber setting retain_conflict_info to retain information needed for conflict resolution (Zhijie Hou)
+§
+
+
+
+
+
+
+
+Report cases where an update is applied to a row that was already deleted on a subscriber (Zhijie Hou)
+§
+
+
+
+This requires the subscriber have retain_dead_tuples enabled.
+
+
+
+
+
+
+
+Re-enable retain_dead_tuples when the necessary transaction retention falls below max_retention_duration (Zhijie Hou)
+§
+
+
+
+
+
+
+
+Add subscription option max_retention_duration to limit retain_dead_tuples retention (Zhijie Hou)
+§
+
+
+
+When the limit is reached, dead tuple retention until manually re-enabled or a new subscription is created.
+
+
+
+
+
+
+
+Add column pg_stat_subscription_stats.sync_seq_error_count to report sequence synchronization errors (Vignesh C)
+§
+§
+
+
+
+
+
+
+
+Rename column sync_error_count to sync_table_error_count in system view pg_stat_subscription_stats (Vignesh C)
+§
+
+
+
+This is necessary since sequences errors are now also tracked.
+
+
+
+
+
+
+
+Add slot synchronization skip information to pg_stat_replication_slots (Shlok Kyal)
+§
+§
+§
+
+
+
+The new columns are slotsync_skip_count, slotsync_last_skip, and slotsync_skip_reason.
+
+
+
+
+
+
+
+
+
+
+ Query Commands
+
+
+
+
+
+
+Add support for SQL Property Graph Queries (SQL/PGQ) (Peter Eisentraut, Ashutosh Bapat)
+§
+§
+§
+
+
+
+Internally these are processed like views so are written as standard relational queries.
+
+
+
+
+
+
+
+Add UPDATE/DELETE FOR PORTION OF (Paul A. Jungwirth)
+§
+§
+
+
+
+This allows operations on a temporal range.
+
+
+
+
+
+
+
+Add GROUP BY ALL syntax to automatically group all non-aggregate and non-window function target list parameters (David Christensen)
+§
+
+
+
+
+
+
+
+Allow GROUP BY to process target list subqueries that have expressions referencing non-subquery columns (Tom Lane)
+§
+
+
+
+Also fix a bug in how GROUPING() handles target list subquery aliases.
+
+
+
+
+
+
+
+Allow window functions to ignore NULLs with IGNORE NULLS/RESPECT NULLS option (Oliver Ford, Tatsuo Ishii)
+§
+
+
+
+Supported window functions are lead, lag, first_value, last_value and nth_value.
+
+
+
+
+
+
+
+Add support for INSERT ... RETURNING ... ON CONFLICT DO SELECT (Andreas Karlsson, Marko Tiikkaja, Viktor Holmberg)
+§
+
+
+
+This allows conflicting rows to be returns, and optionally locked with FOR UPDATE/SHARE.
+
+
+
+
+
+
+
+
+ Utility Commands
+
+
+
+
+
+
+Create a REPACK command that replaces VACUUM FULL and CLUSTER (Antonin Houska)
+§
+
+
+
+The two former commands did similar things, but with confusing names, so unify them as REPACK.
+
+
+
+
+
+
+
+Allow REPACK to rebuild tables without access-exclusive locking (Antonin Houska, Mihail Nikalayeu, Álvaro Herrera)
+§
+§
+§
+
+
+
+This is enabled via the CONCURRENTLY option. Server variables max_repack_replication_slots was also added.
+
+
+
+
+
+
+
+Allow partitions to be merged and split using ALTER TABLE ... MERGE/SPLIT PARTITIONS (Dmitry Koval, Alexander Korotkov, Tender Wang, Richard Guo, Dagfinn Ilmari Mannsåker, Fujii Masao, Jian He)
+§
+§
+
+
+
+
+
+
+
+Allow GRANT/REVOKE to specify the effective role performing the privileges adjustment (Nathan Bossart, Tom Lane)
+§
+
+
+
+The GRANTED BY clause controls this.
+
+
+
+
+
+
+
+Allow CREATE SCHEMA to create more types of non-schema objects (Kirill Reshke, Jian He, Tom Lane)
+§
+
+
+
+
+
+
+
+Allow CHECKPOINT to accept a list of options (Christoph Berg)
+§
+§
+§
+
+
+
+Supported options are MODE and FLUSH_UNLOGGED.
+
+
+
+
+
+
+
+Add CONNECTION clause to CREATE FOREIGN DATA WRAPPER to specify a function to be called for subscription connection parameters (Jeff Davis, Noriyoshi Shinoda)
+§
+§
+
+
+
+
+
+
+
+Add memory usage and parallelism reporting to VACUUM (VERBOSE) and autovacuum logs (Masahiko Sawada, Daniil Davydov)
+§
+§
+
+
+
+
+
+
+ Constraints
+
+
+
+
+
+
+Allow ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED for CHECK constraints (Jian He)
+§
+
+
+
+Previously enforcement changes were only supported for foreign key constraints.
+
+
+
+
+
+
+
+Allow ALTER COLUMN SET EXPRESSION to succeed on virtual columns with CHECK constraints (Jian He)
+§
+
+
+
+This was previously prohibited.
+
+
+
+
+
+
+
+Reduce lock level of ALTER DOMAIN ... VALIDATE CONSTRAINT to match ALTER TABLE ... VALIDATE CONSTRAINT (Jian He)
+§
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Allow multiple headers lines be skipped by COPY FROM (Shinya Kato, Fujii Masao)
+§
+
+
+
+Previously only a single header line could be skipped.
+
+
+
+
+
+
+
+Allow COPY FROM to set invalid input values to NULL (Jian He, Kirill Reshke)
+§
+
+
+
+This is done using the COPY option ON_ERROR SET_NULL.
+
+
+
+
+
+
+
+Allow COPY TO to output JSON format (Joe Conway, Jian He, Andrew Dunstan)
+§
+
+
+
+
+
+
+
+Allow COPY TO in JSON format to output its results as a single JSON array (Joe Conway, Jian He)
+§
+
+
+
+The COPY option is FORCE_ARRAY.
+
+
+
+
+
+
+
+Allow COPY TO to output partitioned tables (Jian He, Ajin Cherian)
+§
+§
+
+
+
+Previously COPY (SELECT ...) has to be used to output partitioned tables.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Add EXPLAIN ANALYZE option IO to report asynchronous IO activity (Tomas Vondra)
+§
+§
+§
+
+
+
+
+
+
+
+Add WAL full page write bytes reporting to EXPLAIN (ANALYZE, WAL) (Shinya Kato)
+§
+
+
+
+
+
+
+
+Add Memoize cache and lookup estimates to EXPLAIN output (Ilia Evdokimov, Lukas Fittl)
+§
+
+
+
+This will help illustrate why Memoize was chosen.
+
+
+
+
+
+
+
+
+
+
+ Data Types
+
+
+
+
+
+
+Add the 64-bit unsigned data type oid8 (Michael Paquier)
+§
+
+
+
+
+
+
+
+Add more jsonpath string methods (Florents Tselai, David E. Wheeler)
+§
+
+
+
+They are l/r/btrim(), lower(), upper(), initcap(), replace(), and split_part(). These are immutable like their non-JSON string variants.
+
+
+
+
+
+
+
+Allow casts between bytea and uuid date types (Dagfinn Ilmari Mannsåker, Aleksander Alekseev)
+§
+
+
+
+
+
+
+
+Add ability to cast between database names and oids using regdatabase (Ian Lawrence Barwick)
+§
+
+
+
+
+
+
+
+Add functions tid_block() and tid_offset() to extract block numbers and offsets from tid values (Ayush Tiwari)
+§
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+Add date, timestamp, and timestamptz versions of random(min, max) (Damien Clochard, Dean Rasheed)
+§
+§
+
+
+
+
+
+
+
+Allow encode() and decode() to process data in base64url and base32hex formats (Andrey Borodin, Aleksander Alekseev, Florents Tselai)
+§
+§
+§
+
+
+
+This format retains ordering, unlike base32.
+
+
+
+
+
+
+
+Add functions to return a set of ranges resulting from range subtraction (Paul A. Jungwirth)
+§
+
+
+
+The functions are range_minus_multi() and multirange_minus_multi(). This is useful to represent range subtractions results with gaps.
+
+
+
+
+
+
+
+Add function error_on_null() to return the supplied parameter, or error on NULL input (Joel Jacobson)
+§
+
+
+
+
+
+
+
+Allow IS JSON to work on domains defined over supported base types (Jian He)
+§
+
+
+
+The supported base domains are TEXT, JSON, JSONB, and BYTEA.
+
+
+
+
+
+
+
+Add full text stemmers for Polish and Esperanto (Tom Lane)
+§
+
+
+
+The Dutch stemmer has also be updated. The old Dutch stemmer is available via "dutch_porter".
+
+
+
+
+
+
+
+Modify pg_read_all_data() and pg_write_all_data() to read/write large objects (Nitin Motiani, Nathan Bossart)
+§
+
+
+
+These functions are designed to allow non-super users to run pg_dump.
+
+
+
+
+
+
+
+Add function pg_get_role_ddl() to output role creation commands (Mario Gonzalez, Bryan Green, Andrew Dunstan, Euler Taveira)
+§
+
+
+
+
+
+
+
+Add function Add pg_get_tablespace_ddl() to output tablespace creation commands (Nishant Sharma, Manni Wood, Andrew Dunstan, Euler Taveira)
+§
+
+
+
+
+
+
+
+Add function pg_get_database_ddl() to output database creation commands (Akshay Joshi, Andrew Dunstan, Euler Taveira)
+§
+
+
+
+
+
+
+
+Allow event triggers to be written using PL/Python (Euler Taveira, Dimitri Fontaine)
+§
+
+
+
+
+
+
+
+
+ Libpq
+
+
+
+
+
+
+Allow libpq connections to specify a service file via "servicefile" (Torsten Förtsch, Ryo Kanbayashi)
+§
+
+
+
+
+
+
+
+Add special libpq protocol version 3.9999 for version testing (Jelte Fennema-Nio)
+§
+
+
+
+
+
+
+
+Add libpq function PQgetThreadLock() to retrieve the current locking callback (Jacob Champion)
+§
+
+
+
+
+
+
+
+Add libpq connection setting oauth_ca_file to specify the OAUTH certificate authority file (Jonathan Gonzalez V., Jacob Champion)
+§
+
+
+
+This can also be set via the PGOAUTHCAFILE environment variable. The default is to use curl's built-in certificates.
+
+
+
+
+
+
+
+Allow custom OAUTH validators to register custom pg_hba.conf authentication options (Jacob Champion)
+§
+
+
+
+
+
+
+
+Allow OAUTH validators to supply failure details (Jacob Champion)
+§
+
+
+
+This is done by setting the ValidatorModuleResult structure member error_detail.
+
+
+
+
+
+
+
+Allow libpq environment variable PGOAUTHDEBUG to specify specific debug options (Zsolt Parragi, Jacob Champion)
+§
+
+
+
+The UNSAFE option still generates all debugging output.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Allow the search path to appear in the psql prompt via "%S" (Florents Tselai)
+§
+
+
+
+This works when psql is connected to Postgres 18 or later.
+
+
+
+
+
+
+
+Allow the hot standby status to appear in the psql prompt via "%i" (Jim Jones)
+§
+
+
+
+
+
+
+
+Modify psql backslash commands to show comments for publications, subscriptions, and extended statistics (Fujii Masao, Jim Jones)
+§
+
+
+
+The modified commands are \dRp+, \dRs+, and \dX+.
+
+
+
+
+
+
+
+Allow control over how booleans are displayed in psql (David G. Johnston)
+§
+
+
+
+The \pset variables are display_true and display_false.
+
+
+
+
+
+
+
+Add psql variable SERVICEFILE to reference the service file location (Ryo Kanbayashi)
+§
+
+
+
+
+
+
+
+Allow psql to more accurately determine if the pager is needed (Erik Wienhold)
+§
+
+
+
+
+
+
+
+Add or improve psql tab completion (Yamaguchi Atsuo, Yugo Nagata, Haruna Miwa, Xuneng Zhou, Yugo Nagata, Dagfinn Ilmari Mannsåker, Fujii Masao, Álvaro Herrera, Jian He, Fujii Masao,
+Tatsuya Kawata, Ian Lawrence Barwick, Vasuki M)
+§
+§
+§
+§
+§
+§
+§
+§
+§
+§
+§
+§
+§
+§
+
+
+
+
+
+
+
+
+ Server Applications
+
+
+
+
+
+
+Change vacuumdb's --analyze-only option to analyze partitioned tables when now targets are specified (Laurenz Albe, Mircea Cadariu)
+§
+
+
+
+Previously it skipped partitioned tables. This now matches the behavior of ANALYZE.
+
+
+
+
+
+
+
+Allow vacuumdb to report its commands without running them using option --dry-run (Corey Huinker)
+§
+
+
+
+
+
+
+
+Allow pg_verifybackup to read WAL files stored in tar archives (Amul Sul)
+§
+
+
+
+Add option --wal-path as an alias for the existing and deprecated --wal-directory option.
+
+
+
+
+
+
+
+Allow pg_waldump to read WAL files stored in tar archives (Amul Sul)
+§
+
+
+
+
+
+
+
+Add pgbench option --continue-on-error to continue after SQL errors (Rintaro Ikeda, Yugo Nagata, Fujii Masao)
+§
+
+
+
+
+
+
+
+Improve the usability of pg_test_timing (Hannu Krosing, Tom Lane)
+§
+§
+
+
+
+Report nanoseconds instead of microseconds. In addition to histogram output, output a second table that reports exact timings, with an optional cutoff set by --cutoff.
+
+
+
+
+
+
+ pg_dump/pg_dumpall/pg_restore
+
+
+
+
+
+
+Allow pg_dumpall to product output in non-text formats (Mahendra Singh Thalor, Andrew Dunstan)
+§
+§
+
+
+
+The new output formats are custom, directory, or tar.
+
+
+
+
+
+
+
+Allow pg_dump to include restorable extended statistics (Corey Huinker)
+§
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Have pg_upgrade copy large object metadata files rather than use COPY (Nathan Bossart)
+§
+§
+
+
+
+This is possible when upgrading from Postgres 16 and later.
+
+
+
+
+
+
+
+Allow pg_upgrade to use COPY for large object metadata (Nathan Bossart)
+§
+
+
+
+This is used when upgrading from Postgres major versions 12-15.
+
+
+
+
+
+
+
+Improve pg_upgrade performance when restoring large object metadata for origin servers version 11 and earlier (Nathan Bossart)
+§
+
+
+
+
+
+
+
+Allow pg_upgrade to process non-default tablespaces stored in the PGDATA director (Nathan Bossart)
+§
+
+
+
+Previously such tablespaces generated an error.
+
+
+
+
+
+
+
+
+ Logical Replication Applications
+
+
+
+
+
+
+Allow pg_createsubscriber to ignore specified publications that already exist (Shubham Khanna)
+§
+
+
+
+Previously this generated an error.
+
+
+
+
+
+
+
+Change the way pg_createsubscriber stores recovery parameters (Alyona Vinter)
+§
+
+
+
+Changes are stored in optionally-included pg_createsubscriber.conf rather than directly in postgresql.auto.conf.
+
+
+
+
+
+
+
+Add pg_createsubscriber option -l/--logdir to redirect output to files (Gyan Sreejith, Hayato Kuroda)
+§
+
+
+
+
+
+
+
+
+
+
+ Source Code
+
+
+
+
+
+
+Restore support for AIX (Aditya Kamath, Srirama Kucherlapati, Peter Eisentraut)
+§
+§
+
+
+
+This uses gcc and only supports 64-bit builds.
+
+
+
+
+
+
+
+Change Solaris to use unnamed POSIX semaphores (Tom Lane)
+§
+
+
+
+Previously it used System V semaphores.
+
+
+
+
+
+
+
+Require Visual Studio 2019 or later (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Allow MSVC to create PL/Python using the Python Limited API (Bryan Green)
+§
+
+
+
+
+
+
+
+Allow building on AArch64 using MSVC (Niyas Sait, Greg Burd, Dave Cramer)
+§
+
+
+
+
+
+
+
+Allow execution stack backtraces on Windows using DbgHelp (Bryan Green)
+§
+
+
+
+
+
+
+
+Change the supported C language version to C11 (Peter Eisentraut)
+§
+§
+
+
+
+Previously C99 was used.
+
+
+
+
+
+
+
+Use standard C23 and C++ attributes if available (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Allow C++ compiler mode to be used with ICU (John Naylor)
+§
+
+
+
+
+
+
+
+Optionally use AVX2 CPU instructions for calculating page checksums (Matthew Sterrett, Andrew Kim)
+§
+
+
+
+
+
+
+
+Optionally use ARM Crypto Extension to Compute CRC32C (John Naylor)
+§
+
+
+
+
+
+
+
+Change hex_encode() and hex_decode() to use SIMD CPU instructions (Nathan Bossart, Chiranmoy Bhattacharya)
+§
+
+
+
+
+
+
+
+Require Meson version 0.57.2 or later (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Add Meson option to build both shared and static libraries, or only shared (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Update Unicode data to version 17.0.0 (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Add hooks planner_setup_hook and planner_shutdown_hook (Robert Haas)
+§
+
+
+
+
+
+
+
+Allow extensions to replace set-returning functions in the FROM clause with SQL queries (Paul A. Jungwirth)
+§
+
+
+
+
+
+
+
+Make multixid members 64-bit (Maxim Orlov)
+§
+
+
+
+
+
+
+
+Add fake LSN support to hash index AM (Peter Geoghegan)
+§
+
+
+
+
+
+
+
+Change FDW function prototypes to use uint* instead of bit* typedefs (Nathan Bossart)
+§
+
+
+
+
+
+
+
+Allow logical decoding plugins to specify if they do not access shared catalogs (Antonin Houska)
+§
+
+
+
+
+
+
+
+Add simplified shared memory registration function ShmemRequestStruct() (Ashutosh Bapat)
+§
+
+
+
+Functions ShmemInitStruct() and ShmemInitHash() remain for backward compatibility.
+
+
+
+
+
+
+
+Add server variable debug_exec_backend to report how parameters are passed to new backends (Daniel Gustafsson)
+§
+
+
+
+
+
+
+
+Document the environment variables that control the regression tests (Michael Paquier)
+§
+
+
+
+
+
+
+
+Add documentation section about temporal tables (Paul A. Jungwirth)
+§
+
+
+
+
+
+
+
+Update documented systemd example to include a restart setting (Andrew Jackson)
+§
+
+
+
+
+
+
+
+
+ Additional Modules
+
+
+
+
+
+
+Add pg_plan_advice module to stabilize and control planner decisions (Robert Haas)
+§
+§
+
+
+
+
+
+
+
+Add extension pg_stash_advice to allow per-query-id advice to be specified (Robert Haas, Lukas Fittl)
+§
+§
+
+
+
+
+
+
+
+Refactor pg_buffercache reporting of shared memory mapping (Bertrand Drouvot)
+§
+
+
+
+New function pg_buffercache_os_pages() and system view pg_buffercache_os_pages allow reporting of shared memory mapping; the function optionally includes NUMA details. Function
+pg_buffercache_numa_pages() remains for backward compatibility.
+
+
+
+
+
+
+
+Add functions to pg_buffercache to mark buffers as dirty (Nazir Bilal Yavuz)
+§
+
+
+
+The functions are pg_buffercache_mark_dirty(), pg_buffercache_mark_dirt_relation(), and pg_buffercache_mark_dirty_all().
+
+
+
+
+
+
+
+Allow pushdown of array comparisons in prepared statements to postgres_fdw foreign servers (Alexander Pyhalov)
+§
+
+
+
+
+
+
+
+Allow the retrieval of statistics from foreign data wrapper servers (Corey Huinker, Etsuro Fujita)
+§
+
+
+
+This is enabled for postgres_fdw by using the option restore_stats. The default is for ANALYZE to retrieve rows from the remote server to locally generate statistics.
+
+
+
+
+
+
+
+Allow file_fdw to read files or program output that uses multi-line headers (Shinya Kato)
+§
+
+
+
+
+
+
+
+Add server variable auto_explain.log_io to add IO reporting to auto_explain (Tomas Vondra)
+§
+
+
+
+
+
+
+
+Allow auto_explain to add extension-specific EXPLAIN options via server variable auto_explain.log_extension_options (Robert Haas)
+§
+
+
+
+
+
+
+
+Allow btree_gin to match partial qualifications (Tom Lane)
+§
+§
+
+
+
+
+
+
+
+Improve performance of bloom indexes by using streaming reads (Xuneng Zhou)
+§
+§
+
+
+
+
+
+
+
+Improve performance of pgstattuple by using streaming reads (Xuneng Zhou)
+§
+
+
+
+
+
+
+
+Allow fuzzystrmatch's dmetaphone to use single-byte encodings beyond ASCII (Peter Eisentraut)
+§
+
+
+
+
+
+
+
+Modify oid2name --extended to report the relation file path (David Bidoc)
+§
+
+
+
+
+
+
+
+
+
+
+
+
+
+Show sizes of FETCH queries as constants in pg_stat_statements (Sami Imseih)
+§
+
+
+
+Fetches of different sizes will now be grouped together in pg_stat_statements output.
+
+
+
+
+
+
+
+Add generic and custom plans counts to pg_stat_statements (Sami Imseih)
+§
+
+
+
+
+
+
+
+
+
+
+
+
+ Acknowledgments
+
+
+ The following individuals (in alphabetical order) have contributed
+ to this release as patch authors, committers, reviewers, testers,
+ or reporters of issues.
+
+
+
+ fill in later
+
+