↑↓ 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 17.0 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.

Complete release changes

17.0

2024-09-26

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

17.0 SupportedSupport ends 2029-11-08

PostgreSQL 17.0

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 17 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:

CompatibilityChange functions to use a safe search_path during maintenance operations

Compatibility

Change functions to use a safe search_path during maintenance operations (Jeff Davis) § §

This prevents maintenance operations (ANALYZE, CLUSTER, CREATE INDEX, CREATE MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW, REINDEX, or VACUUM) from performing unsafe access. Functions used by expression indexes and materialized views that need to reference non-default schemas must specify a search path during function creation.

CompatibilityRestrict ago to only appear at the end in interval values

Compatibility

Restrict ago to only appear at the end in interval values (Joseph Koshakow) § §

Also, prevent empty interval units from appearing multiple times.

CompatibilityRemove server variable old_snapshot_threshold

Compatibility

Remove server variable old_snapshot_threshold (Thomas Munro) §

This variable allowed vacuum to remove rows that potentially could be still visible to running transactions, causing "snapshot too old" errors later if accessed. This feature might be re-added to PostgreSQL later if an improved implementation is found.

CompatibilityChange SET SESSION AUTHORIZATION handling of the initial session user's superuser status

Compatibility

Change SET SESSION AUTHORIZATION handling of the initial session user's superuser status (Joseph Koshakow) §

The new behavior is based on the session user's superuser status at the time the SET SESSION AUTHORIZATION command is issued, rather than their superuser status at connection time.

CompatibilityRemove feature which simulated per-database users

Compatibility

Remove feature which simulated per-database users (Nathan Bossart) §

The feature, db_user_namespace, was rarely used.

CompatibilityRemove adminpack contrib extension

Compatibility

Remove adminpack contrib extension (Daniel Gustafsson) §

This was used by now end-of-life pgAdmin III.

CompatibilityRemove wal_sync_method value fsync_writethrough on Windows

Compatibility

Remove wal_sync_method value fsync_writethrough on Windows (Thomas Munro) §

This value was the same as fsync on Windows.

CompatibilityChange file boundary handling of two WAL file name functions

Compatibility

Change file boundary handling of two WAL file name functions (Kyotaro Horiguchi, Andres Freund, Bruce Momjian) §

The functions pg_walfile_name() and pg_walfile_name_offset() used to report the previous LSN segment number when the LSN was on a file segment boundary; it now returns the current LSN segment.

CompatibilityRemove server variable trace_recovery_messages since it is no longer needed

Compatibility

Remove server variable trace_recovery_messages since it is no longer needed (Bharath Rupireddy) §

CompatibilityRemove information schema column element_types.domain_default

Compatibility

Remove information schema column element_types.domain_default (Peter Eisentraut) §

CompatibilityChange pgrowlocks lock mode output labels

Compatibility

Change pgrowlocks lock mode output labels (Bruce Momjian) §

CompatibilityRemove buffers_backend and buffers_backend_fsync from pg_stat_bgwriter

Compatibility

Remove buffers_backend and buffers_backend_fsync from pg_stat_bgwriter (Bharath Rupireddy) §

These fields are considered redundant to similar columns in pg_stat_io.

CompatibilityRename I/O block read/write timing statistics columns of pg_stat_statements

Compatibility

Rename I/O block read/write timing statistics columns of pg_stat_statements (Nazir Bilal Yavuz) §

This renames blk_read_time to shared_blk_read_time, and blk_write_time to shared_blk_write_time.

CompatibilityChange pg_attribute.attstattarget and pg_statistic_ext.stxstattarget to represent the default statistics target as NULL

Compatibility

Change pg_attribute.attstattarget and pg_statistic_ext.stxstattarget to represent the default statistics target as NULL (Peter Eisentraut) § §

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 pg_collation.colliculocale to colllocale and pg_database.daticulocale to datlocale

Compatibility

Rename pg_collation.colliculocale to colllocale and pg_database.daticulocale to datlocale (Jeff Davis) §

CompatibilityRename pg_stat_progress_vacuum column max_dead_tuples to max_dead_tuple_bytes, rename num_dead_tuples to num_dead_item_ids, and add dead_tuple_bytes

Compatibility

Rename pg_stat_progress_vacuum column max_dead_tuples to max_dead_tuple_bytes, rename num_dead_tuples to num_dead_item_ids, and add dead_tuple_bytes (Masahiko Sawada) § §

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 SLRU columns in system view pg_stat_slru

Compatibility

Rename SLRU columns in system view pg_stat_slru (Alvaro Herrera) §

The column names accepted by pg_stat_reset_slru() are also changed.

FeaturesAllow the optimizer to improve CTE plans by considering the statistics and sort order of columns referenced in earlier row output clauses

Server / Optimizer

Allow the optimizer to improve CTE plans by considering the statistics and sort order of columns referenced in earlier row output clauses (Jian Guo, Richard Guo, Tom Lane) § §

FeaturesImprove optimization of IS NOT NULL and IS NULL query restrictions

Server / Optimizer

Improve optimization of IS NOT NULL and IS NULL query restrictions (David Rowley, Richard Guo, Andy Fan) § §

