E.1. Release 19 #

E.1.1. Overview
E.1.2. Migration to Version 19
E.1.3. Changes
E.1.4. Acknowledgments

Release date: 2026-??-??, AS OF 2026-04-13

E.1.1. 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.

E.1.2. Migration to Version 19 #

A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 18.6 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.

E.1.3. Changes #

Below you will find a detailed account of the changes between PostgreSQL 19 and the previous major release.

E.1.3.1. Server #

E.1.3.1.1. 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, Richard Guo) §

  • 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) §

  • Convert IS [NOT] DISTINCT FROM NULL to IS [NOT] NULL during constant folding (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.

  • Simplify IS [NOT] TRUE/FALSE/UNKNOWN to plain boolean expressions when the input is proven non-nullable (Richard Guo) §

  • Simplify COALESCE and ROW(...) IS [NOT] NULL to avoid evaluating unnecessary arguments (Richard Guo) § §

  • Simplify IS [NOT] DISTINCT FROM to equality/inequality operators when inputs are proven non-nullable (Richard Guo) §

  • 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) §

E.1.3.1.2. 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 query table scans to mark pages as all-visible in the visibility map (Melanie Plageman) §

    Previously only VACUUM and COPY FREEZE could do this.

  • Allow autovacuum to use parallel vacuum workers (Daniil Davydov) § §

    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.

  • 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 deformation (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) § §

    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) §

E.1.3.1.3. 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) §

E.1.3.1.4. 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.

E.1.3.1.5. Server Configuration #
  • Allow online enabling and disabling of data checksums (Daniel Gustafsson, Magnus Hagander, Tomas Vondra) § §

    Previously the checksum status could only be set at initialization and changed only while the cluster was offline using pg_checksums.

  • Add scoring system to control the order that tables are autovacuumed (Nathan Bossart) §

    The new server variables are autovacuum_freeze_score_weight, autovacuum_multixact_freeze_score_weight, autovacuum_vacuum_score_weight, autovacuum_vacuum_insert_score_weight, and autovacuum_analyze_score_weight.

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

E.1.3.1.6. 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) §

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

E.1.3.2. 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 ... ON CONFLICT DO SELECT ... RETURNING (Andreas Karlsson, Marko Tiikkaja, Viktor Holmberg) §

    This allows conflicting rows to be returned, and optionally locked with FOR UPDATE/SHARE.

E.1.3.3. 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 (Tatsuya Kawata, Daniil Davydov) § §

E.1.3.3.1. 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) §

E.1.3.3.2. 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 ...) had to be used to output partitioned tables. This also improves logical replication table synchronization.

E.1.3.3.3. 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.

E.1.3.4. 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 data 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) §

E.1.3.5. 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 been 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 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) §

E.1.3.6. 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.

E.1.3.7. 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) § § § § § § § § § § § § § §

E.1.3.8. Server Applications #

  • Change vacuumdb's --analyze-only option to analyze partitioned tables when no 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.

  • 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) §

E.1.3.8.2. pg_upgrade #
  • 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 directory (Nathan Bossart) §

    Previously such tablespaces generated an error.

E.1.3.8.3. 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) §

E.1.3.9. 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 and improved shared memory registration function ShmemRequestStruct (Heikki Linnakangas, 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) §

E.1.3.10. 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_dirty_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) §

E.1.3.10.1. pg_stat_statements #
  • 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) §

E.1.4. 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