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

14.0

2021-09-30

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

14.0 SupportedSupport ends 2026-11-12

PostgreSQL 14.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 19.6 for general information on migrating to new major releases.

Version 14 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:

CompatibilityUser-defined objects that reference certain built-in array functions along with their argument types must be recreated

Compatibility

User-defined objects that reference certain built-in array functions along with their argument types must be recreated (Tom Lane) §

Specifically, array_append(), array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket() used to take anyarray arguments but now take anycompatiblearray. Therefore, user-defined objects like aggregates and operators that reference those array function signatures must be dropped before upgrading, and recreated once the upgrade completes.

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.

CompatibilityRemove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg

Compatibility

Remove deprecated containment operators @ and ~ for built-in geometric data types and contrib modules cube, hstore, intarray, and seg (Justin Pryzby) § §

The more consistently named <@ and @> have been recommended for many years.

CompatibilityFix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens

Compatibility

Fix to_tsquery() and websearch_to_tsquery() to properly parse query text containing discarded tokens (Alexander Korotkov) §

Certain discarded tokens, like underscore, caused the output of these functions to produce incorrect tsquery output, e.g., both websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class <-> pg') used to output ( 'pg' & 'class' ) <-> 'pg', but now both output 'pg' <-> 'class' <-> 'pg'.

CompatibilityFix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes

Compatibility

Fix websearch_to_tsquery() to properly parse multiple adjacent discarded tokens in quotes (Alexander Korotkov) §

Previously, quoted text that contained multiple adjacent discarded tokens was treated as multiple tokens, causing incorrect tsquery output, e.g., websearch_to_tsquery('"aaa: bbb"') used to output 'aaa' <2> 'bbb', but now outputs 'aaa' <-> 'bbb'.

CompatibilityChange EXTRACT() to return type numeric instead of float8

Compatibility

Change EXTRACT() to return type numeric instead of float8 (Peter Eisentraut) §

This avoids loss-of-precision issues in some usages. The old behavior can still be obtained by using the old underlying function date_part().

Also, EXTRACT(date) now throws an error for units that are not part of the date data type.

CompatibilityChange var_samp() and stddev_samp() with numeric parameters to return NULL when the input is a single NaN value

Compatibility

Change var_samp() and stddev_samp() with numeric parameters to return NULL when the input is a single NaN value (Tom Lane) §

Previously NaN was returned.

CompatibilityReturn false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers

Compatibility

Return false for has_column_privilege() checks on non-existent or dropped columns when using attribute numbers (Joe Conway) §

Previously such attribute numbers returned an invalid-column error.

CompatibilityFix handling of infinite window function ranges

Compatibility

Fix handling of infinite window function ranges (Tom Lane) §

Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results.

CompatibilityRemove factorial operators ! and !!, as well as function numeric_fac()

Compatibility

Remove factorial operators ! and !!, as well as function numeric_fac() (Mark Dilger) §

The factorial() function is still supported.

CompatibilityDisallow factorial() of negative numbers

Compatibility

Disallow factorial() of negative numbers (Peter Eisentraut) §

Previously such cases returned 1.

CompatibilityRemove support for postfix (right-unary) operators

Compatibility

Remove support for postfix (right-unary) operators (Mark Dilger) §

pg_dump and pg_upgrade will warn if postfix operators are being dumped.

CompatibilityAllow \D and \W shorthands to match newlines in regular expression newline-sensitive mode

Compatibility

Allow \D and \W shorthands to match newlines in regular expression newline-sensitive mode (Tom Lane) §

Previously they did not match newlines in this mode, but that disagrees with the behavior of other common regular expression engines. [^[:digit:]] or [^[:word:]] can be used to get the old behavior.

CompatibilityDisregard constraints when matching regular expression back-references

Compatibility

Disregard constraints when matching regular expression back-references (Tom Lane) §

For example, in (^\d+).*\1, the ^ constraint should be applied at the start of the string, but not when matching \1.

CompatibilityDisallow \w as a range start or end in regular expression character classes

Compatibility

Disallow \w as a range start or end in regular expression character classes (Tom Lane) §

This previously was allowed but produced unexpected results.

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.

CompatibilityRequire custom server parameter names to use only characters that are valid in unquoted SQL identifiers

Compatibility

Require custom server parameter names to use only characters that are valid in unquoted SQL identifiers (Tom Lane) § §

CompatibilityChange the default of the password_encryption server parameter to scram-sha-256

Compatibility

Change the default of the password_encryption server parameter to scram-sha-256 (Peter Eisentraut) §

Previously it was md5. All new passwords will be stored as SHA256 unless this server setting is changed or the password is specified in MD5 format. Also, the legacy (and undocumented) Boolean-like values which were previously synonyms for md5 are no longer accepted.

CompatibilityRemove server parameter vacuum_cleanup_index_scale_factor

Compatibility

Remove server parameter vacuum_cleanup_index_scale_factor (Peter Geoghegan) § §

This setting was ignored starting in PostgreSQL version 13.3.

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.

CompatibilityRemove server parameter operator_precedence_warning

Compatibility

Remove server parameter operator_precedence_warning (Tom Lane) §

This setting was used for warning applications about PostgreSQL 9.5 changes.

CompatibilityOverhaul the specification of clientcert in pg_hba.conf

Compatibility

Overhaul the specification of clientcert in pg_hba.conf (Kyotaro Horiguchi) §

Values 1/0/no-verify are no longer supported; only the strings verify-ca and verify-full can be used. Also, disallow verify-ca if cert authentication is enabled since cert requires verify-full checking.

CompatibilityRemove support for SSL compression

Compatibility

Remove support for SSL compression (Daniel Gustafsson, Michael Paquier) § §

This was already disabled by default in previous PostgreSQL releases, and most modern OpenSSL and TLS versions no longer support it.

CompatibilityRemove server and libpq support for the version 2 wire protocol

Compatibility

Remove server and libpq support for the version 2 wire protocol (Heikki Linnakangas) §

This was last used as the default in PostgreSQL 7.3 (released in 2002).