Remove IS NOT NULL restrictions from queries on NOT NULL columns and eliminate scans on NOT NULL columns if IS NULL is specified.

FeaturesAllow partition pruning on boolean columns on IS [NOT] UNKNOWN conditionals

Server / Optimizer

Allow partition pruning on boolean columns on IS [NOT] UNKNOWN conditionals (David Rowley) §

FeaturesImprove optimization of range values when using containment operators <@ and @>

Server / Optimizer

Improve optimization of range values when using containment operators <@ and @> (Kim Johan Andersson, Jian He) §

FeaturesAllow correlated IN subqueries to be transformed into joins

Server / Optimizer

Allow correlated IN subqueries to be transformed into joins (Andy Fan, Tom Lane) §

FeaturesImprove optimization of the LIMIT clause on partitioned tables, inheritance parents, and UNION ALL queries

Server / Optimizer

Improve optimization of the LIMIT clause on partitioned tables, inheritance parents, and UNION ALL queries (Andy Fan, David Rowley) §

FeaturesAllow query nodes to be run in parallel in more cases

Server / Optimizer

Allow query nodes to be run in parallel in more cases (Tom Lane) §

FeaturesAllow GROUP BY columns to be internally ordered to match ORDER BY

Server / Optimizer

Allow GROUP BY columns to be internally ordered to match ORDER BY (Andrei Lepikhov, Teodor Sigaev) §

This can be disabled using server variable enable_group_by_reordering.

FeaturesAllow UNION (without ALL) to use MergeAppend

Server / Optimizer

Allow UNION (without ALL) to use MergeAppend (David Rowley) §

Bug fixesFix MergeAppend plans to more accurately compute the number of rows that need to be sorted

Server / Optimizer

Fix MergeAppend plans to more accurately compute the number of rows that need to be sorted (Alexander Kuzmenkov) §

FeaturesAllow GiST and SP-GiST indexes to be part of incremental sorts

Server / Optimizer

Allow GiST and SP-GiST indexes to be part of incremental sorts (Miroslav Bendik) §

This is particularly useful for ORDER BY clauses where the first column has a GiST and SP-GiST index, and other columns do not.

FeaturesAdd columns to pg_stats to report range-type histogram information

Server / Optimizer

Add columns to pg_stats to report range-type histogram information (Egor Rogov, Soumyadeep Chakraborty) §

FeaturesAllow btree indexes to more efficiently find a set of values, such as those supplied by IN clauses using constants

Server / Indexes

Allow btree indexes to more efficiently find a set of values, such as those supplied by IN clauses using constants (Peter Geoghegan, Matthias van de Meent) §

FeaturesAllow BRIN indexes to be created using parallel workers

Server / Indexes

Allow BRIN indexes to be created using parallel workers (Tomas Vondra, Matthias van de Meent) §

PerformanceAllow vacuum to more efficiently remove and freeze tuples

Server / General Performance

Allow vacuum to more efficiently remove and freeze tuples (Melanie Plageman, Heikki Linnakangas) §

WAL traffic caused by vacuum is also more compact.

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.

PerformanceAllow vacuum to more efficiently store tuple references

Server / General Performance

Allow vacuum to more efficiently store tuple references (Masahiko Sawada, John Naylor) § § § §

Additionally, vacuum is no longer silently limited to one gigabyte of memory when maintenance_work_mem or autovacuum_work_mem are higher.

Related records (2)

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

PerformanceOptimize vacuuming of relations with no indexes

Server / General Performance

Optimize vacuuming of relations with no indexes (Melanie Plageman) §

PerformanceIncrease default vacuum_buffer_usage_limit to 2MB

Server / General Performance

Increase default vacuum_buffer_usage_limit to 2MB (Thomas Munro) §

PerformanceImprove performance when checking roles with many memberships

Server / General Performance

Improve performance when checking roles with many memberships (Nathan Bossart) §

PerformanceImprove performance of heavily-contended WAL writes

Server / General Performance

Improve performance of heavily-contended WAL writes (Bharath Rupireddy) §

PerformanceImprove performance when transferring large blocks of data to a client

Server / General Performance

Improve performance when transferring large blocks of data to a client (Melih Mutlu) §

PerformanceAllow the grouping of file system reads with the new system variable io_combine_limit

Server / General Performance

Allow the grouping of file system reads with the new system variable io_combine_limit (Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz) § § §

FeaturesCreate system view pg_stat_checkpointer

Server / Monitoring

Create system view pg_stat_checkpointer (Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov) § § §

Relevant columns have been removed from pg_stat_bgwriter and added to this new system view.

FeaturesImprove control over resetting statistics

Server / Monitoring

Improve control over resetting statistics (Atsushi Torikoshi, Bharath Rupireddy) § § §

Allow pg_stat_reset_shared() (with no arguments) and pg_stat_reset_shared(NULL) to reset all shared statistics. Allow pg_stat_reset_shared('slru') and pg_stat_reset_slru() (with no arguments) to reset SLRU statistics, which was already possible with pg_stat_reset_slru(NULL).

FeaturesAdd log messages related to WAL recovery from backups

Server / Monitoring

Add log messages related to WAL recovery from backups (Andres Freund) §

Related records (2)

