↑↓ 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 version comparison

Compare PostgreSQL major or minor versions to explore new features, bug fixes, and CVE security records.

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.

Major upgrade

17.11→18.6

2026-08-13 2026-08-13

Export JSON
297changesFeatures, fixes, improvements
6releasesGrouped by release
0CVEsDistinct vulnerability IDs

17.11 SupportedSupport ends 2029-11-08

18.6 SupportedSupport ends 2030-11-14

PostgreSQL 18.6

Migration and compatibility

A dump/restore is not required for those running 18.X.

However, the first three security entries below describe configuration adjustments and data cleanups that you may need to make after updating.

Also, if you have any GIN indexes, see the changelog entry below about possibly-corrupt reltuples values for their tables.

Also, if you use contrib/btree_gist or contrib/ltree, you may need to reindex indexes made with those extensions; see the relevant entries below.

Also, if you are upgrading from a version earlier than 18.2, see Section E.4.

ImprovementsEnsure that parallel GIN index builds update the table's pg_class.reltuples value correctly

Changes

Ensure that parallel GIN index builds update the table's pg_class.reltuples value correctly (Jan Nidzwetzki, Tomas Vondra) §

A parallel worker could report an uninitialized value for the number of rows it processed, leading to a bogus value for reltuples, even Infinity or NaN. Such values could lead to subsequent autovacuum and autoanalyze operations never deciding that the table needs to be processed. If so, the situation will not self-heal. A manual ANALYZE command, or creation of another index, will be needed to reset reltuples to the correct value. If you have any tables with GIN indexes, it's recommended to check to see if their reltuples entries look sane. A query such as this may be helpful:

SELECT DISTINCT t.oid::regclass, t.reltuples
FROM pg_class t
  JOIN pg_index i ON t.oid = i.indrelid
  JOIN pg_class ic ON i.indexrelid = ic.oid
WHERE t.relhasindex AND ic.relam = 2742;
ImprovementsCorrectly update foreign-data-wrapper state in a ModifyTable plan node after pruning result relations

Changes

Correctly update foreign-data-wrapper state in a ModifyTable plan node after pruning result relations (Ayush Tiwari, Rafia Sabih) § §

Previously, if run-time partition pruning determined that some partitions of a partitioned target table need not be scanned and the table had any foreign-table partitions, a crash or erroneous behavior was likely.

Bug fixesFix missed concurrent update in UPDATE with RETURNING OLD on a table that has a BEFORE UPDATE trigger

Changes

Fix missed concurrent update in UPDATE with RETURNING OLD on a table that has a BEFORE UPDATE trigger (Dean Rasheed) §

If the target row was concurrently updated, then at isolation level READ COMMITTED any OLD values in RETURNING should reflect the updated row. But stale values were returned if there was a trigger (although the trigger itself, and the final output row, saw the correct values).

Bug fixesFix hash join performance issue when there are multiple join keys and many NULL values

Changes

Fix hash join performance issue when there are multiple join keys and many NULL values (David Rowley) §

Null-keyed tuples should not get inserted into the hash table, since they will never match any other tuples. The code got this wrong if the null was in a non-last join column, bloating the hash table quite a lot if many inputs contain nulls.

Bug fixesFix parsing of parenthesized OLD/NEW in RETURNING expressions

Changes

Fix parsing of parenthesized OLD/NEW in RETURNING expressions (Marko Grujic) §

Expressions such as (old).colname and (old).* were mis-handled, effectively converting them to NEW references.

ImprovementsClean up PlaceHolderVars more thoroughly during join removal

Changes

Clean up PlaceHolderVars more thoroughly during join removal (Richard Guo, Arne Roland) § §

This fix corrects various edge cases that could trip assertions or result in incorrect plans.

ImprovementsAvoid pushing WHERE clauses down past a grouping step that has a different equivalence rule

Changes

Avoid pushing WHERE clauses down past a grouping step that has a different equivalence rule (Richard Guo) §

A test on a grouping column that is grouped by a nondeterministic collation is safe to push down only if it is a comparison using that same collation. Otherwise it might filter some rows the grouping would have merged.

ImprovementsAvoid “cache lookup failed for collation 0” error when planner looks up statistics for a column of type "char"

Changes

Avoid “cache lookup failed for collation 0” error when planner looks up statistics for a column of type "char" (Feng Wu) §

ImprovementsPrevent setting NO INHERIT on partitioned NOT NULL constraints via ALTER CONSTRAINT

Changes

Prevent setting NO INHERIT on partitioned NOT NULL constraints via ALTER CONSTRAINT (Andreas Karlsson) §

NOT NULL constraints on partitioned tables are supposed to be inherited by all partitions, and therefore must not be marked NO INHERIT. This rule was correctly enforced by constraint creation, but not by ALTER TABLE ... ALTER CONSTRAINT.

Bug fixesFix LIKE matching with nondeterministic collations and backslashes

Changes

Fix LIKE matching with nondeterministic collations and backslashes (Nitin Motiani, Tom Lane) § §

When using a nondeterministic collation, LIKE mishandled an escaped backslash (\\), treating it as effectively not there. It also did the wrong thing with a leading backslash preceding an ordinary character; in that case the backslash should be effectively ignored, but it caused the ordinary character to be matched exactly rather than allowing the nondeterministic collation to decide if there's a match.

Bug fixesFix LIKE/regex optimization for indexscan with exact-match pattern

Changes

Fix LIKE/regex optimization for indexscan with exact-match pattern (Jelte Fennema-Nio) §

Refactoring for LIKE with non-deterministic collations accidentally broke the optimization for converting a LIKE or regex exact-match pattern to an equality index condition when the index collation doesn't match the expression collation. Among other things, that made psql's \d tablename command much slower.

Bug fixesFix matching of localized month/day names in to_date()

Changes

Fix matching of localized month/day names in to_date() (Heikki Linnakangas) § §

The matching logic misbehaved in cases where case-folding changes the byte length of the string.

Related records (4)

“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 fixesCorrect case-folding rules for Greek final sigma

Changes

Correct case-folding rules for Greek final sigma (Jeff Davis) §

If the string is preceded only by Case Ignorable characters, don't consider it to be a final sigma. This only affects the built-in pg_unicode_fast locale.

ImprovementsReject out-of-range timestamp shift values in uuidv7()

Changes

Reject out-of-range timestamp shift values in uuidv7() (Baji Shaik) §

The shift value must not be so large as to produce a timestamp out of the range that a v7 UUID can represent. Previously, a garbage UUID value was produced.

ImprovementsPrevent “no empty local buffer available” errors during temporary table access

Changes

Prevent “no empty local buffer available” errors during temporary table access (Melanie Plageman) §

Limit the number of local buffers that the read streaming mechanism is allowed to use. Previously, a large value of effective_io_concurrency could allow a single stream to use all the buffers, resulting in failure.

ImprovementsRestore full use of shared buffer pool in VACUUM's wraparound failsafe mode

Changes

Restore full use of shared buffer pool in VACUUM's wraparound failsafe mode (Melanie Plageman) § §

An ordinary VACUUM is limited to use just a few shared buffers, so as not to impinge too much on other processing. However, in failsafe mode we want to reclaim transaction IDs as quickly as possible, so that limit is supposed to be abandoned to allow vacuuming to proceed as fast as possible. This behavior was accidentally broken during refactoring in v18; restore it.

Bug fixesFix JIT-compiled tuple deconstruction code to account correctly for virtual generated columns

Changes

Fix JIT-compiled tuple deconstruction code to account correctly for virtual generated columns (David Rowley) §

ImprovementsPrevent accepting hot-standby connections before WAL replay has reached a consistent database state

Changes

Prevent accepting hot-standby connections before WAL replay has reached a consistent database state (Nikhil Sontakke) §

ImprovementsAvoid recording incorrect I/O operation statistics after a failed read or write

Changes

Avoid recording incorrect I/O operation statistics after a failed read or write (Bertrand Drouvot) §

ImprovementsImprove libpq's handling of out-of-memory conditions

Changes

Improve libpq's handling of out-of-memory conditions (Anthonin Bonnefoy) §

Bug fixesFix libpq's trace facility to print new-style BackendKeyData and CancelRequest messages correctly

Changes

Fix libpq's trace facility to print new-style BackendKeyData and CancelRequest messages correctly (Anthonin Bonnefoy) §

Bug fixesFix null-pointer crash in ecpg compiler

Changes

Fix null-pointer crash in ecpg compiler (Jehan-Guillaume de Rorthais) §

ecpg failed on a DECLARE section containing a union nested inside a struct.

Bug fixesFix issues with deferred errors in pipeline mode in psql

Changes

Fix issues with deferred errors in pipeline mode in psql (Michael Paquier) §

psql could get stuck or suffer an assertion failure in some scenarios where the server reports an error in response to a Sync message, such as a deferred constraint violation.

ImprovementsEnforce the intended upper limit for psql's special variable WATCH_INTERVAL

Changes

Enforce the intended upper limit for psql's special variable WATCH_INTERVAL (Sven Klemm, Daniel Gustafsson) §

If a too-large value was given, psql reported an error but applied the setting anyway.

Bug fixesFix inconsistent behavior of pg_restore with --statistics or --statistics-only

Changes

Fix inconsistent behavior of pg_restore with --statistics or --statistics-only (Chao Li, Michael Paquier) § §

When combined with other selective-restore options such as --schema, these options failed to restore the expected items, unlike pg_dump with similar options.

Bug fixesFix vacuumdb --missing-stats-only to ignore partitioned expression indexes

Changes

Fix vacuumdb --missing-stats-only to ignore partitioned expression indexes (Baji Shaik) §

Previously, vacuumdb would always attempt to ANALYZE the partitioned table, accomplishing nothing since statistics are never created for partitioned indexes, only for their leaf indexes.

Bug fixesIn contrib/amcheck, fix failure to report corruption of a btree metapage's allequalimage flag

Changes

In contrib/amcheck, fix failure to report corruption of a btree metapage's allequalimage flag (Chao Li) §

Bug fixesIn contrib/amcheck, fix query-lifespan memory leak while verifying a GIN index

