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

13.0

2020-09-24

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

13.0 HistoricalSupport ends 2025-11-13

PostgreSQL 13.0

Migration and compatibility

A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 18.6 for general information on migrating to new major releases.

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

CompatibilityChange SIMILAR TO ... ESCAPE NULL to return NULL

Compatibility

Change SIMILAR TO ... ESCAPE NULL to return NULL (Tom Lane) §

This new behavior matches the SQL specification. Previously a null ESCAPE value was taken to mean using the default escape string (a backslash character). This also applies to substring(text FROM pattern ESCAPE text). The previous behavior has been retained in old views by keeping the original function unchanged.

CompatibilityMake json[b]_to_tsvector() fully check the spelling of its string option

Compatibility

Make json[b]_to_tsvector() fully check the spelling of its string option (Dominik Czarnota) §

CompatibilityChange the way non-default effective_io_concurrency values affect concurrency

Compatibility

Change the way non-default effective_io_concurrency values affect concurrency (Thomas Munro) §

Previously, this value was adjusted before setting the number of concurrent requests. The value is now used directly. Conversion of old values to new ones can be done using:

SELECT round(sum(OLDVALUE / n::float)) AS newvalue FROM generate_series(1, OLDVALUE) s(n);
CompatibilityPrevent display of auxiliary processes in pg_stat_ssl and pg_stat_gssapi system views

Compatibility

Prevent display of auxiliary processes in pg_stat_ssl and pg_stat_gssapi system views (Euler Taveira) §

Queries that join these views to pg_stat_activity and wish to see auxiliary processes will need to use left joins.

CompatibilityRename various wait events to improve consistency

Compatibility

Rename various wait events to improve consistency (Fujii Masao, Tom Lane) § § § § §

CompatibilityFix ALTER FOREIGN TABLE ... RENAME COLUMN to return a more appropriate command tag

Compatibility

Fix ALTER FOREIGN TABLE ... RENAME COLUMN to return a more appropriate command tag (Fujii Masao) §

Previously it returned ALTER TABLE; now it returns ALTER FOREIGN TABLE.

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.

CompatibilityFix ALTER MATERIALIZED VIEW ... RENAME COLUMN to return a more appropriate command tag

Compatibility

Fix ALTER MATERIALIZED VIEW ... RENAME COLUMN to return a more appropriate command tag (Fujii Masao) §

Previously it returned ALTER TABLE; now it returns ALTER MATERIALIZED VIEW.

Related records (1)

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

CompatibilityRename configuration parameter wal_keep_segments to wal_keep_size

Compatibility

Rename configuration parameter wal_keep_segments to wal_keep_size (Fujii Masao) §

This determines how much WAL to retain for standby servers. It is specified in megabytes, rather than number of files as with the old parameter. If you previously used wal_keep_segments, the following formula will give you an approximately equivalent setting:

wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
CompatibilityRemove support for defining operator classes using pre-PostgreSQL 8.0 syntax

Compatibility

Remove support for defining operator classes using pre-PostgreSQL 8.0 syntax (Daniel Gustafsson) §

CompatibilityRemove support for defining foreign key constraints using pre-PostgreSQL 7.3 syntax

Compatibility

Remove support for defining foreign key constraints using pre-PostgreSQL 7.3 syntax (Daniel Gustafsson) §

CompatibilityRemove support for "opaque" pseudo-types used by pre-PostgreSQL 7.3 servers

Compatibility

Remove support for "opaque" pseudo-types used by pre-PostgreSQL 7.3 servers (Daniel Gustafsson) §

CompatibilityRemove support for upgrading unpackaged (pre-9.1) extensions

Compatibility

Remove support for upgrading unpackaged (pre-9.1) extensions (Tom Lane) §

The FROM option of CREATE EXTENSION is no longer supported. Any installations still using unpackaged extensions should upgrade them to a packaged version before updating to PostgreSQL 13.

CompatibilityRemove support for posixrules files in the timezone database

Compatibility

Remove support for posixrules files in the timezone database (Tom Lane) §

IANA's timezone group has deprecated this feature, meaning that it will gradually disappear from systems' timezone databases over the next few years. Rather than have a behavioral change appear unexpectedly with a timezone data update, we have removed PostgreSQL's support for this feature as of version 13. This affects only the behavior of POSIX-style time zone specifications that lack an explicit daylight savings transition rule; formerly the transition rule could be determined by installing a custom posixrules file, but now it is hard-wired. The recommended fix for any affected installations is to start using a geographical time zone name.

CompatibilityIn ltree, when an lquery pattern contains adjacent asterisks with braces, e.g., *{2}.*{3}, properly interpret that as *{5}

Compatibility

In ltree, when an lquery pattern contains adjacent asterisks with braces, e.g., *{2}.*{3}, properly interpret that as *{5} (Nikita Glukhov) §

CompatibilityFix pageinspect's bt_metap() to return more appropriate data types that are less likely to overflow

Compatibility

Fix pageinspect's bt_metap() to return more appropriate data types that are less likely to overflow (Peter Geoghegan) §

FeaturesAllow pruning of partitions to happen in more cases

Server / Partitioning

Allow pruning of partitions to happen in more cases (Yuzuko Hosoya, Amit Langote, Álvaro Herrera) § §

FeaturesAllow partitionwise joins to happen in more cases

Server / Partitioning

Allow partitionwise joins to happen in more cases (Ashutosh Bapat, Etsuro Fujita, Amit Langote, Tom Lane) § §