“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 log_connections log line for trust connections

Server / Monitoring

Add log_connections log line for trust connections (Jacob Champion) §

FeaturesAdd log message to report walsender acquisition and release of replication slots

Server / Monitoring

Add log message to report walsender acquisition and release of replication slots (Bharath Rupireddy) §

This is enabled by the server variable log_replication_commands.

FeaturesAdd system view pg_wait_events that reports wait event types

Server / Monitoring

Add system view pg_wait_events that reports wait event types (Bertrand Drouvot) §

This is useful for adding descriptions to wait events reported in pg_stat_activity.

FeaturesAdd wait events for checkpoint delays

Server / Monitoring

Add wait events for checkpoint delays (Thomas Munro) §

FeaturesAllow vacuum to report the progress of index processing

Server / Monitoring

Allow vacuum to report the progress of index processing (Sami Imseih) §

This appears in system view pg_stat_progress_vacuum columns indexes_total and indexes_processed.

FeaturesAllow granting the right to perform maintenance operations

Server / Privileges

Allow granting the right to perform maintenance operations (Nathan Bossart) §

The permission can be granted on a per-table basis using the MAINTAIN privilege and on a per-role basis via the pg_maintain predefined role. Permitted operations are VACUUM, ANALYZE, REINDEX, REFRESH MATERIALIZED VIEW, CLUSTER, and LOCK TABLE.

FeaturesAllow roles with pg_monitor membership to execute pg_current_logfile()

Server / Privileges

Allow roles with pg_monitor membership to execute pg_current_logfile() (Pavlo Golub, Nathan Bossart) §

FeaturesAdd system variable allow_alter_system to disallow ALTER SYSTEM

Server / Server Configuration

Add system variable allow_alter_system to disallow ALTER SYSTEM (Jelte Fennema-Nio, Gabriele Bartolini) §

FeaturesAllow ALTER SYSTEM to set unrecognized custom server variables

Server / Server Configuration

Allow ALTER SYSTEM to set unrecognized custom server variables (Tom Lane) §

This is also possible with GRANT ON PARAMETER.

FeaturesAdd server variable transaction_timeout to restrict the duration of transactions

Server / Server Configuration

Add server variable transaction_timeout to restrict the duration of transactions (Andrey Borodin, Japin Li, Junwang Zhao, Alexander Korotkov) § § §

FeaturesAdd a builtin platform-independent collation provider

Server / Server Configuration

Add a builtin platform-independent collation provider (Jeff Davis) § § § §

This supports C and C.UTF-8 collations.

FeaturesAdd server variable huge_pages_status to report the use of huge pages by Postgres

Server / Server Configuration

Add server variable huge_pages_status to report the use of huge pages by Postgres (Justin Pryzby) §

This is useful when huge_pages is set to try.

FeaturesAdd server variable to disable event triggers

Server / Server Configuration

Add server variable to disable event triggers (Daniel Gustafsson) §

The setting, event_triggers, allows for the temporary disabling of event triggers for debugging.

FeaturesAllow the SLRU cache sizes to be configured

Server / Server Configuration

Allow the SLRU cache sizes to be configured (Andrey Borodin, Dilip Kumar, Alvaro Herrera) §

The new server variables are commit_timestamp_buffers, multixact_member_buffers, multixact_offset_buffers, notify_buffers, serializable_buffers, subtransaction_buffers, and transaction_buffers. commit_timestamp_buffers, transaction_buffers, and subtransaction_buffers scale up automatically with shared_buffers.

FeaturesAdd support for incremental file system backup

Server / Streaming Replication and Recovery

Add support for incremental file system backup (Robert Haas, Jakub Wartak, Tomas Vondra) § §

Incremental backups can be created using pg_basebackup's new --incremental option. The new application pg_combinebackup allows manipulation of base and incremental file system backups.

FeaturesAllow the creation of WAL summarization files

Server / Streaming Replication and Recovery

Allow the creation of WAL summarization files (Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski) § § § §

These files record the block numbers that have changed within an LSN range and are useful for incremental file system backups. This is controlled by the server variables summarize_wal and wal_summary_keep_time, and introspected with pg_available_wal_summaries(), pg_wal_summary_contents(), and pg_get_wal_summarizer_state().

FeaturesAdd the system identifier to file system backup manifest files

Server / Streaming Replication and Recovery

Add the system identifier to file system backup manifest files (Amul Sul) §

This helps detect invalid WAL usage.

FeaturesAllow connection string value dbname to be written when pg_basebackup writes connection information to postgresql.auto.conf

Server / Streaming Replication and Recovery

Allow connection string value dbname to be written when pg_basebackup writes connection information to postgresql.auto.conf (Vignesh C, Hayato Kuroda) §

FeaturesAdd column pg_replication_slots.invalidation_reason to report the reason for invalid slots

Server / Streaming Replication and Recovery

Add column pg_replication_slots.invalidation_reason to report the reason for invalid slots (Shveta Malik, Bharath Rupireddy) § §

FeaturesAdd column pg_replication_slots.inactive_since to report slot inactivity duration

Server / Streaming Replication and Recovery

Add column pg_replication_slots.inactive_since to report slot inactivity duration (Bharath Rupireddy) § § §

