↑↓ select ↵ open ⌫ change scope Open full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

DocumentationVersion comparison

POSTGRESQL · VERSION COMPARE

PostgreSQL 19beta4 release changes

All features, fixes, and compatibility notes in this release, with related records from other versions.

All changes in this release
All changes in this release

Includes changes after the source version through the target. A major version name means its initial release.

From PostgreSQL 9.0 onward: 17 major branches and 352 release notes. Updated 2026-09-26.

PostgreSQL 19beta4 has not been released. These notes describe the indicated preview build.

Complete release changes

19beta4

Snapshot 2026-09-14

Export JSON
198changesFeatures, fixes, improvements
1releaseGrouped by release
0CVEsVulnerability IDs mentioned in these notes

19.0 Preview

PostgreSQL 19beta4

Migration and compatibility

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:

CompatibilityAdd server variable password_expiration_warning_threshold to warn about password expiration

Compatibility

Add server variable password_expiration_warning_threshold to warn about password expiration (Gilles Darold, Nathan Bossart) §

The default warning period is seven days.

CompatibilityIssue a warning after successful MD5 password authentication

Compatibility

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 as deprecated in PostgreSQL 18.

CompatibilityRemove RADIUS support

Compatibility

Remove RADIUS support (Thomas Munro) §

PostgreSQL only supported RADIUS over UDP, which is unfixably insecure.

CompatibilityForce standard_conforming_strings to always be on in the database server

Compatibility

Force standard_conforming_strings to always be on in the database server (Tom Lane) §

Dumps created using pre-PostgreSQL 19 versions of pg_dump or pg_dumpall, and using standard_conforming_strings = off, will not properly load into PostgreSQL 19 and later servers. Users should create dumps using PostgreSQL 19 or later versions of these applications, or use standard_conforming_strings = on.

Client applications still support operations with servers having standard_conforming_strings = off, for compatibility with old servers. The server variable escape_string_warning has been removed as unnecessary.

CompatibilityDisallow carriage returns and line feeds in database, role, and tablespace names

Compatibility

Disallow carriage returns and line feeds in database, role, and tablespace names (Mahendra Singh Thalor) §

pg_upgrade will also disallow upgrading of clusters that use such names. This was changed to avoid security problems.

CompatibilityChange the default index opclasses for inet and cidr data types from btree_gist to GiST

Compatibility

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 disallow upgrading of clusters with btree_gist inet/cidr indexes.

CompatibilityDisallow system columns from being used in COPY FROM ... WHERE

Compatibility

Disallow system columns from being used in COPY FROM ... WHERE (Tom Lane) §

The values of such columns were not well-defined.

CompatibilityChange a json_array() call which returns no rows to return an empty JSON array

Compatibility

Change a json_array() call which returns no rows to return an empty JSON array (Richard Guo) §

This previously returned NULL.

CompatibilityCause transactions to pass their READ ONLY and DEFERRABLE status to postgres_fdw sessions

Compatibility

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.

CompatibilityChange default of max_locks_per_transaction from 64 to 128

Compatibility

Change default of max_locks_per_transaction 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.

CompatibilityChange JIT to be disabled by default

Compatibility

Change JIT to be disabled by default (Jelte Fennema-Nio) §

Previously JIT was enabled by default, and activated based on optimizer costs, but this costing has been determined to be unreliable. This change requires sites that are doing many large analytical queries to manually enable JIT.

CompatibilityRename column sync_error_count to sync_table_error_count in system view pg_stat_subscription_stats

Compatibility

Rename column sync_error_count to sync_table_error_count in system view pg_stat_subscription_stats (Vignesh C) §

This is necessary since sequence errors are now tracked separately.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

CompatibilityRename wait event type BUFFERPIN to BUFFER

Compatibility

Rename wait event type BUFFERPIN to BUFFER (Andres Freund) §

CompatibilityChange index access method handlers to use a static IndexAmRoutines structure, rather than dynamically allocated ones

Compatibility

Change index access method handlers to use a static IndexAmRoutines structure, rather than dynamically allocated ones (Matthias van de Meent) §

CompatibilityRemove optimizer hook get_relation_info_hook and add better-placed hook build_simple_rel_hook

Compatibility

Remove optimizer hook get_relation_info_hook and add better-placed hook build_simple_rel_hook (Robert Haas) §

CompatibilityChange psql's \crosstabview command to honor the \pset null setting

Compatibility

Change psql's \crosstabview command to honor the \pset null setting (Chao Li) §

CompatibilityRemove MULE_INTERNAL encoding

Compatibility

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.

FeaturesAllow NOT IN clauses to be converted to more efficient ANTI JOINs when NULLs are not present

Server / Optimizer

Allow NOT IN clauses to be converted to more efficient ANTI JOINs when NULLs are not present (Richard Guo) §

FeaturesAllow more LEFT JOINs to be converted to ANTI JOINs

Server / Optimizer

Allow more LEFT JOINs to be converted to ANTI JOINs (Tender Wang, Richard Guo) §

FeaturesAllow use of Memoize for ANTI JOINs with unique inner sides

Server / Optimizer

Allow use of Memoize for ANTI JOINs with unique inner sides (Richard Guo) §

FeaturesAllow some aggregate processing to be performed before joins

Server / Optimizer

Allow some aggregate processing to be performed before joins (Richard Guo, Antonin Houska) § § §