For example, partitionwise joins can now happen between partitioned tables even when their partition bounds do not match exactly.

FeaturesSupport row-level BEFORE triggers on partitioned tables

Server / Partitioning

Support row-level BEFORE triggers on partitioned tables (Álvaro Herrera) §

However, such a trigger is not allowed to change which partition is the destination.

FeaturesAllow partitioned tables to be logically replicated via publications

Server / Partitioning

Allow partitioned tables to be logically replicated via publications (Amit Langote) § §

Previously, partitions had to be replicated individually. Now a partitioned table can be published explicitly, causing all its partitions to be published automatically. Addition/removal of a partition causes it to be likewise added to or removed from the publication. The CREATE PUBLICATION option publish_via_partition_root controls whether changes to partitions are published as their own changes or their parent's.

FeaturesAllow logical replication into partitioned tables on subscribers

Server / Partitioning

Allow logical replication into partitioned tables on subscribers (Amit Langote) §

Previously, subscribers could only receive rows into non-partitioned tables.

FeaturesAllow whole-row variables (that is, table.*) to be used in partitioning expressions

Server / Partitioning

Allow whole-row variables (that is, table.*) to be used in partitioning expressions (Amit Langote) §

FeaturesMore efficiently store duplicates in B-tree indexes

Server / Indexes

More efficiently store duplicates in B-tree indexes (Anastasia Lubennikova, Peter Geoghegan) §

This allows efficient B-tree indexing of low-cardinality columns by storing duplicate keys only once. Users upgrading with pg_upgrade will need to use REINDEX to make an existing index use this feature.

FeaturesAllow GiST and SP-GiST indexes on box columns to support ORDER BY box <-> point queries

Server / Indexes

Allow GiST and SP-GiST indexes on box columns to support ORDER BY box <-> point queries (Nikita Glukhov) § §

FeaturesAllow GIN indexes to more efficiently handle ! (NOT) clauses in tsquery searches

Server / Indexes

Allow GIN indexes to more efficiently handle ! (NOT) clauses in tsquery searches (Nikita Glukhov, Alexander Korotkov, Tom Lane, Julien Rouhaud) §

FeaturesAllow index operator classes to take parameters

Server / Indexes

Allow index operator classes to take parameters (Nikita Glukhov) §

Related records (1)

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

FeaturesAllow CREATE INDEX to specify the GiST signature length and maximum number of integer ranges

Server / Indexes

Allow CREATE INDEX to specify the GiST signature length and maximum number of integer ranges (Nikita Glukhov) §

Indexes created on four and eight-byte integer array, tsvector, pg_trgm, ltree, and hstore columns can now control these GiST index parameters, rather than using the defaults.

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.

FeaturesPrevent indexes that use non-default collations from being added as a table's unique or primary key constraint

Server / Indexes

Prevent indexes that use non-default collations from being added as a table's unique or primary key constraint (Tom Lane) §

The index's collation must match that of the underlying column, but ALTER TABLE previously failed to check this.

FeaturesImprove the optimizer's selectivity estimation for containment/match operators

Server / Optimizer

Improve the optimizer's selectivity estimation for containment/match operators (Tom Lane) §

FeaturesAllow setting the statistics target for extended statistics

Server / Optimizer

Allow setting the statistics target for extended statistics (Tomas Vondra) §

This is controlled with the new command option ALTER STATISTICS ... SET STATISTICS. Previously this was computed based on more general statistics target settings.

FeaturesAllow use of multiple extended statistics objects in a single query

Server / Optimizer

Allow use of multiple extended statistics objects in a single query (Tomas Vondra) § §

FeaturesAllow use of extended statistics objects for OR clauses and IN/ANY constant lists

Server / Optimizer

Allow use of extended statistics objects for OR clauses and IN/ANY constant lists (Pierre Ducroquet, Tomas Vondra) § § §

FeaturesAllow functions in FROM clauses to be pulled up (inlined) if they evaluate to constants

Server / Optimizer

Allow functions in FROM clauses to be pulled up (inlined) if they evaluate to constants (Alexander Kuzmenkov, Aleksandr Parfenov) § §

PerformanceImplement incremental sorting

Server / General Performance

Implement incremental sorting (James Coleman, Alexander Korotkov, Tomas Vondra) § §

If an intermediate query result is known to be sorted by one or more leading keys of a required sort ordering, the additional sorting can be done considering only the remaining keys, if the rows are sorted in batches that have equal leading keys.

If necessary, this can be controlled using enable_incremental_sort.

PerformanceImprove the performance of sorting inet values

Server / General Performance

Improve the performance of sorting inet values (Brandur Leach) §

PerformanceAllow hash aggregation to use disk storage for large aggregation result sets

Server / General Performance

Allow hash aggregation to use disk storage for large aggregation result sets (Jeff Davis) § § §

Previously, hash aggregation was avoided if it was expected to use more than work_mem memory. Now, a hash aggregation plan can be chosen despite that. The hash table will be spilled to disk if it exceeds work_mem times hash_mem_multiplier.

This behavior is normally preferable to the old behavior, in which once hash aggregation had been chosen, the hash table would be kept in memory no matter how large it got — which could be very large if the planner had misestimated. If necessary, behavior similar to that can be obtained by increasing hash_mem_multiplier.

PerformanceAllow inserts, not only updates and deletes, to trigger vacuuming activity in autovacuum

Server / General Performance

Allow inserts, not only updates and deletes, to trigger vacuuming activity in autovacuum (Laurenz Albe, Darafei Praliaskouski) §