FeaturesAdd function pg_sync_replication_slots() to synchronize logical replication slots

Server / Streaming Replication and Recovery

Add function pg_sync_replication_slots() to synchronize logical replication slots (Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut) § §

FeaturesAdd the failover property to the replication protocol

Server / Streaming Replication and Recovery

Add the failover property to the replication protocol (Hou Zhijie, Shveta Malik) §

FeaturesAdd application pg_createsubscriber to create a logical replica from a physical standby server

Server / Logical Replication

Add application pg_createsubscriber to create a logical replica from a physical standby server (Euler Taveira) §

FeaturesHave pg_upgrade migrate valid logical slots and subscriptions

Server / Logical Replication

Have pg_upgrade migrate valid logical slots and subscriptions (Hayato Kuroda, Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal) § §

This allows logical replication to continue quickly after the upgrade. This only works for old PostgreSQL clusters that are version 17 or later.

FeaturesEnable the failover of logical slots

Server / Logical Replication

Enable the failover of logical slots (Hou Zhijie, Shveta Malik, Ajin Cherian) §

This is controlled by an optional fifth argument to pg_create_logical_replication_slot().

FeaturesAdd server variable sync_replication_slots to enable failover logical slot synchronization

Server / Logical Replication

Add server variable sync_replication_slots to enable failover logical slot synchronization (Shveta Malik, Hou Zhijie, Peter Smith) § §

FeaturesAdd logical replication failover control to CREATE/ALTER SUBSCRIPTION

Server / Logical Replication

Add logical replication failover control to CREATE/ALTER SUBSCRIPTION (Shveta Malik, Hou Zhijie, Ajin Cherian) § §

FeaturesAllow the application of logical replication changes to use hash indexes on the subscriber

Server / Logical Replication

Allow the application of logical replication changes to use hash indexes on the subscriber (Hayato Kuroda) §

Previously only btree indexes could be used for this purpose.

PerformanceImprove logical decoding performance in cases where there are many subtransactions

Server / Logical Replication

Improve logical decoding performance in cases where there are many subtransactions (Masahiko Sawada) §

FeaturesRestart apply workers if subscription owner's superuser privileges are revoked

Server / Logical Replication

Restart apply workers if subscription owner's superuser privileges are revoked (Vignesh C) §

This forces reauthentication.

FeaturesAdd flush option to pg_logical_emit_message()

Server / Logical Replication

Add flush option to pg_logical_emit_message() (Michael Paquier) §

This makes the message durable.

FeaturesAllow specification of physical standbys that must be synchronized before they are visible to subscribers

Server / Logical Replication

Allow specification of physical standbys that must be synchronized before they are visible to subscribers (Hou Zhijie, Shveta Malik) § §

The new server variable is synchronized_standby_slots.

FeaturesAdd worker type column to pg_stat_subscription

Server / Logical Replication

Add worker type column to pg_stat_subscription (Peter Smith) §

FeaturesAdd new COPY option ON_ERROR ignore to discard error rows

Utility Commands

Add new COPY option ON_ERROR ignore to discard error rows (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo Nagata) § § § §

The default behavior is ON_ERROR stop.

FeaturesAdd new COPY option LOG_VERBOSITY which reports COPY FROM ignored error rows

Utility Commands

Add new COPY option LOG_VERBOSITY which reports COPY FROM ignored error rows (Bharath Rupireddy) §

FeaturesAllow COPY FROM to report the number of skipped rows during processing

Utility Commands

Allow COPY FROM to report the number of skipped rows during processing (Atsushi Torikoshi) §

This appears in system view column pg_stat_progress_copy.tuples_skipped.

FeaturesIn COPY FROM, allow easy specification that all columns should be forced null or not null

Utility Commands

In COPY FROM, allow easy specification that all columns should be forced null or not null (Zhang Mingli) §

FeaturesAllow partitioned tables to have identity columns

Utility Commands

Allow partitioned tables to have identity columns (Ashutosh Bapat) §

FeaturesAllow exclusion constraints on partitioned tables

Utility Commands

Allow exclusion constraints on partitioned tables (Paul A. Jungwirth) §

As long as exclusion constraints compare partition key columns for equality, other columns can use exclusion constraint-specific comparisons.

FeaturesAdd clearer ALTER TABLE method to set a column to the default statistics target

Utility Commands

Add clearer ALTER TABLE method to set a column to the default statistics target (Peter Eisentraut) §

The new syntax is ALTER TABLE ... SET STATISTICS DEFAULT; using SET STATISTICS -1 is still supported.

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 ALTER TABLE to change a column's generation expression

Utility Commands

Allow ALTER TABLE to change a column's generation expression (Amul Sul) §

The syntax is ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION.

FeaturesAllow specification of table access methods on partitioned tables

Utility Commands

Allow specification of table access methods on partitioned tables (Justin Pryzby, Soumyadeep Chakraborty, Michael Paquier) § §

FeaturesAdd DEFAULT setting for ALTER TABLE .. SET ACCESS METHOD

Utility Commands

Add DEFAULT setting for ALTER TABLE .. SET ACCESS METHOD (Michael Paquier) §