CompatibilityDisallow single-quoting of the language name in the CREATE/DROP LANGUAGE command

Compatibility

Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) §

CompatibilityRemove the composite types that were formerly created for sequences and toast tables

Compatibility

Remove the composite types that were formerly created for sequences and toast tables (Tom Lane) §

CompatibilityProcess doubled quote marks in ecpg SQL command strings correctly

Compatibility

Process doubled quote marks in ecpg SQL command strings correctly (Tom Lane) § §

Previously 'abc''def' was passed to the server as 'abc'def', and "abc""def" was passed as "abc"def", causing syntax errors.

CompatibilityPrevent the containment operators (<@ and @>) for intarray from using GiST indexes

Compatibility

Prevent the containment operators (<@ and @>) for intarray from using GiST indexes (Tom Lane) §

Previously a full GiST index scan was required, so just avoid that and scan the heap, which is faster. Indexes created for this purpose should be removed.

CompatibilityRemove contrib program pg_standby

Compatibility

Remove contrib program pg_standby (Justin Pryzby) §

CompatibilityPrevent tablefunc's function normal_rand() from accepting negative values

Compatibility

Prevent tablefunc's function normal_rand() from accepting negative values (Ashutosh Bapat) §

Negative values produced undesirable results.

FeaturesAdd predefined roles pg_read_all_data and pg_write_all_data

Server

Add predefined roles pg_read_all_data and pg_write_all_data (Stephen Frost) §

These non-login roles can be used to give read or write permission to all tables, views, and sequences.

FeaturesAdd predefined role pg_database_owner that contains only the current database's owner

Server

Add predefined role pg_database_owner that contains only the current database's owner (Noah Misch) §

This is especially useful in template databases.

FeaturesRemove temporary files after backend crashes

Server

Remove temporary files after backend crashes (Euler Taveira) §

Previously, such files were retained for debugging purposes. If necessary, deletion can be disabled with the new server parameter remove_temp_files_after_crash.

FeaturesAllow long-running queries to be canceled if the client disconnects

Server

Allow long-running queries to be canceled if the client disconnects (Sergey Cherkashin, Thomas Munro) §

The server parameter client_connection_check_interval allows control over whether loss of connection is checked for intra-query. (This is supported on Linux and a few other operating systems.)

FeaturesAdd an optional timeout parameter to pg_terminate_backend()

Server

Add an optional timeout parameter to pg_terminate_backend() (Magnus Hagander) §

FeaturesAllow wide tuples to be always added to almost-empty heap pages

Server

Allow wide tuples to be always added to almost-empty heap pages (John Naylor, Floris van Nee) §

Previously tuples whose insertion would have exceeded the page's fill factor were instead added to new pages.

FeaturesAdd Server Name Indication (SNI) in SSL connection packets

Server

Add Server Name Indication (SNI) in SSL connection packets (Peter Eisentraut) §

This can be disabled by turning off client connection option sslsni.

FeaturesAllow vacuum to skip index vacuuming when the number of removable index entries is insignificant

Server / Vacuuming

Allow vacuum to skip index vacuuming when the number of removable index entries is insignificant (Masahiko Sawada, Peter Geoghegan) § §

The vacuum parameter INDEX_CLEANUP has a new default of auto that enables this optimization.

FeaturesAllow vacuum to more eagerly add deleted btree pages to the free space map

Server / Vacuuming

Allow vacuum to more eagerly add deleted btree pages to the free space map (Peter Geoghegan) §

Previously vacuum could only add pages to the free space map that were marked as deleted by previous vacuums.

FeaturesAllow vacuum to reclaim space used by unused trailing heap line pointers

Server / Vacuuming

Allow vacuum to reclaim space used by unused trailing heap line pointers (Matthias van de Meent, Peter Geoghegan) §

FeaturesAllow vacuum to be more aggressive in removing dead rows during minimal-locking index operations

Server / Vacuuming

Allow vacuum to be more aggressive in removing dead rows during minimal-locking index operations (Álvaro Herrera) § § §

Specifically, CREATE INDEX CONCURRENTLY and REINDEX CONCURRENTLY no longer limit the dead row removal of other relations.

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.

PerformanceSpeed up vacuuming of databases with many relations

Server / Vacuuming

Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) §

FeaturesReduce the default value of vacuum_cost_page_miss to better reflect current hardware capabilities

Server / Vacuuming

Reduce the default value of vacuum_cost_page_miss to better reflect current hardware capabilities (Peter Geoghegan) §

FeaturesAdd ability to skip vacuuming of TOAST tables

Server / Vacuuming

Add ability to skip vacuuming of TOAST tables (Nathan Bossart) §

VACUUM now has a PROCESS_TOAST option which can be set to false to disable TOAST processing, and vacuumdb has a --no-process-toast option.

FeaturesHave COPY FREEZE appropriately update page visibility bits

Server / Vacuuming

Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) §

FeaturesCause vacuum operations to be more aggressive if the table is near xid or multixact wraparound

Server / Vacuuming

Cause vacuum operations to be more aggressive if the table is near xid or multixact wraparound (Masahiko Sawada, Peter Geoghegan) §

This is controlled by vacuum_failsafe_age and vacuum_multixact_failsafe_age.

FeaturesIncrease warning time and hard limit before transaction id and multi-transaction wraparound

Server / Vacuuming

Increase warning time and hard limit before transaction id and multi-transaction wraparound (Noah Misch) §

This should reduce the possibility of failures that occur without having issued warnings about wraparound.

FeaturesAdd per-index information to autovacuum logging output

Server / Vacuuming

Add per-index information to autovacuum logging output (Masahiko Sawada) §

PerformanceImprove the performance of updates and deletes on partitioned tables with many partitions

Server / Partitioning

Improve the performance of updates and deletes on partitioned tables with many partitions (Amit Langote, Tom Lane) § § §

This change greatly reduces the planner's overhead for such cases, and also allows updates/deletes on partitioned tables to use execution-time partition pruning.

FeaturesAllow partitions to be detached in a non-blocking manner

Server / Partitioning

