DocumentationVersion comparison
POSTGRESQL · VERSION COMPARE
Compare PostgreSQL major or minor versions to explore new features, bug fixes, and CVE security records.
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
2026-08-13 2026-08-13
17.11 SupportedSupport ends 2029-11-08
18.6 SupportedSupport ends 2030-11-14
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.
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;
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.
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).
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.
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.
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.
Changes
Avoid “cache lookup failed for collation 0” error when planner looks up statistics for a column of type "char" (Feng Wu) §
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.
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.
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 command much slower.tablename
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.
“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.
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.
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.
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.
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.
Changes
Fix JIT-compiled tuple deconstruction code to account correctly for virtual generated columns (David Rowley) §
Changes
Prevent accepting hot-standby connections before WAL replay has reached a consistent database state (Nikhil Sontakke) §
Changes
Avoid recording incorrect I/O operation statistics after a failed read or write (Bertrand Drouvot) §
Changes
Improve libpq's handling of out-of-memory conditions (Anthonin Bonnefoy) §
Changes
Fix libpq's trace facility to print new-style BackendKeyData and CancelRequest messages correctly (Anthonin Bonnefoy) §
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.
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.
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.
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.
Changes
In contrib/amcheck, fix failure to report corruption of a btree metapage's allequalimage flag (Chao Li) §
Changes
In contrib/amcheck, fix query-lifespan memory leak while verifying a GIN index (Kirill Reshke) §
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.
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).
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.
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.
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)
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.
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.
Changes
Fix UPDATE/DELETE ... WHERE CURRENT OF to work on tables with virtual generated columns (Satyanarayana Narlapuram, Dean Rasheed) §
Changes
Fix expansion of virtual generated columns in EXCLUDED column references in INSERT ... ON CONFLICT (Satyanarayana Narlapuram, Dean Rasheed) §
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.
Changes
Fix ALTER TABLE ... SET NOT NULL to invoke object-access hook functions only after completing the catalog change (Artur Zakirov) §
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.
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.
Changes
Make the pg_aios system view's pid column show NULL not 0 when an entry has no owning process (ChangAo Chen) §
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.
Changes
Fix array overrun when too many EXPLAIN extension options are installed (Joel Jacobson) §
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.
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.
Changes
In pg_dump, preserve NO INHERIT property of NOT NULL constraints (Jian He) §
Some cases missed printing the NO INHERIT clause.
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.
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.
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.
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.
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.
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.
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)
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.
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) §
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.
Changes
Fix expression evaluation bug for a sub-select within an array subscript (Andres Freund) §
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.
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”.
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.
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.
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.
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.
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.
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.
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.
Changes
Avoid failure of NUMA status views when a page has been swapped out (Tomas Vondra) §
Changes
Avoid “operation not permitted” errors when querying NUMA page status with older libnuma versions (Tomas Vondra) §
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.
Changes
Fix psql's tab completion for VACUUM option values (Yugo Nagata) §
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.
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.
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.
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.
Changes
Avoid crash in contrib/pg_stat_statements when an IN list contains both constants and non-constant expressions (Sami Imseih) §
A dump/restore is not required for those running 18.X.
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.
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.
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.
Changes
Avoid possible out-of-memory or “invalid memory alloc request size” failures during parallel GIN index build (Tomas Vondra) §
Changes
Fix rare crash when processing hashed GROUPING SETS queries (David Rowley) §
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.
Changes
Changes
Fix crash during EvalPlanQual rechecks on partitioned tables (David Rowley, Amit Langote) §
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.
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.
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) §
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:
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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Compatibility
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.
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.
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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Compatibility
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.
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.
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.
Compatibility
Remove column pg_backend_memory_contexts.parent (Melih Mutlu) §
This is no longer needed since pg_backend_memory_contexts.path was added.
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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Compatibility
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.
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.
Server / Optimizer
Convert some IN (VALUES ...) to x = ANY ... for better optimizer statistics (Alena Rybakina, Andrei Lepikhov) §
Server / Optimizer
Speed up the processing of INTERSECT, EXCEPT, window aggregates, and view column aliases (Tom Lane, David Rowley) § § § §
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.
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.
Server / Optimizer
Improve row estimates for generate_series() using numeric and timestamp values (David Rowley, Song Jinzhou) § §
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.
Server / Optimizer
Allow merge joins to use incremental sorts (Richard Guo) §
Server / Optimizer
Allow partitionwise joins in more cases, and reduce its memory usage (Richard Guo, Tom Lane, Ashutosh Bapat) § §
Server / Optimizer
Improve cost estimates of partition queries (Nikita Malakhov, Andrei Lepikhov) §
Server / Optimizer
Improve SQL-language function plan caching (Alexander Pyhalov, Tom Lane) § §
Server / Optimizer
Improve handling of disabled optimizer features (Robert Haas) §
Server / Indexes
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.
Server / General Performance
Improve the locking performance of queries that access many relations (Tomas Vondra) §
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.
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.
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.
Server / Monitoring
Increase the logging granularity of server variable log_connections (Melanie Plageman) §
This server variable was previously only boolean, which is still supported.
Server / Monitoring
Add log_connections option to report the duration of connection stages (Melanie Plageman) §
Server / Monitoring
Add log_line_prefix escape %L to output the client IP address (Greg Sabino Mullane) §
Server / Monitoring
Add server variable log_lock_failures to log lock acquisition failures (Yuki Seino, Fujii Masao) § §
Specifically it reports SELECT ... NOWAIT lock failures.
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.
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.
Server / Monitoring
Add full WAL buffer count to VACUUM/ANALYZE (VERBOSE) and autovacuum log output (Bertrand Drouvot) §
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().
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.
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) §
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server / 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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server / 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().
Server / Monitoring
Add function pg_ls_summariesdir() to specifically list the contents of PGDATA/pg_wal/summaries (Yushi Ogiwara) §
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.
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.
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.
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.
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.
Server / Monitoring
Add column pg_backend_memory_contexts.type to report the type of memory context (David Rowley) §
Server / Monitoring
Add column pg_backend_memory_contexts.path to show memory context parents (Melih Mutlu) §
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server / Privileges
Add function pg_get_acl() to retrieve database access control details (Joel Jacobson) § §
Server / Privileges
Add function has_largeobject_privilege() to check large object privileges (Yugo Nagata) §
Server / Privileges
Allow ALTER DEFAULT PRIVILEGES to define large object default privileges (Takatsuka Haruka, Yugo Nagata, Laurenz Albe) §
Server / Privileges
Add predefined role pg_signal_autovacuum_worker (Kirill Reshke) §
This allows sending signals to autovacuum workers.
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.
Server / Server Configuration
Add server variable ssl_tls13_ciphers to allow specification of multiple colon-separated TLSv1.3 cipher suites (Erica Zhang, Daniel Gustafsson) §
Server / Server Configuration
Change server variable ssl_groups's default to include elliptic curve X25519 (Daniel Gustafsson, Jacob Champion) §
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.
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.
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.
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.
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.
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.
Server / Server Configuration
Add server variable extension_control_path to specify the location of extension control files (Peter Eisentraut, Matheus Alcantara) § §
Server / Streaming Replication and Recovery
Allow inactive replication slots to be automatically invalidated using server variable idle_replication_slot_timeout (Nisha Moond, Bharath Rupireddy) §
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.
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.
Server / Logical Replication
Change the default CREATE SUBSCRIPTION streaming option from off to parallel (Vignesh C) §
Server / Logical Replication
Allow ALTER SUBSCRIPTION to change the replication slot's two-phase commit behavior (Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie Hou) § §
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.
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.
Utility Commands
Allow foreign tables to be created like existing local tables (Zhang Mingli) §
The syntax is CREATE FOREIGN TABLE ... LIKE.
Utility Commands
Allow LIKE with nondeterministic collations (Peter Eisentraut) §
Utility Commands
Allow text position search functions with nondeterministic collations (Peter Eisentraut) §
These used to generate an error.
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.
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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Utility Commands
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().
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.
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.
Utility Commands / Constraints
Allow CHECK and foreign key constraints to be specified as NOT ENFORCED (Amul Sul) § §
This also adds column pg_constraint.conenforced.
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.
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.
Utility Commands / Constraints
Allow ALTER TABLE to set the NOT VALID attribute of NOT NULL constraints (Rushabh Lathia, Jian He) §
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.
Utility Commands / Constraints
Allow NOT VALID foreign key constraints on partitioned tables (Amul Sul) §
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'.
Utility Commands / COPY
Allow COPY TO to copy rows from populated materialized views (Jian He) §
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'.
Utility Commands / COPY
Disallow COPY FREEZE on foreign tables (Nathan Bossart) §
Previously, the COPY worked but the FREEZE was ignored, so disallow this command.
Utility Commands / EXPLAIN
Automatically include BUFFERS output in EXPLAIN ANALYZE (Guillaume Lelarge, David Rowley) §
Utility Commands / EXPLAIN
Add full WAL buffer count to EXPLAIN (WAL) output (Bertrand Drouvot) §
Utility Commands / EXPLAIN
In EXPLAIN ANALYZE, report the number of index lookups used per index scan node (Peter Geoghegan) §
Utility Commands / EXPLAIN
Add details about window function arguments to EXPLAIN output (Tom Lane) §
Utility Commands / EXPLAIN
Add Parallel Bitmap Heap Scan worker cache statistics to EXPLAIN ANALYZE (David Geier, Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley) §
Data Types
Add optional parameter to json{b}_strip_nulls to allow removal of null array elements (Florents Tselai) §
Data Types
Add function array_sort() which sorts an array's first dimension (Junwang Zhao, Jian He) §
Data Types
Add function array_reverse() which reverses an array's first dimension (Aleksander Alekseev) §
Data Types
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Functions
Add 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.
Functions
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Functions
Improve the output EXTRACT(QUARTER ...) for negative values (Tom Lane) §
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Functions
Add roman numeral support to to_number() (Hunaid Sohail) §
This is accessed via the RN pattern.
Functions
Allow 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 (Jian He) §
Libpq
Add function PQfullProtocolVersion() to report the full, including minor, protocol version number (Jacob Champion, Jelte Fennema-Nio) §
Libpq
Add libpq connection parameters and environment variables to specify the minimum and maximum acceptable protocol version for connections (Jelte Fennema-Nio) § §
Libpq
Report search_path changes to the client (Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra) § §
Libpq
Add libpq connection parameter sslkeylogfile which dumps out SSL key material (Abhishek Chanda, Daniel Gustafsson) §
This is useful for debugging.
Libpq
Modify some libpq function signatures to use int64_t (Thomas Munro) §
These previously used pg_int64, which is now deprecated.
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.
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.
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.
psql
Allow adding the connection service name to the psql prompt or access it via psql variable (Michael Banck) §
psql
Add psql option to use expanded mode on all list commands (Dean Rasheed) §
Adding backslash suffix x enables this.
psql
Add psql variable WATCH_INTERVAL to set the default \watch wait time (Daniel Gustafsson) §
Server Applications
Change initdb to default to enabling checksums (Greg Sabino Mullane) § §
The new initdb option --no-data-checksums disables checksums.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server 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.
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.
Server Applications
Allow pg_verifybackup to verify tar-format backups (Amul Sul) §
Server Applications
Add pg_resetwal option --char-signedness to change the default char signedness (Masahiko Sawada) §
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) § §
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) §
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server 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.
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.
“Same change” requires complete matching evidence. “Related commits” can cover independent changes, a partial backport, or a follow-up correction; each release keeps its own explanation.
Server 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.
Server Applications / Logical Replication Applications
Add pg_createsubscriber option --all to create logical replicas for all databases (Shubham Khanna) §
Server Applications / Logical Replication Applications
Add pg_createsubscriber option --enable-two-phase to enable prepared transactions (Shubham Khanna) §
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.
Server Applications / Logical Replication Applications
Allow pg_recvlogical --drop-slot to work without --dbname (Hayato Kuroda) §
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().
Source Code
Support runtime arguments in injection points (Michael Paquier) §
Source Code
Allow inline injection point test code with IS_INJECTION_POINT_ATTACHED() (Heikki Linnakangas) §
Source Code
Speed up CRC32C calculations using x86 AVX-512 instructions (Raghuveer Devulapalli, Paul Amonson) §
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.
Source Code
Remove column pg_attribute.attcacheoff (David Rowley) §
Source Code
Add amgettreeheight, amconsistentequality, and amconsistentordering to the index access method API (Mark Dilger) § §
Source Code
Add GiST support function stratnum() (Paul A. Jungwirth) §
Source Code
Record the default CPU signedness of char in pg_controldata (Masahiko Sawada) §
Source Code
Change the minimum supported Python version to 3.6.8 (Jacob Champion) §
Source Code
If LLVM is enabled, require version 14 or later (Thomas Munro) §
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().
Source Code
Document that SPI_connect()/SPI_connect_ext() always returns success (SPI_OK_CONNECT) (Stepan Neretin) §
Errors are always reported via ereport().
Source Code
Add documentation section about API and ABI compatibility (David Wheeler, Peter Eisentraut) §
Source Code
Remove the experimental designation of Meson builds on Windows (Aleksander Alekseev) §
Source Code
Remove support for the HPPA/PA-RISC architecture (Tom Lane) §
Additional Modules
Add extension pg_logicalinspect to inspect logical snapshots (Bertrand Drouvot) §
Additional Modules
Add extension pg_overexplain which adds debug details to EXPLAIN output (Robert Haas) §
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.
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.
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'.
Additional Modules
Add configurable variable min_password_length to passwordcheck (Emanuele Musella, Maurizio Boriani) §
This controls the minimum password length.
Additional Modules
Add isn server variable weak to control invalid check digit acceptance (Viktor Holmberg) §
This was previously only controlled by function isn_weak().
Additional Modules
Allow values to be sorted to speed btree_gist index builds (Bernd Helmle, Andrey Borodin) §
Additional Modules
Add amcheck check function gin_index_check() to verify GIN indexes (Grigory Kryachko, Heikki Linnakangas, Andrey Borodin) §
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.
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.
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.
Additional Modules / pg_stat_statements
Add pg_stat_statements.wal_buffers_full to report full WAL buffers (Bertrand Drouvot) §
Additional Modules / pgcrypto
Add pgcrypto algorithms sha256crypt and sha512crypt (Bernd Helmle) §
Additional Modules / pgcrypto
Add function fips_mode() to report the server's FIPS mode (Daniel Gustafsson) §
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.
Try another search, or .
The comparison follows PostgreSQL release notes from just after the source through the target version. For a major upgrade, maintenance releases from each older branch are included only up to the next major release date, and never after the target date. A major version such as 18 means its initial release, 18.0. Previews and development snapshots are labeled separately.
Entries come from the original English manuals. Release coverage and commit evidence are verified against upstream sources. Every entry retains its complete explanation and source link. Categories aid browsing; read the full notes for impact, conditions, and migration steps.
Fixes can be backported to several branches. Confirmed duplicates are merged conservatively, with every branch explanation retained. A note describing several independent fixes is excluded only when all are already present in the source. Major-release features remain distinct from related maintenance patches unless their complete original descriptions match. Uncertain matches are retained. This is a release-note history, not an exhaustive comparison of compiled binaries.
CVE results are calculated independently from the PostgreSQL security registry and vulnerability records. A CVE counts as gained protection only when the source is affected and the target is fixed or unaffected. Remaining vulnerabilities are listed separately. Security entries and distinct CVEs are counted separately.
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.