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

12.0

2019-10-03

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

12.0 HistoricalSupport ends 2024-11-21

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

CompatibilityRemove the special behavior of oid columns

Compatibility

Remove the special behavior of oid columns (Andres Freund, John Naylor) §

Previously, a normally-invisible oid column could be specified during table creation using WITH OIDS; that ability has been removed. Columns can still be explicitly declared as type oid. Operations on tables that have columns created using WITH OIDS will need adjustment.

The system catalogs that previously had hidden oid columns now have ordinary oid columns. Hence, SELECT * will now output those columns, whereas previously they would be displayed only if selected explicitly.

CompatibilityRemove data types abstime, reltime, and tinterval

Compatibility

Remove data types abstime, reltime, and tinterval (Andres Freund) §

These are obsoleted by SQL-standard types such as timestamp.

CompatibilityRemove the timetravel extension

Compatibility

Remove the timetravel extension (Andres Freund) §

CompatibilityMove recovery.conf settings into postgresql.conf

Compatibility

Move recovery.conf settings into postgresql.conf (Masao Fujii, Simon Riggs, Abhijit Menon-Sen, Sergei Kornilov) §

recovery.conf is no longer used, and the server will not start if that file exists. recovery.signal and standby.signal files are now used to switch into non-primary mode. The trigger_file setting has been renamed to promote_trigger_file. The standby_mode setting has been removed.

CompatibilityDo not allow multiple conflicting recovery_target* specifications

Compatibility

Do not allow multiple conflicting recovery_target* specifications (Peter Eisentraut) §

Specifically, only allow one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, and recovery_target_xid. Previously, multiple different instances of these parameters could be specified, and the last one was honored. Now, only one can be specified, though the same one can be specified multiple times and the last specification is honored.

CompatibilityCause recovery to advance to the latest timeline by default

Compatibility

Cause recovery to advance to the latest timeline by default (Peter Eisentraut) §

Specifically, recovery_target_timeline now defaults to latest. Previously, it defaulted to current.

CompatibilityRefactor code for geometric functions and operators

Compatibility

Refactor code for geometric functions and operators (Emre Hasegeli) § § §

This could lead to more accurate, but slightly different, results compared to previous releases. Notably, cases involving NaN, underflow, overflow, and division by zero are handled more consistently than before.

CompatibilityImprove performance by using a new algorithm for output of real and double precision values

Compatibility

Improve performance by using a new algorithm for output of real and double precision values (Andrew Gierth) § §

Previously, displayed floating-point values were rounded to 6 (for real) or 15 (for double precision) digits by default, adjusted by the value of extra_float_digits. Now, whenever extra_float_digits is more than zero (as it now is by default), only the minimum number of digits required to preserve the exact binary value are output. The behavior is the same as before when extra_float_digits is set to zero or less.

Also, formatting of floating-point exponents is now uniform across platforms: two digits are used unless three are necessary. In previous releases, Windows builds always printed three digits.

Compatibilityrandom() and setseed() now behave uniformly across platforms

Compatibility

random() and setseed() now behave uniformly across platforms (Tom Lane) § §

The sequence of random() values generated following a setseed() call with a particular seed value is likely to be different now than before. However, it will also be repeatable, which was not previously guaranteed because of interference from other uses of random numbers inside the server. The SQL random() function now has its own private per-session state to forestall that.

CompatibilityChange SQL-style substring() to have standard-compliant greediness behavior

Compatibility

Change SQL-style substring() to have standard-compliant greediness behavior (Tom Lane) §

In cases where the pattern can be matched in more than one way, the initial sub-pattern is now treated as matching the least possible amount of text rather than the greatest; for example, a pattern such as %#"aa*#"% now selects the first group of a's from the input, not the last group.

CompatibilityDo not pretty-print the result of xpath() or the XMLTABLE construct

Compatibility

Do not pretty-print the result of xpath() or the XMLTABLE construct (Tom Lane) §

In some cases, these functions would insert extra whitespace (newlines and/or spaces) in nodeset values. This is undesirable since depending on usage, the whitespace might be considered semantically significant.

CompatibilityRename command-line tool pg_verify_checksums to pg_checksums

Compatibility

Rename command-line tool pg_verify_checksums to pg_checksums (Michaël Paquier) §

CompatibilityIn pg_restore, require specification of -f - to send the dump contents to standard output

Compatibility

In pg_restore, require specification of -f - to send the dump contents to standard output (Euler Taveira) §

Previously, this happened by default if no destination was specified, but that was deemed to be unfriendly.

CompatibilityDisallow non-unique abbreviations in psql's \pset format command

Compatibility

Disallow non-unique abbreviations in psql's \pset format command (Daniel Vérité) § §

Previously, for example, \pset format a chose aligned; it will now fail since that could equally well mean asciidoc.

CompatibilityIn new btree indexes, the maximum index entry length is reduced by eight bytes, to improve handling of duplicate entries

Compatibility

In new btree indexes, the maximum index entry length is reduced by eight bytes, to improve handling of duplicate entries (Peter Geoghegan) §

This means that a REINDEX operation on an index pg_upgrade'd from a previous release could potentially fail.

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.

CompatibilityCause DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE to generate an error if no argument list is supplied and there are multiple matching objects

Compatibility

Cause DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE to generate an error if no argument list is supplied and there are multiple matching objects (David Rowley) §

Also improve the error message in such cases.

CompatibilitySplit the pg_statistic_ext catalog into two catalogs, and add the pg_stats_ext view of it

Compatibility

Split the pg_statistic_ext catalog into two catalogs, and add the pg_stats_ext view of it (Dean Rasheed, Tomas Vondra) § §

This change supports hiding potentially-sensitive statistics data from unprivileged users.

CompatibilityRemove obsolete pg_constraint.consrc column

Compatibility

Remove obsolete pg_constraint.consrc column (Peter Eisentraut) §

This column has been deprecated for a long time, because it did not update in response to other catalog changes (such as column renamings). The recommended way to get a text version of a check constraint's expression from pg_constraint is pg_get_expr(conbin, conrelid). pg_get_constraintdef() is also a useful alternative.