Allow partitions to be detached in a non-blocking manner (Álvaro Herrera) §

The syntax is ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE.

FeaturesIgnore COLLATE clauses in partition boundary values

Server / Partitioning

Ignore COLLATE clauses in partition boundary values (Tom Lane) §

Previously any such clause had to match the collation of the partition key; but it's more consistent to consider that it's automatically coerced to the collation of the partition key.

FeaturesAllow btree index additions to remove expired index entries to prevent page splits

Server / Indexes

Allow btree index additions to remove expired index entries to prevent page splits (Peter Geoghegan) § §

This is particularly helpful for reducing index bloat on tables whose indexed columns are frequently updated.

FeaturesAllow BRIN indexes to record multiple min/max values per range

Server / Indexes

Allow BRIN indexes to record multiple min/max values per range (Tomas Vondra) §

This is useful if there are groups of values in each page range.

FeaturesAllow BRIN indexes to use bloom filters

Server / Indexes

Allow BRIN indexes to use bloom filters (Tomas Vondra) §

This allows BRIN indexes to be used effectively with data that is not well-localized in the heap.

FeaturesAllow some GiST indexes to be built by presorting the data

Server / Indexes

Allow some GiST indexes to be built by presorting the data (Andrey Borodin) §

Presorting happens automatically and allows for faster index creation and smaller indexes.

FeaturesAllow SP-GiST indexes to contain INCLUDE'd columns

Server / Indexes

Allow SP-GiST indexes to contain INCLUDE'd columns (Pavel Borisov) §

FeaturesAllow hash lookup for IN clauses with many constants

Server / Optimizer

Allow hash lookup for IN clauses with many constants (James Coleman, David Rowley) §

Previously the code always sequentially scanned the list of values.

FeaturesIncrease the number of places extended statistics can be used for OR clause estimation

Server / Optimizer

Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) § § §

FeaturesAllow extended statistics on expressions

Server / Optimizer

Allow extended statistics on expressions (Tomas Vondra) §

This allows statistics on a group of expressions and columns, rather than only columns like previously. System view pg_stats_ext_exprs reports such statistics.

FeaturesAllow efficient heap scanning of a range of TIDs

Server / Optimizer

Allow efficient heap scanning of a range of TIDs (Edmund Horner, David Rowley) §

Previously a sequential scan was required for non-equality TID specifications.

Bug fixesFix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS

Server / Optimizer

Fix EXPLAIN CREATE TABLE AS and EXPLAIN CREATE MATERIALIZED VIEW to honor IF NOT EXISTS (Bharath Rupireddy) §

Previously, if the object already existed, EXPLAIN would fail.

PerformanceImprove the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts

Server / General Performance

Improve the speed of computing MVCC visibility snapshots on systems with many CPUs and high session counts (Andres Freund) § § § § § §

This also improves performance when there are many idle sessions.

PerformanceAdd executor method to memoize results from the inner side of a nested-loop join

Server / General Performance

Add executor method to memoize results from the inner side of a nested-loop join (David Rowley) §

This is useful if only a small percentage of rows is checked on the inner side. It can be disabled via server parameter enable_memoize.

PerformanceAllow window functions to perform incremental sorts

Server / General Performance

Allow window functions to perform incremental sorts (David Rowley) §

PerformanceImprove the I/O performance of parallel sequential scans

Server / General Performance

Improve the I/O performance of parallel sequential scans (Thomas Munro, David Rowley) §

This was done by allocating blocks in groups to parallel workers.

PerformanceAllow a query referencing multiple foreign tables to perform foreign table scans in parallel

Server / General Performance

Allow a query referencing multiple foreign tables to perform foreign table scans in parallel (Robert Haas, Kyotaro Horiguchi, Thomas Munro, Etsuro Fujita) §

postgres_fdw supports this type of scan if async_capable is set.

PerformanceAllow analyze to do page prefetching

Server / General Performance

Allow analyze to do page prefetching (Stephen Frost) §

This is controlled by maintenance_io_concurrency.

PerformanceImprove performance of regular expression searches

Server / General Performance

Improve performance of regular expression searches (Tom Lane) § § § § § § § § § § §

PerformanceDramatically improve Unicode normalization performance

Server / General Performance

Dramatically improve Unicode normalization performance (John Naylor) § §

This speeds normalize() and IS NORMALIZED.

PerformanceAdd ability to use LZ4 compression on TOAST data

Server / General Performance

Add ability to use LZ4 compression on TOAST data (Dilip Kumar) §

This can be set at the column level, or set as a default via server parameter default_toast_compression. The server must be compiled with --with-lz4 to support this feature. The default setting is still pglz.

FeaturesIf server parameter compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix

Server / Monitoring

If server parameter compute_query_id is enabled, display the query id in pg_stat_activity, EXPLAIN VERBOSE, csvlog, and optionally in log_line_prefix (Julien Rouhaud) § § § § §

A query id computed by an extension will also be displayed.

FeaturesImprove logging of auto-vacuum and auto-analyze

Server / Monitoring

Improve logging of auto-vacuum and auto-analyze (Stephen Frost, Jakub Wartak) §

This reports I/O timings for auto-vacuum and auto-analyze if track_io_timing is enabled. Also, report buffer read and dirty rates for auto-analyze.

FeaturesAdd information about the original user name supplied by the client to the output of log_connections

Server / Monitoring

Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) §

FeaturesAdd system view pg_stat_progress_copy to report COPY progress

Server / System Views

Add system view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) § §

FeaturesAdd system view pg_stat_wal to report WAL activity

Server / System Views

Add system view pg_stat_wal to report WAL activity (Masahiro Ikeda) § § §

FeaturesAdd system view pg_stat_replication_slots to report replication slot activity

Server / System Views

Add system view pg_stat_replication_slots to report replication slot activity (Masahiko Sawada, Amit Kapila, Vignesh C) § § § §

The function pg_stat_reset_replication_slot() resets slot statistics.

FeaturesAdd system view pg_backend_memory_contexts to report session memory usage

Server / System Views

Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) § §