Previously, insert-only activity would trigger auto-analyze but not auto-vacuum, on the grounds that there could not be any dead tuples to remove. However, a vacuum scan has other useful side-effects such as setting page-all-visible bits, which improves the efficiency of index-only scans. Also, allowing an insert-only table to receive periodic vacuuming helps to spread out the work of “freezing” old tuples, so that there is not suddenly a large amount of freezing work to do when the entire table reaches the anti-wraparound threshold all at once.

If necessary, this behavior can be adjusted with the new parameters autovacuum_vacuum_insert_threshold and autovacuum_vacuum_insert_scale_factor, or the equivalent table storage options.

PerformanceAdd maintenance_io_concurrency parameter to control I/O concurrency for maintenance operations

Server / General Performance

Add maintenance_io_concurrency parameter to control I/O concurrency for maintenance operations (Thomas Munro) §

PerformanceAllow WAL writes to be skipped during a transaction that creates or rewrites a relation, if wal_level is minimal

Server / General Performance

Allow WAL writes to be skipped during a transaction that creates or rewrites a relation, if wal_level is minimal (Kyotaro Horiguchi) §

Relations larger than wal_skip_threshold will have their files fsync'ed rather than generating WAL. Previously this was done only for COPY operations, but the implementation had a bug that could cause data loss during crash recovery.

PerformanceImprove performance when replaying DROP DATABASE commands when many tablespaces are in use

Server / General Performance

Improve performance when replaying DROP DATABASE commands when many tablespaces are in use (Fujii Masao) §

PerformanceImprove performance for truncation of very large relations

Server / General Performance

Improve performance for truncation of very large relations (Kirk Jamison) §

PerformanceImprove retrieval of the leading bytes of TOAST'ed values

Server / General Performance

Improve retrieval of the leading bytes of TOAST'ed values (Binguo Bao, Andrey Borodin) §

Previously, compressed out-of-line TOAST values were fully fetched even when it's known that only some leading bytes are needed. Now, only enough data to produce the result is fetched.

PerformanceImprove performance of LISTEN/NOTIFY

Server / General Performance

Improve performance of LISTEN/NOTIFY (Martijn van Oosterhout, Tom Lane) § § §

PerformanceSpeed up conversions of integers to text

Server / General Performance

Speed up conversions of integers to text (David Fetter) §

PerformanceReduce memory usage for query strings and extension scripts that contain many SQL statements

Server / General Performance

Reduce memory usage for query strings and extension scripts that contain many SQL statements (Amit Langote) §

FeaturesAllow EXPLAIN, auto_explain, autovacuum, and pg_stat_statements to track WAL usage statistics

Server / Monitoring

Allow EXPLAIN, auto_explain, autovacuum, and pg_stat_statements to track WAL usage statistics (Kirill Bychik, Julien Rouhaud) § § §

FeaturesAllow a sample of SQL statements, rather than all statements, to be logged

Server / Monitoring

Allow a sample of SQL statements, rather than all statements, to be logged (Adrien Nayrat) §

A log_statement_sample_rate fraction of those statements taking more than log_min_duration_sample duration will be logged.

FeaturesAdd the backend type to csvlog and optionally log_line_prefix log output

Server / Monitoring

Add the backend type to csvlog and optionally log_line_prefix log output (Peter Eisentraut) §

FeaturesImprove control of prepared statement parameter logging

Server / Monitoring

Improve control of prepared statement parameter logging (Alexey Bashtanov, Álvaro Herrera) § §

The GUC setting log_parameter_max_length controls the maximum length of parameter values output during logging of non-error statements, while log_parameter_max_length_on_error does the same for logging of statements with errors. Previously, prepared statement parameters were never logged during errors.

FeaturesAllow function call backtraces to be logged after errors

Server / Monitoring

Allow function call backtraces to be logged after errors (Peter Eisentraut, Álvaro Herrera) § §

The new parameter backtrace_functions specifies which C functions should generate backtraces on error.

Bug fixesMake vacuum buffer counters 64-bits wide to avoid overflow

Server / Monitoring

Make vacuum buffer counters 64-bits wide to avoid overflow (Álvaro Herrera) §

FeaturesAdd leader_pid to pg_stat_activity to report a parallel worker's leader process

Server / System Views

Add leader_pid to pg_stat_activity to report a parallel worker's leader process (Julien Rouhaud) §

FeaturesAdd system view pg_stat_progress_basebackup to report the progress of streaming base backups

Server / System Views

Add system view pg_stat_progress_basebackup to report the progress of streaming base backups (Fujii Masao) §

FeaturesAdd system view pg_stat_progress_analyze to report ANALYZE progress

Server / System Views

Add system view pg_stat_progress_analyze to report ANALYZE progress (Álvaro Herrera, Tatsuro Yamada, Vinayak Pokale) §

FeaturesAdd system view pg_shmem_allocations to display shared memory usage

Server / System Views

Add system view pg_shmem_allocations to display shared memory usage (Andres Freund, Robert Haas) §

FeaturesAdd system view pg_stat_slru to monitor internal SLRU caches

Server / System Views

Add system view pg_stat_slru to monitor internal SLRU caches (Tomas Vondra) §

FeaturesAllow track_activity_query_size to be set as high as 1MB

Server / System Views

Allow track_activity_query_size to be set as high as 1MB (Vyacheslav Makarov) §

The previous maximum was 100kB.

FeaturesReport a wait event while creating a DSM segment with posix_fallocate()