FeaturesAdd support for event triggers that fire at connection time

Utility Commands

Add support for event triggers that fire at connection time (Konstantin Knizhnik, Mikhail Gribkov) §

FeaturesAdd event trigger support for REINDEX

Utility Commands

Add event trigger support for REINDEX (Garrett Thornburg, Jian He) §

FeaturesAllow parenthesized syntax for CLUSTER options if a table name is not specified

Utility Commands

Allow parenthesized syntax for CLUSTER options if a table name is not specified (Nathan Bossart) §

FeaturesAllow EXPLAIN to report optimizer memory usage

Utility Commands / EXPLAIN

Allow EXPLAIN to report optimizer memory usage (Ashutosh Bapat) §

The option is called MEMORY.

FeaturesAdd EXPLAIN option SERIALIZE to report the cost of converting data for network transmission

Utility Commands / EXPLAIN

Add EXPLAIN option SERIALIZE to report the cost of converting data for network transmission (Stepan Rutz, Matthias van de Meent) §

FeaturesAdd local I/O block read/write timing statistics to EXPLAIN's BUFFERS output

Utility Commands / EXPLAIN

Add local I/O block read/write timing statistics to EXPLAIN's BUFFERS output (Nazir Bilal Yavuz) §

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.

FeaturesImprove EXPLAIN's display of SubPlan nodes and output parameters

Utility Commands / EXPLAIN

Improve EXPLAIN's display of SubPlan nodes and output parameters (Tom Lane, Dean Rasheed) §

FeaturesAdd JIT deform_counter details to EXPLAIN

Utility Commands / EXPLAIN

Add JIT deform_counter details to EXPLAIN (Dmitry Dolgov) §

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 the interval data type to support +/-infinity values

Data Types

Allow the interval data type to support +/-infinity values (Joseph Koshakow, Jian He, Ashutosh Bapat) §

FeaturesAllow the use of an ENUM added via ALTER TYPE if the type was created in the same transaction

Data Types

Allow the use of an ENUM added via ALTER TYPE if the type was created in the same transaction (Tom Lane) §

This was previously disallowed.

FeaturesAllow MERGE to modify updatable views

MERGE

Allow MERGE to modify updatable views (Dean Rasheed) §

FeaturesAdd WHEN NOT MATCHED BY SOURCE to MERGE

MERGE

Add WHEN NOT MATCHED BY SOURCE to MERGE (Dean Rasheed) §

WHEN NOT MATCHED on target rows was already supported.

FeaturesAllow MERGE to use the RETURNING clause

MERGE

Allow MERGE to use the RETURNING clause (Dean Rasheed) §

The new RETURNING function merge_action() reports on the DML that generated the row.

FeaturesAdd function JSON_TABLE() to convert JSON data to a table representation

Functions

Add function JSON_TABLE() to convert JSON data to a table representation (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Jian He) § §

This function can be used in the FROM clause of SELECT queries as a tuple source.

FeaturesAdd SQL/JSON constructor functions JSON(), JSON_SCALAR(), and JSON_SERIALIZE()

Functions

Add SQL/JSON constructor functions JSON(), JSON_SCALAR(), and JSON_SERIALIZE() (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote) §

FeaturesAdd SQL/JSON query functions JSON_EXISTS(), JSON_QUERY(), and JSON_VALUE()

Functions

Add SQL/JSON query functions JSON_EXISTS(), JSON_QUERY(), and JSON_VALUE() (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Peter Eisentraut, Jian He) § § § § §

FeaturesAdd jsonpath methods to convert JSON values to other JSON data types

Functions

Add jsonpath methods to convert JSON values to other JSON data types (Jeevan Chalke) §

The jsonpath methods are .bigint(), .boolean(), .date(), .decimal([precision [, scale]]), .integer(), .number(), .string(), .time(), .time_tz(), .timestamp(), and .timestamp_tz().

FeaturesAdd to_timestamp() time zone format specifiers

Functions

Add to_timestamp() time zone format specifiers (Tom Lane) §

TZ accepts time zone abbreviations or numeric offsets, while OF accepts only numeric offsets.

FeaturesAllow the session time zone to be specified by AT LOCAL

Functions

Allow the session time zone to be specified by AT LOCAL (Vik Fearing) §

This is useful when converting adding and removing time zones from time stamps values, rather than specifying the literal session time zone.

FeaturesAdd functions uuid_extract_timestamp() and uuid_extract_version() to return UUID information

Functions

Add functions uuid_extract_timestamp() and uuid_extract_version() to return UUID information (Andrey Borodin) §

FeaturesAdd functions to generate random numbers in a specified range

Functions

Add functions to generate random numbers in a specified range (Dean Rasheed) §

The functions are random(min, max) and they take values of type integer, bigint, and numeric.

FeaturesAdd functions to convert integers to binary and octal strings

Functions

Add functions to convert integers to binary and octal strings (Eric Radman, Nathan Bossart) §

The functions are to_bin() and to_oct().

FeaturesAdd Unicode informational functions

Functions

Add Unicode informational functions (Jeff Davis) §

Function unicode_version() returns the Unicode version, icu_unicode_version() returns the ICU version, and unicode_assigned() returns if the characters are assigned Unicode codepoints.