FeaturesAdd function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends

Server / System Views

Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) §

FeaturesAdd session statistics to the pg_stat_database system view

Server / System Views

Add session statistics to the pg_stat_database system view (Laurenz Albe) §

FeaturesAdd columns to pg_prepared_statements to report generic and custom plan counts

Server / System Views

Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) §

FeaturesAdd lock wait start time to pg_locks

Server / System Views

Add lock wait start time to pg_locks (Atsushi Torikoshi) §

FeaturesMake the archiver process visible in pg_stat_activity

Server / System Views

Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) §

FeaturesAdd wait event WalReceiverExit to report WAL receiver exit wait time

Server / System Views

Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) §

FeaturesImplement information schema view routine_column_usage to track columns referenced by function and procedure default expressions

Server / System Views

Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) §

FeaturesAllow an SSL certificate's distinguished name (DN) to be matched for client certificate authentication

Server / Authentication

Allow an SSL certificate's distinguished name (DN) to be matched for client certificate authentication (Andrew Dunstan) §

The new pg_hba.conf option clientname=DN allows comparison with certificate attributes beyond the CN and can be combined with ident maps.

FeaturesAllow pg_hba.conf and pg_ident.conf records to span multiple lines

Server / Authentication

Allow pg_hba.conf and pg_ident.conf records to span multiple lines (Fabien Coelho) §

A backslash at the end of a line allows record contents to be continued on the next line.

FeaturesAllow the specification of a certificate revocation list (CRL) directory

Server / Authentication

Allow the specification of a certificate revocation list (CRL) directory (Kyotaro Horiguchi) §

This is controlled by server parameter ssl_crl_dir and libpq connection option sslcrldir. Previously only single CRL files could be specified.

FeaturesAllow passwords of an arbitrary length

Server / Authentication

Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) §

FeaturesAdd server parameter idle_session_timeout to close idle sessions

Server / Server Configuration

Add server parameter idle_session_timeout to close idle sessions (Li Japin) §

This is similar to idle_in_transaction_session_timeout.

FeaturesChange checkpoint_completion_target default to 0.9

Server / Server Configuration

Change checkpoint_completion_target default to 0.9 (Stephen Frost) §

The previous default was 0.5.

FeaturesAllow %P in log_line_prefix to report the parallel group leader's PID for a parallel worker

Server / Server Configuration

Allow %P in log_line_prefix to report the parallel group leader's PID for a parallel worker (Justin Pryzby) §

FeaturesAllow unix_socket_directories to specify paths as individual, comma-separated quoted strings

Server / Server Configuration

Allow unix_socket_directories to specify paths as individual, comma-separated quoted strings (Ian Lawrence Barwick) §

Previously all the paths had to be in a single quoted string.

FeaturesAllow startup allocation of dynamic shared memory

Server / Server Configuration

Allow startup allocation of dynamic shared memory (Thomas Munro) §

This is controlled by min_dynamic_shared_memory. This allows more use of huge pages.

FeaturesAdd server parameter huge_page_size to control the size of huge pages used on Linux

Server / Server Configuration

Add server parameter huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) §

FeaturesAllow standby servers to be rewound via pg_rewind

Streaming Replication and Recovery

Allow standby servers to be rewound via pg_rewind (Heikki Linnakangas) §

FeaturesAllow the restore_command setting to be changed during a server reload

Streaming Replication and Recovery

Allow the restore_command setting to be changed during a server reload (Sergei Kornilov) §

You can also set restore_command to an empty string and reload to force recovery to only read from the pg_wal directory.

FeaturesAdd server parameter log_recovery_conflict_waits to report long recovery conflict wait times

Streaming Replication and Recovery

Add server parameter log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) § §

FeaturesPause recovery on a hot standby server if the primary changes its parameters in a way that prevents replay on the standby

Streaming Replication and Recovery

Pause recovery on a hot standby server if the primary changes its parameters in a way that prevents replay on the standby (Peter Eisentraut) §

Previously the standby would shut down immediately.

FeaturesAdd function pg_get_wal_replay_pause_state() to report the recovery state

Streaming Replication and Recovery

Add function pg_get_wal_replay_pause_state() to report the recovery state (Dilip Kumar) §

It gives more detailed information than pg_is_wal_replay_paused(), which still exists.

FeaturesAdd new read-only server parameter in_hot_standby

Streaming Replication and Recovery

Add new read-only server parameter in_hot_standby (Haribabu Kommi, Greg Nancarrow, Tom Lane) §

This allows clients to easily detect whether they are connected to a hot standby server.

FeaturesSpeed truncation of small tables during recovery on clusters with a large number of shared buffers

Streaming Replication and Recovery

Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) §

FeaturesAllow file system sync at the start of crash recovery on Linux

Streaming Replication and Recovery

Allow file system sync at the start of crash recovery on Linux (Thomas Munro) §

By default, PostgreSQL opens and fsyncs each data file in the database cluster at the start of crash recovery. A new setting, recovery_init_sync_method=syncfs, instead syncs each filesystem used by the cluster. This allows for faster recovery on systems with many database files.

FeaturesAdd function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction

Streaming Replication and Recovery

Add function pg_xact_commit_timestamp_origin() to return the commit timestamp and replication origin of the specified transaction (Movead Li) §

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 the replication origin to the record returned by pg_last_committed_xact()

Streaming Replication and Recovery

Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) §

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 replication origin functions to be controlled using standard function permission controls

Streaming Replication and Recovery

Allow replication origin functions to be controlled using standard function permission controls (Martín Marqués) §

Previously these functions could only be executed by superusers, and this is still the default.

FeaturesAllow logical replication to stream long in-progress transactions to subscribers

Streaming Replication and Recovery / Logical Replication

Allow logical replication to stream long in-progress transactions to subscribers (Dilip Kumar, Amit Kapila, Ajin Cherian, Tomas Vondra, Nikhil Sontakke, Stas Kelvich) § § § §

Previously transactions that exceeded logical_decoding_work_mem were written to disk until the transaction completed.

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.

