From: Bruce Momjian Date: Wed, 15 Apr 2026 01:06:07 +0000 (-0400) Subject: doc: first draft of PG 19 release notes X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fremotes%2Fgithub%2Fmaster;p=thirdparty%2Fpostgresql.git doc: first draft of PG 19 release notes --- 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) +§ + + + + + + + + + <link linkend="logical-replication">Logical Replication</link> + + + + + + +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) +§ +§ + + + + + + + <link linkend="ddl-constraints">Constraints</link> + + + + + + +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) +§ + + + + + + + + <xref linkend="sql-copy"/> + + + + + + +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. + + + + + + + + <xref linkend="sql-explain"/> + + + + + + +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) +§ + + + + + + + + + <link linkend="libpq">Libpq</link> + + + + + + +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. + + + + + + + + + <xref linkend="app-psql"/> + + + + + + +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. + + + + + + + <link + linkend="app-pgdump"><application>pg_dump</application></link>/<link + linkend="app-pg-dumpall"><application>pg_dumpall</application></link>/<link + linkend="app-pgrestore"><application>pg_restore</application></link> + + + + + + +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) +§ + + + + + + + + + <xref linkend="pgupgrade"/> + + + + + + +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) +§ + + + + + + + <xref linkend="pgstatstatements"/> + + + + + + +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 + +