FeaturesAdd function xmltext() to convert text to a single XML text node

Functions

Add function xmltext() to convert text to a single XML text node (Jim Jones) §

FeaturesAdd function to_regtypemod() to return the type modifier of a type specification

Functions

Add function to_regtypemod() to return the type modifier of a type specification (David Wheeler, Erik Wienhold) §

FeaturesAdd pg_basetype() function to return a domain's base type

Functions

Add pg_basetype() function to return a domain's base type (Steve Chavez) §

FeaturesAdd function pg_column_toast_chunk_id() to return a value's TOAST identifier

Functions

Add function pg_column_toast_chunk_id() to return a value's TOAST identifier (Yugo Nagata) §

This returns NULL if the value is not stored in TOAST.

FeaturesAllow plpgsql %TYPE and %ROWTYPE specifications to represent arrays of non-array types

PL/pgSQL

Allow plpgsql %TYPE and %ROWTYPE specifications to represent arrays of non-array types (Quan Zongliang, Pavel Stehule) §

FeaturesAllow plpgsql %TYPE specification to reference composite column

PL/pgSQL

Allow plpgsql %TYPE specification to reference composite column (Tom Lane) §

FeaturesAdd libpq function to change role passwords

libpq

Add libpq function to change role passwords (Joe Conway) §

The new function, PQchangePassword(), hashes the new password before sending it to the server.

FeaturesAdd libpq functions to close portals and prepared statements

libpq

Add libpq functions to close portals and prepared statements (Jelte Fennema-Nio) §

The functions are PQclosePrepared(), PQclosePortal(), PQsendClosePrepared(), and PQsendClosePortal().

FeaturesAdd libpq API which allows for blocking and non-blocking cancel requests, with encryption if already in use

libpq

Add libpq API which allows for blocking and non-blocking cancel requests, with encryption if already in use (Jelte Fennema-Nio) §

Previously only blocking, unencrypted cancel requests were supported.

FeaturesAdd libpq function PQsocketPoll() to allow polling of network sockets

libpq

Add libpq function PQsocketPoll() to allow polling of network sockets (Tristan Partin, Tom Lane) § §

FeaturesAdd libpq function PQsendPipelineSync() to send a pipeline synchronization point

libpq

Add libpq function PQsendPipelineSync() to send a pipeline synchronization point (Anton Kirilov) §

This is similar to PQpipelineSync() but it does not flush to the server unless the size threshold of the output buffer is reached.

FeaturesAdd libpq function PQsetChunkedRowsMode() to allow retrieval of results in chunks

libpq

Add libpq function PQsetChunkedRowsMode() to allow retrieval of results in chunks (Daniel Vérité) §

FeaturesAllow TLS connections without requiring a network round-trip negotiation

libpq

Allow TLS connections without requiring a network round-trip negotiation (Greg Stark, Heikki Linnakangas, Peter Eisentraut, Michael Paquier, Daniel Gustafsson) § § § § § § § §

This is enabled with the client-side option sslnegotiation=direct, requires ALPN, and only works on PostgreSQL 17 and later servers.

FeaturesImprove psql display of default and empty privileges

psql

Improve psql display of default and empty privileges (Erik Wienhold, Laurenz Albe) §

Command \dp now displays (none) for empty privileges; default still displays as empty.

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.

FeaturesHave backslash commands honor \pset null

psql

Have backslash commands honor \pset null (Erik Wienhold, Laurenz Albe) §

Previously \pset null was ignored.

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 psql's \watch to stop after a minimum number of rows returned

psql

Allow psql's \watch to stop after a minimum number of rows returned (Greg Sabino Mullane) §

The parameter is min_rows.

FeaturesAllow psql connection attempts to be canceled with control-C

psql

Allow psql connection attempts to be canceled with control-C (Tristan Partin) §

FeaturesAllow psql to honor FETCH_COUNT for non-SELECT queries

psql

Allow psql to honor FETCH_COUNT for non-SELECT queries (Daniel Vérité) §

FeaturesImprove psql tab completion

psql

Improve psql tab completion (Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Pavel Borisov, Jian He) § § § § § § § §

FeaturesAdd application pg_walsummary to dump WAL summary files

Server Applications

Add application pg_walsummary to dump WAL summary files (Robert Haas) §

FeaturesAllow pg_dump's large objects to be restorable in batches

Server Applications

Allow pg_dump's large objects to be restorable in batches (Tom Lane) §

This allows the restoration of many large objects to avoid transaction limits and to be restored in parallel.

FeaturesAdd pg_dump option --exclude-extension

Server Applications

Add pg_dump option --exclude-extension (Ayush Vatsa) §

FeaturesAllow pg_dump, pg_dumpall, and pg_restore to specify include/exclude objects in a file

Server Applications

Allow pg_dump, pg_dumpall, and pg_restore to specify include/exclude objects in a file (Pavel Stehule, Daniel Gustafsson) §

The option is called --filter.

FeaturesAdd the --sync-method parameter to several client applications

Server Applications

Add the --sync-method parameter to several client applications (Justin Pryzby, Nathan Bossart) §