FeaturesEnhance the logical replication API to allow streaming large in-progress transactions

Streaming Replication and Recovery / Logical Replication

Enhance the logical replication API to allow streaming large in-progress transactions (Tomas Vondra, Dilip Kumar, Amit Kapila) §

The output functions begin with stream. test_decoding also supports these.

FeaturesAllow multiple transactions during table sync in logical replication

Streaming Replication and Recovery / Logical Replication

Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, Takamichi Osumi) §

FeaturesImmediately WAL-log subtransaction and top-level XID association

Streaming Replication and Recovery / Logical Replication

Immediately WAL-log subtransaction and top-level XID association (Tomas Vondra, Dilip Kumar, Amit Kapila) §

This is useful for logical decoding.

FeaturesEnhance logical decoding APIs to handle two-phase commits

Streaming Replication and Recovery / Logical Replication

Enhance logical decoding APIs to handle two-phase commits (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) § § §

This is controlled via pg_create_logical_replication_slot().

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 cache invalidation messages to the WAL during command completion when using logical replication

Streaming Replication and Recovery / Logical Replication

Add cache invalidation messages to the WAL during command completion when using logical replication (Dilip Kumar, Tomas Vondra, Amit Kapila) §

This allows logical streaming of in-progress transactions. When logical replication is disabled, invalidation messages are generated only at transaction completion.

FeaturesAllow logical decoding to more efficiently process cache invalidation messages

Streaming Replication and Recovery / Logical Replication

Allow logical decoding to more efficiently process cache invalidation messages (Dilip Kumar) §

This allows logical decoding to work efficiently in presence of a large amount of DDL.

FeaturesAllow control over whether logical decoding messages are sent to the replication stream

Streaming Replication and Recovery / Logical Replication

Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) §

FeaturesAllow logical replication subscriptions to use binary transfer mode

Streaming Replication and Recovery / Logical Replication

Allow logical replication subscriptions to use binary transfer mode (Dave Cramer) §

This is faster than text mode, but slightly less robust.

FeaturesAllow logical decoding to be filtered by xid

Streaming Replication and Recovery / Logical Replication

Allow logical decoding to be filtered by xid (Markus Wanner) §

FeaturesReduce the number of keywords that can't be used as column labels without AS

SELECT, INSERT

Reduce the number of keywords that can't be used as column labels without AS (Mark Dilger) §

There are now 90% fewer restricted keywords.

FeaturesAllow an alias to be specified for JOIN's USING clause

SELECT, INSERT

Allow an alias to be specified for JOIN's USING clause (Peter Eisentraut) §

The alias is created by writing AS after the USING clause. It can be used as a table qualification for the merged USING columns.

FeaturesAllow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations

SELECT, INSERT

Allow DISTINCT to be added to GROUP BY to remove duplicate GROUPING SET combinations (Vik Fearing) §

For example, GROUP BY CUBE (a,b), CUBE (b,c) will generate duplicate grouping combinations without DISTINCT.

FeaturesProperly handle DEFAULT entries in multi-row VALUES lists in INSERT

SELECT, INSERT

Properly handle DEFAULT entries in multi-row VALUES lists in INSERT (Dean Rasheed) §

Such cases used to throw an error.

FeaturesAdd SQL-standard SEARCH and CYCLE clauses for common table expressions

SELECT, INSERT

Add SQL-standard SEARCH and CYCLE clauses for common table expressions (Peter Eisentraut) § §

The same results could be accomplished using existing syntax, but much less conveniently.

FeaturesAllow column names in the WHERE clause of ON CONFLICT to be table-qualified

SELECT, INSERT

Allow column names in the WHERE clause of ON CONFLICT to be table-qualified (Tom Lane) §

Only the target table can be referenced, however.

FeaturesAllow REFRESH MATERIALIZED VIEW to use parallelism

Utility Commands

Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) §

FeaturesAllow REINDEX to change the tablespace of the new index

Utility Commands

Allow REINDEX to change the tablespace of the new index (Alexey Kondratov, Michael Paquier, Justin Pryzby) § §

This is done by specifying a TABLESPACE clause. A --tablespace option was also added to reindexdb to control this.

FeaturesAllow REINDEX to process all child tables or indexes of a partitioned relation

Utility Commands

Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) §

FeaturesAllow index commands using CONCURRENTLY to avoid waiting for the completion of other operations using CONCURRENTLY

Utility Commands

Allow index commands using CONCURRENTLY to avoid waiting for the completion of other operations using CONCURRENTLY (Álvaro Herrera) § § §

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.

PerformanceImprove the performance of COPY FROM in binary mode

Utility Commands

Improve the performance of COPY FROM in binary mode (Bharath Rupireddy, Amit Langote) §

FeaturesPreserve SQL standard syntax for SQL-defined functions in view definitions

Utility Commands

Preserve SQL standard syntax for SQL-defined functions in view definitions (Tom Lane) §

Previously, calls to SQL-standard functions such as EXTRACT() were shown in plain function-call syntax. The original syntax is now preserved when displaying a view or rule.

FeaturesAdd the SQL-standard clause GRANTED BY to GRANT and REVOKE

Utility Commands

Add the SQL-standard clause GRANTED BY to GRANT and REVOKE (Peter Eisentraut) §

FeaturesAdd OR REPLACE option for CREATE TRIGGER

Utility Commands

Add OR REPLACE option for CREATE TRIGGER (Takamichi Osumi) §

This allows pre-existing triggers to be conditionally replaced.

FeaturesAllow TRUNCATE to operate on foreign tables

Utility Commands

Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) §

The postgres_fdw module also now supports this.

FeaturesAllow publications to be more easily added to and removed from a subscription

Utility Commands

Allow publications to be more easily added to and removed from a subscription (Japin Li) §

The new syntax is ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION. This avoids having to specify all publications to add/remove entries.

FeaturesAdd primary keys, unique constraints, and foreign keys to system catalogs

Utility Commands

Add primary keys, unique constraints, and foreign keys to system catalogs (Peter Eisentraut) § §