This can reduce the number of rows needed to be processed.

FeaturesImprove hash join's handling of tuples with NULL join keys

Server / Optimizer

Improve hash join's handling of tuples with NULL join keys (Tom Lane) §

FeaturesImprove the planning of semijoins

Server / Optimizer

Improve the planning of semijoins (Richard Guo) §

FeaturesAllow Append and MergeAppend to consider explicit incremental sorts

Server / Optimizer

Allow Append and MergeAppend to consider explicit incremental sorts (Richard Guo) §

FeaturesConvert IS [NOT] DISTINCT FROM NULL to IS [NOT] NULL during constant folding

Server / Optimizer

Convert IS [NOT] DISTINCT FROM NULL to IS [NOT] NULL during constant folding (Richard Guo) §

The latter form is more easily optimized.

FeaturesSimplify IS [NOT] DISTINCT FROM to equality/inequality operators when inputs are proven non-nullable

Server / Optimizer

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

FeaturesPerform earlier constant folding of var IS [NOT] NULL in the optimizer

Server / Optimizer

Perform earlier constant folding of var IS [NOT] NULL in the optimizer (Richard Guo) §

This allows for later optimizations.

FeaturesSimplify COALESCE() and ROW(...) IS [NOT] NULL to avoid evaluating unnecessary arguments

Server / Optimizer

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

FeaturesSimplify IS [NOT] TRUE/FALSE/UNKNOWN to plain boolean expressions when the input is proven non-nullable

Server / Optimizer

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

PerformanceSpeed up join selectivity computations for large optimizer statistics targets

Server / Optimizer

Speed up join selectivity computations for large optimizer statistics targets (Ilia Evdokimov, David Geier) §

FeaturesEnable proper optimizer statistics for functions returning boolean values

Server / Optimizer

Enable proper optimizer statistics for functions returning boolean values (Tom Lane) §

FeaturesAllow extended statistics on virtual generated columns

Server / Optimizer

Allow extended statistics on virtual generated columns (Yugo Nagata) §

FeaturesAllow function pg_restore_extended_stats() to restore optimizer extended statistics

Server / Optimizer

Allow function pg_restore_extended_stats() to restore optimizer extended statistics (Corey Huinker, Michael Paquier, Chao Li) § § § §

FeaturesAdd function pg_clear_extended_stats() to remove extended statistics

Server / Optimizer

Add function pg_clear_extended_stats() to remove extended statistics (Corey Huinker, Michael Paquier) §

FeaturesAdjust the optimizer to consider startup costs of partial paths

Server / Optimizer

Adjust the optimizer to consider startup costs of partial paths (Robert Haas, Tomas Vondra) §

FeaturesAllow negative values of pg_aggregate.aggtransspace to indicate unbounded memory usage

Server / Optimizer

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.

PerformanceImprove performance of foreign key constraint checks

Server / General Performance

Improve performance of foreign key constraint checks (Junwang Zhao, Amit Langote, Chao Li) § §

PerformanceImprove asynchronous I/O read-ahead scheduling for large requests

Server / General Performance

Improve asynchronous I/O read-ahead scheduling for large requests (Andres Freund) § § §

PerformanceAllow io_method method worker to automatically control needed background workers

Server / General Performance

Allow io_method method worker to automatically control needed background workers (Thomas Munro) §

The new server variables are io_min_workers, io_max_workers, io_worker_idle_timeout, and io_worker_launch_interval.

PerformanceAllow query table scans to mark pages as all-visible in the visibility map

Server / General Performance

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.

PerformanceAllow autovacuum to use parallel autovacuum workers

Server / General Performance

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

The maximum number of workers is controlled by server variable autovacuum_max_parallel_workers and per-table storage parameter autovacuum_parallel_workers.

PerformanceAllow TID Range Scans to be parallelized

Server / General Performance

Allow TID Range Scans to be parallelized (Cary Huang, David Rowley) §

PerformanceImprove COPY FROM performance for text and CSV input using SIMD CPU instructions

Server / General Performance

Improve COPY FROM performance for text and CSV input using SIMD CPU instructions (Nazir Bilal Yavuz, Shinya Kato) §

PerformanceImprove NOTIFY to only wake up backends that are listening to specified notifications

Server / General Performance

Improve NOTIFY to only wake up backends that are listening to specified notifications (Joel Jacobson) §

Previously most backends were woken by NOTIFY.

PerformanceChange wal_compression equals on to use the best WAL compression method available

Server / General Performance

Change wal_compression equals on to use the best WAL compression method available (wenhui qiu) §

Previously this always used pglz.

PerformanceChange the default TOAST compression method from pglz to the more efficient lz4

Server / General Performance

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.

PerformanceImprove performance of internal row deformation

Server / General Performance

Improve performance of internal row deformation (David Rowley) §

PerformanceImprove performance of repeated UTF-8 case-folding operations

Server / General Performance

Improve performance of repeated UTF-8 case-folding operations (Andreas Karlsson) §

PerformanceImprove performance of hash index bulk-deletion and GIN index vacuuming using streaming reads

Server / General Performance

Improve performance of hash index bulk-deletion and GIN index vacuuming using streaming reads (Xuneng Zhou) § §

PerformanceImprove sort performance using radix sort

Server / General Performance

Improve sort performance using radix sort (John Naylor) §

PerformanceImprove timing performance measurements

Server / General Performance

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.