The applications are initdb, pg_basebackup, pg_checksums, pg_dump, pg_rewind, and pg_upgrade.

FeaturesAdd pg_restore option --transaction-size to allow object restores in transaction batches

Server Applications

Add pg_restore option --transaction-size to allow object restores in transaction batches (Tom Lane) §

This allows the performance benefits of transaction batches without the problems of excessively large transaction blocks.

FeaturesChange pgbench debug mode option from -d to --debug

Server Applications

Change pgbench debug mode option from -d to --debug (Greg Sabino Mullane) §

Option -d is now used for the database name, and the new --dbname option can be used as well.

FeaturesAdd pgbench option --exit-on-abort to exit after any client aborts

Server Applications

Add pgbench option --exit-on-abort to exit after any client aborts (Yugo Nagata) §

FeaturesAdd pgbench command \syncpipeline to allow sending of sync messages

Server Applications

Add pgbench command \syncpipeline to allow sending of sync messages (Anthonin Bonnefoy) §

FeaturesAllow pg_archivecleanup to remove backup history files

Server Applications

Allow pg_archivecleanup to remove backup history files (Atsushi Torikoshi) §

The option is --clean-backup-history.

FeaturesAdd some long options to pg_archivecleanup

Server Applications

Add some long options to pg_archivecleanup (Atsushi Torikoshi) §

The long options are --debug, --dry-run, and --strip-extension.

FeaturesAllow pg_basebackup and pg_receivewal to use dbname in their connection specification

Server Applications

Allow pg_basebackup and pg_receivewal to use dbname in their connection specification (Jelte Fennema-Nio) §

This is useful for connection poolers that are sensitive to the database name.

FeaturesAdd pg_upgrade option --copy-file-range

Server Applications

Add pg_upgrade option --copy-file-range (Thomas Munro) §

This is supported on Linux and FreeBSD.

FeaturesAllow reindexdb --index to process indexes from different tables in parallel

Server Applications

Allow reindexdb --index to process indexes from different tables in parallel (Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov) §

FeaturesAllow reindexdb, vacuumdb, and clusterdb to process objects in all databases matching a pattern

Server Applications

Allow reindexdb, vacuumdb, and clusterdb to process objects in all databases matching a pattern (Nathan Bossart) § § §

The new option --all controls this behavior.

FeaturesRemove support for OpenSSL 1.0.1

Source Code

Remove support for OpenSSL 1.0.1 (Michael Paquier) §

FeaturesAllow tests to pass in OpenSSL FIPS mode

Source Code

Allow tests to pass in OpenSSL FIPS mode (Peter Eisentraut) § §

FeaturesUse CPU AVX-512 instructions for bit counting

Source Code

Use CPU AVX-512 instructions for bit counting (Paul Amonson, Nathan Bossart, Ants Aasma) § §

FeaturesRequire LLVM version 10 or later

Source Code

Require LLVM version 10 or later (Thomas Munro) §

FeaturesUse native CRC instructions on 64-bit LoongArch CPUs

Source Code

Use native CRC instructions on 64-bit LoongArch CPUs (Xudong Yang) §

FeaturesRemove AIX support

Source Code

Remove AIX support (Heikki Linnakangas) §

FeaturesRemove the Microsoft Visual Studio-specific PostgreSQL build option

Source Code

Remove the Microsoft Visual Studio-specific PostgreSQL build option (Michael Paquier) §

Meson is now the only available method for Visual Studio builds.

FeaturesRemove configure option --disable-thread-safety

Source Code

Remove configure option --disable-thread-safety (Thomas Munro, Heikki Linnakangas) § §

We now assume all supported platforms have sufficient thread support.

FeaturesRemove configure option --with-CC

Source Code

Remove configure option --with-CC (Heikki Linnakangas) §

Setting the CC environment variable is now the only supported method for specifying the compiler.

FeaturesUser-defined data type receive functions will no longer receive their data null-terminated

Source Code

User-defined data type receive functions will no longer receive their data null-terminated (David Rowley) §

FeaturesAdd incremental JSON parser for use with huge JSON documents

Source Code

Add incremental JSON parser for use with huge JSON documents (Andrew Dunstan) §

FeaturesConvert top-level README file to Markdown

Source Code

Convert top-level README file to Markdown (Nathan Bossart) §

FeaturesRemove no longer needed top-level INSTALL file

Source Code

Remove no longer needed top-level INSTALL file (Tom Lane) §

FeaturesRemove make's distprep option

Source Code

Remove make's distprep option (Peter Eisentraut) §

FeaturesAdd make support for Android shared libraries

Source Code

Add make support for Android shared libraries (Peter Eisentraut) §

FeaturesAdd backend support for injection points

Source Code

Add backend support for injection points (Michael Paquier) § § § §

This is used for server debugging and they must be enabled at server compile time.

FeaturesAdd dynamic shared memory registry

Source Code

Add dynamic shared memory registry (Nathan Bossart) §

This allows shared libraries which are not initialized at startup to coordinate dynamic shared memory access.

Bug fixesFix emit_log_hook to use the same time value as other log records for the same query

Source Code

Fix emit_log_hook to use the same time value as other log records for the same query (Kambam Vinay, Michael Paquier) §