These changes help GUI tools analyze the system catalogs. The existing unique indexes of catalogs now have associated UNIQUE or PRIMARY KEY constraints. Foreign key relationships are not actually stored or implemented as constraints, but can be obtained for display from the function pg_get_catalog_foreign_keys().

FeaturesAllow CURRENT_ROLE every place CURRENT_USER is accepted

Utility Commands

Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) §

FeaturesAllow extensions and built-in data types to implement subscripting

Data Types

Allow extensions and built-in data types to implement subscripting (Dmitry Dolgov) §

Previously subscript handling was hard-coded into the server, so that subscripting could only be applied to array types. This change allows subscript notation to be used to extract or assign portions of a value of any type for which the concept makes sense.

FeaturesAllow subscripting of JSONB

Data Types

Allow subscripting of JSONB (Dmitry Dolgov) § § §

JSONB subscripting can be used to extract and assign to portions of JSONB documents.

FeaturesAdd support for multirange data types

Data Types

Add support for multirange data types (Paul Jungwirth, Alexander Korotkov) § § § §

These are like range data types, but they allow the specification of multiple, ordered, non-overlapping ranges. An associated multirange type is automatically created for every range type.

FeaturesAdd support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish

Data Types

Add support for the stemming of languages Armenian, Basque, Catalan, Hindi, Serbian, and Yiddish (Peter Eisentraut) § § §

FeaturesAllow tsearch data files to have unlimited line lengths

Data Types

Allow tsearch data files to have unlimited line lengths (Tom Lane) §

The previous limit was 4K bytes. Also remove function t_readline().

FeaturesAdd support for Infinity and -Infinity values in the numeric data type

Data Types

Add support for Infinity and -Infinity values in the numeric data type (Tom Lane) §

Floating-point data types already supported these.

FeaturesAdd point operators <<| and |>> representing strictly above/below tests

Data Types

Add point operators <<| and |>> representing strictly above/below tests (Emre Hasegeli) §

Previously these were called >^ and <^, but that naming is inconsistent with other geometric data types. The old names remain available, but may someday be removed.

FeaturesAdd operators to add and subtract LSN and numeric (byte) values

Data Types

Add operators to add and subtract LSN and numeric (byte) values (Fujii Masao) §

FeaturesAllow binary data transfer to be more forgiving of array and record OID mismatches

Data Types

Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) §

FeaturesCreate composite array types for system catalogs

Data Types

Create composite array types for system catalogs (Wenjing Zeng) §

User-defined relations have long had composite types associated with them, and also array types over those composite types. System catalogs now do as well. This change also fixes an inconsistency that creating a user-defined table in single-user mode would fail to create a composite array type.

FeaturesAllow SQL-language functions and procedures to use SQL-standard function bodies

Functions

Allow SQL-language functions and procedures to use SQL-standard function bodies (Peter Eisentraut) §

Previously only string-literal function bodies were supported. When writing a function or procedure in SQL-standard syntax, the body is parsed immediately and stored as a parse tree. This allows better tracking of function dependencies, and can have security benefits.

FeaturesAllow procedures to have OUT parameters

Functions

Allow procedures to have OUT parameters (Peter Eisentraut) § §

FeaturesAllow some array functions to operate on a mix of compatible data types

Functions

Allow some array functions to operate on a mix of compatible data types (Tom Lane) §

The functions array_append(), array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), and width_bucket() now take anycompatiblearray instead of anyarray arguments. This makes them less fussy about exact matches of argument types.

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 SQL-standard trim_array() function

Functions

Add SQL-standard trim_array() function (Vik Fearing) §

This could already be done with array slices, but less easily.

FeaturesAdd bytea equivalents of ltrim() and rtrim()

Functions

Add bytea equivalents of ltrim() and rtrim() (Joel Jacobson) §

FeaturesSupport negative indexes in split_part()

Functions

Support negative indexes in split_part() (Nikhil Benesch) §

Negative values start from the last field and count backward.

FeaturesAdd string_to_table() function to split a string on delimiters

Functions

Add string_to_table() function to split a string on delimiters (Pavel Stehule) §

This is similar to the regexp_split_to_table() function.

FeaturesAdd unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings

Functions

Add unistr() function to allow Unicode characters to be specified as backslash-hex escapes in strings (Pavel Stehule) §

This is similar to how Unicode can be specified in literal strings.

FeaturesAdd bit_xor() XOR aggregate function

Functions

Add bit_xor() XOR aggregate function (Alexey Bashtanov) §

FeaturesAdd function bit_count() to return the number of bits set in a bit or byte string

Functions

Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) §

FeaturesAdd date_bin() function

Functions

Add date_bin() function (John Naylor) § §

This function “bins” input timestamps, grouping them into intervals of a uniform length aligned with a specified origin.

FeaturesAllow make_timestamp()/make_timestamptz() to accept negative years

Functions

Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) §

Negative values are interpreted as BC years.

FeaturesAdd newer regular expression substring() syntax

Functions

Add newer regular expression substring() syntax (Peter Eisentraut) §

The new SQL-standard syntax is SUBSTRING(text SIMILAR pattern ESCAPE escapechar). The previous standard syntax was SUBSTRING(text FROM pattern FOR escapechar), which is still accepted by PostgreSQL.

FeaturesAllow complemented character class escapes \D, \S, and \W within regular expression brackets

Functions

Allow complemented character class escapes \D, \S, and \W within regular expression brackets (Tom Lane) §

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 [[:word:]] as a regular expression character class, equivalent to \w

Functions

Add [[:word:]] as a regular expression character class, equivalent to \w (Tom Lane) §

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.

FeaturesAllow more flexible data types for default values of lead() and lag() window functions

Functions

Allow more flexible data types for default values of lead() and lag() window functions (Vik Fearing) §

FeaturesMake non-zero floating-point values divided by infinity return zero

Functions

Make non-zero floating-point values divided by infinity return zero (Kyotaro Horiguchi) §

Previously such operations produced underflow errors.

FeaturesMake floating-point division of NaN by zero return NaN

Functions

Make floating-point division of NaN by zero return NaN (Tom Lane) §