Changes

In contrib/amcheck, fix query-lifespan memory leak while verifying a GIN index (Kirill Reshke) §

Bug fixesIn contrib/btree_gist, fix sorting of bit/varbit entries during GiST index construction

Changes

In contrib/btree_gist, fix sorting of bit/varbit entries during GiST index construction (Tom Lane) §

Values of bit types were sorted as though they were byteas, which did not cause any obvious failure but would result in an inefficient index, since the types' representations are different. It is recommended to reindex btree_gist indexes on bit columns after installing this update.

ImprovementsIn contrib/dblink and contrib/postgres_fdw, ensure that a user-mapping setting for use_scram_passthrough overrides one for a foreign server

Changes

In contrib/dblink and contrib/postgres_fdw, ensure that a user-mapping setting for use_scram_passthrough overrides one for a foreign server (Matheus Alcantara) § §

Previously the precedence went the other way, but that is inconsistent with the behavior of other foreign-table options.

ImprovementsReject setting use_scram_passthrough on contrib/dblink foreign-data wrappers

Changes

Reject setting use_scram_passthrough on contrib/dblink foreign-data wrappers (Matheus Alcantara) §

This option is only meaningful on foreign servers and user mappings, but dblink incorrectly allowed it at the FDW level as well (and then ignored it).

Bug fixesFix out-of-bounds access in contrib/pg_prewarm's autoprewarm worker

Changes

Fix out-of-bounds access in contrib/pg_prewarm's autoprewarm worker (Matheus Alcantara) §

The code tried to fetch a value from one past the end of an array, risking a segfault.

PostgreSQL 18.4

Migration and compatibility

A dump/restore is not required for those running 18.X.

However, if you are upgrading from a version earlier than 18.2, see Section E.4.

SecurityDetect faulty input when restoring attribute MCV statistics

Changes

Detect faulty input when restoring attribute MCV statistics (Michael Paquier) §

The statistics restore functions were insufficiently careful about validating most-common-value statistics, and would accept values that could crash the planner later on.

The PostgreSQL Project thanks Jeroen Gui for reporting this problem. (CVE-2026-6575)

ImprovementsImprove planner's matching of partition key columns to sub-query outputs

Changes

Improve planner's matching of partition key columns to sub-query outputs (Richard Guo) §

Strip no-op PlaceHolderVars from operands before comparing them to partition keys. This change enables partition pruning to succeed in some cases where it previously failed to recognize that a partition need not be scanned.

Bug fixesFix self-join removal to handle join clauses that are bare boolean columns, e.g. ON t1.boolcol

Changes

Fix self-join removal to handle join clauses that are bare boolean columns, e.g. ON t1.boolcol (Andrei Lepikhov, Tender Wang, Alexander Korotkov) §

Previously such a case led to a “no relation entry for relid N” error.

Bug fixesFix UPDATE/DELETE ... WHERE CURRENT OF to work on tables with virtual generated columns

Changes

Fix UPDATE/DELETE ... WHERE CURRENT OF to work on tables with virtual generated columns (Satyanarayana Narlapuram, Dean Rasheed) §

Bug fixesFix expansion of virtual generated columns in EXCLUDED column references in INSERT ... ON CONFLICT

Changes

Fix expansion of virtual generated columns in EXCLUDED column references in INSERT ... ON CONFLICT (Satyanarayana Narlapuram, Dean Rasheed) §

Bug fixesFix spurious “indexes on virtual generated columns are not supported” errors

Changes

Fix spurious “indexes on virtual generated columns are not supported” errors (Robert Haas) §

Creation of an expression index could sometimes incorrectly report this error.

Bug fixesFix ALTER TABLE ... SET NOT NULL to invoke object-access hook functions only after completing the catalog change

Changes

Fix ALTER TABLE ... SET NOT NULL to invoke object-access hook functions only after completing the catalog change (Artur Zakirov) §

Bug fixesFix loss of deferrability of foreign-key triggers

Changes

Fix loss of deferrability of foreign-key triggers (Yasuo Honda) §

Previously, a foreign key defined as DEFERRABLE INITIALLY DEFERRED would behave as NOT DEFERRABLE after being set to NOT ENFORCED status and then back to ENFORCED.

If you have a foreign key with this problem, it can be repaired (after installing this update) by again setting it to NOT ENFORCED and then back to ENFORCED.

Bug fixesFix WITHOUT OVERLAPS to allow domains

Changes

Fix WITHOUT OVERLAPS to allow domains (Jian He) §

UNIQUE/PRIMARY KEY ... WITHOUT OVERLAPS requires the no-overlap column to be a range or multirange, but it should allow a domain over such a type too.

ImprovementsMake the pg_aios system view's pid column show NULL not 0 when an entry has no owning process

Changes

Make the pg_aios system view's pid column show NULL not 0 when an entry has no owning process (ChangAo Chen) §

Bug fixesFix under-allocation of shared memory used for parallel btree index scans

Changes

Fix under-allocation of shared memory used for parallel btree index scans (Siddharth Kothari) §

In edge cases this could result in a server crash.

Bug fixesFix array overrun when too many EXPLAIN extension options are installed

Changes

Fix array overrun when too many EXPLAIN extension options are installed (Joel Jacobson) §

ImprovementsCorrectly display join alias Vars that are used in GROUP BY

Changes

Correctly display join alias Vars that are used in GROUP BY (Tom Lane) §

In views containing queries like SELECT ... t1 LEFT JOIN t2 USING (x) GROUP BY x, the GROUP BY clause could be displayed incorrectly by deparsing, leading to dump/restore failures. Failures occurred only if t1.x and t2.x were not of identical data types and t1.x was the side that required an implicit coercion.

ImprovementsHarden tar-file parsing logic against archives it can't handle

Changes

Harden tar-file parsing logic against archives it can't handle (Tom Lane) §

The tar-file reading code used in pg_basebackup and pg_verifybackup failed to verify that the input is a tar file at all, let alone that it fits into the subset of valid tar files that we can handle. This isn't a problem for the normal scenario where the input file was generated by PostgreSQL code, but it can be an issue if the input has been generated by some other tar program.

ImprovementsIn pg_dump, preserve NO INHERIT property of NOT NULL constraints

Changes

In pg_dump, preserve NO INHERIT property of NOT NULL constraints (Jian He) §

Some cases missed printing the NO INHERIT clause.

Bug fixesFix mis-structured output from contrib/pg_overexplain's RANGE_TABLE option

Changes

Fix mis-structured output from contrib/pg_overexplain's RANGE_TABLE option (Satyanarayana Narlapuram) §

Some fields were misplaced in JSON, YAML, and XML formats, resulting in structurally invalid output.

PostgreSQL 18.3

Migration and compatibility

A dump/restore is not required for those running 18.X.

However, if you are upgrading from a version earlier than 18.2, see Section E.4.

SecurityFix oversight in the fix for CVE-2026-2007

Changes

Fix oversight in the fix for CVE-2026-2007 (Zsolt Parragi) §

If the “bounds” array needed to be expanded, because the input contained more trigrams than the initial guess, generate_trgm_only didn't return the modified array pointer to its caller. That would lead to incorrect output from strict_word_similarity() and related functions, or in rare cases a crash. The faulty code is reached if the input string becomes longer when it's converted to lower case. The only known instances of that occur when an ICU locale is used with certain single-byte encodings.

Bug fixesFix the volatility marking of json_strip_nulls() and jsonb_strip_nulls()

Changes

Fix the volatility marking of json_strip_nulls() and jsonb_strip_nulls() (Andrew Dunstan) §