FeaturesImprove documentation for using jsonpath for predicate checks

Source Code

Improve documentation for using jsonpath for predicate checks (David Wheeler) §

FeaturesAllow joins with non-join qualifications to be pushed down to foreign servers and custom scans

Additional Modules

Allow joins with non-join qualifications to be pushed down to foreign servers and custom scans (Richard Guo, Etsuro Fujita) §

Foreign data wrappers and custom scans will need to be modified to handle these cases.

FeaturesAllow pushdown of EXISTS and IN subqueries to postgres_fdw foreign servers

Additional Modules

Allow pushdown of EXISTS and IN subqueries to postgres_fdw foreign servers (Alexander Pyhalov) §

FeaturesIncrease the default foreign data wrapper tuple cost

Additional Modules

Increase the default foreign data wrapper tuple cost (David Rowley, Umair Shahid) § §

This value is used by the optimizer.

FeaturesAllow dblink database operations to be interrupted

Additional Modules

Allow dblink database operations to be interrupted (Noah Misch) §

FeaturesAllow the creation of hash indexes on ltree columns

Additional Modules

Allow the creation of hash indexes on ltree columns (Tommy Pavlicek) §

This also enables hash join and hash aggregation on ltree columns.

FeaturesAllow unaccent character translation rules to contain whitespace and quotes

Additional Modules

Allow unaccent character translation rules to contain whitespace and quotes (Michael Paquier) §

The syntax for the unaccent.rules file has changed.

FeaturesAllow amcheck to check for unique constraint violations using new option --checkunique

Additional Modules

Allow amcheck to check for unique constraint violations using new option --checkunique (Anastasia Lubennikova, Pavel Borisov, Maxim Orlov) §

FeaturesAllow citext tests to pass in OpenSSL FIPS mode

Additional Modules

Allow citext tests to pass in OpenSSL FIPS mode (Peter Eisentraut) §

FeaturesAllow pgcrypto tests to pass in OpenSSL FIPS mode

Additional Modules

Allow pgcrypto tests to pass in OpenSSL FIPS mode (Peter Eisentraut) §

FeaturesRemove some unused SPI macros

Additional Modules

Remove some unused SPI macros (Bharath Rupireddy) §

FeaturesAllow ALTER OPERATOR to set more optimization attributes

Additional Modules

Allow ALTER OPERATOR to set more optimization attributes (Tommy Pavlicek) §

This is useful for extensions.

FeaturesAllow extensions to define custom wait events

Additional Modules

Allow extensions to define custom wait events (Masahiro Ikeda) § § § §

Custom wait events have been added to postgres_fdw and dblink.

FeaturesAdd pg_buffercache function pg_buffercache_evict() to allow shared buffer eviction

Additional Modules

Add pg_buffercache function pg_buffercache_evict() to allow shared buffer eviction (Palak Chaturvedi, Thomas Munro) §

This is useful for testing.

FeaturesReplace CALL parameters in pg_stat_statements with placeholders

Additional Modules / pg_stat_statements

Replace CALL parameters in pg_stat_statements with placeholders (Sami Imseih) §

FeaturesReplace savepoint names stored in pg_stat_statements with placeholders

Additional Modules / pg_stat_statements

Replace savepoint names stored in pg_stat_statements with placeholders (Greg Sabino Mullane) §

This greatly reduces the number of entries needed to record SAVEPOINT, RELEASE SAVEPOINT, and ROLLBACK TO SAVEPOINT commands.

FeaturesReplace the two-phase commit GIDs stored in pg_stat_statements with placeholders

Additional Modules / pg_stat_statements

Replace the two-phase commit GIDs stored in pg_stat_statements with placeholders (Michael Paquier) §

This greatly reduces the number of entries needed to record PREPARE TRANSACTION, COMMIT PREPARED, and ROLLBACK PREPARED.

FeaturesTrack DEALLOCATE in pg_stat_statements

Additional Modules / pg_stat_statements

Track DEALLOCATE in pg_stat_statements (Dagfinn Ilmari Mannsåker, Michael Paquier) §

DEALLOCATE names are stored in pg_stat_statements as placeholders.

FeaturesAdd local I/O block read/write timing statistics columns of pg_stat_statements

Additional Modules / pg_stat_statements

Add local I/O block read/write timing statistics columns of pg_stat_statements (Nazir Bilal Yavuz) § §

The new columns are local_blk_read_time and local_blk_write_time.

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 JIT deform_counter details to pg_stat_statements

Additional Modules / pg_stat_statements

Add JIT deform_counter details to pg_stat_statements (Dmitry Dolgov) §

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 optional fourth argument (minmax_only) to pg_stat_statements_reset() to allow for the resetting of only min/max statistics

Additional Modules / pg_stat_statements

Add optional fourth argument (minmax_only) to pg_stat_statements_reset() to allow for the resetting of only min/max statistics (Andrei Zubkov) §

This argument defaults to false.

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 pg_stat_statements columns stats_since and minmax_stats_since to track entry creation time and last min/max reset time

Additional Modules / pg_stat_statements

Add pg_stat_statements columns stats_since and minmax_stats_since to track entry creation time and last min/max reset time (Andrei Zubkov) §

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.

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.