Server / Wait Events

Report a wait event while creating a DSM segment with posix_fallocate() (Thomas Munro) §

FeaturesAdd wait event VacuumDelay to report on cost-based vacuum delay

Server / Wait Events

Add wait event VacuumDelay to report on cost-based vacuum delay (Justin Pryzby) §

FeaturesAdd wait events for WAL archive and recovery pause

Server / Wait Events

Add wait events for WAL archive and recovery pause (Fujii Masao) §

The new events are BackupWaitWalArchive and RecoveryPause.

FeaturesAdd wait events RecoveryConflictSnapshot and RecoveryConflictTablespace to monitor recovery conflicts

Server / Wait Events

Add wait events RecoveryConflictSnapshot and RecoveryConflictTablespace to monitor recovery conflicts (Masahiko Sawada) §

PerformanceImprove performance of wait events on BSD-based systems

Server / Wait Events

Improve performance of wait events on BSD-based systems (Thomas Munro) §

FeaturesAllow only superusers to view the ssl_passphrase_command setting

Server / Authentication

Allow only superusers to view the ssl_passphrase_command setting (Insung Moon) §

This was changed as a security precaution.

FeaturesChange the server's default minimum TLS version for encrypted connections from 1.0 to 1.2

Server / Authentication

Change the server's default minimum TLS version for encrypted connections from 1.0 to 1.2 (Peter Eisentraut) §

This choice can be controlled by ssl_min_protocol_version.

FeaturesTighten rules on which utility commands are allowed in read-only transaction mode

Server / Server Configuration

Tighten rules on which utility commands are allowed in read-only transaction mode (Robert Haas) §

This change also increases the number of utility commands that can run in parallel queries.

FeaturesAllow allow_system_table_mods to be changed after server start

Server / Server Configuration

Allow allow_system_table_mods to be changed after server start (Peter Eisentraut) §

FeaturesDisallow non-superusers from modifying system tables when allow_system_table_mods is set

Server / Server Configuration

Disallow non-superusers from modifying system tables when allow_system_table_mods is set (Peter Eisentraut) §

Previously, if allow_system_table_mods was set at server start, non-superusers could issue INSERT/UPDATE/DELETE commands on system tables.

FeaturesEnable support for Unix-domain sockets on Windows

Server / Server Configuration

Enable support for Unix-domain sockets on Windows (Peter Eisentraut) §

FeaturesAllow streaming replication configuration settings to be changed by reload

Streaming Replication and Recovery

Allow streaming replication configuration settings to be changed by reload (Sergei Kornilov) §

Previously, a server restart was required to change primary_conninfo and primary_slot_name.

FeaturesAllow WAL receivers to use a temporary replication slot when a permanent one is not specified

Streaming Replication and Recovery

Allow WAL receivers to use a temporary replication slot when a permanent one is not specified (Peter Eisentraut, Sergei Kornilov) § §

This behavior can be enabled using wal_receiver_create_temp_slot.

FeaturesAllow WAL storage for replication slots to be limited by max_slot_wal_keep_size

Streaming Replication and Recovery

Allow WAL storage for replication slots to be limited by max_slot_wal_keep_size (Kyotaro Horiguchi) §

Replication slots that would require exceeding this value are marked invalid.

FeaturesAllow standby promotion to cancel any requested pause

Streaming Replication and Recovery

Allow standby promotion to cancel any requested pause (Fujii Masao) §

Previously, promotion could not happen while the standby was in paused state.

FeaturesGenerate an error if recovery does not reach the specified recovery target

Streaming Replication and Recovery

Generate an error if recovery does not reach the specified recovery target (Leif Gunnar Erlandsen, Peter Eisentraut) §

Previously, a standby would promote itself upon reaching the end of WAL, even if the target was not reached.

FeaturesAllow control over how much memory is used by logical decoding before it is spilled to disk

Streaming Replication and Recovery

Allow control over how much memory is used by logical decoding before it is spilled to disk (Tomas Vondra, Dilip Kumar, Amit Kapila) §

This is controlled by logical_decoding_work_mem.

FeaturesAllow recovery to continue even if invalid pages are referenced by WAL

Streaming Replication and Recovery

Allow recovery to continue even if invalid pages are referenced by WAL (Fujii Masao) §

This is enabled using ignore_invalid_pages.

FeaturesAllow VACUUM to process a table's indexes in parallel

Utility Commands

Allow VACUUM to process a table's indexes in parallel (Masahiko Sawada, Amit Kapila) §

The new PARALLEL option controls this.

FeaturesAllow FETCH FIRST to use WITH TIES to return any additional rows that match the last result row

Utility Commands

Allow FETCH FIRST to use WITH TIES to return any additional rows that match the last result row (Surafel Temesgen) §

FeaturesReport planning-time buffer usage in EXPLAIN's BUFFER output

Utility Commands

Report planning-time buffer usage in EXPLAIN's BUFFER output (Julien Rouhaud) §

FeaturesMake CREATE TABLE LIKE propagate a CHECK constraint's NO INHERIT property to the created table

Utility Commands

Make CREATE TABLE LIKE propagate a CHECK constraint's NO INHERIT property to the created table (Ildar Musin, Chris Travers) §

FeaturesWhen using LOCK TABLE on a partitioned table, do not check permissions on the child tables

Utility Commands

When using LOCK TABLE on a partitioned table, do not check permissions on the child tables (Amit Langote) §