Previously this returned an error.

FeaturesCause exp() and power() for negative-infinity exponents to return zero

Functions

Cause exp() and power() for negative-infinity exponents to return zero (Tom Lane) § § §

Previously they often returned underflow errors.

FeaturesImprove the accuracy of geometric computations involving infinity

Functions

Improve the accuracy of geometric computations involving infinity (Tom Lane) §

FeaturesMark built-in type coercion functions as leakproof where possible

Functions

Mark built-in type coercion functions as leakproof where possible (Tom Lane) §

This allows more use of functions that require type conversion in security-sensitive situations.

FeaturesChange pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects

Functions

Change pg_describe_object(), pg_identify_object(), and pg_identify_object_as_address() to always report helpful error messages for non-existent objects (Michael Paquier) §

FeaturesImprove PL/pgSQL's expression and assignment parsing

PL/pgSQL

Improve PL/pgSQL's expression and assignment parsing (Tom Lane) §

This change allows assignment to array slices and nested record fields.

FeaturesAllow plpgsql's RETURN QUERY to execute its query using parallelism

PL/pgSQL

Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) §

PerformanceImprove performance of repeated CALLs within plpgsql procedures

PL/pgSQL

Improve performance of repeated CALLs within plpgsql procedures (Pavel Stehule, Tom Lane) §

FeaturesAdd pipeline mode to libpq

Client Interfaces

Add pipeline mode to libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera) §

This allows multiple queries to be sent, only waiting for completion when a specific synchronization message is sent.

FeaturesEnhance libpq's target_session_attrs parameter options

Client Interfaces

Enhance libpq's target_session_attrs parameter options (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane) § §

The new options are read-only, primary, standby, and prefer-standby.

FeaturesImprove the output format of libpq's PQtrace()

Client Interfaces

Improve the output format of libpq's PQtrace() (Aya Iwata, Álvaro Herrera) §

FeaturesAllow an ECPG SQL identifier to be linked to a specific connection

Client Interfaces

Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) §

This is done via DECLARE ... STATEMENT.

FeaturesAllow vacuumdb to skip index cleanup and truncation

Client Applications

Allow vacuumdb to skip index cleanup and truncation (Nathan Bossart) §

The options are --no-index-cleanup and --no-truncate.

FeaturesAllow pg_dump to dump only certain extensions

Client Applications

Allow pg_dump to dump only certain extensions (Guillaume Lelarge) §

This is controlled by option --extension.

FeaturesAdd pgbench permute() function to randomly shuffle values

Client Applications

Add pgbench permute() function to randomly shuffle values (Fabien Coelho, Hironobu Suzuki, Dean Rasheed) §

FeaturesInclude disconnection times in the reconnection overhead measured by pgbench with -C

Client Applications

Include disconnection times in the reconnection overhead measured by pgbench with -C (Yugo Nagata) §

FeaturesAllow multiple verbose option specifications (-v) to increase the logging verbosity

Client Applications

Allow multiple verbose option specifications (-v) to increase the logging verbosity (Tom Lane) §

This behavior is supported by pg_dump, pg_dumpall, and pg_restore.

FeaturesAllow psql's \df and \do commands to specify function and operator argument types

Client Applications / psql

Allow psql's \df and \do commands to specify function and operator argument types (Greg Sabino Mullane, Tom Lane) §

This helps reduce the number of matches printed for overloaded names.

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 an access method column to psql's \d[i|m|t]+ output

Client Applications / psql

Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) §

FeaturesAllow psql's \dt and \di to show TOAST tables and their indexes

Client Applications / psql

Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) §

FeaturesAdd psql command \dX to list extended statistics objects

Client Applications / psql

Add psql command \dX to list extended statistics objects (Tatsuro Yamada) §

Bug fixesFix psql's \dT to understand array syntax and backend grammar aliases, like int for integer

Client Applications / psql

Fix psql's \dT to understand array syntax and backend grammar aliases, like int for integer (Greg Sabino Mullane, Tom Lane) §

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 editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the results if the editor exits without saving

Client Applications / psql

When editing the previous query or a file with psql's \e, or using \ef and \ev, ignore the results if the editor exits without saving (Laurenz Albe) §

Previously, such edits would load the previous query into the query buffer, and typically execute it immediately. This was deemed to be probably not what the user wants.

FeaturesImprove tab completion

Client Applications / psql

Improve tab completion (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud) § § § § § § § § § § § § § § § § § §

FeaturesAdd command-line utility pg_amcheck to simplify running contrib/amcheck tests on many relations

Server Applications

Add command-line utility pg_amcheck to simplify running contrib/amcheck tests on many relations (Mark Dilger) §

FeaturesAdd --no-instructions option to initdb

Server Applications

Add --no-instructions option to initdb (Magnus Hagander) §

This suppresses the server startup instructions that are normally printed.

FeaturesStop pg_upgrade from creating analyze_new_cluster script

Server Applications

Stop pg_upgrade from creating analyze_new_cluster script (Magnus Hagander) §

Instead, give comparable vacuumdb instructions.

FeaturesRemove support for the postmaster -o option

Server Applications

Remove support for the postmaster -o option (Magnus Hagander) §

This option was unnecessary since all passed options could already be specified directly.

FeaturesRename "Default Roles" to "Predefined Roles"

Documentation

Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, Stephen Frost) §

FeaturesAdd documentation for the factorial() function

Documentation

Add documentation for the factorial() function (Peter Eisentraut) §

With the removal of the ! operator in this release, factorial() is the only built-in way to compute a factorial.

FeaturesAdd configure option --with-ssl={openssl} to allow future choice of the SSL library to use

Source Code

Add configure option --with-ssl={openssl} to allow future choice of the SSL library to use (Daniel Gustafsson, Michael Paquier) §

The spelling --with-openssl is kept for compatibility.

FeaturesAdd support for abstract Unix-domain sockets

Source Code

Add support for abstract Unix-domain sockets (Peter Eisentraut) §

This is currently supported on Linux and Windows.