CompatibilityRemove obsolete pg_attrdef.adsrc column

Compatibility

Remove obsolete pg_attrdef.adsrc column (Peter Eisentraut) §

This column has been deprecated for a long time, because it did not update in response to other catalog changes (such as column renamings). The recommended way to get a text version of a default-value expression from pg_attrdef is pg_get_expr(adbin, adrelid).

CompatibilityMark table columns of type name as having “C” collation by default

Compatibility

Mark table columns of type name as having “C” collation by default (Tom Lane, Daniel Vérité) § §

The comparison operators for data type name can now use any collation, rather than always using “C” collation. To preserve the previous semantics of queries, columns of type name are now explicitly marked as having “C” collation. A side effect of this is that regular-expression operators on name columns will now use the “C” collation by default, not the database collation, to determine the behavior of locale-dependent regular expression patterns (such as \w). If you want non-C behavior for a regular expression on a name column, attach an explicit COLLATE clause. (For user-defined name columns, another possibility is to specify a different collation at table creation time; but that just moves the non-backwards-compatibility to the comparison operators.)

CompatibilityTreat object-name columns in the information_schema views as being of type name, not varchar

Compatibility

Treat object-name columns in the information_schema views as being of type name, not varchar (Tom Lane) § § §

Per the SQL standard, object-name columns in the information_schema views are declared as being of domain type sql_identifier. In PostgreSQL, the underlying catalog columns are really of type name. This change makes sql_identifier be a domain over name, rather than varchar as before. This eliminates a semantic mismatch in comparison and sorting behavior, which can greatly improve the performance of queries on information_schema views that restrict an object-name column. Note however that inequality restrictions, for example

SELECT ... FROM information_schema.tables WHERE table_name < 'foo';

will now use “C”-locale comparison semantics by default, rather than the database's default collation as before. Sorting on these columns will also follow “C” ordering rules. The previous behavior (and inefficiency) can be enforced by adding a COLLATE "default" clause.

CompatibilityRemove the ability to disable dynamic shared memory

Compatibility

Remove the ability to disable dynamic shared memory (Kyotaro Horiguchi) §

Specifically, dynamic_shared_memory_type can no longer be set to none.

CompatibilityParse libpq integer connection parameters more strictly

Compatibility

Parse libpq integer connection parameters more strictly (Fabien Coelho) §

In previous releases, using an incorrect integer value for connection parameters connect_timeout, keepalives, keepalives_count, keepalives_idle, keepalives_interval and port resulted in libpq either ignoring those values or failing with incorrect error messages.

PerformanceImprove performance of many operations on partitioned tables

Server / Partitioning

Improve performance of many operations on partitioned tables (Amit Langote, David Rowley, Tom Lane, Álvaro Herrera) § § § § §

Allow tables with thousands of child partitions to be processed efficiently by operations that only affect a small number of partitions.

FeaturesAllow foreign keys to reference partitioned tables

Server / Partitioning

Allow foreign keys to reference partitioned tables (Álvaro Herrera) §

FeaturesImprove speed of COPY into partitioned tables

Server / Partitioning

Improve speed of COPY into partitioned tables (David Rowley) §

FeaturesAllow partition bounds to be any expression

Server / Partitioning

Allow partition bounds to be any expression (Kyotaro Horiguchi, Tom Lane, Amit Langote) §

Such expressions are evaluated at partitioned-table creation time. Previously, only simple constants were allowed as partition bounds.

FeaturesAllow CREATE TABLE's tablespace specification for a partitioned table to affect the tablespace of its children

Server / Partitioning

Allow CREATE TABLE's tablespace specification for a partitioned table to affect the tablespace of its children (David Rowley, Álvaro Herrera) §

FeaturesAvoid sorting when partitions are already being scanned in the necessary order

Server / Partitioning

Avoid sorting when partitions are already being scanned in the necessary order (David Rowley) §

FeaturesALTER TABLE ATTACH PARTITION is now performed with reduced locking requirements

Server / Partitioning

ALTER TABLE ATTACH PARTITION is now performed with reduced locking requirements (Robert Haas) §

FeaturesAdd partition introspection functions

Server / Partitioning

Add partition introspection functions (Michaël Paquier, Álvaro Herrera, Amit Langote) § § §

The new function pg_partition_root() returns the top-most parent of a partition tree, pg_partition_ancestors() reports all ancestors of a partition, and pg_partition_tree() displays information about partitions.

FeaturesInclude partitioned indexes in the system view pg_indexes

Server / Partitioning

Include partitioned indexes in the system view pg_indexes (Suraj Kharage) §

FeaturesAdd psql command \dP to list partitioned tables and indexes

Server / Partitioning

Add psql command \dP to list partitioned tables and indexes (Pavel Stehule) §

FeaturesImprove psql \d and \z display of partitioned tables

Server / Partitioning

Improve psql \d and \z display of partitioned tables (Pavel Stehule, Michaël Paquier, Álvaro Herrera) § § §

Bug fixesFix bugs that could cause ALTER TABLE DETACH PARTITION to leave behind incorrect dependency state, allowing subsequent operations to misbehave, for example by not dropping a former partition child index when its table is dropped

Server / Partitioning

Fix bugs that could cause ALTER TABLE DETACH PARTITION to leave behind incorrect dependency state, allowing subsequent operations to misbehave, for example by not dropping a former partition child index when its table is dropped (Tom Lane) §

PerformanceImprove performance and space utilization of btree indexes with many duplicates

Server / Indexes

Improve performance and space utilization of btree indexes with many duplicates (Peter Geoghegan, Heikki Linnakangas) § § §

Previously, duplicate index entries were stored unordered within their duplicate groups. This caused overhead during index inserts, wasted space due to excessive page splits, and it reduced VACUUM's ability to recycle entire pages. Duplicate index entries are now sorted in heap-storage order.

Indexes pg_upgrade'd from previous releases will not have these benefits.

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 multi-column btree indexes to be smaller

Server / Indexes

Allow multi-column btree indexes to be smaller (Peter Geoghegan, Heikki Linnakangas)