FeaturesAllow OVERRIDING USER VALUE on inserts into identity columns

Utility Commands

Allow OVERRIDING USER VALUE on inserts into identity columns (Dean Rasheed) §

FeaturesAdd ALTER TABLE ... DROP EXPRESSION to allow removing the GENERATED property from a column

Utility Commands

Add ALTER TABLE ... DROP EXPRESSION to allow removing the GENERATED property from a column (Peter Eisentraut) §

Bug fixesFix bugs in multi-step ALTER TABLE commands

Utility Commands

Fix bugs in multi-step ALTER TABLE commands (Tom Lane) §

IF NOT EXISTS clauses now work as expected, in that derived actions (such as index creation) do not execute if the column already exists. Also, certain cases of combining related actions into one ALTER TABLE now work when they did not before.

FeaturesAdd ALTER VIEW syntax to rename view columns

Utility Commands

Add ALTER VIEW syntax to rename view columns (Fujii Masao) §

Renaming view columns was already possible, but one had to write ALTER TABLE RENAME COLUMN, which is confusing.

FeaturesAdd ALTER TYPE options to modify a base type's TOAST properties and support functions

Utility Commands

Add ALTER TYPE options to modify a base type's TOAST properties and support functions (Tomas Vondra, Tom Lane) §

FeaturesAdd CREATE DATABASE LOCALE option

Utility Commands

Add CREATE DATABASE LOCALE option (Peter Eisentraut) §

This combines the existing options LC_COLLATE and LC_CTYPE into a single option.

FeaturesAllow DROP DATABASE to disconnect sessions using the target database, allowing the drop to succeed

Utility Commands

Allow DROP DATABASE to disconnect sessions using the target database, allowing the drop to succeed (Pavel Stehule, Amit Kapila) §

This is enabled by the FORCE option.

FeaturesAdd structure member tg_updatedcols to allow C-language update triggers to know which column(s) were updated

Utility Commands

Add structure member tg_updatedcols to allow C-language update triggers to know which column(s) were updated (Peter Eisentraut) §

FeaturesAdd polymorphic data types for use by functions requiring compatible arguments

Data Types

Add polymorphic data types for use by functions requiring compatible arguments (Pavel Stehule) §

The new data types are anycompatible, anycompatiblearray, anycompatiblenonarray, and anycompatiblerange.

FeaturesAdd SQL data type xid8 to expose FullTransactionId

Data Types

Add SQL data type xid8 to expose FullTransactionId (Thomas Munro) §

The existing xid data type is only four bytes so it does not provide the transaction epoch.

FeaturesAdd data type regcollation and associated functions, to represent OIDs of collation objects

Data Types

Add data type regcollation and associated functions, to represent OIDs of collation objects (Julien Rouhaud) §

FeaturesUse the glibc version in some cases as a collation version identifier

Data Types

Use the glibc version in some cases as a collation version identifier (Thomas Munro) §

If the glibc version changes, a warning will be issued about possible corruption of collation-dependent indexes.

FeaturesAdd support for collation versions on Windows

Data Types

Add support for collation versions on Windows (Thomas Munro) §

FeaturesAllow ROW expressions to have their members extracted with suffix notation

Data Types

Allow ROW expressions to have their members extracted with suffix notation (Tom Lane) §

For example, (ROW(4, 5.0)).f1 now returns 4.

FeaturesAdd alternate version of jsonb_set() with improved NULL handling

Functions

Add alternate version of jsonb_set() with improved NULL handling (Andrew Dunstan) §

The new function, jsonb_set_lax(), handles a NULL new value by either setting the specified key to a JSON null, deleting the key, raising an exception, or returning the jsonb value unmodified, as requested.

FeaturesAdd jsonpath .datetime() method

Functions

Add jsonpath .datetime() method (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov) §

This function allows JSON values to be converted to timestamps, which can then be processed in jsonpath expressions. This change also adds jsonpath functions that support time-zone-aware output.

FeaturesAdd SQL functions NORMALIZE() to normalize Unicode strings, and IS NORMALIZED to check for normalization

Functions

Add SQL functions NORMALIZE() to normalize Unicode strings, and IS NORMALIZED to check for normalization (Peter Eisentraut) §

FeaturesAdd min() and max() aggregates for pg_lsn

Functions

Add min() and max() aggregates for pg_lsn (Fabrízio de Royes Mello) §

These are particularly useful in monitoring queries.

FeaturesAllow Unicode escapes, e.g., E'\unnnn' or U&'\nnnn', to specify any character available in the database encoding, even when the database encoding is not UTF-8

Functions

Allow Unicode escapes, e.g., E'\unnnn' or U&'\nnnn', to specify any character available in the database encoding, even when the database encoding is not UTF-8 (Tom Lane) §

FeaturesAllow to_date() and to_timestamp() to recognize non-English month/day names

Functions

Allow to_date() and to_timestamp() to recognize non-English month/day names (Juan José Santamaría Flecha, Tom Lane) §

The names recognized are the same as those output by to_char() with the same format patterns.

FeaturesAdd datetime format patterns FF1 – FF6 to specify input or output of 1 to 6 fractional-second digits

Functions

Add datetime format patterns FF1 – FF6 to specify input or output of 1 to 6 fractional-second digits (Alexander Korotkov, Nikita Glukhov, Teodor Sigaev, Oleg Bartunov) §

These patterns can be used by to_char(), to_timestamp(), and jsonpath's .datetime().

FeaturesAdd SSSSS datetime format pattern as an SQL-standard alias for SSSS