FeaturesAllow Windows to properly handle files larger than four gigabytes

Source Code

Allow Windows to properly handle files larger than four gigabytes (Juan José Santamaría Flecha) §

For example this allows COPY, WAL files, and relation segment files to be larger than four gigabytes.

FeaturesAdd server parameter debug_discard_caches to control cache flushing for test purposes

Source Code

Add server parameter debug_discard_caches to control cache flushing for test purposes (Craig Ringer) § § §

Previously this behavior could only be set at compile time. To invoke it during initdb, use the new option --discard-caches.

FeaturesVarious improvements in valgrind error detection ability

Source Code

Various improvements in valgrind error detection ability (Álvaro Herrera, Peter Geoghegan) § § §

FeaturesAdd a test module for the regular expression package

Source Code

Add a test module for the regular expression package (Tom Lane) §

FeaturesAdd support for LLVM version 12

Source Code

Add support for LLVM version 12 (Andres Freund) §

Related records (3)

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

FeaturesChange SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API

Source Code

Change SHA1, SHA2, and MD5 hash computations to use the OpenSSL EVP API (Michael Paquier) § § § §

This is more modern and supports FIPS mode.

FeaturesRemove separate build-time control over the choice of random number generator

Source Code

Remove separate build-time control over the choice of random number generator (Daniel Gustafsson) §

This is now always determined by the choice of SSL library.

FeaturesAdd direct conversion routines between EUC_TW and Big5 encodings

Source Code

Add direct conversion routines between EUC_TW and Big5 encodings (Heikki Linnakangas) §

FeaturesAdd collation version support for FreeBSD

Source Code

Add collation version support for FreeBSD (Thomas Munro) §

FeaturesAdd amadjustmembers to the index access method API

Source Code

Add amadjustmembers to the index access method API (Tom Lane) §

This allows an index access method to provide validity checking during creation of a new operator class or family.

FeaturesProvide feature-test macros in libpq-fe.h for recently-added libpq features

Source Code

Provide feature-test macros in libpq-fe.h for recently-added libpq features (Tom Lane, Álvaro Herrera) §

Historically, applications have usually used compile-time checks of PG_VERSION_NUM to test whether a feature is available. But that's normally the server version, which might not be a good guide to libpq's version. libpq-fe.h now offers #define symbols denoting application-visible features added in v14; the intent is to keep adding symbols for such features in future versions.

FeaturesAllow subscripting of hstore values

Additional Modules

Allow subscripting of hstore values (Tom Lane, Dmitry Dolgov) §

FeaturesAllow GiST/GIN pg_trgm indexes to do equality lookups

Additional Modules

Allow GiST/GIN pg_trgm indexes to do equality lookups (Julien Rouhaud) §

This is similar to LIKE except no wildcards are honored.

FeaturesAllow the cube data type to be transferred in binary mode

Additional Modules

Allow the cube data type to be transferred in binary mode (KaiGai Kohei) §

FeaturesAllow pgstattuple_approx() to report on TOAST tables

Additional Modules

Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) §

FeaturesAdd contrib module pg_surgery which allows changes to row visibility

Additional Modules

Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) §

This is useful for correcting database corruption.

FeaturesAdd contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold

Additional Modules

Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) §

FeaturesAllow amcheck to also check heap pages

Additional Modules

Allow amcheck to also check heap pages (Mark Dilger) §

Previously it only checked B-Tree index pages.

FeaturesAllow pageinspect to inspect GiST indexes

Additional Modules

Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) § §

FeaturesChange pageinspect block numbers to be bigints

Additional Modules

Change pageinspect block numbers to be bigints (Peter Eisentraut) §

FeaturesMark btree_gist functions as parallel safe

Additional Modules

Mark btree_gist functions as parallel safe (Steven Winfield) §

FeaturesMove query hash computation from pg_stat_statements to the core server

Additional Modules / pg_stat_statements

Move query hash computation from pg_stat_statements to the core server (Julien Rouhaud) §

The new server parameter compute_query_id's default of auto will automatically enable query id computation when this extension is loaded.

FeaturesCause pg_stat_statements to track top and nested statements separately

Additional Modules / pg_stat_statements

Cause pg_stat_statements to track top and nested statements separately (Julien Rohaud) §

Previously, when tracking all statements, identical top and nested statements were tracked as a single entry; but it seems more useful to separate such usages.

FeaturesAdd row counts for utility commands to pg_stat_statements

Additional Modules / pg_stat_statements

Add row counts for utility commands to pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki) § §

FeaturesAdd pg_stat_statements_info system view to show pg_stat_statements activity

Additional Modules / pg_stat_statements

Add pg_stat_statements_info system view to show pg_stat_statements activity (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi) § §

FeaturesAllow postgres_fdw to INSERT rows in bulk

Additional Modules / postgres_fdw

Allow postgres_fdw to INSERT rows in bulk (Takayuki Tsunakawa, Tomas Vondra, Amit Langote) § §

FeaturesAllow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO

Additional Modules / postgres_fdw

Allow postgres_fdw to import table partitions if specified by IMPORT FOREIGN SCHEMA ... LIMIT TO (Matthias van de Meent) §

By default, only the root of a partitioned table is imported.

FeaturesAdd postgres_fdw function postgres_fdw_get_connections() to report open foreign server connections

Additional Modules / postgres_fdw

Add postgres_fdw function postgres_fdw_get_connections() to report open foreign server connections (Bharath Rupireddy) §

FeaturesAllow control over whether foreign servers keep connections open after transaction completion

Additional Modules / postgres_fdw

Allow control over whether foreign servers keep connections open after transaction completion (Bharath Rupireddy) §

This is controlled by keep_connections and defaults to on.

FeaturesAllow postgres_fdw to reestablish foreign server connections if necessary

Additional Modules / postgres_fdw

Allow postgres_fdw to reestablish foreign server connections if necessary (Bharath Rupireddy) § §

Previously foreign server restarts could cause foreign table access errors.

FeaturesAdd postgres_fdw functions to discard cached connections

Additional Modules / postgres_fdw

Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) §

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.