Internal pages and min/max leaf page indicators now only store index keys until the change key, rather than all indexed keys. This also improves the locality of index access.

Indexes pg_upgrade'd from previous releases will not have these benefits.

FeaturesImprove speed of btree index insertions by reducing locking overhead

Server / Indexes

Improve speed of btree index insertions by reducing locking overhead (Alexander Korotkov) §

FeaturesSupport INCLUDE columns in GiST indexes

Server / Indexes

Support INCLUDE columns in GiST indexes (Andrey Borodin) §

FeaturesAdd support for nearest-neighbor (KNN) searches of SP-GiST indexes

Server / Indexes

Add support for nearest-neighbor (KNN) searches of SP-GiST indexes (Nikita Glukhov, Alexander Korotkov, Vlad Sterzhanov) §

PerformanceReduce the WAL write overhead of GiST, GIN, and SP-GiST index creation

Server / Indexes

Reduce the WAL write overhead of GiST, GIN, and SP-GiST index creation (Anastasia Lubennikova, Andrey V. Lepikhov) §

FeaturesAllow index-only scans to be more efficient on indexes with many columns

Server / Indexes

Allow index-only scans to be more efficient on indexes with many columns (Konstantin Knizhnik) §

PerformanceImprove the performance of vacuum scans of GiST indexes

Server / Indexes

Improve the performance of vacuum scans of GiST indexes (Andrey Borodin, Konstantin Kuznetsov, Heikki Linnakangas) §

FeaturesDelete empty leaf pages during GiST VACUUM

Server / Indexes

Delete empty leaf pages during GiST VACUUM (Andrey Borodin) §

FeaturesReduce locking requirements for index renaming

Server / Indexes

Reduce locking requirements for index renaming (Peter Eisentraut) §

FeaturesAllow CREATE STATISTICS to create most-common-value statistics for multiple columns

Server / Optimizer

Allow CREATE STATISTICS to create most-common-value statistics for multiple columns (Tomas Vondra) § §

This improves optimization for queries that test several columns, requiring an estimate of the combined effect of several WHERE clauses. If the columns are correlated and have non-uniform distributions then multi-column statistics will allow much better estimates.

FeaturesAllow common table expressions (CTEs) to be inlined into the outer query

Server / Optimizer

Allow common table expressions (CTEs) to be inlined into the outer query (Andreas Karlsson, Andrew Gierth, David Fetter, Tom Lane) § §

Specifically, CTEs are automatically inlined if they have no side-effects, are not recursive, and are referenced only once in the query. Inlining can be prevented by specifying MATERIALIZED, or forced for multiply-referenced CTEs by specifying NOT MATERIALIZED. Previously, CTEs were never inlined and were always evaluated before the rest of the query.

FeaturesAllow control over when generic plans are used for prepared statements

Server / Optimizer

Allow control over when generic plans are used for prepared statements (Pavel Stehule) §

This is controlled by the plan_cache_mode server parameter.

FeaturesImprove optimization of partition and UNION ALL queries that have only a single child

Server / Optimizer

Improve optimization of partition and UNION ALL queries that have only a single child (David Rowley) §

FeaturesImprove processing of domains that have no check constraints

Server / Optimizer

Improve processing of domains that have no check constraints (Tom Lane) §

Domains that are being used purely as type aliases no longer cause optimization difficulties.

FeaturesPre-evaluate calls of LEAST and GREATEST when their arguments are constants

Server / Optimizer

Pre-evaluate calls of LEAST and GREATEST when their arguments are constants (Vik Fearing) §

FeaturesImprove optimizer's ability to verify that partial indexes with IS NOT NULL conditions are usable in queries

Server / Optimizer

Improve optimizer's ability to verify that partial indexes with IS NOT NULL conditions are usable in queries (Tom Lane, James Coleman) § §

Usability can now be recognized in more cases where the calling query involves casts or large x IN (array) clauses.

FeaturesCompute ANALYZE statistics using the collation defined for each column

Server / Optimizer

Compute ANALYZE statistics using the collation defined for each column (Tom Lane) §

Previously, the database's default collation was used for all statistics. This potentially gives better optimizer behavior for columns with non-default collations.

FeaturesImprove selectivity estimates for inequality comparisons on ctid columns

Server / Optimizer

Improve selectivity estimates for inequality comparisons on ctid columns (Edmund Horner) §

FeaturesImprove optimization of joins on columns of type tid

Server / Optimizer

Improve optimization of joins on columns of type tid (Tom Lane) § §

These changes primarily improve the efficiency of self-joins on ctid columns.

Bug fixesFix the leakproofness designations of some btree comparison operators and support functions

Server / Optimizer

Fix the leakproofness designations of some btree comparison operators and support functions (Tom Lane) § §

This allows some optimizations that previously would not have been applied in the presence of security barrier views or row-level security.

PerformanceEnable Just-in-Time (JIT) compilation by default, if the server has been built with support for it

Server / General Performance

Enable Just-in-Time (JIT) compilation by default, if the server has been built with support for it (Andres Freund) §

Note that this support is not built by default, but has to be selected explicitly while configuring the build.

PerformanceSpeed up keyword lookup

Server / General Performance

Speed up keyword lookup (John Naylor, Joerg Sonnenberger, Tom Lane) § §

PerformanceImprove search performance for multi-byte characters in position() and related functions

Server / General Performance

Improve search performance for multi-byte characters in position() and related functions (Heikki Linnakangas) §

PerformanceAllow toasted values to be minimally decompressed

Server / General Performance

Allow toasted values to be minimally decompressed (Paul Ramsey) §

This is useful for routines that only need to examine the initial portion of a toasted field.

PerformanceAllow ALTER TABLE ... SET NOT NULL to avoid unnecessary table scans

Server / General Performance

Allow ALTER TABLE ... SET NOT NULL to avoid unnecessary table scans (Sergei Kornilov) §

This can be optimized when the table's column constraints can be recognized as disallowing nulls.

PerformanceAllow ALTER TABLE ... SET DATA TYPE changing between timestamp and timestamptz to avoid a table rewrite when the session time zone is UTC

Server / General Performance