Functions

Add SSSSS datetime format pattern as an SQL-standard alias for SSSS (Nikita Glukhov, Alexander Korotkov) §

FeaturesAdd function gen_random_uuid() to generate version-4 UUIDs

Functions

Add function gen_random_uuid() to generate version-4 UUIDs (Peter Eisentraut) §

Previously UUID generation functions were only available in the external modules uuid-ossp and pgcrypto.

FeaturesAdd greatest-common-denominator (gcd) and least-common-multiple (lcm) functions

Functions

Add greatest-common-denominator (gcd) and least-common-multiple (lcm) functions (Vik Fearing) §

PerformanceImprove the performance and accuracy of the numeric type's square root (sqrt) and natural log (ln) functions

Functions

Improve the performance and accuracy of the numeric type's square root (sqrt) and natural log (ln) functions (Dean Rasheed) § §

FeaturesAdd function min_scale() that returns the number of digits to the right of the decimal point that are required to represent a numeric value with full accuracy

Functions

Add function min_scale() that returns the number of digits to the right of the decimal point that are required to represent a numeric value with full accuracy (Pavel Stehule) §

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 function trim_scale() to reduce the scale of a numeric value by removing trailing zeros

Functions

Add function trim_scale() to reduce the scale of a numeric value by removing trailing zeros (Pavel Stehule) §

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 commutators of distance operators

Functions

Add commutators of distance operators (Nikita Glukhov) §

For example, previously only point <-> line was supported, now line <-> point works too.

FeaturesCreate xid8 versions of all transaction ID functions

Functions

Create xid8 versions of all transaction ID functions (Thomas Munro) §

The old xid-based functions still exist, for backward compatibility.

FeaturesAllow get_bit() and set_bit() to set bits beyond the first 256MB of a bytea value

Functions

Allow get_bit() and set_bit() to set bits beyond the first 256MB of a bytea value (Movead Li) §

Related records (5)

“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 advisory-lock functions to be used in some parallel operations

Functions

Allow advisory-lock functions to be used in some parallel operations (Tom Lane) §

FeaturesAdd the ability to remove an object's dependency on an extension

Functions

Add the ability to remove an object's dependency on an extension (Álvaro Herrera) §

The object can be a function, materialized view, index, or trigger. The syntax is ALTER .. NO DEPENDS ON.

PerformanceImprove performance of simple PL/pgSQL expressions

PL/pgSQL

Improve performance of simple PL/pgSQL expressions (Tom Lane, Amit Langote) §

PerformanceImprove performance of PL/pgSQL functions that use immutable expressions

PL/pgSQL

Improve performance of PL/pgSQL functions that use immutable expressions (Konstantin Knizhnik) §

FeaturesAllow libpq clients to require channel binding for encrypted connections

Client Interfaces

Allow libpq clients to require channel binding for encrypted connections (Jeff Davis) §

Using the libpq connection parameter channel_binding forces the other end of the TLS connection to prove it knows the user's password. This prevents man-in-the-middle attacks.

FeaturesAdd libpq connection parameters to control the minimum and maximum TLS version allowed for an encrypted connection

Client Interfaces

Add libpq connection parameters to control the minimum and maximum TLS version allowed for an encrypted connection (Daniel Gustafsson) § § §

The settings are ssl_min_protocol_version and ssl_max_protocol_version. By default, the minimum TLS version is 1.2 (this represents a behavioral change from previous releases).

FeaturesAllow use of passwords to unlock client certificates

Client Interfaces

Allow use of passwords to unlock client certificates (Craig Ringer, Andrew Dunstan) §

This is enabled by libpq's sslpassword connection parameter.

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 libpq to use DER-encoded client certificates

Client Interfaces

Allow libpq to use DER-encoded client certificates (Craig Ringer, Andrew Dunstan) §

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.

Bug fixesFix ecpg's EXEC SQL elif directive to work correctly

Client Interfaces

Fix ecpg's EXEC SQL elif directive to work correctly (Tom Lane) §

Previously it behaved the same as endif followed by ifdef, so that a successful previous branch of the same if construct did not prevent expansion of the elif branch or following branches.

FeaturesAdd transaction status (%x) to psql's default prompts

Client Applications / psql

Add transaction status (%x) to psql's default prompts (Vik Fearing) §

FeaturesAllow the secondary psql prompt to be blank but the same width as the primary prompt

Client Applications / psql

Allow the secondary psql prompt to be blank but the same width as the primary prompt (Thomas Munro) §

This is accomplished by setting PROMPT2 to %w.

FeaturesAllow psql's \g and \gx commands to change \pset output options for the duration of that single command

Client Applications / psql

Allow psql's \g and \gx commands to change \pset output options for the duration of that single command (Tom Lane) §

This feature allows syntax like \g (expand=on), which is equivalent to \gx.

FeaturesAdd psql commands to display operator classes and operator families

Client Applications / psql

Add psql commands to display operator classes and operator families (Sergey Cherkashin, Nikita Glukhov, Alexander Korotkov) §

The new commands are \dAc, \dAf, \dAo, and \dAp.

FeaturesShow table persistence in psql's \dt+ and related commands

Client Applications / psql

Show table persistence in psql's \dt+ and related commands (David Fetter) §

In verbose mode, the table/index/view shows if the object is permanent, temporary, or unlogged.

FeaturesImprove output of psql's \d for TOAST tables

Client Applications / psql

Improve output of psql's \d for TOAST tables (Justin Pryzby) §