These functions have always been considered immutable, but refactoring in version 18 accidentally marked them stable instead. That prevents their use in index expressions and could cause unnecessary repeat evaluations in queries. This fix corrects the marking in newly-initialized database clusters (including clusters that are pg_upgrade'd to 18.3 or later). However it will not help existing clusters made using 18.0 through 18.2.

If this mistake affects your usage of these functions, the recommended fix for an existing cluster is a manual catalog update. As superuser, perform

UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');

in each affected database. Update template0 and template1 as well, so that databases made in future will have the fix.

ImprovementsAvoid name collisions between user-written constraints and automatically-named NOT NULL constraints

Changes

Avoid name collisions between user-written constraints and automatically-named NOT NULL constraints (Laurenz Albe) §

As of version 18, NOT NULL constraints have full-fledged pg_constraint entries, and therefore require names. The logic for choosing a name for an unnamed NOT NULL constraint failed to avoid conflicts with user-written constraints elsewhere in the same CREATE TABLE statement.

PostgreSQL 18.2

Migration and compatibility

A dump/restore is not required for those running 18.X.

However, if you have any indexes on ltree columns, it may be necessary to reindex them after updating. See the sixth changelog entry below.

SecurityHarden contrib/pg_trgm against changes in string lowercasing behavior

Changes

Harden contrib/pg_trgm against changes in string lowercasing behavior (Heikki Linnakangas) § §

Fix potential buffer overruns arising from the fact that in some locales lower-casing a string can produce more characters (not bytes) than were in the original. That behavior is new in version 18, and so is the bug.

The PostgreSQL Project thanks Heikki Linnakangas for reporting this problem. (CVE-2026-2007)

Bug fixesFix inconsistent case-insensitive matching in contrib/ltree

Changes

Fix inconsistent case-insensitive matching in contrib/ltree (Jeff Davis) § §

Index-related routines in ltree used a different implementation of case-folding than the primary operators did. Their behavior was equivalent only if the default collation provider was libc and the encoding was single-byte.

To fix, change the code to use case-folding with the database's default collation. This change will require reindexing indexes on ltree columns (regardless of the index access method) unless the database uses libc as collation provider and its encoding is single-byte. Without that, searches of such indexes will fail to locate relevant entries.

ImprovementsWhen using ALTER TABLE ... ADD CONSTRAINT to add a not-null constraint with an explicit name, if the column is already marked NOT NULL, require that the provided name match the existing constraint name

Changes

When using ALTER TABLE ... ADD CONSTRAINT to add a not-null constraint with an explicit name, if the column is already marked NOT NULL, require that the provided name match the existing constraint name (Álvaro Herrera, Srinath Reddy Sadipiralla) §

Bug fixesFix incorrect pruning of rowmarks belonging to non-relation rangetable entries, such as subqueries

Changes

Fix incorrect pruning of rowmarks belonging to non-relation rangetable entries, such as subqueries (Dean Rasheed) §

This led to incorrect results if a proposed row update needed to be modified by EvalPlanQual rechecking, as could happen if there was a concurrent update to that row.

Bug fixesFix expression evaluation bug for a sub-select within an array subscript

Changes

Fix expression evaluation bug for a sub-select within an array subscript (Andres Freund) §

Bug fixesFix text substring search for non-deterministic collations

Changes

Fix text substring search for non-deterministic collations (Laurenz Albe) §

When using a non-deterministic collation, we failed to detect a match occurring at the very end of the searched string.

Bug fixesFix planner error with set-returning functions and grouping sets

Changes

Fix planner error with set-returning functions and grouping sets (Richard Guo) §

When constructing a ProjectSet plan node, the planner failed to detect that subexpressions involving grouping expressions were already computed by the input plan. This led to inefficient plans or errors such as “variable not found in subplan target list”.

ImprovementsAvoid incorrect optimization when a subquery's grouping clause contains a volatile or set-returning function

Changes

Avoid incorrect optimization when a subquery's grouping clause contains a volatile or set-returning function (Richard Guo) §

The planner was willing to push down outer-query restrictions referencing such a grouping column, leading to incorrect behavior due to multiple evaluation of a volatile function, or errors caused by introduction of a set-returning function into the subquery's WHERE/HAVING clauses.

ImprovementsLook through PlaceHolderVar nodes when searching for statistics about an expression

Changes

Look through PlaceHolderVar nodes when searching for statistics about an expression (Richard Guo) §

This change allows the planner to find relevant statistics about expressions pulled up from subqueries or used in GROUP BY, avoiding falling back to a default estimate. (Arguably we should adjust any found statistics to account for an increased probability of the value being NULL, but we've never done the equivalent thing for plain Vars either.) While this restriction is old, changes in PostgreSQL version 18 made PlaceHolderVars more common than before, so make the change to avoid plan regressions in affected cases.

ImprovementsLook through no-op PlaceHolderVar nodes when matching expressions to indexes

Changes

Look through no-op PlaceHolderVar nodes when matching expressions to indexes (Richard Guo) §

Because PostgreSQL version 18 uses PlaceHolderVars in more cases than before, some queries that formerly could use an index failed to do so. Add logic to prevent that regression.

Bug fixesFix planner's conversion of OR clauses to ScalarArrayOp index conditions

Changes

Fix planner's conversion of OR clauses to ScalarArrayOp index conditions (Tender Wang, Tom Lane) §

The code did not handle RelabelType nodes correctly, and could generate invalid expressions or fail to perform a valid conversion.

Bug fixesUse the correct ordering function in parallel GIN index builds

Changes

Use the correct ordering function in parallel GIN index builds (Tomas Vondra) §

The parallel code used the default ordering operator (which is determined by the column data type's btree opclass), whereas it should use the ordering function specified by the GIN opclass, if any. This led to a failure if the data type has no btree opclass, or to an invalid index if the opclass specifies an ordering function that doesn't agree with the btree opclass.

ImprovementsConsider grouping expressions when computing a query ID hash

Changes

Consider grouping expressions when computing a query ID hash (Jian He) §

Previously, two queries that were the same except in GROUP BY expressions would be merged by contrib/pg_stat_statements and other users of query IDs.

Bug fixesFix race condition in async I/O code

Changes

Fix race condition in async I/O code (Andres Freund) §

It was possible for the result code of an asynchronous I/O operation to be overwritten before it was fetched.

ImprovementsAvoid failure of NUMA status views when a page has been swapped out

Changes

Avoid failure of NUMA status views when a page has been swapped out (Tomas Vondra) §

ImprovementsAvoid “operation not permitted” errors when querying NUMA page status with older libnuma versions

Changes

Avoid “operation not permitted” errors when querying NUMA page status with older libnuma versions (Tomas Vondra) §

Bug fixesFix aarch64-specific code to build with old (RHEL7-era) system header files

Changes

Fix aarch64-specific code to build with old (RHEL7-era) system header files (Tom Lane) § §

Bug fixesFix incorrect configure probe for io_uring_queue_init_mem()

Changes

Fix incorrect configure probe for io_uring_queue_init_mem() (Masahiko Sawada) §

This error resulted in failure to optimize async I/O buffer allocations in autotools-based builds, though the code did work when building with meson. The main impact of the omission was slower-than-necessary backend process exits.

Bug fixesFix psql's tab completion for VACUUM option values

Changes

Fix psql's tab completion for VACUUM option values (Yugo Nagata) §

ImprovementsIn psql command prompts, do not show a value for %P (pipeline status) when there is no server connection

Changes

In psql command prompts, do not show a value for %P (pipeline status) when there is no server connection (Chao Li) §

This makes %P act like other prompt escape sequences whose values depend on the active connection.

Bug fixesFix pg_dump's logic for collecting sequence values

Changes

Fix pg_dump's logic for collecting sequence values (Nathan Bossart) § §

pg_dump failed if a sequence was dropped concurrently with the dump, even if the sequence was not among the database objects to be dumped. Also, if the calling user lacks privileges to read a sequence's value, pg_dump emitted incorrect values rather than failing as expected.

Bug fixesFix potentially-incorrect quoting of oauth_validator_libraries values by pg_dump

Changes

Fix potentially-incorrect quoting of oauth_validator_libraries values by pg_dump (ChangAo Chen) §

pg_dump applied the wrong quoting rule if it needed to dump a value of this setting.

Bug fixesFix excessive memory allocation in contrib/pg_buffercache

Changes

Fix excessive memory allocation in contrib/pg_buffercache (David Geier) §

The code allocated twice as much memory as it needed for NUMA page status.

Bug fixesAvoid crash in contrib/pg_stat_statements when an IN list contains both constants and non-constant expressions

Changes

Avoid crash in contrib/pg_stat_statements when an IN list contains both constants and non-constant expressions (Sami Imseih) §

PostgreSQL 18.1

Migration and compatibility

A dump/restore is not required for those running 18.X.

ImprovementsAvoid incorrect optimization of variable-free HAVING clauses with grouping sets

Changes

Avoid incorrect optimization of variable-free HAVING clauses with grouping sets (Richard Guo) § §

ImprovementsDo not use parallelism in hash right semi joins

Changes

Do not use parallelism in hash right semi joins (Richard Guo) §

The case does not work reliably due to a race condition in updating the join's shared hash table.

ImprovementsAvoid possible division-by-zero when creating ordered-append plans

Changes

Avoid possible division-by-zero when creating ordered-append plans (Richard Guo) §

This mistake could result in incorrect selection of the cheapest path, or in an assertion failure in debug builds.

Bug fixesFix planner failure with index types that can do ordered access but not index-only scans

Changes

Fix planner failure with index types that can do ordered access but not index-only scans (Maxime Schoemans) §

This oversight resulted in errors like “no data returned for index-only scan”. The case does not arise with any in-core index type, but some extensions encountered the problem.

ImprovementsAvoid possible out-of-memory or “invalid memory alloc request size” failures during parallel GIN index build

Changes

Avoid possible out-of-memory or “invalid memory alloc request size” failures during parallel GIN index build (Tomas Vondra) §

Bug fixesFix rare crash when processing hashed GROUPING SETS queries

Changes

Fix rare crash when processing hashed GROUPING SETS queries (David Rowley) §

Bug fixesRepair faulty hash-table-size-choosing logic in hash joins

Changes

Repair faulty hash-table-size-choosing logic in hash joins (Tomas Vondra) §

Hash joins sometimes used more memory than intended, or failed to divide it in an efficient way.

ImprovementsImprove relation lookup logic in statistics manipulation functions

Changes

Improve relation lookup logic in statistics manipulation functions (Nathan Bossart) § §

Fix pg_restore_relation_stats(), pg_clear_relation_stats(), pg_restore_attribute_stats(), and pg_clear_attribute_stats() to check privileges before acquiring lock on the target relation rather than after.

Bug fixesFix crash during EvalPlanQual rechecks on partitioned tables

Changes

Fix crash during EvalPlanQual rechecks on partitioned tables (David Rowley, Amit Langote) §

ImprovementsPrevent setting a column as identity if it has a not-null constraint but the constraint is marked as invalid

Changes

Prevent setting a column as identity if it has a not-null constraint but the constraint is marked as invalid (Jian He) §

Identity columns must be not-null, but the check for that missed this edge case.

ImprovementsRe-establish special case for C collation in locale setup

Changes

Re-establish special case for C collation in locale setup (Jeff Davis) §

This fixes a regression in access to shared catalogs early in backend startup, before a database has been selected. It is not known to be a problem for any core PostgreSQL code, but some extensions were broken.

Bug fixesIn contrib/pg_stat_statements, avoid crash when two or more constants are marked as having the same location in the SQL statement text

Changes

In contrib/pg_stat_statements, avoid crash when two or more constants are marked as having the same location in the SQL statement text (Sami Imseih, Dmitry Dolgov) §

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

CompatibilityChange initdb default to enable data checksums

Compatibility

Change initdb default to enable data checksums (Greg Sabino Mullane) §

Checksums can be disabled with the new initdb option --no-data-checksums. pg_upgrade requires matching cluster checksum settings, so this new option can be useful to upgrade non-checksum old clusters.

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.

CompatibilityChange time zone abbreviation handling

Compatibility

Change time zone abbreviation handling (Tom Lane) §

The system will now favor the current session's time zone abbreviations before checking the server variable timezone_abbreviations. Previously timezone_abbreviations was checked first.

CompatibilityDeprecate MD5 password authentication

Compatibility

Deprecate MD5 password authentication (Nathan Bossart) §

Support for MD5 passwords will be removed in a future major version release. CREATE ROLE and ALTER ROLE now emit deprecation warnings when setting MD5 passwords. These warnings can be disabled by setting the md5_password_warnings parameter to off.

CompatibilityChange VACUUM and ANALYZE to process the inheritance children of a parent

Compatibility

Change VACUUM and ANALYZE to process the inheritance children of a parent (Michael Harris) §

The previous behavior can be performed by using the new ONLY option.

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.

CompatibilityPrevent COPY FROM from treating \. as an end-of-file marker when reading CSV files

Compatibility

Prevent COPY FROM from treating \. as an end-of-file marker when reading CSV files (Daniel Vérité, Tom Lane) § §

psql will still treat \. as an end-of-file marker when reading CSV files from STDIN. Older psql clients connecting to PostgreSQL 18 servers might experience \copy problems. This release also enforces that \. must appear alone on a line.

CompatibilityDisallow unlogged partitioned tables

Compatibility

Disallow unlogged partitioned tables (Michael Paquier) §

Previously ALTER TABLE SET [UN]LOGGED did nothing, and the creation of an unlogged partitioned table did not cause its children to be unlogged.

CompatibilityExecute AFTER triggers as the role that was active when trigger events were queued

Compatibility

Execute AFTER triggers as the role that was active when trigger events were queued (Laurenz Albe) §

Previously such triggers were run as the role that was active at trigger execution time (e.g., at COMMIT). This is significant for cases where the role is changed between queue time and transaction commit.

CompatibilityRemove non-functional support for rule privileges in GRANT/REVOKE

Compatibility

Remove non-functional support for rule privileges in GRANT/REVOKE (Fujii Masao) §

These have been non-functional since PostgreSQL 8.2.

CompatibilityRemove column pg_backend_memory_contexts.parent

Compatibility

Remove column pg_backend_memory_contexts.parent (Melih Mutlu) §

This is no longer needed since pg_backend_memory_contexts.path was added.

CompatibilityChange pg_backend_memory_contexts.level and pg_log_backend_memory_contexts() to be one-based

Compatibility

Change pg_backend_memory_contexts.level and pg_log_backend_memory_contexts() to be one-based (Melih Mutlu, Atsushi Torikoshi, David Rowley, Fujii Masao) § § §

These were previously zero-based.

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.

CompatibilityChange full text search to use the default collation provider of the cluster to read configuration files and dictionaries, rather than always using libc

Compatibility

Change full text search to use the default collation provider of the cluster to read configuration files and dictionaries, rather than always using libc (Peter Eisentraut) §

Clusters that default to non-libc collation providers (e.g., ICU, builtin) that behave differently than libc for characters processed by LC_CTYPE could observe changes in behavior of some full-text search functions, as well as the pg_trgm extension. When upgrading such clusters using pg_upgrade, it is recommended to reindex all indexes related to full-text search and pg_trgm after the upgrade.

FeaturesAutomatically remove some unnecessary table self-joins

Server / Optimizer

Automatically remove some unnecessary table self-joins (Andrey Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina) §

This optimization can be disabled using server variable enable_self_join_elimination.

FeaturesConvert some IN (VALUES ...) to x = ANY ... for better optimizer statistics

Server / Optimizer

Convert some IN (VALUES ...) to x = ANY ... for better optimizer statistics (Alena Rybakina, Andrei Lepikhov) §

PerformanceAllow transforming OR-clauses to arrays for faster index processing

Server / Optimizer

Allow transforming OR-clauses to arrays for faster index processing (Alexander Korotkov, Andrey Lepikhov) §

PerformanceSpeed up the processing of INTERSECT, EXCEPT, window aggregates, and view column aliases

Server / Optimizer

Speed up the processing of INTERSECT, EXCEPT, window aggregates, and view column aliases (Tom Lane, David Rowley) § § § §

FeaturesAllow the keys of SELECT DISTINCT to be internally reordered to avoid sorting

Server / Optimizer

Allow the keys of SELECT DISTINCT to be internally reordered to avoid sorting (Richard Guo) §

This optimization can be disabled using enable_distinct_reordering.

FeaturesIgnore GROUP BY columns that are functionally dependent on other columns

Server / Optimizer

Ignore GROUP BY columns that are functionally dependent on other columns (Zhang Mingli, Jian He, David Rowley) §

If a GROUP BY clause includes all columns of a unique index, as well as other columns of the same table, those other columns are redundant and can be dropped from the grouping. This was already true for non-deferred primary keys.

FeaturesAllow some HAVING clauses on GROUPING SETS to be pushed to WHERE clauses

Server / Optimizer

Allow some HAVING clauses on GROUPING SETS to be pushed to WHERE clauses (Richard Guo) § § § §

This allows earlier row filtering. This release also fixes some GROUPING SETS queries that used to return incorrect results.

FeaturesImprove row estimates for generate_series() using numeric and timestamp values

Server / Optimizer

Improve row estimates for generate_series() using numeric and timestamp values (David Rowley, Song Jinzhou) § §

FeaturesAllow the optimizer to use Right Semi Join plans

Server / Optimizer

Allow the optimizer to use Right Semi Join plans (Richard Guo) §

Semi-joins are used when needing to find if there is at least one match.

FeaturesAllow merge joins to use incremental sorts

Server / Optimizer

Allow merge joins to use incremental sorts (Richard Guo) §

FeaturesImprove the efficiency of planning queries accessing many partitions

Server / Optimizer

Improve the efficiency of planning queries accessing many partitions (Ashutosh Bapat, Yuya Watari, David Rowley) § §

FeaturesAllow partitionwise joins in more cases, and reduce its memory usage

Server / Optimizer

Allow partitionwise joins in more cases, and reduce its memory usage (Richard Guo, Tom Lane, Ashutosh Bapat) § §

FeaturesImprove cost estimates of partition queries

Server / Optimizer

Improve cost estimates of partition queries (Nikita Malakhov, Andrei Lepikhov) §

FeaturesImprove SQL-language function plan caching

Server / Optimizer

Improve SQL-language function plan caching (Alexander Pyhalov, Tom Lane) § §

FeaturesImprove handling of disabled optimizer features

Server / Optimizer

Improve handling of disabled optimizer features (Robert Haas) §

FeaturesAllow skip scans of btree indexes

Server / Indexes

Allow skip scans of btree indexes (Peter Geoghegan) § §

This allows multi-column btree indexes to be used in more cases such as when there are no restrictions on the first or early indexed columns (or there are non-equality ones), and there are useful restrictions on later indexed columns.

FeaturesAllow non-btree unique indexes to be used as partition keys and in materialized views

Server / Indexes

Allow non-btree unique indexes to be used as partition keys and in materialized views (Mark Dilger) § §

The index type must still support equality.

FeaturesAllow GIN indexes to be created in parallel

Server / Indexes

Allow GIN indexes to be created in parallel (Tomas Vondra, Matthias van de Meent) §

FeaturesAllow values to be sorted to speed range-type GiST and btree index builds

Server / Indexes

Allow values to be sorted to speed range-type GiST and btree index builds (Bernd Helmle) §

PerformanceAdd an asynchronous I/O subsystem

Server / General Performance

Add an asynchronous I/O subsystem (Andres Freund, Thomas Munro, Nazir Bilal Yavuz, Melanie Plageman) § § § § § § § § § § §

This feature allows backends to queue multiple read requests, which allows for more efficient sequential scans, bitmap heap scans, vacuums, etc. This is enabled by server variable io_method, with server variables io_combine_limit and io_max_combine_limit added to control it. This also enables effective_io_concurrency and maintenance_io_concurrency values greater than zero for systems without fadvise() support. The new system view pg_aios shows the file handles being used for asynchronous I/O.

PerformanceImprove the locking performance of queries that access many relations

Server / General Performance

Improve the locking performance of queries that access many relations (Tomas Vondra) §

PerformanceImprove the performance and reduce memory usage of hash joins and GROUP BY

Server / General Performance

Improve the performance and reduce memory usage of hash joins and GROUP BY (David Rowley, Jeff Davis) § § § § §

This also improves hash set operations used by EXCEPT, and hash lookups of subplan values.

PerformanceAllow normal vacuums to freeze some pages, even though they are all-visible

Server / General Performance

Allow normal vacuums to freeze some pages, even though they are all-visible (Melanie Plageman) § §

This reduces the overhead of later full-relation freezing. The aggressiveness of this can be controlled by server variable and per-table setting vacuum_max_eager_freeze_failure_rate. Previously vacuum never processed all-visible pages until freezing was required.

PerformanceAdd server variable vacuum_truncate to control file truncation during VACUUM

Server / General Performance

Add server variable vacuum_truncate to control file truncation during VACUUM (Nathan Bossart, Gurjeet Singh) §

A storage-level parameter with the same name and behavior already existed.

PerformanceIncrease server variables effective_io_concurrency's and maintenance_io_concurrency's default values to 16

Server / General Performance

Increase server variables effective_io_concurrency's and maintenance_io_concurrency's default values to 16 (Melanie Plageman) § §

This more accurately reflects modern hardware.

FeaturesIncrease the logging granularity of server variable log_connections

Server / Monitoring

Increase the logging granularity of server variable log_connections (Melanie Plageman) §

This server variable was previously only boolean, which is still supported.

FeaturesAdd log_connections option to report the duration of connection stages

Server / Monitoring

Add log_connections option to report the duration of connection stages (Melanie Plageman) §

FeaturesAdd log_line_prefix escape %L to output the client IP address

Server / Monitoring

Add log_line_prefix escape %L to output the client IP address (Greg Sabino Mullane) §

FeaturesAdd server variable log_lock_failures to log lock acquisition failures

Server / Monitoring

Add server variable log_lock_failures to log lock acquisition failures (Yuki Seino, Fujii Masao) § §

Specifically it reports SELECT ... NOWAIT lock failures.

FeaturesModify pg_stat_all_tables and its variants to report the time spent in VACUUM, ANALYZE, and their automatic variants

Server / Monitoring

Modify pg_stat_all_tables and its variants to report the time spent in VACUUM, ANALYZE, and their automatic variants (Sami Imseih) §

The new columns are total_vacuum_time, total_autovacuum_time, total_analyze_time, and total_autoanalyze_time.

FeaturesAdd delay time reporting to VACUUM and ANALYZE

Server / Monitoring

Add delay time reporting to VACUUM and ANALYZE (Bertrand Drouvot, Nathan Bossart) § §

This information appears in the server log, the system views pg_stat_progress_vacuum and pg_stat_progress_analyze, and the output of VACUUM and ANALYZE when in VERBOSE mode; tracking must be enabled with the server variable track_cost_delay_timing.

FeaturesAdd WAL, CPU, and average read statistics output to ANALYZE VERBOSE

Server / Monitoring

Add WAL, CPU, and average read statistics output to ANALYZE VERBOSE (Anthonin Bonnefoy) § §

FeaturesAdd full WAL buffer count to VACUUM/ANALYZE (VERBOSE) and autovacuum log output

Server / Monitoring

Add full WAL buffer count to VACUUM/ANALYZE (VERBOSE) and autovacuum log output (Bertrand Drouvot) §

FeaturesAdd per-backend I/O statistics reporting

Server / Monitoring

Add per-backend I/O statistics reporting (Bertrand Drouvot) § §

The statistics are accessed via pg_stat_get_backend_io(). Per-backend I/O statistics can be cleared via pg_stat_reset_backend_stats().

FeaturesAdd pg_stat_io columns to report I/O activity in bytes

Server / Monitoring

Add pg_stat_io columns to report I/O activity in bytes (Nazir Bilal Yavuz) §

The new columns are read_bytes, write_bytes, and extend_bytes. The op_bytes column, which always equaled BLCKSZ, has been removed.

FeaturesAdd WAL I/O activity rows to pg_stat_io

Server / Monitoring

Add WAL I/O activity rows to pg_stat_io (Nazir Bilal Yavuz, Bertrand Drouvot, Michael Paquier) § § §

This includes WAL receiver activity and a wait event for such writes.

FeaturesChange server variable track_wal_io_timing to control tracking WAL timing in pg_stat_io instead of pg_stat_wal

Server / Monitoring

Change server variable track_wal_io_timing to control tracking WAL timing in pg_stat_io instead of pg_stat_wal (Bertrand Drouvot) §

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.

FeaturesRemove read/sync columns from pg_stat_wal

Server / Monitoring

Remove read/sync columns from pg_stat_wal (Bertrand Drouvot) § §

This removes columns wal_write, wal_sync, wal_write_time, and wal_sync_time.

Related records (1)

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

FeaturesAdd function pg_stat_get_backend_wal() to return per-backend WAL statistics

Server / Monitoring

Add function pg_stat_get_backend_wal() to return per-backend WAL statistics (Bertrand Drouvot) §

Per-backend WAL statistics can be cleared via pg_stat_reset_backend_stats().

FeaturesAdd function pg_ls_summariesdir() to specifically list the contents of PGDATA/pg_wal/summaries

Server / Monitoring

Add function pg_ls_summariesdir() to specifically list the contents of PGDATA/pg_wal/summaries (Yushi Ogiwara) §

FeaturesAdd column pg_stat_checkpointer.num_done to report the number of completed checkpoints

Server / Monitoring

Add column pg_stat_checkpointer.num_done to report the number of completed checkpoints (Anton A. Melnikov) §

Columns num_timed and num_requested count both completed and skipped checkpoints.

FeaturesAdd column pg_stat_checkpointer.slru_written to report SLRU buffers written

Server / Monitoring

Add column pg_stat_checkpointer.slru_written to report SLRU buffers written (Nitin Jadhav) §

Also, modify the checkpoint server log message to report separate shared buffer and SLRU buffer values.

FeaturesAdd columns to pg_stat_database to report parallel worker activity

Server / Monitoring

Add columns to pg_stat_database to report parallel worker activity (Benoit Lobréau) §

The new columns are parallel_workers_to_launch and parallel_workers_launched.

FeaturesHave query id computation of constant lists consider only the first and last constants

Server / Monitoring

Have query id computation of constant lists consider only the first and last constants (Dmitry Dolgov, Sami Imseih) § § §

Jumbling is used by pg_stat_statements.

FeaturesAdjust query id computations to group together queries using the same relation name

Server / Monitoring

Adjust query id computations to group together queries using the same relation name (Michael Paquier, Sami Imseih) §

This is true even if the tables in different schemas have different column names.

FeaturesAdd column pg_backend_memory_contexts.type to report the type of memory context

Server / Monitoring

Add column pg_backend_memory_contexts.type to report the type of memory context (David Rowley) §

FeaturesAdd column pg_backend_memory_contexts.path to show memory context parents

Server / Monitoring

Add column pg_backend_memory_contexts.path to show memory context parents (Melih Mutlu) §

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 pg_get_acl() to retrieve database access control details

Server / Privileges

Add function pg_get_acl() to retrieve database access control details (Joel Jacobson) § §

FeaturesAdd function has_largeobject_privilege() to check large object privileges

Server / Privileges

Add function has_largeobject_privilege() to check large object privileges (Yugo Nagata) §

FeaturesAllow ALTER DEFAULT PRIVILEGES to define large object default privileges

Server / Privileges

Allow ALTER DEFAULT PRIVILEGES to define large object default privileges (Takatsuka Haruka, Yugo Nagata, Laurenz Albe) §

FeaturesAdd predefined role pg_signal_autovacuum_worker

Server / Privileges

Add predefined role pg_signal_autovacuum_worker (Kirill Reshke) §

This allows sending signals to autovacuum workers.

FeaturesAdd support for the OAuth authentication method

Server / Server Configuration

Add support for the OAuth authentication method (Jacob Champion, Daniel Gustafsson, Thomas Munro) §

This adds an oauth authentication method to pg_hba.conf, libpq OAuth options, a server variable oauth_validator_libraries to load token validation libraries, and a configure flag --with-libcurl to add the required compile-time libraries.

FeaturesAdd server variable ssl_tls13_ciphers to allow specification of multiple colon-separated TLSv1.3 cipher suites

Server / Server Configuration

Add server variable ssl_tls13_ciphers to allow specification of multiple colon-separated TLSv1.3 cipher suites (Erica Zhang, Daniel Gustafsson) §

FeaturesChange server variable ssl_groups's default to include elliptic curve X25519

Server / Server Configuration

Change server variable ssl_groups's default to include elliptic curve X25519 (Daniel Gustafsson, Jacob Champion) §

FeaturesRename server variable ssl_ecdh_curve to ssl_groups and allow multiple colon-separated ECDH curves to be specified

Server / Server Configuration

Rename server variable ssl_ecdh_curve to ssl_groups and allow multiple colon-separated ECDH curves to be specified (Erica Zhang, Daniel Gustafsson) §

The previous name still works.

FeaturesMake cancel request keys 256 bits

Server / Server Configuration

Make cancel request keys 256 bits (Heikki Linnakangas, Jelte Fennema-Nio) § §

This is only possible when the server and client support wire protocol version 3.2, introduced in this release.

FeaturesAdd server variable autovacuum_worker_slots to specify the maximum number of background workers

Server / Server Configuration

Add server variable autovacuum_worker_slots to specify the maximum number of background workers (Nathan Bossart) §

With this variable set, autovacuum_max_workers can be adjusted at runtime up to this maximum without a server restart.

Bug fixesAllow specification of the fixed number of dead tuples that will trigger an autovacuum

Server / Server Configuration

Allow specification of the fixed number of dead tuples that will trigger an autovacuum (Nathan Bossart, Frédéric Yhuel) §

The server variable is autovacuum_vacuum_max_threshold. Percentages are still used for triggering.

FeaturesChange server variable max_files_per_process to limit only files opened by a backend

Server / Server Configuration

Change server variable max_files_per_process to limit only files opened by a backend (Andres Freund) §

Previously files opened by the postmaster were also counted toward this limit.

FeaturesAdd server variable num_os_semaphores to report the required number of semaphores

Server / Server Configuration

Add server variable num_os_semaphores to report the required number of semaphores (Nathan Bossart) §

This is useful for operating system configuration.

FeaturesAdd server variable extension_control_path to specify the location of extension control files

Server / Server Configuration

Add server variable extension_control_path to specify the location of extension control files (Peter Eisentraut, Matheus Alcantara) § §

FeaturesAllow inactive replication slots to be automatically invalidated using server variable idle_replication_slot_timeout

Server / Streaming Replication and Recovery

Allow inactive replication slots to be automatically invalidated using server variable idle_replication_slot_timeout (Nisha Moond, Bharath Rupireddy) §

FeaturesAdd server variable max_active_replication_origins to control the maximum active replication origins

Server / Streaming Replication and Recovery

Add server variable max_active_replication_origins to control the maximum active replication origins (Euler Taveira) §

This was previously controlled by max_replication_slots, but this new setting allows a higher origin count in cases where fewer slots are required.

FeaturesAllow the values of generated columns to be logically replicated

Server / Logical Replication

Allow the values of generated columns to be logically replicated (Shubham Khanna, Vignesh C, Zhijie Hou, Shlok Kyal, Peter Smith) § § § §

If the publication specifies a column list, all specified columns, generated and non-generated, are published. Without a specified column list, publication option publish_generated_columns controls whether generated columns are published. Previously generated columns were not replicated and the subscriber had to compute the values if possible; this is particularly useful for non-PostgreSQL subscribers which lack such a capability.

FeaturesChange the default CREATE SUBSCRIPTION streaming option from off to parallel

Server / Logical Replication

Change the default CREATE SUBSCRIPTION streaming option from off to parallel (Vignesh C) §

FeaturesAllow ALTER SUBSCRIPTION to change the replication slot's two-phase commit behavior

Server / Logical Replication

Allow ALTER SUBSCRIPTION to change the replication slot's two-phase commit behavior (Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie Hou) § §

FeaturesLog conflicts while applying logical replication changes

Server / Logical Replication

Log conflicts while applying logical replication changes (Zhijie Hou, Nisha Moond) § § § § §

Also report in new columns of pg_stat_subscription_stats.

FeaturesAllow generated columns to be virtual, and make them the default

Utility Commands

Allow generated columns to be virtual, and make them the default (Peter Eisentraut, Jian He, Richard Guo, Dean Rasheed) § § §

Virtual generated columns generate their values when the columns are read, not written. The write behavior can still be specified via the STORED option.

FeaturesAdd OLD/NEW support to RETURNING in DML queries

Utility Commands

Add OLD/NEW support to RETURNING in DML queries (Dean Rasheed) §

Previously RETURNING only returned new values for INSERT and UPDATE, and old values for DELETE; MERGE would return the appropriate value for the internal query executed. This new syntax allows the RETURNING list of INSERT/UPDATE/DELETE/MERGE to explicitly return old and new values by using the special aliases old and new. These aliases can be renamed to avoid identifier conflicts.

FeaturesAllow foreign tables to be created like existing local tables

Utility Commands

Allow foreign tables to be created like existing local tables (Zhang Mingli) §

The syntax is CREATE FOREIGN TABLE ... LIKE.

FeaturesAllow LIKE with nondeterministic collations

Utility Commands

Allow LIKE with nondeterministic collations (Peter Eisentraut) §

FeaturesAllow text position search functions with nondeterministic collations

Utility Commands

Allow text position search functions with nondeterministic collations (Peter Eisentraut) §

These used to generate an error.

FeaturesAdd builtin collation provider PG_UNICODE_FAST

Utility Commands

Add builtin collation provider PG_UNICODE_FAST (Jeff Davis) §

This locale supports case mapping, but sorts in code point order, not natural language order.

FeaturesAllow VACUUM and ANALYZE to process partitioned tables without processing their children

Utility Commands

Allow VACUUM and ANALYZE to process partitioned tables without processing their children (Michael Harris) §

This is enabled with the new ONLY option. This is useful since autovacuum does not process partitioned tables, just its children.

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 functions to modify per-relation and per-column optimizer statistics

Utility Commands

Add functions to modify per-relation and per-column optimizer statistics (Corey Huinker) § § §

The functions are pg_restore_relation_stats(), pg_restore_attribute_stats(), pg_clear_relation_stats(), and pg_clear_attribute_stats().

FeaturesAdd server variable file_copy_method to control the file copying method

Utility Commands

Add server variable file_copy_method to control the file copying method (Nazir Bilal Yavuz) §

This controls whether CREATE DATABASE ... STRATEGY=FILE_COPY and ALTER DATABASE ... SET TABLESPACE uses file copy or clone.

FeaturesAllow the specification of non-overlapping PRIMARY KEY, UNIQUE, and foreign key constraints

Utility Commands / Constraints

Allow the specification of non-overlapping PRIMARY KEY, UNIQUE, and foreign key constraints (Paul A. Jungwirth) § §

This is specified by WITHOUT OVERLAPS for PRIMARY KEY and UNIQUE, and by PERIOD for foreign keys, all applied to the last specified column.

FeaturesAllow CHECK and foreign key constraints to be specified as NOT ENFORCED

Utility Commands / Constraints

Allow CHECK and foreign key constraints to be specified as NOT ENFORCED (Amul Sul) § §

This also adds column pg_constraint.conenforced.

FeaturesRequire primary/foreign key relationships to use either deterministic collations or the the same nondeterministic collations

Utility Commands / Constraints

Require primary/foreign key relationships to use either deterministic collations or the the same nondeterministic collations (Peter Eisentraut) §

The restore of a pg_dump, also used by pg_upgrade, will fail if these requirements are not met; schema changes must be made for these upgrade methods to succeed.

FeaturesStore column NOT NULL specifications in pg_constraint

Utility Commands / Constraints

Store column NOT NULL specifications in pg_constraint (Álvaro Herrera, Bernd Helmle) § §

This allows names to be specified for NOT NULL constraint. This also adds NOT NULL constraints to foreign tables and NOT NULL inheritance control to local tables.

FeaturesAllow ALTER TABLE to set the NOT VALID attribute of NOT NULL constraints

Utility Commands / Constraints

Allow ALTER TABLE to set the NOT VALID attribute of NOT NULL constraints (Rushabh Lathia, Jian He) §

FeaturesAllow modification of the inheritability of NOT NULL constraints

Utility Commands / Constraints

Allow modification of the inheritability of NOT NULL constraints (Suraj Kharage, Álvaro Herrera) § §

The syntax is ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT.

FeaturesAllow NOT VALID foreign key constraints on partitioned tables

Utility Commands / Constraints

Allow NOT VALID foreign key constraints on partitioned tables (Amul Sul) §

FeaturesAllow dropping of constraints ONLY on partitioned tables

Utility Commands / Constraints

Allow dropping of constraints ONLY on partitioned tables (Álvaro Herrera) §

This was previously erroneously prohibited.

FeaturesAdd REJECT_LIMIT to control the number of invalid rows COPY FROM can ignore

Utility Commands / COPY

Add REJECT_LIMIT to control the number of invalid rows COPY FROM can ignore (Atsushi Torikoshi) §

This is available when ON_ERROR = 'ignore'.

FeaturesAllow COPY TO to copy rows from populated materialized views

Utility Commands / COPY

Allow COPY TO to copy rows from populated materialized views (Jian He) §

FeaturesAdd COPY LOG_VERBOSITY level silent to suppress log output of ignored rows

Utility Commands / COPY

Add COPY LOG_VERBOSITY level silent to suppress log output of ignored rows (Atsushi Torikoshi) §

This new level suppresses output for discarded input rows when on_error = 'ignore'.

FeaturesDisallow COPY FREEZE on foreign tables

Utility Commands / COPY

Disallow COPY FREEZE on foreign tables (Nathan Bossart) §

Previously, the COPY worked but the FREEZE was ignored, so disallow this command.

FeaturesAutomatically include BUFFERS output in EXPLAIN ANALYZE

Utility Commands / EXPLAIN

Automatically include BUFFERS output in EXPLAIN ANALYZE (Guillaume Lelarge, David Rowley) §

FeaturesAdd full WAL buffer count to EXPLAIN (WAL) output

Utility Commands / EXPLAIN

Add full WAL buffer count to EXPLAIN (WAL) output (Bertrand Drouvot) §

FeaturesIn EXPLAIN ANALYZE, report the number of index lookups used per index scan node

Utility Commands / EXPLAIN

In EXPLAIN ANALYZE, report the number of index lookups used per index scan node (Peter Geoghegan) §

FeaturesModify EXPLAIN to output fractional row counts

Utility Commands / EXPLAIN

Modify EXPLAIN to output fractional row counts (Ibrar Ahmed, Ilia Evdokimov, Robert Haas) § §

FeaturesAdd memory and disk usage details to Material, Window Aggregate, and common table expression nodes to EXPLAIN output

Utility Commands / EXPLAIN

Add memory and disk usage details to Material, Window Aggregate, and common table expression nodes to EXPLAIN output (David Rowley, Tatsuo Ishii) § § § §

FeaturesAdd details about window function arguments to EXPLAIN output

Utility Commands / EXPLAIN

Add details about window function arguments to EXPLAIN output (Tom Lane) §

FeaturesAdd Parallel Bitmap Heap Scan worker cache statistics to EXPLAIN ANALYZE

Utility Commands / EXPLAIN

Add Parallel Bitmap Heap Scan worker cache statistics to EXPLAIN ANALYZE (David Geier, Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley) §

FeaturesIndicate disabled nodes in EXPLAIN ANALYZE output

Utility Commands / EXPLAIN

Indicate disabled nodes in EXPLAIN ANALYZE output (Robert Haas, David Rowley, Laurenz Albe) § § §

FeaturesImprove Unicode full case mapping and conversion

Data Types

Improve Unicode full case mapping and conversion (Jeff Davis) § §

This adds the ability to do conditional and title case mapping, and case map single characters to multiple characters.

FeaturesAllow jsonb null values to be cast to scalar types as NULL

Data Types

Allow jsonb null values to be cast to scalar types as NULL (Tom Lane) §

Previously such casts generated an error.

FeaturesAdd optional parameter to json{b}_strip_nulls to allow removal of null array elements

Data Types

Add optional parameter to json{b}_strip_nulls to allow removal of null array elements (Florents Tselai) §

FeaturesAdd function array_sort() which sorts an array's first dimension

Data Types

Add function array_sort() which sorts an array's first dimension (Junwang Zhao, Jian He) §

FeaturesAdd function array_reverse() which reverses an array's first dimension

Data Types

Add function array_reverse() which reverses an array's first dimension (Aleksander Alekseev) §

FeaturesAdd function reverse() to reverse bytea bytes

Data Types

Add function reverse() to reverse bytea bytes (Aleksander Alekseev) §

FeaturesAllow casting between integer types and bytea

Data Types

Allow casting between integer types and bytea (Aleksander Alekseev) §

The integer values are stored as bytea two's complement values.

FeaturesUpdate Unicode data to Unicode 16.0.0

Data Types

Update Unicode data to Unicode 16.0.0 (Peter Eisentraut) §

FeaturesAdd full text search stemming for Estonian

Data Types

Add full text search stemming for Estonian (Tom Lane) §

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.

FeaturesImprove the XML error codes to more closely match the SQL standard

Data Types

Improve the XML error codes to more closely match the SQL standard (Tom Lane) §

These errors are reported via SQLSTATE.

FeaturesAdd function casefold() to allow for more sophisticated case-insensitive matching

Functions

Add function casefold() to allow for more sophisticated case-insensitive matching (Jeff Davis) §

This allows more accurate comparisons, i.e., a character can have multiple upper or lower case equivalents, or upper or lower case conversion changes the number of characters.

FeaturesAllow MIN()/MAX() aggregates on arrays and composite types

Functions

Allow MIN()/MAX() aggregates on arrays and composite types (Aleksander Alekseev, Marat Buharov) § §

FeaturesAdd a WEEK option to EXTRACT()

Functions

Add a WEEK option to EXTRACT() (Tom Lane) §

Related records (1)

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

FeaturesImprove the output EXTRACT(QUARTER ...) for negative values

Functions

Improve the output EXTRACT(QUARTER ...) for negative values (Tom Lane) §

Related records (1)

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

FeaturesAdd roman numeral support to to_number()

Functions

Add roman numeral support to to_number() (Hunaid Sohail) §

This is accessed via the RN pattern.

FeaturesAdd UUID version 7 generation function uuidv7()

Functions

Add UUID version 7 generation function uuidv7() (Andrey Borodin) §

This UUID value is temporally sortable. Function alias uuidv4() has been added to explicitly generate version 4 UUIDs.

FeaturesAdd functions crc32() and crc32c() to compute CRC values

Functions

Add functions crc32() and crc32c() to compute CRC values (Aleksander Alekseev) §

FeaturesAdd math functions gamma() and lgamma()

Functions

Add math functions gamma() and lgamma() (Dean Rasheed) §

FeaturesAllow => syntax for named cursor arguments in PL/pgSQL

Functions

Allow => syntax for named cursor arguments in PL/pgSQL (Pavel Stehule) §

We previously only accepted :=.

FeaturesAllow regexp_match[es]()/regexp_like()/regexp_replace()/regexp_count()/regexp_instr()/regexp_substr()/regexp_split_to_table()/regexp_split_to_array() to use named arguments

Functions

FeaturesAdd function PQfullProtocolVersion() to report the full, including minor, protocol version number

Libpq

Add function PQfullProtocolVersion() to report the full, including minor, protocol version number (Jacob Champion, Jelte Fennema-Nio) §

FeaturesAdd libpq connection parameters and environment variables to specify the minimum and maximum acceptable protocol version for connections

Libpq

Add libpq connection parameters and environment variables to specify the minimum and maximum acceptable protocol version for connections (Jelte Fennema-Nio) § §

FeaturesReport search_path changes to the client

Libpq

Report search_path changes to the client (Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra) § §

FeaturesAdd PQtrace() output for all message types, including authentication

Libpq

Add PQtrace() output for all message types, including authentication (Jelte Fennema-Nio) § § § § §

FeaturesAdd libpq connection parameter sslkeylogfile which dumps out SSL key material

Libpq

Add libpq connection parameter sslkeylogfile which dumps out SSL key material (Abhishek Chanda, Daniel Gustafsson) §

This is useful for debugging.

FeaturesModify some libpq function signatures to use int64_t

Libpq

Modify some libpq function signatures to use int64_t (Thomas Munro) §

These previously used pg_int64, which is now deprecated.

FeaturesAllow psql to parse, bind, and close named prepared statements

psql

Allow psql to parse, bind, and close named prepared statements (Anthonin Bonnefoy, Michael Paquier) § §

This is accomplished with new commands \parse, \bind_named, and \close_prepared.

FeaturesAdd psql backslash commands to allowing issuance of pipeline queries

psql

Add psql backslash commands to allowing issuance of pipeline queries (Anthonin Bonnefoy) § § §

The new commands are \startpipeline, \syncpipeline, \sendpipeline, \endpipeline, \flushrequest, \flush, and \getresults.

FeaturesAllow adding pipeline status to the psql prompt and add related state variables

psql

Allow adding pipeline status to the psql prompt and add related state variables (Anthonin Bonnefoy) §

The new prompt character is %P and the new psql variables are PIPELINE_SYNC_COUNT, PIPELINE_COMMAND_COUNT, and PIPELINE_RESULT_COUNT.

FeaturesAllow adding the connection service name to the psql prompt or access it via psql variable

psql

Allow adding the connection service name to the psql prompt or access it via psql variable (Michael Banck) §

FeaturesAdd psql option to use expanded mode on all list commands

psql

Add psql option to use expanded mode on all list commands (Dean Rasheed) §

Adding backslash suffix x enables this.

FeaturesChange psql's \conninfo to use tabular format and include more information

psql

Change psql's \conninfo to use tabular format and include more information (Álvaro Herrera, Maiquel Grassi, Hunaid Sohail) §

FeaturesAdd function's leakproof indicator to psql's \df+, \do+, \dAo+, and \dC+ outputs

psql

Add function's leakproof indicator to psql's \df+, \do+, \dAo+, and \dC+ outputs (Yugo Nagata) §

FeaturesAdd access method details for partitioned relations in \dP+

psql

Add access method details for partitioned relations in \dP+ (Justin Pryzby) §

FeaturesAdd default_version to the psql \dx extension output

psql

Add default_version to the psql \dx extension output (Magnus Hagander) §

FeaturesAdd psql variable WATCH_INTERVAL to set the default \watch wait time

psql

Add psql variable WATCH_INTERVAL to set the default \watch wait time (Daniel Gustafsson) §

FeaturesChange initdb to default to enabling checksums

Server Applications

Change initdb to default to enabling checksums (Greg Sabino Mullane) § §

The new initdb option --no-data-checksums disables checksums.

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 initdb option --no-sync-data-files to avoid syncing heap/index files

Server Applications

Add initdb option --no-sync-data-files to avoid syncing heap/index files (Nathan Bossart) §

initdb option --no-sync is still available to avoid syncing any files.

FeaturesAdd vacuumdb option --missing-stats-only to compute only missing optimizer statistics

Server Applications

Add vacuumdb option --missing-stats-only to compute only missing optimizer statistics (Corey Huinker, Nathan Bossart) § §

This option can only be run by superusers and can only be used with options --analyze-only and --analyze-in-stages.

FeaturesAdd pg_combinebackup option -k/--link to enable hard linking

Server Applications

Add pg_combinebackup option -k/--link to enable hard linking (Israel Barth Rubio, Robert Haas) §

Only some files can be hard linked. This should not be used if the backups will be used independently.

FeaturesAllow pg_verifybackup to verify tar-format backups

Server Applications

Allow pg_verifybackup to verify tar-format backups (Amul Sul) §

FeaturesIf pg_rewind's --source-server specifies a database name, use it in --write-recovery-conf output

Server Applications

If pg_rewind's --source-server specifies a database name, use it in --write-recovery-conf output (Masahiko Sawada) §

FeaturesAdd pg_resetwal option --char-signedness to change the default char signedness

Server Applications

Add pg_resetwal option --char-signedness to change the default char signedness (Masahiko Sawada) §

FeaturesAdd pg_dump option --statistics

Server Applications / pg_dump/pg_dumpall/pg_restore

Add pg_dump option --statistics (Jeff Davis) § §

FeaturesAdd pg_dump and pg_dumpall option --sequence-data to dump sequence data that would normally be excluded

Server Applications / pg_dump/pg_dumpall/pg_restore

Add pg_dump and pg_dumpall option --sequence-data to dump sequence data that would normally be excluded (Nathan Bossart) § §

FeaturesAdd pg_dump, pg_dumpall, and pg_restore options --statistics-only, --no-statistics, --no-data, and --no-schema

Server Applications / pg_dump/pg_dumpall/pg_restore

Add pg_dump, pg_dumpall, and pg_restore options --statistics-only, --no-statistics, --no-data, and --no-schema (Corey Huinker, Jeff Davis) §

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 option --no-policies to disable row level security policy processing in pg_dump, pg_dumpall, pg_restore

Server Applications / pg_dump/pg_dumpall/pg_restore

Add option --no-policies to disable row level security policy processing in pg_dump, pg_dumpall, pg_restore (Nikolay Samokhvalov) §

This is useful for migrating to systems with different policies.

FeaturesAllow pg_upgrade to preserve optimizer statistics

Server Applications / pg_upgrade

Allow pg_upgrade to preserve optimizer statistics (Corey Huinker, Jeff Davis, Nathan Bossart) § § § §

Extended statistics are not preserved. Also add pg_upgrade option --no-statistics to disable statistics preservation.

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 pg_upgrade to process database checks in parallel

Server Applications / pg_upgrade

Allow pg_upgrade to process database checks in parallel (Nathan Bossart) § § § § § § § § § § §

This is controlled by the existing --jobs option.

FeaturesAdd pg_upgrade option --swap to swap directories rather than copy, clone, or link files

Server Applications / pg_upgrade

Add pg_upgrade option --swap to swap directories rather than copy, clone, or link files (Nathan Bossart) §

This mode is potentially the fastest.

FeaturesAdd pg_upgrade option --set-char-signedness to set the default char signedness of new cluster

Server Applications / pg_upgrade

Add pg_upgrade option --set-char-signedness to set the default char signedness of new cluster (Masahiko Sawada) § §

This is to handle cases where a pre-PostgreSQL 18 cluster's default CPU signedness does not match the new cluster.

FeaturesAdd pg_createsubscriber option --all to create logical replicas for all databases

Server Applications / Logical Replication Applications

Add pg_createsubscriber option --all to create logical replicas for all databases (Shubham Khanna) §

FeaturesAdd pg_createsubscriber option --clean to remove publications

Server Applications / Logical Replication Applications

Add pg_createsubscriber option --clean to remove publications (Shubham Khanna) § §

FeaturesAdd pg_createsubscriber option --enable-two-phase to enable prepared transactions

Server Applications / Logical Replication Applications

Add pg_createsubscriber option --enable-two-phase to enable prepared transactions (Shubham Khanna) §

FeaturesAdd pg_recvlogical option --enable-failover to specify failover slots

Server Applications / Logical Replication Applications

Add pg_recvlogical option --enable-failover to specify failover slots (Hayato Kuroda) §

Also add option --enable-two-phase as a synonym for --two-phase, and deprecate the latter.

FeaturesAllow pg_recvlogical --drop-slot to work without --dbname

Server Applications / Logical Replication Applications

Allow pg_recvlogical --drop-slot to work without --dbname (Hayato Kuroda) §

FeaturesSeparate the loading and running of injection points

Source Code

Separate the loading and running of injection points (Michael Paquier, Heikki Linnakangas) § §

Injection points can now be created, but not run, via INJECTION_POINT_LOAD(), and such injection points can be run via INJECTION_POINT_CACHED().

FeaturesSupport runtime arguments in injection points

Source Code

Support runtime arguments in injection points (Michael Paquier) §

FeaturesAllow inline injection point test code with IS_INJECTION_POINT_ATTACHED()

Source Code

Allow inline injection point test code with IS_INJECTION_POINT_ATTACHED() (Heikki Linnakangas) §

PerformanceImprove the performance of processing long JSON strings using SIMD (Single Instruction Multiple Data)

Source Code

Improve the performance of processing long JSON strings using SIMD (Single Instruction Multiple Data) (David Rowley) §

PerformanceSpeed up CRC32C calculations using x86 AVX-512 instructions

Source Code

Speed up CRC32C calculations using x86 AVX-512 instructions (Raghuveer Devulapalli, Paul Amonson) §

FeaturesAdd ARM Neon and SVE CPU intrinsics for popcount (integer bit counting)

Source Code

Add ARM Neon and SVE CPU intrinsics for popcount (integer bit counting) (Chiranmoy Bhattacharya, Devanga Susmitha, Rama Malladi) § §

FeaturesImprove the speed of numeric multiplication and division

Source Code

Improve the speed of numeric multiplication and division (Joel Jacobson, Dean Rasheed) § § § §

FeaturesAdd configure option --with-libnuma to enable NUMA awareness

Source Code

Add configure option --with-libnuma to enable NUMA awareness (Jakub Wartak, Bertrand Drouvot) § § §

The function pg_numa_available() reports on NUMA awareness, and system views pg_shmem_allocations_numa and pg_buffercache_numa which report on shared memory distribution across NUMA nodes.

FeaturesAdd TOAST table to pg_index to allow for very large expression indexes

Source Code

Add TOAST table to pg_index to allow for very large expression indexes (Nathan Bossart) §

FeaturesRemove column pg_attribute.attcacheoff

Source Code

Remove column pg_attribute.attcacheoff (David Rowley) §

FeaturesAdd column pg_class.relallfrozen

Source Code

Add column pg_class.relallfrozen (Melanie Plageman) §

FeaturesAdd amgettreeheight, amconsistentequality, and amconsistentordering to the index access method API

Source Code

Add amgettreeheight, amconsistentequality, and amconsistentordering to the index access method API (Mark Dilger) § §

FeaturesAdd GiST support function stratnum()

Source Code

Add GiST support function stratnum() (Paul A. Jungwirth) §

FeaturesRecord the default CPU signedness of char in pg_controldata

Source Code

Record the default CPU signedness of char in pg_controldata (Masahiko Sawada) §

FeaturesAdd support for Python "Limited API" in PL/Python

Source Code

Add support for Python "Limited API" in PL/Python (Peter Eisentraut) § §

This helps prevent problems caused by Python 3.x version mismatches.

FeaturesChange the minimum supported Python version to 3.6.8

Source Code

Change the minimum supported Python version to 3.6.8 (Jacob Champion) §

FeaturesRemove support for OpenSSL versions older than 1.1.1

Source Code

Remove support for OpenSSL versions older than 1.1.1 (Daniel Gustafsson) § §

FeaturesIf LLVM is enabled, require version 14 or later

Source Code

If LLVM is enabled, require version 14 or later (Thomas Munro) §

FeaturesAdd macro PG_MODULE_MAGIC_EXT to allow extensions to report their name and version

Source Code

Add macro PG_MODULE_MAGIC_EXT to allow extensions to report their name and version (Andrei Lepikhov) §

This information can be access via the new function pg_get_loaded_modules().

FeaturesDocument that SPI_connect()/SPI_connect_ext() always returns success (SPI_OK_CONNECT)

Source Code

Document that SPI_connect()/SPI_connect_ext() always returns success (SPI_OK_CONNECT) (Stepan Neretin) §

Errors are always reported via ereport().

FeaturesAdd documentation section about API and ABI compatibility

Source Code

Add documentation section about API and ABI compatibility (David Wheeler, Peter Eisentraut) §

FeaturesRemove the experimental designation of Meson builds on Windows

Source Code

Remove the experimental designation of Meson builds on Windows (Aleksander Alekseev) §

FeaturesRemove configure options --disable-spinlocks and --disable-atomics

Source Code

Remove configure options --disable-spinlocks and --disable-atomics (Thomas Munro) § §

Thirty-two-bit atomic operations are now required.

FeaturesRemove support for the HPPA/PA-RISC architecture

Source Code

Remove support for the HPPA/PA-RISC architecture (Tom Lane) §

FeaturesAdd extension pg_logicalinspect to inspect logical snapshots

Additional Modules

Add extension pg_logicalinspect to inspect logical snapshots (Bertrand Drouvot) §

FeaturesAdd extension pg_overexplain which adds debug details to EXPLAIN output

Additional Modules

Add extension pg_overexplain which adds debug details to EXPLAIN output (Robert Haas) §

FeaturesAdd output columns to postgres_fdw_get_connections()

Additional Modules

Add output columns to postgres_fdw_get_connections() (Hayato Kuroda, Sagar Dilip Shedge) § § § §

New output column used_in_xact indicates if the foreign data wrapper is being used by a current transaction, closed indicates if it is closed, user_name indicates the user name, and remote_backend_pid indicates the remote backend process identifier.

FeaturesAllow SCRAM authentication from the client to be passed to postgres_fdw servers

Additional Modules

Allow SCRAM authentication from the client to be passed to postgres_fdw servers (Matheus Alcantara, Peter Eisentraut) §

This avoids storing postgres_fdw authentication information in the database, and is enabled with the postgres_fdw use_scram_passthrough connection option. libpq uses new connection parameters scram_client_key and scram_server_key.

FeaturesAllow SCRAM authentication from the client to be passed to dblink servers

Additional Modules

Allow SCRAM authentication from the client to be passed to dblink servers (Matheus Alcantara) §

FeaturesAdd on_error and log_verbosity options to file_fdw

Additional Modules

Add on_error and log_verbosity options to file_fdw (Atsushi Torikoshi) §

These control how file_fdw handles and reports invalid file rows.

FeaturesAdd reject_limit to control the number of invalid rows file_fdw can ignore

Additional Modules

Add reject_limit to control the number of invalid rows file_fdw can ignore (Atsushi Torikoshi) §

This is active when ON_ERROR = 'ignore'.

FeaturesAdd configurable variable min_password_length to passwordcheck

Additional Modules

Add configurable variable min_password_length to passwordcheck (Emanuele Musella, Maurizio Boriani) §

This controls the minimum password length.

FeaturesHave pgbench report the number of failed, retried, or skipped transactions in per-script reports

Additional Modules

Have pgbench report the number of failed, retried, or skipped transactions in per-script reports (Yugo Nagata) §

FeaturesAdd isn server variable weak to control invalid check digit acceptance

Additional Modules

Add isn server variable weak to control invalid check digit acceptance (Viktor Holmberg) §

This was previously only controlled by function isn_weak().

FeaturesAllow values to be sorted to speed btree_gist index builds

Additional Modules

Allow values to be sorted to speed btree_gist index builds (Bernd Helmle, Andrey Borodin) §

FeaturesAdd amcheck check function gin_index_check() to verify GIN indexes

Additional Modules

Add amcheck check function gin_index_check() to verify GIN indexes (Grigory Kryachko, Heikki Linnakangas, Andrey Borodin) §

FeaturesAdd functions pg_buffercache_evict_relation() and pg_buffercache_evict_all() to evict unpinned shared buffers

Additional Modules

Add functions pg_buffercache_evict_relation() and pg_buffercache_evict_all() to evict unpinned shared buffers (Nazir Bilal Yavuz) §

The existing function pg_buffercache_evict() now returns the buffer flush status.

FeaturesAllow extensions to install custom EXPLAIN options

Additional Modules

Allow extensions to install custom EXPLAIN options (Robert Haas, Sami Imseih) § § §

FeaturesAllow extensions to use the server's cumulative statistics API

Additional Modules

Allow extensions to use the server's cumulative statistics API (Michael Paquier) § §

FeaturesAllow the queries of CREATE TABLE AS and DECLARE to be tracked by pg_stat_statements

Additional Modules / pg_stat_statements

Allow the queries of CREATE TABLE AS and DECLARE to be tracked by pg_stat_statements (Anthonin Bonnefoy) §

They are also now assigned query ids.

FeaturesAllow the parameterization of SET values in pg_stat_statements

Additional Modules / pg_stat_statements

Allow the parameterization of SET values in pg_stat_statements (Greg Sabino Mullane, Michael Paquier) §

This reduces the bloat caused by SET statements with differing constants.

FeaturesAdd pg_stat_statements columns to report parallel activity

Additional Modules / pg_stat_statements

Add pg_stat_statements columns to report parallel activity (Guillaume Lelarge) §

The new columns are parallel_workers_to_launch and parallel_workers_launched.

FeaturesAdd pg_stat_statements.wal_buffers_full to report full WAL buffers

Additional Modules / pg_stat_statements

Add pg_stat_statements.wal_buffers_full to report full WAL buffers (Bertrand Drouvot) §

FeaturesAdd pgcrypto algorithms sha256crypt and sha512crypt

Additional Modules / pgcrypto

Add pgcrypto algorithms sha256crypt and sha512crypt (Bernd Helmle) §

FeaturesAdd CFB mode to pgcrypto encryption and decryption

Additional Modules / pgcrypto

Add CFB mode to pgcrypto encryption and decryption (Umar Hayat) §

FeaturesAdd function fips_mode() to report the server's FIPS mode

Additional Modules / pgcrypto

Add function fips_mode() to report the server's FIPS mode (Daniel Gustafsson) §

FeaturesAdd pgcrypto server variable builtin_crypto_enabled to allow disabling builtin non-FIPS mode cryptographic functions

Additional Modules / pgcrypto

Add pgcrypto server variable builtin_crypto_enabled to allow disabling builtin non-FIPS mode cryptographic functions (Daniel Gustafsson, Joe Conway) §

This is useful for guaranteeing FIPS mode behavior.

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.

264 entries are already included in the source. Another 0 cross-branch duplicates are merged into their matching entries; expand them to read every branch version. The JSON export records the evidence for each merge and exclusion.

Interaction inspired by pgversions.com and pgversionreport. Content comes from PostgreSQL release notes. See the release notes archive.