Allow ALTER TABLE ... SET DATA TYPE changing between timestamp and timestamptz to avoid a table rewrite when the session time zone is UTC (Noah Misch) §

In the UTC time zone, these two data types are binary compatible.

PerformanceImprove speed in converting strings to int2 or int4 integers

Server / General Performance

Improve speed in converting strings to int2 or int4 integers (Andres Freund) §

PerformanceAllow parallelized queries when in SERIALIZABLE isolation mode

Server / General Performance

Allow parallelized queries when in SERIALIZABLE isolation mode (Thomas Munro) §

Previously, parallelism was disabled when in this mode.

PerformanceUse pread() and pwrite() for random I/O

Server / General Performance

Use pread() and pwrite() for random I/O (Oskari Saarenmaa, Thomas Munro) § §

This reduces the number of system calls required for I/O.

PerformanceImprove the speed of setting the process title on FreeBSD

Server / General Performance

Improve the speed of setting the process title on FreeBSD (Thomas Munro) §

FeaturesAllow logging of statements from only a percentage of transactions

Server / Monitoring

Allow logging of statements from only a percentage of transactions (Adrien Nayrat) §

The parameter log_transaction_sample_rate controls this.

FeaturesAdd progress reporting to CREATE INDEX and REINDEX operations

Server / Monitoring

Add progress reporting to CREATE INDEX and REINDEX operations (Álvaro Herrera, Peter Eisentraut) § §

Progress is reported in the pg_stat_progress_create_index system view.

FeaturesAdd progress reporting to CLUSTER and VACUUM FULL

Server / Monitoring

Add progress reporting to CLUSTER and VACUUM FULL (Tatsuro Yamada) §

Progress is reported in the pg_stat_progress_cluster system view.

FeaturesAdd progress reporting to pg_checksums

Server / Monitoring

Add progress reporting to pg_checksums (Michael Banck, Bernd Helmle) §

This is enabled with the option --progress.

FeaturesAdd counter of checksum failures to pg_stat_database

Server / Monitoring

Add counter of checksum failures to pg_stat_database (Magnus Hagander) §

FeaturesAdd tracking of global objects in system view pg_stat_database

Server / Monitoring

Add tracking of global objects in system view pg_stat_database (Julien Rouhaud) §

Global objects are shown with a pg_stat_database.datid value of zero.

FeaturesAdd the ability to list the contents of the archive directory

Server / Monitoring

Add the ability to list the contents of the archive directory (Christoph Moench-Tegeder) §

The function is pg_ls_archive_statusdir().

FeaturesAdd the ability to list the contents of temporary directories

Server / Monitoring

Add the ability to list the contents of temporary directories (Nathan Bossart) §

The function, pg_ls_tmpdir(), optionally allows specification of a tablespace.

FeaturesAdd information about the client certificate to the system view pg_stat_ssl

Server / Monitoring

Add information about the client certificate to the system view pg_stat_ssl (Peter Eisentraut) §

The new columns are client_serial and issuer_dn. Column clientdn has been renamed to client_dn for clarity.

FeaturesRestrict visibility of rows in pg_stat_ssl for unprivileged users

Server / Monitoring

Restrict visibility of rows in pg_stat_ssl for unprivileged users (Peter Eisentraut) §

FeaturesAt server start, emit a log message including the server version number

Server / Monitoring

At server start, emit a log message including the server version number (Christoph Berg) §

FeaturesPrevent logging “incomplete startup packet” if a new connection is immediately closed

Server / Monitoring

Prevent logging “incomplete startup packet” if a new connection is immediately closed (Tom Lane) §

This avoids log spam from certain forms of monitoring.

FeaturesInclude the application_name, if set, in log_connections log messages

Server / Monitoring

Include the application_name, if set, in log_connections log messages (Don Seiler) §

FeaturesMake the walreceiver set its application name to the cluster name, if set

Server / Monitoring

Make the walreceiver set its application name to the cluster name, if set (Peter Eisentraut) §

FeaturesAdd the timestamp of the last received standby message to pg_stat_replication

Server / Monitoring

Add the timestamp of the last received standby message to pg_stat_replication (Lim Myungkyu) §

FeaturesAdd a wait event for fsync of WAL segments

Server / Monitoring

Add a wait event for fsync of WAL segments (Konstantin Knizhnik) §

FeaturesAdd GSSAPI encryption support

Server / Authentication

Add GSSAPI encryption support (Robbie Harwood, Stephen Frost) §

This feature allows TCP/IP connections to be encrypted when using GSSAPI authentication, without having to set up a separate encryption facility such as SSL. In support of this, add hostgssenc and hostnogssenc record types in pg_hba.conf for selecting connections that do or do not use GSSAPI encryption, corresponding to the existing hostssl and hostnossl record types. There is also a new gssencmode libpq option, and a pg_stat_gssapi system view.

FeaturesAllow the clientcert pg_hba.conf option to check that the database user name matches the client certificate's common name

Server / Authentication

Allow the clientcert pg_hba.conf option to check that the database user name matches the client certificate's common name (Julian Markwort, Marius Timmer) §

This new check is enabled with clientcert=verify-full.

FeaturesAllow discovery of an LDAP server using DNS SRV records

Server / Authentication

Allow discovery of an LDAP server using DNS SRV records (Thomas Munro) §

This avoids the requirement of specifying ldapserver. It is only supported if PostgreSQL is compiled with OpenLDAP.

FeaturesAdd ability to enable/disable cluster checksums using pg_checksums

Server / Server Configuration

Add ability to enable/disable cluster checksums using pg_checksums (Michael Banck, Michaël Paquier) §

The cluster must be shut down for these operations.

FeaturesReduce the default value of autovacuum_vacuum_cost_delay to 2ms

Server / Server Configuration

Reduce the default value of autovacuum_vacuum_cost_delay to 2ms (Tom Lane) §

This allows autovacuum operations to proceed faster by default.

FeaturesAllow vacuum_cost_delay to specify sub-millisecond delays, by accepting fractional values

Server / Server Configuration

