DocumentationVersion comparison
POSTGRESQL · VERSION COMPARE
All features, fixes, and compatibility notes in this release, with related records from other versions.
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
2021-09-30
14.0 SupportedSupport ends 2026-11-12
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:
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.
“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.
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'.
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'.
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.
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.
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.
Compatibility
Fix handling of infinite window function ranges (Tom Lane) §
Previously window frame clauses like 'inf' PRECEDING AND 'inf' FOLLOWING returned incorrect results.
Compatibility
Remove factorial operators ! and !!, as well as function numeric_fac() (Mark Dilger) §
The factorial() function is still supported.
Compatibility
Disallow factorial() of negative numbers (Peter Eisentraut) §
Previously such cases returned 1.
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.
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.
Compatibility
Disallow \w as a range start or end in regular expression character classes (Tom Lane) §
This previously was allowed but produced unexpected results.
“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.
Compatibility
Require custom server parameter names to use only characters that are valid in unquoted SQL identifiers (Tom Lane) § §
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.
Compatibility
Remove server parameter vacuum_cleanup_index_scale_factor (Peter Geoghegan) § §
This setting was ignored starting in PostgreSQL version 13.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.
Compatibility
Remove server parameter operator_precedence_warning (Tom Lane) §
This setting was used for warning applications about PostgreSQL 9.5 changes.
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.
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).
Compatibility
Disallow single-quoting of the language name in the CREATE/DROP LANGUAGE command (Peter Eisentraut) §
Compatibility
Remove the composite types that were formerly created for sequences and toast tables (Tom Lane) §
Compatibility
Remove contrib program pg_standby (Justin Pryzby) §
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.
Server
Add predefined role pg_database_owner that contains only the current database's owner (Noah Misch) §
This is especially useful in template databases.
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.
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.)
Server
Add an optional timeout parameter to pg_terminate_backend() (Magnus Hagander) §
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.
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.
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.
Server / Vacuuming
Allow vacuum to reclaim space used by unused trailing heap line pointers (Matthias van de Meent, Peter Geoghegan) §
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.
“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.
Server / Vacuuming
Speed up vacuuming of databases with many relations (Tatsuhito Kasahara) §
Server / Vacuuming
Reduce the default value of vacuum_cost_page_miss to better reflect current hardware capabilities (Peter Geoghegan) §
Server / Vacuuming
Have COPY FREEZE appropriately update page visibility bits (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes) §
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.
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.
Server / Vacuuming
Add per-index information to autovacuum logging output (Masahiko Sawada) §
Server / Partitioning
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.
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.
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.
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.
Server / Optimizer
Increase the number of places extended statistics can be used for OR clause estimation (Tomas Vondra, Dean Rasheed) § § §
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.
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.
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.
Server / General Performance
Allow window functions to perform incremental sorts (David Rowley) §
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.
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.
Server / General Performance
Allow analyze to do page prefetching (Stephen Frost) §
This is controlled by maintenance_io_concurrency.
Server / General Performance
Dramatically improve Unicode normalization performance (John Naylor) § §
This speeds normalize() and IS NORMALIZED.
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.
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.
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.
Server / Monitoring
Add information about the original user name supplied by the client to the output of log_connections (Jacob Champion) §
Server / System Views
Add system view pg_stat_progress_copy to report COPY progress (Josef Šimánek, Matthias van de Meent) § §
Server / System Views
Add system view pg_stat_wal to report WAL activity (Masahiro Ikeda) § § §
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.
Server / System Views
Add system view pg_backend_memory_contexts to report session memory usage (Atsushi Torikoshi, Fujii Masao) § §
Server / System Views
Add function pg_log_backend_memory_contexts() to output the memory contexts of arbitrary backends (Atsushi Torikoshi) §
Server / System Views
Add session statistics to the pg_stat_database system view (Laurenz Albe) §
Server / System Views
Add columns to pg_prepared_statements to report generic and custom plan counts (Atsushi Torikoshi, Kyotaro Horiguchi) §
Server / System Views
Make the archiver process visible in pg_stat_activity (Kyotaro Horiguchi) §
Server / System Views
Add wait event WalReceiverExit to report WAL receiver exit wait time (Fujii Masao) §
Server / System Views
Implement information schema view routine_column_usage to track columns referenced by function and procedure default expressions (Peter Eisentraut) §
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.
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.
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.
Server / Authentication
Allow passwords of an arbitrary length (Tom Lane, Nathan Bossart) §
Server / Server Configuration
Add server parameter idle_session_timeout to close idle sessions (Li Japin) §
This is similar to idle_in_transaction_session_timeout.
Server / Server Configuration
Change checkpoint_completion_target default to 0.9 (Stephen Frost) §
The previous default was 0.5.
Server / Server Configuration
Allow %P in log_line_prefix to report the parallel group leader's PID for a parallel worker (Justin Pryzby) §
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.
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.
Server / Server Configuration
Add server parameter huge_page_size to control the size of huge pages used on Linux (Odin Ugedal) §
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.
Streaming Replication and Recovery
Add server parameter log_recovery_conflict_waits to report long recovery conflict wait times (Bertrand Drouvot, Masahiko Sawada) § §
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.
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.
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.
Streaming Replication and Recovery
Speed truncation of small tables during recovery on clusters with a large number of shared buffers (Kirk Jamison) §
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.
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) §
“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.
Streaming Replication and Recovery
Add the replication origin to the record returned by pg_last_committed_xact() (Movead Li) §
“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.
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.
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.
“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.
Streaming Replication and Recovery / Logical Replication
Allow multiple transactions during table sync in logical replication (Peter Smith, Amit Kapila, Takamichi Osumi) §
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.
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().
“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.
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.
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.
Streaming Replication and Recovery / Logical Replication
Allow control over whether logical decoding messages are sent to the replication stream (David Pirotte, Euler Taveira) §
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.
Streaming Replication and Recovery / Logical Replication
Allow logical decoding to be filtered by xid (Markus Wanner) §
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.
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.
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.
SELECT, INSERT
Properly handle DEFAULT entries in multi-row VALUES lists in INSERT (Dean Rasheed) §
Such cases used to throw an error.
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.
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.
Utility Commands
Allow REFRESH MATERIALIZED VIEW to use parallelism (Bharath Rupireddy) §
Utility Commands
Allow REINDEX to process all child tables or indexes of a partitioned relation (Justin Pryzby, Michael Paquier) §
Utility Commands
Allow index commands using CONCURRENTLY to avoid waiting for the completion of other operations using CONCURRENTLY (Álvaro Herrera) § § §
“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.
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.
Utility Commands
Add OR REPLACE option for CREATE TRIGGER (Takamichi Osumi) §
This allows pre-existing triggers to be conditionally replaced.
Utility Commands
Allow TRUNCATE to operate on foreign tables (Kazutaka Onishi, Kohei KaiGai) §
The postgres_fdw module also now supports this.
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.
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().
Utility Commands
Allow CURRENT_ROLE every place CURRENT_USER is accepted (Peter Eisentraut) §
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.
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.
Data Types
Allow tsearch data files to have unlimited line lengths (Tom Lane) §
The previous limit was 4K bytes. Also remove function t_readline().
Data Types
Add support for Infinity and -Infinity values in the numeric data type (Tom Lane) §
Floating-point data types already supported these.
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.
Data Types
Allow binary data transfer to be more forgiving of array and record OID mismatches (Tom Lane) §
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.
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.
Functions
Allow procedures to have OUT parameters (Peter Eisentraut) § §
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.
“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.
Functions
Add SQL-standard trim_array() function (Vik Fearing) §
This could already be done with array slices, but less easily.
Functions
Support negative indexes in split_part() (Nikhil Benesch) §
Negative values start from the last field and count backward.
Functions
Add string_to_table() function to split a string on delimiters (Pavel Stehule) §
This is similar to the regexp_split_to_table() function.
Functions
Add function bit_count() to return the number of bits set in a bit or byte string (David Fetter) §
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.
Functions
Allow make_timestamp()/make_timestamptz() to accept negative years (Peter Eisentraut) §
Negative values are interpreted as BC years.
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.
Functions
Allow complemented character class escapes \D, \S, and \W within regular expression brackets (Tom Lane) §
“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.
Functions
Add [[:word:]] as a regular expression character class, equivalent to \w (Tom Lane) §
“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.
Functions
Make non-zero floating-point values divided by infinity return zero (Kyotaro Horiguchi) §
Previously such operations produced underflow errors.
Functions
Make floating-point division of NaN by zero return NaN (Tom Lane) §
Previously this returned an error.
Functions
Improve the accuracy of geometric computations involving infinity (Tom Lane) §
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.
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) §
PL/pgSQL
Improve PL/pgSQL's expression and assignment parsing (Tom Lane) §
This change allows assignment to array slices and nested record fields.
PL/pgSQL
Allow plpgsql's RETURN QUERY to execute its query using parallelism (Tom Lane) §
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.
Client Interfaces
Allow an ECPG SQL identifier to be linked to a specific connection (Hayato Kuroda) §
This is done via DECLARE ... STATEMENT.
Client Applications
Include disconnection times in the reconnection overhead measured by pgbench with -C (Yugo Nagata) §
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.
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.
“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.
Client Applications / psql
Add an access method column to psql's \d[i|m|t]+ output (Georgios Kokolatos) §
Client Applications / psql
Allow psql's \dt and \di to show TOAST tables and their indexes (Justin Pryzby) §
Client Applications / psql
Add psql command \dX to list extended statistics objects (Tatsuro Yamada) §
Client Applications / psql
Fix psql's \dT to understand array syntax and backend grammar aliases, like int for integer (Greg Sabino Mullane, Tom Lane) §
“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.
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.
Server Applications
Add command-line utility pg_amcheck to simplify running contrib/amcheck tests on many relations (Mark Dilger) §
Server Applications
Stop pg_upgrade from creating analyze_new_cluster script (Magnus Hagander) §
Instead, give comparable vacuumdb instructions.
Server Applications
Remove support for the postmaster -o option (Magnus Hagander) §
This option was unnecessary since all passed options could already be specified directly.
Documentation
Rename "Default Roles" to "Predefined Roles" (Bruce Momjian, Stephen Frost) §
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.
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.
Source Code
Add support for abstract Unix-domain sockets (Peter Eisentraut) §
This is currently supported on Linux and Windows.
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.
Source Code
Add a test module for the regular expression package (Tom Lane) §
Source Code
Add support for LLVM version 12 (Andres Freund) §
“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.
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.
Source Code
Add direct conversion routines between EUC_TW and Big5 encodings (Heikki Linnakangas) §
Source Code
Add collation version support for FreeBSD (Thomas Munro) §
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.
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.
Additional Modules
Allow pgstattuple_approx() to report on TOAST tables (Peter Eisentraut) §
Additional Modules
Add contrib module pg_surgery which allows changes to row visibility (Ashutosh Sharma) §
This is useful for correcting database corruption.
Additional Modules
Add contrib module old_snapshot to report the XID/time mapping used by an active old_snapshot_threshold (Robert Haas) §
Additional Modules
Allow pageinspect to inspect GiST indexes (Andrey Borodin, Heikki Linnakangas) § §
Additional Modules
Mark btree_gist functions as parallel safe (Steven Winfield) §
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.
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.
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.
Additional Modules / postgres_fdw
Add postgres_fdw function postgres_fdw_get_connections() to report open foreign server connections (Bharath Rupireddy) §
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.
Additional Modules / postgres_fdw
Add postgres_fdw functions to discard cached connections (Bharath Rupireddy) §
Try another search, or .
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.