PerformanceOptimize plpgsql syntax SELECT simple-expression INTO var

Server / General Performance

Optimize plpgsql syntax SELECT simple-expression INTO var (Tom Lane) §

FeaturesAdd system view pg_stat_lock and function pg_stat_get_lock() to report per-lock-type statistics

Server / System Views

Add system view pg_stat_lock and function pg_stat_get_lock() to report per-lock-type statistics (Bertrand Drouvot) §

FeaturesAdd system view pg_stat_recovery to report recovery status

Server / System Views

Add system view pg_stat_recovery to report recovery status (Xuneng Zhou, Shinya Kato) § §

FeaturesAdd system view pg_stat_autovacuum_scores to report per-table autovacuum details

Server / System Views

Add system view pg_stat_autovacuum_scores to report per-table autovacuum details (Sami Imseih) §

FeaturesAdd system view pg_dsm_registry_allocations to report dynamic shared memory details

Server / System Views

Add system view pg_dsm_registry_allocations to report dynamic shared memory details (Florents Tselai, Nathan Bossart) § §

FeaturesAdd vacuum initiation details to system view pg_stat_progress_vacuum

Server / System Views

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.

FeaturesAdd analyze initiation details to system view pg_stat_progress_analyze

Server / System Views

Add analyze initiation details to system view pg_stat_progress_analyze (Shinya Kato) §

The new started_by column reports the initiator of the analyze.

FeaturesAdd mem_exceeded_count column to system view pg_stat_replication_slots

Server / System Views

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.

FeaturesAdd slot synchronization skip information to pg_stat_replication_slots and pg_replication_slots

Server / System Views

Add slot synchronization skip information to pg_stat_replication_slots and pg_replication_slots (Shlok Kyal) § § §

The new columns are slotsync_skip_count, slotsync_last_skip, and slotsync_skip_reason.

FeaturesAdd update_deleted column to system view pg_stat_subscription_stats

Server / System Views

Add update_deleted column to system view pg_stat_subscription_stats (Zhijie Hou) §

This reports the number of rows where updates were ignored due to concurrent deletes. This requires the subscriber have retain_dead_tuples enabled.

FeaturesAdd sync_seq_error_count column to system view pg_stat_subscription_stats to report sequence synchronization errors

Server / System Views

Add sync_seq_error_count column to system view pg_stat_subscription_stats to report sequence synchronization errors (Vignesh C) § §

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

FeaturesAdd stats_reset column to system views pg_stat_all_tables, pg_stat_all_indexes, and pg_statio_all_sequences

Server / System Views

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.

FeaturesAdd stats_reset column to system views pg_stat_user_functions and pg_stat_database_conflicts

Server / System Views

Add stats_reset column to system views pg_stat_user_functions and pg_stat_database_conflicts (Bertrand Drouvot, Shihao Zhong) § §

FeaturesAdd location column to system views pg_available_extensions and pg_available_extension_versions to report the file system directory of extensions

Server / System Views

Add location column to system views pg_available_extensions and pg_available_extension_versions to report the file system directory of extensions (Matheus Alcantara) §

FeaturesAdd backup_type column to system view pg_stat_progress_basebackup to report the type of backup

Server / System Views

Add backup_type column to system view pg_stat_progress_basebackup to report the type of backup (Shinya Kato) §

Possible values are full or incremental.

FeaturesAdd connecting value to system view column pg_stat_wal_receiver.status

Server / System Views

Add connecting value to system view column pg_stat_wal_receiver.status (Xuneng Zhou) §

FeaturesAdd reporting of the bytes written to WAL for full page images

Server / System Views

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().

FeaturesAdd columns to system views pg_stats, pg_stats_ext, and pg_stats_ext_exprs

Server / System Views

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.

FeaturesAdd information about range type extended statistics to system view pg_stats_ext_exprs

Server / System Views

Add information about range type extended statistics to system view pg_stats_ext_exprs (Corey Huinker, Michael Paquier) §

FeaturesAllow log_min_messages log levels to be specified by process type

Server / 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 all process types, allowing backward compatibility.

FeaturesAdd server variable log_autoanalyze_min_duration to log long-running analyze operations by autovacuum operations

Server / Monitoring

Add server variable log_autoanalyze_min_duration to log long-running analyze operations by autovacuum operations (Shinya Kato) §

Server variable log_autovacuum_min_duration now only controls logging of vacuum operations by autovacuum.

FeaturesEnable server variable log_lock_waits by default

Server / Monitoring

Enable server variable log_lock_waits by default (Laurenz Albe) §

FeaturesAdd server variable debug_print_raw_parse to log raw parse trees

Server / Monitoring

Add server variable debug_print_raw_parse to log raw parse trees (Chao Li) §

This is also enabled when the server is started with debug level three and higher.

FeaturesMake messages coming from remote servers appear in the server logs in the same format as local server messages

Server / Monitoring

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.

FeaturesAdd reporting of WAL full-page write bytes to VACUUM and ANALYZE logging

Server / Monitoring

Add reporting of WAL full-page write bytes to VACUUM and ANALYZE logging (Shinya Kato) §

FeaturesAdd IO wait events for COPY FROM/TO on a pipe, file, or program

Server / Monitoring

Add IO wait events for COPY FROM/TO on a pipe, file, or program (Nikolay Samokhvalov) §

FeaturesAdd wait events for commit_delay and for WAL write and flush LSNs