Allow vacuum_cost_delay to specify sub-millisecond delays, by accepting fractional values (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 time-based server parameters to use units of microseconds (us)

Server / Server Configuration

Allow time-based server parameters to use units of microseconds (us) (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 fractional input for integer server parameters

Server / Server Configuration

Allow fractional input for integer server parameters (Tom Lane) §

For example, SET work_mem = '30.1GB' is now allowed, even though work_mem is an integer parameter. The value will be rounded to an integer after any required units conversion.

FeaturesAllow units to be defined for floating-point server parameters

Server / Server Configuration

Allow units to be defined for floating-point server parameters (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 wal_recycle and wal_init_zero server parameters to control WAL file recycling

Server / Server Configuration

Add wal_recycle and wal_init_zero server parameters to control WAL file recycling (Jerry Jelinek) §

Avoiding file recycling can be beneficial on copy-on-write file systems like ZFS.

FeaturesAdd server parameter tcp_user_timeout to control the server's TCP timeout

Server / Server Configuration

Add server parameter tcp_user_timeout to control the server's TCP timeout (Ryohei Nagaura) §

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 control of the minimum and maximum SSL protocol versions

Server / Server Configuration

Allow control of the minimum and maximum SSL protocol versions (Peter Eisentraut) §

The server parameters are ssl_min_protocol_version and ssl_max_protocol_version.

FeaturesAdd server parameter ssl_library to report the SSL library version used by the server

Server / Server Configuration

Add server parameter ssl_library to report the SSL library version used by the server (Peter Eisentraut) §

FeaturesAdd server parameter shared_memory_type to control the type of shared memory to use

Server / Server Configuration

Add server parameter shared_memory_type to control the type of shared memory to use (Andres Freund) §

This allows selection of System V shared memory, if desired.

FeaturesAllow some recovery parameters to be changed with reload

Streaming Replication and Recovery

Allow some recovery parameters to be changed with reload (Peter Eisentraut) §

These parameters are archive_cleanup_command, promote_trigger_file, recovery_end_command, and recovery_min_apply_delay.

FeaturesAllow the streaming replication timeout (wal_sender_timeout) to be set per connection

Streaming Replication and Recovery

Allow the streaming replication timeout (wal_sender_timeout) to be set per connection (Takayuki Tsunakawa) §

Previously, this could only be set cluster-wide.

FeaturesAdd function pg_promote() to promote standbys to primaries

Streaming Replication and Recovery

Add function pg_promote() to promote standbys to primaries (Laurenz Albe, Michaël Paquier) § §

Previously, this operation was only possible by using pg_ctl or creating a trigger file.

FeaturesAllow replication slots to be copied

Streaming Replication and Recovery

Allow replication slots to be copied (Masahiko Sawada) §

The functions for this are pg_copy_physical_replication_slot() and pg_copy_logical_replication_slot().

FeaturesMake max_wal_senders not count as part of max_connections

Streaming Replication and Recovery

Make max_wal_senders not count as part of max_connections (Alexander Kukushkin) §

FeaturesAdd an explicit value of current for recovery_target_timeline

Streaming Replication and Recovery

Add an explicit value of current for recovery_target_timeline (Peter Eisentraut) §

FeaturesMake recovery fail if a two-phase transaction status file is corrupt

Streaming Replication and Recovery

Make recovery fail if a two-phase transaction status file is corrupt (Michaël Paquier) §

Previously, a warning was logged and recovery continued, allowing the transaction to be lost.

FeaturesAdd REINDEX CONCURRENTLY option to allow reindexing without locking out writes

Utility Commands

Add REINDEX CONCURRENTLY option to allow reindexing without locking out writes (Michaël Paquier, Andreas Karlsson, Peter Eisentraut) §

This is also controlled by the reindexdb application's --concurrently option.

FeaturesAdd support for generated columns

Utility Commands

Add support for generated columns (Peter Eisentraut) §

The content of generated columns are computed from expressions (including references to other columns in the same table) rather than being specified by INSERT or UPDATE commands.

FeaturesAdd a WHERE clause to COPY FROM to control which rows are accepted

Utility Commands

Add a WHERE clause to COPY FROM to control which rows are accepted (Surafel Temesgen) §

This provides a simple way to filter incoming data.

FeaturesAllow enumerated values to be added more flexibly

Utility Commands

Allow enumerated values to be added more flexibly (Andrew Dunstan, Tom Lane, Thomas Munro) §

Previously, ALTER TYPE ... ADD VALUE could not be called in a transaction block, unless it was part of the same transaction that created the enumerated type. Now it can be called in a later transaction, so long as the new enumerated value is not referenced until after it is committed.

FeaturesAdd commands to end a transaction and start a new one

Utility Commands

Add commands to end a transaction and start a new one (Peter Eisentraut) §

The commands are COMMIT AND CHAIN and ROLLBACK AND CHAIN.

FeaturesAdd VACUUM and CREATE TABLE options to prevent VACUUM from truncating trailing empty pages

Utility Commands

Add VACUUM and CREATE TABLE options to prevent VACUUM from truncating trailing empty pages (Takayuki Tsunakawa) § §

These options are vacuum_truncate and toast.vacuum_truncate. Use of these options reduces VACUUM's locking requirements, but prevents returning disk space to the operating system.

FeaturesAllow VACUUM to skip index cleanup

Utility Commands

Allow VACUUM to skip index cleanup (Masahiko Sawada) § §

This change adds a VACUUM command option INDEX_CLEANUP as well as a table storage option vacuum_index_cleanup. Use of this option reduces the ability to reclaim space and can lead to index bloat, but it is helpful when the main goal is to freeze old tuples.

FeaturesAdd the ability to skip VACUUM and ANALYZE operations on tables that cannot be locked immediately

Utility Commands

Add the ability to skip VACUUM and ANALYZE operations on tables that cannot be locked immediately (Nathan Bossart) §

This option is called SKIP_LOCKED.

FeaturesAllow VACUUM and ANALYZE to take optional Boolean argument specifications

Utility Commands

Allow VACUUM and ANALYZE to take optional Boolean argument specifications (Masahiko Sawada) §

FeaturesPrevent TRUNCATE, VACUUM and ANALYZE from requesting a lock on tables for which the user lacks permission

Utility Commands

Prevent TRUNCATE, VACUUM and ANALYZE from requesting a lock on tables for which the user lacks permission (Michaël Paquier) § §

This prevents unauthorized locking, which could interfere with user queries.

FeaturesAdd EXPLAIN option SETTINGS to output non-default optimizer settings

Utility Commands

Add EXPLAIN option SETTINGS to output non-default optimizer settings (Tomas Vondra) §

This output can also be obtained when using auto_explain by setting auto_explain.log_settings.

FeaturesAdd OR REPLACE option to CREATE AGGREGATE

Utility Commands

Add OR REPLACE option to CREATE AGGREGATE (Andrew Gierth) §

FeaturesAllow modifications of system catalogs' options using ALTER TABLE

Utility Commands

Allow modifications of system catalogs' options using ALTER TABLE (Peter Eisentraut) §

Modifications of catalogs' reloptions and autovacuum settings are now supported. (Setting allow_system_table_mods is still required.)

FeaturesUse all key columns' names when selecting default constraint names for foreign keys

Utility Commands

Use all key columns' names when selecting default constraint names for foreign keys (Peter Eisentraut) §

Previously, only the first column name was included in the constraint name, resulting in ambiguity for multi-column foreign keys.

FeaturesUpdate assorted knowledge about Unicode to match Unicode 12.1.0

Data Types

Update assorted knowledge about Unicode to match Unicode 12.1.0 (Peter Eisentraut) § §

This fixes, for example, cases where psql would misformat output involving combining characters.

FeaturesUpdate Snowball stemmer dictionaries with support for new languages

Data Types

Update Snowball stemmer dictionaries with support for new languages (Arthur Zakirov) §

This adds word stemming support for Arabic, Indonesian, Irish, Lithuanian, Nepali, and Tamil to full text search.

FeaturesAllow creation of collations that report string equality for strings that are not bit-wise equal

Data Types

Allow creation of collations that report string equality for strings that are not bit-wise equal (Peter Eisentraut) §

This feature supports “nondeterministic” collations that can define case- and accent-agnostic equality comparisons. Thus, for example, a case-insensitive uniqueness constraint on a text column can be made more easily than before. This is only supported for ICU collations.

FeaturesAdd support for ICU collation attributes on older ICU versions

Data Types

Add support for ICU collation attributes on older ICU versions (Peter Eisentraut) §

This allows customization of the collation rules in a consistent way across all ICU versions.

FeaturesAllow data type name to more seamlessly be compared to other text types

Data Types

Allow data type name to more seamlessly be compared to other text types (Tom Lane) §

Type name now behaves much like a domain over type text that has default collation “C”. This allows cross-type comparisons to be processed more efficiently.

FeaturesAdd support for the SQL/JSON path language

Functions

Add support for the SQL/JSON path language (Nikita Glukhov, Teodor Sigaev, Alexander Korotkov, Oleg Bartunov, Liudmila Mantrova) § § §

This allows execution of complex queries on JSON values using an SQL-standard language.

FeaturesAdd support for hyperbolic functions

Functions

Add support for hyperbolic functions (Lætitia Avrot) §

Also add log10() as an alias for log(), for standards compliance.

FeaturesImprove the accuracy of statistical aggregates like variance() by using more precise algorithms

Functions

Improve the accuracy of statistical aggregates like variance() by using more precise algorithms (Dean Rasheed) §

FeaturesAllow date_trunc() to have an additional argument to control the time zone

Functions

Allow date_trunc() to have an additional argument to control the time zone (Vik Fearing, Tom Lane) §

This is faster and simpler than using the AT TIME ZONE clause.

FeaturesAdjust to_timestamp()/to_date() functions to be more forgiving of template mismatches

Functions

Adjust to_timestamp()/to_date() functions to be more forgiving of template mismatches (Artur Zakirov, Alexander Korotkov, Liudmila Mantrova) §

This new behavior more closely matches the Oracle functions of the same name.

Bug fixesFix assorted bugs in XML functions

Functions

Fix assorted bugs in XML functions (Pavel Stehule, Markus Winand, Chapman Flack) §

Specifically, in XMLTABLE, xpath(), and xmlexists(), fix some cases where nothing was output for a node, or an unexpected error was thrown, or necessary escaping of XML special characters was omitted.

FeaturesAllow the BY VALUE clause in XMLEXISTS and XMLTABLE

Functions

Allow the BY VALUE clause in XMLEXISTS and XMLTABLE (Chapman Flack) §

This SQL-standard clause has no effect in PostgreSQL's implementation, but it was unnecessarily being rejected.

FeaturesPrevent current_schema() and current_schemas() from being run by parallel workers, as they are not parallel-safe

Functions

Prevent current_schema() and current_schemas() from being run by parallel workers, as they are not parallel-safe (Michaël Paquier) §

FeaturesAllow RECORD and RECORD[] to be used as column types in a query's column definition list for a table function that is declared to return RECORD

Functions

Allow RECORD and RECORD[] to be used as column types in a query's column definition list for a table function that is declared to return RECORD (Elvis Pranskevichus) §

FeaturesAllow SQL commands and variables with the same names as those commands to be used in the same PL/pgSQL function

PL/pgSQL

Allow SQL commands and variables with the same names as those commands to be used in the same PL/pgSQL function (Tom Lane) §

For example, allow a variable called comment to exist in a function that calls the COMMENT SQL command. Previously this combination caused a parse error.

FeaturesAdd new optional warning and error checks to PL/pgSQL

PL/pgSQL

Add new optional warning and error checks to PL/pgSQL (Pavel Stehule) §

The new checks allow for run-time validation of INTO column counts and single-row results.

FeaturesAdd connection parameter tcp_user_timeout to control libpq's TCP timeout

Client Interfaces

Add connection parameter tcp_user_timeout to control libpq's TCP timeout (Ryohei Nagaura) §

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 (and thus psql) to report only the SQLSTATE value in error messages

Client Interfaces

Allow libpq (and thus psql) to report only the SQLSTATE value in error messages (Didier Gautheron) §

FeaturesAdd libpq function PQresultMemorySize() to report the memory used by a query result

Client Interfaces

Add libpq function PQresultMemorySize() to report the memory used by a query result (Lars Kanis, Tom Lane) §

FeaturesRemove the no-display/debug flag from libpq's options connection parameter

Client Interfaces

Remove the no-display/debug flag from libpq's options connection parameter (Peter Eisentraut) §

This allows this parameter to be set by postgres_fdw.

FeaturesAllow ecpg to create variables of data type bytea

Client Interfaces

Allow ecpg to create variables of data type bytea (Ryo Matsumura) §

This allows ECPG clients to interact with bytea data directly, rather than using an encoded form.

FeaturesAdd PREPARE AS support to ECPG

Client Interfaces

Add PREPARE AS support to ECPG (Ryo Matsumura) §

FeaturesAllow vacuumdb to select tables for vacuum based on their wraparound horizon

Client Applications

Allow vacuumdb to select tables for vacuum based on their wraparound horizon (Nathan Bossart) §

The options are --min-xid-age and --min-mxid-age.

FeaturesAllow vacuumdb to disable waiting for locks or skipping all-visible pages

Client Applications

Allow vacuumdb to disable waiting for locks or skipping all-visible pages (Nathan Bossart) §

The options are --skip-locked and --disable-page-skipping.

FeaturesAdd colorization to the output of command-line utilities

Client Applications

Add colorization to the output of command-line utilities (Peter Eisentraut) §

This is enabled by setting the environment variable PG_COLOR to always or auto. The specific colors used can be adjusted by setting the environment variable PG_COLORS, using ANSI escape codes for colors. For example, the default behavior is equivalent to PG_COLORS="error=01;31:warning=01;35:locus=01".

FeaturesAdd CSV table output mode in psql

Client Applications / psql

Add CSV table output mode in psql (Daniel Vérité) §

This is controlled by \pset format csv or the command-line --csv option.

FeaturesShow the manual page URL in psql's \help output for a SQL command

Client Applications / psql

Show the manual page URL in psql's \help output for a SQL command (Peter Eisentraut) §

FeaturesDisplay the IP address in psql's \conninfo

Client Applications / psql

Display the IP address in psql's \conninfo (Fabien Coelho) § §

FeaturesImprove tab completion of CREATE TABLE, CREATE TRIGGER, CREATE EVENT TRIGGER, ANALYZE, EXPLAIN, VACUUM, ALTER TABLE, ALTER INDEX, ALTER DATABASE, and ALTER INDEX ALTER COLUMN

Client Applications / psql

Improve tab completion of CREATE TABLE, CREATE TRIGGER, CREATE EVENT TRIGGER, ANALYZE, EXPLAIN, VACUUM, ALTER TABLE, ALTER INDEX, ALTER DATABASE, and ALTER INDEX ALTER COLUMN (Dagfinn Ilmari Mannsåker, Tatsuro Yamada, Michaël Paquier, Tom Lane, Justin Pryzby) § § § § § § § § §

FeaturesAllow values produced by queries to be assigned to pgbench variables

Client Applications / pgbench

Allow values produced by queries to be assigned to pgbench variables (Fabien Coelho, Álvaro Herrera) § §

The command for this is \gset.

FeaturesImprove precision of pgbench's --rate option

Client Applications / pgbench

Improve precision of pgbench's --rate option (Tom Lane) §

FeaturesImprove pgbench's error reporting with clearer messages and return codes

Client Applications / pgbench

Improve pgbench's error reporting with clearer messages and return codes (Peter Eisentraut) §

FeaturesAllow control of log file rotation via pg_ctl

Server Applications

Allow control of log file rotation via pg_ctl (Kyotaro Horiguchi, Alexander Kuzmenkov, Alexander Korotkov) §

Previously, this was only possible via an SQL function or a process signal.

FeaturesProperly detach the new server process during pg_ctl start

Server Applications

Properly detach the new server process during pg_ctl start (Paul Guo) §

This prevents the server from being shut down if the shell script that invoked pg_ctl is interrupted later.

FeaturesAllow pg_upgrade to use the file system's cloning feature, if there is one

Server Applications

Allow pg_upgrade to use the file system's cloning feature, if there is one (Peter Eisentraut) §

The --clone option has the advantages of --link, while preventing the old cluster from being changed after the new cluster has started.

FeaturesAllow specification of the socket directory to use in pg_upgrade

Server Applications

Allow specification of the socket directory to use in pg_upgrade (Daniel Gustafsson) §

This is controlled by --socketdir; the default is the current directory.

FeaturesAllow pg_checksums to disable fsync operations

Server Applications

Allow pg_checksums to disable fsync operations (Michaël Paquier) §

This is controlled by the --no-sync option.

FeaturesAllow pg_rewind to disable fsync operations

Server Applications

Allow pg_rewind to disable fsync operations (Michaël Paquier) §

Bug fixesFix pg_test_fsync to report accurate open_datasync durations on Windows

Server Applications

Fix pg_test_fsync to report accurate open_datasync durations on Windows (Laurenz Albe) § §

FeaturesWhen pg_dump emits data with INSERT commands rather than COPY, allow more than one data row to be included in each INSERT

Server Applications / pg_dump, pg_dumpall, pg_restore

When pg_dump emits data with INSERT commands rather than COPY, allow more than one data row to be included in each INSERT (Surafel Temesgen, David Rowley) § §

The option controlling this is --rows-per-insert.

FeaturesAllow pg_dump to emit INSERT ... ON CONFLICT DO NOTHING

Server Applications / pg_dump, pg_dumpall, pg_restore

Allow pg_dump to emit INSERT ... ON CONFLICT DO NOTHING (Surafel Temesgen) §

This avoids conflict failures during restore. The option is --on-conflict-do-nothing.

FeaturesDecouple the order of operations in a parallel pg_dump from the order used by a subsequent parallel pg_restore

Server Applications / pg_dump, pg_dumpall, pg_restore

Decouple the order of operations in a parallel pg_dump from the order used by a subsequent parallel pg_restore (Tom Lane) §

This allows pg_restore to perform more-fully-parallelized parallel restores, especially in cases where the original dump was not done in parallel. Scheduling of a parallel pg_dump is also somewhat improved.

FeaturesAllow the extra_float_digits setting to be specified for pg_dump and pg_dumpall

Server Applications / pg_dump, pg_dumpall, pg_restore

Allow the extra_float_digits setting to be specified for pg_dump and pg_dumpall (Andrew Dunstan) §

This is primarily useful for making dumps that are exactly comparable across different source server versions. It is not recommended for normal use, as it may result in loss of precision when the dump is restored.

FeaturesAdd --exclude-database option to pg_dumpall

Server Applications / pg_dump, pg_dumpall, pg_restore

Add --exclude-database option to pg_dumpall (Andrew Dunstan) §

FeaturesAdd CREATE ACCESS METHOD command to create new table types

Source Code

Add CREATE ACCESS METHOD command to create new table types (Andres Freund, Haribabu Kommi, Álvaro Herrera, Alexander Korotkov, Dmitry Dolgov) § § § § § § § § §

This enables the development of new table access methods, which can optimize storage for different use cases. The existing heap access method remains the default.

FeaturesAdd planner support function interfaces to improve optimizer estimates, inlining, and indexing for functions

Source Code

Add planner support function interfaces to improve optimizer estimates, inlining, and indexing for functions (Tom Lane) § § §

This allows extensions to create planner support functions that can provide function-specific selectivity, cost, and row-count estimates that can depend on the function's arguments. Support functions can also supply simplified representations and index conditions, greatly expanding optimization possibilities.

FeaturesSimplify renumbering manually-assigned OIDs, and establish a new project policy for management of such OIDs

Source Code

Simplify renumbering manually-assigned OIDs, and establish a new project policy for management of such OIDs (John Naylor, Tom Lane) § §

Patches that manually assign OIDs for new built-in objects (such as new functions) should now randomly choose OIDs in the range 8000—9999. At the end of a development cycle, the OIDs used by committed patches will be renumbered down to lower numbers, currently somewhere in the 4xxx range, using the new renumber_oids.pl script. This approach should greatly reduce the odds of OID collisions between different in-process patches.

While there is no specific policy reserving any OIDs for external use, it is recommended that forks and other projects needing private manually-assigned OIDs use numbers in the high 7xxx range. This will avoid conflicts with recently-merged patches, and it should be a long time before the core project reaches that range.

FeaturesBuild Cygwin binaries using dynamic instead of static libraries

Source Code

Build Cygwin binaries using dynamic instead of static libraries (Marco Atzeri) §

FeaturesRemove configure switch --disable-strong-random

Source Code

Remove configure switch --disable-strong-random (Michaël Paquier) §

A strong random-number source is now required.

Featuresprintf-family functions, as well as strerror and strerror_r, now behave uniformly across platforms within Postgres code

Source Code

printf-family functions, as well as strerror and strerror_r, now behave uniformly across platforms within Postgres code (Tom Lane) § § § §

Notably, printf understands %m everywhere; on Windows, strerror copes with Winsock error codes (it used to do so in backend but not frontend code); and strerror_r always follows the GNU return convention.

FeaturesRequire a C99-compliant compiler, and MSVC 2013 or later on Windows

Source Code

Require a C99-compliant compiler, and MSVC 2013 or later on Windows (Andres Freund) §

FeaturesUse pandoc, not lynx, for generating plain-text documentation output files

Source Code

Use pandoc, not lynx, for generating plain-text documentation output files (Peter Eisentraut) § §

This affects only the INSTALL file generated during make dist and the seldom-used plain-text postgres.txt output file. Pandoc produces better output than lynx and avoids some locale/encoding issues. Pandoc version 1.13 or later is required.

FeaturesSupport use of images in the PostgreSQL documentation

Source Code

Support use of images in the PostgreSQL documentation (Jürgen Purtz) §

FeaturesAllow ORDER BY sorts and LIMIT clauses to be pushed to postgres_fdw foreign servers in more cases

Additional Modules

Allow ORDER BY sorts and LIMIT clauses to be pushed to postgres_fdw foreign servers in more cases (Etsuro Fujita) § §

FeaturesImprove optimizer cost accounting for postgres_fdw queries

Additional Modules

Improve optimizer cost accounting for postgres_fdw queries (Etsuro Fujita) § § §

FeaturesProperly honor WITH CHECK OPTION on views that reference postgres_fdw tables

Additional Modules

Properly honor WITH CHECK OPTION on views that reference postgres_fdw tables (Etsuro Fujita) §

While CHECK OPTIONs on postgres_fdw tables are ignored (because the reference is foreign), views on such tables are considered local, so this change enforces CHECK OPTIONs on them. Previously, only INSERTs and UPDATEs with RETURNING clauses that returned CHECK OPTION values were validated.

FeaturesAllow pg_stat_statements_reset() to be more granular

Additional Modules

Allow pg_stat_statements_reset() to be more granular (Haribabu Kommi, Amit Kapila) §

The function now allows reset of statistics for specific databases, users, and queries.

FeaturesAllow control of the auto_explain log level

Additional Modules

Allow control of the auto_explain log level (Tom Dunstan, Andrew Dunstan) §

The default is LOG.

FeaturesUpdate unaccent rules with new punctuation and symbols

Additional Modules

Update unaccent rules with new punctuation and symbols (Hugh Ranalli, Michaël Paquier) §

FeaturesAllow unaccent to handle some accents encoded as combining characters

Additional Modules

Allow unaccent to handle some accents encoded as combining characters (Hugh Ranalli) §

FeaturesAllow unaccent to remove accents from Greek characters

Additional Modules

Allow unaccent to remove accents from Greek characters (Tasos Maschalidis) §

FeaturesAdd a parameter to amcheck's bt_index_parent_check() function to check each index tuple from the root of the tree

Additional Modules

Add a parameter to amcheck's bt_index_parent_check() function to check each index tuple from the root of the tree (Peter Geoghegan) §

FeaturesImprove oid2name and vacuumlo option handling to match other commands

Additional Modules

Improve oid2name and vacuumlo option handling to match other commands (Tatsuro Yamada) § §

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.