Bug fixesFix redisplay after psql's \e command

Client Applications / psql

Fix redisplay after psql's \e command (Tom Lane) §

When exiting the editor, if the query doesn't end with a semicolon or \g, the query buffer contents will now be displayed.

FeaturesAdd \warn command to psql

Client Applications / psql

Add \warn command to psql (David Fetter) §

This is like \echo except that the text is sent to stderr instead of stdout.

FeaturesAdd the PostgreSQL home page to command-line --help output

Client Applications / psql

Add the PostgreSQL home page to command-line --help output (Peter Eisentraut) §

FeaturesAllow pgbench to partition its “accounts” table

Client Applications / pgbench

Allow pgbench to partition its “accounts” table (Fabien Coelho) §

This allows performance testing of partitioning.

FeaturesAdd pgbench command \aset, which behaves like \gset, but for multiple queries

Client Applications / pgbench

Add pgbench command \aset, which behaves like \gset, but for multiple queries (Fabien Coelho) §

FeaturesAllow pgbench to generate its initial data server-side, rather than client-side

Client Applications / pgbench

Allow pgbench to generate its initial data server-side, rather than client-side (Fabien Coelho) §

FeaturesAllow pgbench to show script contents using option --show-script

Client Applications / pgbench

Allow pgbench to show script contents using option --show-script (Fabien Coelho) §

FeaturesGenerate backup manifests for base backups, and verify them

Server Applications

Generate backup manifests for base backups, and verify them (Robert Haas) § §

A new tool pg_verifybackup can verify backups.

FeaturesHave pg_basebackup estimate the total backup size by default

Server Applications

Have pg_basebackup estimate the total backup size by default (Fujii Masao) §

This computation allows pg_stat_progress_basebackup to show progress. If that is not needed, it can be disabled by using the --no-estimate-size option. Previously, this computation happened only if the --progress option was used.

FeaturesAdd an option to pg_rewind to configure standbys

Server Applications

Add an option to pg_rewind to configure standbys (Paul Guo, Jimmy Yih, Ashwin Agrawal) §

This matches pg_basebackup's --write-recovery-conf option.

FeaturesAllow pg_rewind to use the target cluster's restore_command to retrieve needed WAL

Server Applications

Allow pg_rewind to use the target cluster's restore_command to retrieve needed WAL (Alexey Kondratov) §

This is enabled using the -c/--restore-target-wal option.

FeaturesHave pg_rewind automatically run crash recovery before rewinding

Server Applications

Have pg_rewind automatically run crash recovery before rewinding (Paul Guo, Jimmy Yih, Ashwin Agrawal) §

This can be disabled by using --no-ensure-shutdown.

FeaturesIncrease the PREPARE TRANSACTION-related information reported by pg_waldump

Server Applications

Increase the PREPARE TRANSACTION-related information reported by pg_waldump (Fujii Masao) §

FeaturesAdd pg_waldump option --quiet to suppress non-error output

Server Applications

Add pg_waldump option --quiet to suppress non-error output (Andres Freund, Robert Haas) §

FeaturesAdd pg_dump option --include-foreign-data to dump data from foreign servers

Server Applications

Add pg_dump option --include-foreign-data to dump data from foreign servers (Luis Carril) §

FeaturesAllow vacuum commands run by vacuumdb to operate in parallel mode

Server Applications

Allow vacuum commands run by vacuumdb to operate in parallel mode (Masahiko Sawada) §

This is enabled with the new --parallel option.

FeaturesAllow reindexdb to operate in parallel

Server Applications

Allow reindexdb to operate in parallel (Julien Rouhaud) §

Parallel mode is enabled with the new --jobs option.

FeaturesAllow dropdb to disconnect sessions using the target database, allowing the drop to succeed

Server Applications

Allow dropdb to disconnect sessions using the target database, allowing the drop to succeed (Pavel Stehule) §

This is enabled with the -f option.

FeaturesRemove --adduser and --no-adduser from createuser

Server Applications

Remove --adduser and --no-adduser from createuser (Alexander Lakhin) §

The long-supported preferred options for this are called --superuser and --no-superuser.

FeaturesUse the directory of the pg_upgrade program as the default --new-bindir setting when running pg_upgrade

Server Applications

Use the directory of the pg_upgrade program as the default --new-bindir setting when running pg_upgrade (Daniel Gustafsson) §

FeaturesAdd a glossary to the documentation

Documentation

Add a glossary to the documentation (Corey Huinker, Jürgen Purtz, Roger Harkavy, Álvaro Herrera) §

FeaturesReformat tables containing function and operator information for better clarity

Documentation

Reformat tables containing function and operator information for better clarity (Tom Lane) §

FeaturesUpgrade to use DocBook 4.5

Documentation

Upgrade to use DocBook 4.5 (Peter Eisentraut) §

FeaturesAdd support for building on Visual Studio 2019

Source Code

Add support for building on Visual Studio 2019 (Haribabu Kommi) §

Related records (5)

“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 build support for MSYS2

Source Code

Add build support for MSYS2 (Peter Eisentraut) §

FeaturesAdd compare_exchange and fetch_add assembly language code for Power PC compilers

Source Code

Add compare_exchange and fetch_add assembly language code for Power PC compilers (Noah Misch) §

FeaturesUpdate Snowball stemmer dictionaries used by full text search

Source Code

Update Snowball stemmer dictionaries used by full text search (Panagiotis Mavrogiorgos) §

This adds Greek stemming and improves Danish and French stemming.