Server / Monitoring

Add wait events for commit_delay and for WAL write and flush LSNs (Xuneng Zhou) § §

FeaturesHave pg_get_sequence_data() return the sequence page LSN

Server / Monitoring

Have pg_get_sequence_data() return the sequence page LSN (Vignesh C) §

FeaturesAdd function pg_get_multixact_stats() to report multixact activity

Server / Monitoring

Add function pg_get_multixact_stats() to report multixact activity (Naga Appani) §

FeaturesIssue warnings when the wraparound of xid and multi-xids is less than 100 million

Server / Monitoring

Issue warnings when the wraparound of xid and multi-xids is less than 100 million (Nathan Bossart) §

The previous warning was 40 million. Warnings are issued to clients and in the server log.

FeaturesAdd scoring system to control the order that tables are processed by autovacuum

Server / Server Configuration

Add scoring system to control the order that tables are processed by autovacuum (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.

FeaturesAdd server-side support for SNI (Server Name Indication)

Server / Server Configuration

Add server-side support for SNI (Server Name Indication) (Daniel Gustafsson, Jacob Champion) §

New configuration file PGDATA/pg_hosts.conf specifies hostname/key pairs.

FeaturesAllow OAuth validators to register custom pg_hba.conf authentication options

Server / Server Configuration

Allow OAuth validators to register custom pg_hba.conf authentication options (Jacob Champion, Zsolt Parragi) §

FeaturesAllow roles pg_read_all_data and pg_write_all_data to read/write large objects

Server / Server Configuration

Allow roles pg_read_all_data and pg_write_all_data to read/write large objects (Nitin Motiani, Nathan Bossart) §

These roles are designed to allow non-super users to run pg_dump.

FeaturesAllow background workers to be configured to terminate before database-level operations

Server / Server Configuration

Allow background workers to be configured to terminate before database-level operations (Aya Iwata) §

This allows database-level operations to complete more quickly since blocking background workers can now be terminated.

FeaturesAllow server variables that represent lists to be emptied by setting the value to NULL

Server / Server Configuration

Allow server variables that represent lists to be emptied by setting the value to NULL (Tom Lane) §

FeaturesUpdate GB18030 encoding from version 2000 to 2022

Server / Server Configuration

Update GB18030 encoding from version 2000 to 2022 (Chao Li, Zheng Tao) §

See the commit message for compatibility details.

FeaturesAdd WAIT command to allow standbys to wait for LSN values to be written, flushed, or replayed

Server / Streaming Replication and Recovery

Add WAIT command to allow standbys to wait for LSN values to be written, flushed, or replayed (Kartyshov Ivan, Alexander Korotkov, Xuneng Zhou) § §

FeaturesImprove function pg_sync_replication_slots() to wait for replication synchronization completion

Server / Streaming Replication and Recovery

Improve function pg_sync_replication_slots() to wait for replication synchronization completion (Ajin Cherian, Zhijie Hou) §

Previously, certain synchronization failures would not be reported.

FeaturesAdd server variable wal_sender_shutdown_timeout to limit replica synchronization waits during shutdown

Server / Streaming Replication and Recovery

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.

FeaturesAllow sequence values stored in subscribers to match the publisher

Server / 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.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

FeaturesAllow CREATE/ALTER PUBLICATION to publish all sequences

Server / Logical Replication

Allow CREATE/ALTER PUBLICATION to publish all sequences (Vignesh C, Tomas Vondra) §

This is enabled with the ALL SEQUENCES clause.

FeaturesAllow ALTER SUBSCRIPTION on publications to synchronize the existence of sequences on subscribers to match the publisher

Server / Logical Replication

Allow ALTER SUBSCRIPTION on publications to synchronize the existence of sequences on subscribers to match the publisher (Vignesh C) §

This is enabled with the REFRESH SEQUENCES clause.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

FeaturesAllow CREATE/ALTER PUBLICATION to exclude some tables

Server / Logical Replication

Allow CREATE/ALTER PUBLICATION to exclude some tables (Vignesh C, Shlok Kyal) § § § §

This is controlled with the EXCEPT clause, and is useful when specifying ALL TABLES.

FeaturesAdd CREATE/ALTER SUBSCRIPTION setting retain_dead_tuples to retain information needed for conflict detection

Server / Logical Replication

Add CREATE/ALTER SUBSCRIPTION setting retain_dead_tuples to retain information needed for conflict detection (Zhijie Hou) § § §

Also add setting max_retention_duration to limit retain_dead_tuples retention.

FeaturesAllow CREATE SUBSCRIPTION to use postgres_fdw foreign data wrapper connection parameters

Server / Logical Replication

Allow CREATE SUBSCRIPTION to use postgres_fdw foreign data wrapper connection parameters (Jeff Davis) §

The connection parameters are referenced via CREATE SUBSCRIPTION ... SERVER.

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

FeaturesWhen server variable wal_level is replica, allow automatic enablement of logical replication when needed

Server / Logical Replication

When server variable wal_level is replica, allow automatic enablement of logical replication when needed (Masahiko Sawada) §

New server variable effective_wal_level, application pg_controldata, and function pg_control_checkpoint() report the effective WAL level.

FeaturesAllow wal_receiver_timeout to be set per-subscription and user

Server / Logical Replication

Allow wal_receiver_timeout to be set per-subscription and user (Fujii Masao) § §

This allows subscribers to use different wal_receiver_timeout values.

FeaturesAdd optional pid parameter to pg_replication_origin_session_setup() to allow parallelization of SQL-level replication solutions

Server / Logical Replication

Add optional pid parameter to pg_replication_origin_session_setup() to allow parallelization of SQL-level replication solutions (Doruk Yilmaz, Hayato Kuroda) §

FeaturesAllow GROUP BY to process target list subqueries that have expressions referencing non-subquery columns

Query Commands

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.

FeaturesAllow window functions to ignore NULLs with the IGNORE NULLS/RESPECT NULLS clause

Query Commands

Allow window functions to ignore NULLs with the IGNORE NULLS/RESPECT NULLS clause (Oliver Ford, Tatsuo Ishii) §

Supported window functions are lead(), lag(), first_value(), last_value(), and nth_value().

FeaturesAdd support for INSERT ... ON CONFLICT DO SELECT ... RETURNING

Query Commands

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.

FeaturesAdd REPACK command which replaces VACUUM FULL and CLUSTER

Utility Commands

Add REPACK command which replaces VACUUM FULL and CLUSTER (Antonin Houska) §

The two former commands did similar things, but with confusing names, so unify them as REPACK. The old commands have been retained for compatibility.

FeaturesAllow REPACK to rebuild tables without access-exclusive locking

Utility Commands

Allow REPACK to rebuild tables without access-exclusive locking (Antonin Houska, Mihail Nikalayeu, Álvaro Herrera) § § §

This is enabled via the CONCURRENTLY option. Server variable max_repack_replication_slots was also added.

FeaturesAllow GRANT/REVOKE to specify the effective role performing the privileges adjustment

Utility Commands

Allow GRANT/REVOKE to specify the effective role performing the privileges adjustment (Nathan Bossart, Tom Lane) §

The GRANTED BY clause controls this.

FeaturesSupport forward references in FOREIGN KEY constraint clauses within CREATE SCHEMA

Utility Commands

Support forward references in FOREIGN KEY constraint clauses within CREATE SCHEMA (Jian He, Tom Lane) §

FeaturesAllow CHECKPOINT to accept a list of options

Utility Commands

Allow CHECKPOINT to accept a list of options (Christoph Berg) § § §

Supported options are MODE and FLUSH_UNLOGGED.

FeaturesAdd CONNECTION clause to CREATE FOREIGN DATA WRAPPER to specify a function to be called for subscription connection parameters

Utility Commands

Add CONNECTION clause to CREATE FOREIGN DATA WRAPPER to specify a function to be called for subscription connection parameters (Jeff Davis, Noriyoshi Shinoda) § §

Related records (1)

“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.

FeaturesAdd SUPPORT clause to CREATE AGGREGATE so extensions can specify support functions to optimize aggregate calls

Utility Commands

Add SUPPORT clause to CREATE AGGREGATE so extensions can specify support functions to optimize aggregate calls (Tom Lane) §

FeaturesAdd memory usage and parallelism reporting to VACUUM (VERBOSE) and autovacuum logs

Utility Commands

Add memory usage and parallelism reporting to VACUUM (VERBOSE) and autovacuum logs (Tatsuya Kawata, Daniil Davydov) § §

FeaturesAllow ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED for CHECK constraints

Utility Commands / Constraints

Allow ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED for CHECK constraints (Jian He) §

Previously enforcement changes were only supported for foreign key constraints.

FeaturesAllow ALTER TABLE ... COLUMN SET EXPRESSION to succeed on virtual columns with CHECK constraints

Utility Commands / Constraints

Allow ALTER TABLE ... COLUMN SET EXPRESSION to succeed on virtual columns with CHECK constraints (Jian He) §

This was previously prohibited.

FeaturesAllow multiple headers lines to be skipped by COPY FROM

Utility Commands / COPY

Allow multiple headers lines to be skipped by COPY FROM (Shinya Kato, Fujii Masao) §

Previously only a single header line could be skipped.

FeaturesAllow COPY FROM to set invalid input values to NULL

Utility Commands / COPY

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.

FeaturesAllow COPY TO to output JSON format

Utility Commands / COPY

Allow COPY TO to output JSON format (Joe Conway, Jian He, Andrew Dunstan) § §

JSON output can also be a single JSON array using the COPY option FORCE_ARRAY.

FeaturesAllow COPY TO to process partitioned tables

Utility Commands / COPY

Allow COPY TO to process partitioned tables (Jian He, Ajin Cherian) § §

Previously COPY (SELECT ...) had to be used to output partitioned tables. This also improves logical replication table synchronization.

FeaturesAdd EXPLAIN ANALYZE option IO to report asynchronous IO activity

Utility Commands / EXPLAIN

Add EXPLAIN ANALYZE option IO to report asynchronous IO activity (Tomas Vondra) § § §

FeaturesAdd reporting of WAL full-page write bytes to EXPLAIN (ANALYZE, WAL) output

Utility Commands / EXPLAIN

Add reporting of WAL full-page write bytes to EXPLAIN (ANALYZE, WAL) output (Shinya Kato) §

FeaturesAdd Memoize cache and lookup estimates to EXPLAIN output

Utility Commands / EXPLAIN

Add Memoize cache and lookup estimates to EXPLAIN output (Ilia Evdokimov, Lukas Fittl) §

This can show why Memoize was chosen.

FeaturesAdd the 64-bit unsigned data type oid8

Data Types

Add the 64-bit unsigned data type oid8 (Michael Paquier) §

FeaturesAdd more jsonpath string methods

Data Types

Add more jsonpath string methods (Florents Tselai, David E. Wheeler) §

They are ltrim(), rtrim(), btrim(), lower(), upper(), initcap(), replace(), and split_part(). These are immutable like their non-JSON string variants.

FeaturesAllow casts between bytea and uuid data types

Data Types

Allow casts between bytea and uuid data types (Dagfinn Ilmari Mannsåker, Aleksander Alekseev) §

FeaturesAdd ability to cast between database names and oids using regdatabase

Data Types

Add ability to cast between database names and oids using regdatabase (Ian Lawrence Barwick) §

FeaturesAdd functions tid_block() and tid_offset() to extract block numbers and offsets from tid values

Data Types

Add functions tid_block() and tid_offset() to extract block numbers and offsets from tid values (Ayush Tiwari) §

FeaturesAdd date, timestamp, and timestamptz versions of random(min, max)

Functions

Add date, timestamp, and timestamptz versions of random(min, max) (Damien Clochard, Dean Rasheed) § §

FeaturesAllow encode() and decode() to process data in base64url and base32hex formats

Functions

Allow encode() and decode() to process data in base64url and base32hex formats (Andrey Borodin, Aleksander Alekseev, Florents Tselai) § § §

This format retains ordering, unlike base32.

FeaturesAdd functions to return a set of ranges resulting from range subtraction

Functions

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 subtraction results with gaps.

FeaturesAdd function error_on_null() to return the supplied parameter, or error on NULL input

Functions

Add function error_on_null() to return the supplied parameter, or error on NULL input (Joel Jacobson) §

FeaturesAllow IS JSON to work on domains defined over supported base types

Functions

Allow IS JSON to work on domains defined over supported base types (Jian He) §

The supported base types are TEXT, JSON, JSONB, and BYTEA.

FeaturesAdd full text stemmers for Polish and Esperanto

Functions

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.

FeaturesAllow event triggers to be written using PL/Python

Functions

Allow event triggers to be written using PL/Python (Euler Taveira, Dimitri Fontaine) §

FeaturesAllow libpq connections to specify a service file via servicefile

Libpq

Allow libpq connections to specify a service file via servicefile (Torsten Förtsch, Ryo Kanbayashi) §

FeaturesAdd special libpq protocol parameters for compatibility testing

Libpq

Add special libpq protocol parameters for compatibility testing (Jelte Fennema-Nio, Jacob Champion) §

Otherwise known as protocol grease, which was active during the 19 beta period. These will no longer be sent as of the PostgreSQL 19 official release, but the parameter reservations will remain for potential use in the future.

FeaturesAdd libpq connection parameter oauth_ca_file to specify an alternate certificate authority when communicating with OAuth providers

Libpq

Add libpq connection parameter oauth_ca_file to specify an alternate certificate authority when communicating with OAuth providers (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.

FeaturesAllow libpq environment variable PGOAUTHDEBUG to specify particular debug options

Libpq

Allow libpq environment variable PGOAUTHDEBUG to specify particular debug options (Zsolt Parragi, Jacob Champion) §

The UNSAFE option still generates all debugging output.

FeaturesImprove custom OAuth client flows

Libpq

Improve custom OAuth client flows (Jacob Champion) § §

Previously, libpq reported only a generic error message during custom flow failures, and each flow implementation was required to calculate the issuer identifier independently. Add a new authdata hook type PQAUTHDATA_OAUTH_BEARER_TOKEN_V2 that precomputes the issuer ID and lets hooks provide error details.

FeaturesAdd libpq function PQgetThreadLock() to retrieve the current locking callback

Libpq

Add libpq function PQgetThreadLock() to retrieve the current locking callback (Jacob Champion) §

FeaturesAllow the search path to appear in the psql prompt via %S

psql

Allow the search path to appear in the psql prompt via %S (Florents Tselai) §

This works when psql is connected to PostgreSQL 18 or later.

FeaturesAllow the hot standby status to appear in the psql prompt via %i

psql

Allow the hot standby status to appear in the psql prompt via %i (Jim Jones) §

FeaturesModify psql backslash commands to show comments for publications, subscriptions, and extended statistics

psql

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

FeaturesAllow control over how booleans are displayed in psql

psql

Allow control over how booleans are displayed in psql (David G. Johnston) §

The \pset variables are display_true and display_false.

FeaturesAdd psql variable SERVICEFILE to reference the service file location

psql

Add psql variable SERVICEFILE to reference the service file location (Ryo Kanbayashi) §

FeaturesAllow psql to more accurately determine if the pager is needed

psql

Allow psql to more accurately determine if the pager is needed (Erik Wienhold) §

FeaturesAdd or improve psql tab completion

psql

Add or improve psql tab completion (Yamaguchi Atsuo, Yugo Nagata, Haruna Miwa, Xuneng Zhou, Dagfinn Ilmari Mannsåker, Fujii Masao, Álvaro Herrera, Jian He, Tatsuya Kawata, Ian Lawrence Barwick, Vasuki M) § § § § § § § § § § § § § §

FeaturesAllow pg_dump to include restorable extended statistics

Server Applications

Allow pg_dump to include restorable extended statistics (Corey Huinker) §

FeaturesChange vacuumdb's --analyze-only and --analyze-in-stages options to analyze partitioned tables when no targets are specified

Server Applications

Change vacuumdb's --analyze-only and --analyze-in-stages options to analyze partitioned tables when no targets are specified (Laurenz Albe, Mircea Cadariu, Chao Li) § §

Previously it skipped partitioned tables. This now matches the behavior of ANALYZE.

FeaturesAllow vacuumdb to report its commands without running them using option --dry-run

Server Applications

Allow vacuumdb to report its commands without running them using option --dry-run (Corey Huinker) §

FeaturesAllow pg_verifybackup to read WAL files stored in tar archives

Server Applications

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.

FeaturesAllow pg_waldump to read WAL files stored in tar archives

Server Applications

Allow pg_waldump to read WAL files stored in tar archives (Amul Sul) §

PerformanceImprove performance of pg_upgrade copying large object metadata

Server Applications

Improve performance of pg_upgrade copying large object metadata (Nathan Bossart) § § § §

Various methods are used, depending on the PostgreSQL version of the old cluster.

FeaturesAllow pg_upgrade to process non-default tablespaces stored in the PGDATA directory

Server Applications

Allow pg_upgrade to process non-default tablespaces stored in the PGDATA directory (Nathan Bossart) §

Previously such tablespaces generated an error.

FeaturesAdd pgbench option --continue-on-error to continue after SQL errors

Server Applications

Add pgbench option --continue-on-error to continue after SQL errors (Rintaro Ikeda, Yugo Nagata, Fujii Masao) §

FeaturesImprove the usability of pg_test_timing

Server Applications

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.

FeaturesAllow pg_createsubscriber to ignore specified publications that already exist

Server Applications / pg_createsubscriber

Allow pg_createsubscriber to ignore specified publications that already exist (Shubham Khanna) §

Previously this generated an error.

FeaturesChange the way pg_createsubscriber stores recovery parameters

Server Applications / pg_createsubscriber

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.

FeaturesAdd pg_createsubscriber option -l/--logdir to redirect output to files

Server Applications / pg_createsubscriber

Add pg_createsubscriber option -l/--logdir to redirect output to files (Gyan Sreejith, Hayato Kuroda) §

FeaturesRestore support for AIX

Source Code

Restore support for AIX (Aditya Kamath, Srirama Kucherlapati, Peter Eisentraut) § §

This uses gcc and only supports 64-bit builds.

FeaturesChange Solaris to use unnamed POSIX semaphores

Source Code

Change Solaris to use unnamed POSIX semaphores (Tom Lane) §

Previously it used System V semaphores.

FeaturesRequire Visual Studio 2019 or later

Source Code

Require Visual Studio 2019 or later (Peter Eisentraut) §

FeaturesAllow MSVC to create PL/Python using the Python Limited API

Source Code

Allow MSVC to create PL/Python using the Python Limited API (Bryan Green) §

FeaturesAllow building on AArch64 using MSVC

Source Code

Allow building on AArch64 using MSVC (Niyas Sait, Greg Burd, Dave Cramer) §

FeaturesAllow execution stack backtraces on Windows using DbgHelp

Source Code

Allow execution stack backtraces on Windows using DbgHelp (Bryan Green) §

FeaturesChange the supported C language version to C11

Source Code

Change the supported C language version to C11 (Peter Eisentraut) § §

Previously C99 was used.

FeaturesUse standard C23 and C++ attributes if available

Source Code

Use standard C23 and C++ attributes if available (Peter Eisentraut) §

FeaturesUse AVX2 CPU instructions for calculating page checksums

Source Code

Use AVX2 CPU instructions for calculating page checksums (Matthew Sterrett, Andrew Kim) §

FeaturesUse ARM Crypto Extension to Compute CRC32C

Source Code

Use ARM Crypto Extension to Compute CRC32C (John Naylor) §

FeaturesChange hex_encode() and hex_decode() to use SIMD CPU instructions

Source Code

Change hex_encode() and hex_decode() to use SIMD CPU instructions (Nathan Bossart, Chiranmoy Bhattacharya) §

FeaturesRequire Meson version 0.57.2 or later

Source Code

Require Meson version 0.57.2 or later (Peter Eisentraut) §

FeaturesAdd Meson option to build both shared and static libraries, or only shared

Source Code

Add Meson option to build both shared and static libraries, or only shared (Peter Eisentraut) §

FeaturesUpdate Unicode data to version 17.0.0

Source Code

Update Unicode data to version 17.0.0 (Peter Eisentraut) §

FeaturesAdd hooks planner_setup_hook, planner_shutdown_hook, joinrel_setup_hook, and join_path_setup_hook

Source Code

Add hooks planner_setup_hook, planner_shutdown_hook, joinrel_setup_hook, and join_path_setup_hook (Robert Haas) § §

FeaturesAllow extensions to replace set-returning functions in the FROM clause with SQL queries

Source Code

Allow extensions to replace set-returning functions in the FROM clause with SQL queries (Paul A. Jungwirth) §

FeaturesMake multixid members 64-bit

Source Code

Make multixid members 64-bit (Maxim Orlov) §

FeaturesChange function prototypes to use uint* instead of bit* typedefs

Source Code

Change function prototypes to use uint* instead of bit* typedefs (Nathan Bossart) §

FeaturesAllow logical decoding plugins to specify if they do not access shared catalogs

Source Code

Allow logical decoding plugins to specify if they do not access shared catalogs (Antonin Houska) §

FeaturesAllow OAuth validators to supply failure details

Source Code

Allow OAuth validators to supply failure details (Jacob Champion) §

This is done by setting the ValidatorModuleResult structure member error_detail.

FeaturesAdd simplified and improved shared memory registration function ShmemRequestStruct()

Source Code

Add simplified and improved shared memory registration function ShmemRequestStruct() (Heikki Linnakangas, Ashutosh Bapat) §

Functions ShmemInitStruct() and ShmemInitHash() remain for backward compatibility.

FeaturesAdd server variable debug_exec_backend to report how parameters are passed to new backends

Source Code

Add server variable debug_exec_backend to report how parameters are passed to new backends (Daniel Gustafsson) §

FeaturesAdd documentation section about temporal tables

Source Code

Add documentation section about temporal tables (Paul A. Jungwirth) §

FeaturesDocument the environment variables that control the regression tests

Source Code

Document the environment variables that control the regression tests (Michael Paquier) §

FeaturesUpdate documented systemd example to include a restart setting

Source Code

Update documented systemd example to include a restart setting (Andrew Jackson) §

FeaturesAdd pg_plan_advice module to stabilize and control planner decisions

Additional Modules

Add pg_plan_advice module to stabilize and control planner decisions (Robert Haas) § §

FeaturesAdd extension pg_stash_advice to allow per-query-id advice to be specified

Additional Modules

Add extension pg_stash_advice to allow per-query-id advice to be specified (Robert Haas, Lukas Fittl) § §

FeaturesShow sizes of FETCH queries as constants in pg_stat_statements

Additional Modules

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.

FeaturesAdd generic and custom plan counts to pg_stat_statements

Additional Modules

Add generic and custom plan counts to pg_stat_statements (Sami Imseih) §

FeaturesRefactor pg_buffercache reporting of shared memory mapping

Additional Modules

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.

FeaturesAdd functions to pg_buffercache to mark buffers as dirty

Additional Modules

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().

FeaturesAllow pushdown of array comparisons in prepared statements to postgres_fdw foreign servers

Additional Modules

Allow pushdown of array comparisons in prepared statements to postgres_fdw foreign servers (Alexander Pyhalov) §

FeaturesAllow the retrieval of statistics from foreign data wrapper servers

Additional Modules

Allow the retrieval of statistics from foreign data wrapper servers (Corey Huinker, Etsuro Fujita) § §

This is enabled for postgres_fdw by using the option import_stats. The default is for ANALYZE to retrieve rows from the remote server to locally generate statistics.

FeaturesAllow file_fdw to read files or program output that uses multi-line headers

Additional Modules

Allow file_fdw to read files or program output that uses multi-line headers (Shinya Kato) §

FeaturesAdd server variable auto_explain.log_io to add IO reporting to auto_explain

Additional Modules

Add server variable auto_explain.log_io to add IO reporting to auto_explain (Tomas Vondra) §

FeaturesAllow auto_explain to add extension-specific EXPLAIN options via server variable auto_explain.log_extension_options

Additional Modules

Allow auto_explain to add extension-specific EXPLAIN options via server variable auto_explain.log_extension_options (Robert Haas) §

FeaturesChange btree_gin to support all btree-supported cross-type comparisons

Additional Modules

Change btree_gin to support all btree-supported cross-type comparisons (Tom Lane) § §

PerformanceImprove performance of bloom indexes by using streaming reads

Additional Modules

Improve performance of bloom indexes by using streaming reads (Xuneng Zhou) § §

PerformanceImprove performance of pgstattuple by using streaming reads

Additional Modules

Improve performance of pgstattuple by using streaming reads (Xuneng Zhou) § §

FeaturesAllow fuzzystrmatch's dmetaphone() to use single-byte encodings beyond ASCII

Additional Modules

Allow fuzzystrmatch's dmetaphone() to use single-byte encodings beyond ASCII (Peter Eisentraut) §

FeaturesModify oid2name --extended to report the relation file path

Additional Modules

Modify oid2name --extended to report the relation file path (David Bidoc) §

How is this comparison generated?

The comparison follows PostgreSQL release notes from just after the source through the target version. For a major upgrade, maintenance releases from each older branch are included only up to the next major release date, and never after the target date. A major version such as 18 means its initial release, 18.0. Previews and development snapshots are labeled separately.

Entries come from the original English manuals. Release coverage and commit evidence are verified against upstream sources. Every entry retains its complete explanation and source link. Categories aid browsing; read the full notes for impact, conditions, and migration steps.

Fixes can be backported to several branches. Confirmed duplicates are merged conservatively, with every branch explanation retained. A note describing several independent fixes is excluded only when all are already present in the source. Major-release features remain distinct from related maintenance patches unless their complete original descriptions match. Uncertain matches are retained. This is a release-note history, not an exhaustive comparison of compiled binaries.

CVE results are calculated independently from the PostgreSQL security registry and vulnerability records. A CVE counts as gained protection only when the source is affected and the target is fixed or unaffected. Remaining vulnerabilities are listed separately. Security entries and distinct CVEs are counted separately.

Interaction inspired by pgversions.com and pgversionreport. Content comes from PostgreSQL release notes. See the release notes archive.