FeaturesRemove support for Windows 2000

Source Code

Remove support for Windows 2000 (Michael Paquier) §

FeaturesRemove support for non-ELF BSD systems

Source Code

Remove support for non-ELF BSD systems (Peter Eisentraut) §

FeaturesRemove support for Python versions 2.5.X and earlier

Source Code

Remove support for Python versions 2.5.X and earlier (Peter Eisentraut) §

FeaturesRemove support for OpenSSL 0.9.8 and 1.0.0

Source Code

Remove support for OpenSSL 0.9.8 and 1.0.0 (Michael Paquier) §

FeaturesRemove configure options --disable-float8-byval and --disable-float4-byval

Source Code

Remove configure options --disable-float8-byval and --disable-float4-byval (Peter Eisentraut) § §

These were needed for compatibility with some version-zero C functions, but those are no longer supported.

FeaturesPass the query string to planner hook functions

Source Code

Pass the query string to planner hook functions (Pascal Legrand, Julien Rouhaud) §

FeaturesAdd TRUNCATE command hook

Source Code

Add TRUNCATE command hook (Yuli Khodorkovskiy) §

FeaturesAdd TLS init hook

Source Code

Add TLS init hook (Andrew Dunstan) §

FeaturesAllow building with no predefined Unix-domain socket directory

Source Code

Allow building with no predefined Unix-domain socket directory (Peter Eisentraut) §

FeaturesReduce the probability of SysV resource key collision on Unix platforms

Source Code

Reduce the probability of SysV resource key collision on Unix platforms (Tom Lane) §

FeaturesUse operating system functions to reliably erase memory that contains sensitive information

Source Code

Use operating system functions to reliably erase memory that contains sensitive information (Peter Eisentraut) §

For example, this is used for clearing passwords stored in memory.

FeaturesAdd headerscheck script to test C header-file compatibility

Source Code

Add headerscheck script to test C header-file compatibility (Tom Lane) §

FeaturesImplement internal lists as arrays, rather than a chain of cells

Source Code

Implement internal lists as arrays, rather than a chain of cells (Tom Lane) §

This improves performance for queries that access many objects.

FeaturesChange the API for TS_execute()

Source Code

Change the API for TS_execute() (Tom Lane, Pavel Borisov) § §

TS_execute callbacks must now provide ternary (yes/no/maybe) logic. Calculating NOT queries accurately is now the default.

FeaturesAllow extensions to be specified as trusted

Additional Modules

Allow extensions to be specified as trusted (Tom Lane) §

Such extensions can be installed in a database by users with database-level CREATE privileges, even if they are not superusers. This change also removes the pg_pltemplate system catalog.

FeaturesAllow non-superusers to connect to postgres_fdw foreign servers without using a password

Additional Modules

Allow non-superusers to connect to postgres_fdw foreign servers without using a password (Craig Ringer) §

Specifically, allow a superuser to set password_required to false for a user mapping. Care must still be taken to prevent non-superusers from using superuser credentials to connect to the foreign server.

FeaturesAllow postgres_fdw to use certificate authentication

Additional Modules

Allow postgres_fdw to use certificate authentication (Craig Ringer) §

Different users can use different certificates.

FeaturesAllow sepgsql to control access to the TRUNCATE command

Additional Modules

Allow sepgsql to control access to the TRUNCATE command (Yuli Khodorkovskiy) §

FeaturesAdd extension bool_plperl which transforms SQL booleans to/from PL/Perl booleans

Additional Modules

Add extension bool_plperl which transforms SQL booleans to/from PL/Perl booleans (Ivan Panchenko) §

FeaturesHave pg_stat_statements treat SELECT ... FOR UPDATE commands as distinct from those without FOR UPDATE

Additional Modules

Have pg_stat_statements treat SELECT ... FOR UPDATE commands as distinct from those without FOR UPDATE (Andrew Gierth, Vik Fearing) §

FeaturesAllow pg_stat_statements to optionally track the planning time of statements

Additional Modules

Allow pg_stat_statements to optionally track the planning time of statements (Julien Rouhaud, Pascal Legrand, Thomas Munro, Fujii Masao) § §

Previously only execution time was tracked.

FeaturesOverhaul ltree's lquery syntax to treat NOT (!) more logically

Additional Modules

Overhaul ltree's lquery syntax to treat NOT (!) more logically (Filip Rembialkowski, Tom Lane, Nikita Glukhov) § §

Also allow non-* queries to use a numeric range ({}) of matches.

FeaturesAdd support for binary I/O of ltree, lquery, and ltxtquery types

Additional Modules

Add support for binary I/O of ltree, lquery, and ltxtquery types (Nino Floris) §

FeaturesAdd an option to dict_int to ignore the sign of integers

Additional Modules

Add an option to dict_int to ignore the sign of integers (Jeff Janes) §

FeaturesAdd adminpack function pg_file_sync() to allow fsync'ing a file

Additional Modules

Add adminpack function pg_file_sync() to allow fsync'ing a file (Fujii Masao) §

FeaturesAdd pageinspect functions to output t_infomask/t_infomask2 values in human-readable format

Additional Modules

Add pageinspect functions to output t_infomask/t_infomask2 values in human-readable format (Craig Ringer, Sawada Masahiko, Michael Paquier) § §

FeaturesAdd B-tree index de-duplication processing columns to pageinspect output

Additional Modules

Add B-tree index de-duplication processing columns to pageinspect output (Peter Geoghegan) §

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.