Release Date: 2026-03-24
This release is based on PostgreSQL 17.9 and Postgres Pro Enterprise 17.7.1. All changes inherited from PostgreSQL 17.9 are listed in PostgreSQL 17.9 Release Notes. As compared with Postgres Pro Enterprise 17.7.1, this version also provides the following changes:
Implemented the ability for the optimizer to add Index Only
Scan plan nodes below Append nodes that
are generated for OR clauses if the
enable_appendorpath parameter is set to
on. This allows producing more efficient query
plans and improving performance.
Implemented the ability for the optimizer to simplify
NOT NOT expression
constructions to expression in correlated
subqueries, which allows “pulling up” these subqueries
into the main query plan and improving performance.
Added a possibility for the optimizer to transform correlated
subqueries with an equality expression into IN
correlated subqueries when the
enable_extra_transformations parameter is set
to on. This allows the optimizer to
“pull up” the resulting subqueries and improve performance.
Added the ability for the query planner to transform
OR clauses into UNION ALL queries.
Such transformations can significantly improve performance and may be
especially useful for queries referencing multiple tables. To enable
this functionality, use the new
enable_orunion_transformation configuration parameter.
Extended the use of the in-memory system catalog to include temporary functions, procedures, and sequences. Previously, it was used only for temporary tables and their indexes.
Improved performance of non-transactional truncate operations on
temporary tables and fast truncate
operations. Now if all pages of the temporary table main data fork are
located only in the temp_buffers cache, this table
may be instantly truncated.
Implemented the experimental multi-segment insertion feature that allows bulk data insertion to the same table in multiple threads simultaneously. This feature is not recommended for using in production for now.
Reduced the amount of debugging information sent to the client or
written to the server log. DEBUG1 severity level
messages about operations with temporary tables are no longer returned.
Optimized performance of page tuple freezing.
Introduced the following changes to the implementation of background freezer:
Added the bgfreezer_log parameter for configuring logging of the background freezer mechanism.
Now background freezer is recommended when dealing with table
bloat where many outdated row versions appear in tables in case
of multiple UPDATE operations. Specifically,
it helps with bloating that may occur if a row is inserted with
NULL values using INSERT
and is then updated multiple times with UPDATE,
each time modifying different columns of that row.
Fixed a memory leak in the background freezer mechanism that occurred during its restart after an error.
Fixed an issue with the background freezer failing to log the backend type.
Introduced the following changes to the implementation of crash_info:
Changed the name format of crash_info output
files to specify date and time with microseconds.
Fixed a bug that could occur when trying to write a query text
to crash_info output files.
Implemented the following enhancements and bug fixes for CFS:
Improved CFS performance that now uses compression contexts with the default compression library of zstd.
Changed the behavior of the
cfs_compression_ratio
function. Now the function returns NaN for
uncompressed relations.
Fixed an issue where
pg_rewind
could fail when used with unlogged tables containing
TOAST data in a compressed tablespace. The
issue was caused by missing cleanup of the
*.cfm files when copying the
“init fork” for the unlogged table.
Fixed an issue with stopping CFS garbage collection when it
would continue running after being disabled by setting
cfs_gc to false.
Fixed a possible segmentation fault in the autovacuum launcher caused by accessing an invalid pointer.
Fixed a segmentation fault that could occur when trying to add an entry to the catalog cache.
Fixed an issue in the skip_temp_rel_lock configuration parameter operation logic, which could cause the lock skipping for temporary relations to fail. The issue could occur after the transaction rollback and wraparound of OIDs.
Fixed an issue with upgrading the Postgres Pro Enterprise cluster using pg_upgrade. When upgrading, some free space map files could contain zeroed pages and, therefore, the FSM should have been considered damaged. Now such pages are not copied to the new cluster.
Fixed an issue for unlogged tables with page conversion from 32-bit
to 64-bit format after migration to
Postgres Pro Enterprise using
pg_upgrade. When a page was converted only
in memory, without writing it to disk, and autovacuum removed
corresponding pg_xact segments at the same time,
transaction status in tuples was lost, leading to errors on access.
Fixed an issue where the messages generated during lock capture contained incorrect 64-bit XIDs.
Fixed an issue, which could cause autovacuum to cycle through some databases while failing to vacuum others. This happened due to autovacuum “soft” limits, which could be set by the vacuum_freeze_table_age and vacuum_multixact_freeze_table_age configuration parameters. These limits were removed. They are no longer required, since the autovacuum_freeze_max_age and autovacuum_multixact_freeze_max_age parameters can now be changed without restarting the server.
Fixed an issue that could occur during collection of vacuum interruption statistics for relations and indexes shared across all databases in a cluster. Also, the number of parallel vacuum interrupts is now taken into account in the statistics.
Fixed a bug that caused daterange_inclusive to fail when processing empty ranges.
Fixed an issue with parallel query execution mechanism for queries that involve at least one temporary table. Previously, only temporary table pages were flushed to the disk, excluding other related pages (index pages, TOAST table pages, etc.). Now, before executing any plan or subplan in parallel mode, all temporary relations are also flushed. This may be useful for 1C.
Fixed an issue in Adaptive Query Execution
that could cause an assertion failure when processing queries
referencing partitioned tables and containing the
GROUP BY or DISTINCT clauses.
Now AQE skips such queries and prints the message that they are not
supported.
Added support for SUSE Linux Enterprise Server (SLES) 16.
Upgraded the BiHA solution to provide the following optimizations and bug fixes:
Upgraded biha to version 1.7.
Implemented cascading replication for BiHA clusters that helps to decrease workloads on the leader and allows deploying BiHA clusters in different data centers. You can configure cascading replication when initializing a new BiHA cluster or GDBiHA cluster by means of the updated bihactl utility and then modify cascading replication configuration using biha.max_replicas, biha.preferred_roles, biha.priority parameters and corresponding functions. If any replication source fails, BiHA re-configures cascading replication automatically.
Implemented experimental functionality that allows to unite nodes of the BiHA cluster into segments (logical nodes) that can be located in geographically distributed data centers. Data is transferred between segments via a single thread between the leader and the front follower — physical nodes located in the leader segment and the follower segment respectively. If the leader or front follower fails, data replication is re-configured automatically. If required, you can set the leader segment manually. For more information, refer to Multi-Level Geographical Distribution and Disaster Resilience.
Upgraded the bihactl utility that keeps former functionality and provides support for managing cascading replication and segments for multi-level geographical distribution and disaster resilience.
Added the biha.super_status_v view — the extended version of the biha.status_v view that additionally displays data for GDBiHA cluster.
Enhanced the logging
functionality to provide better usability and log message clarity.
Added separate logging levels for
Postgres
Controller and
Config
Controller components.
Implemented the service mode functionality managed by the biha.service_mode function. The service mode allows to temporarily pause BiHA operation. This may be required when you modify configuration parameters and want to ensure changes are applied on all cluster nodes.
Added the biha.monitoring function that allows monitoring the current status of BiHA cluster nodes. You can call this function from any node.
Added a special protection mechanism that helps to prevent node hanging and split-brain issues. You can manage the hanging prevention mechanism using the biha.watchdog_timeout configuration parameter.
Implemented compatibility with the replication slot synchronization feature.
Fixed an issue of inconsistent cluster configuration parameters of
a node in the NODE_ERROR state and the leader.
Nodes in NODE_ERROR state are now allowed to
update cluster configuration parameter values.
Fixed a segmentation fault that appeared when
using biha.add_to_ssn
and biha.remove_from_ssn.
Fixed an issue where the referee size grew excessively during
initialization. The reason was that the referee in the in the
referee mode did not filter WAL application.
Currently, the referee in the referee mode
filters WAL application just like the referee in the
referee_with_wal mode.
Fixed an issue that caused the “invalid xl_info in checkpoint
record” log message followed by the leader failure. The issue
occurred due to lack of the standby.signal file
in case of BiHA worker unexpected restart. For
example, this could be caused by a segmentation fault of another
background worker that forces Postgres Pro
to restart all processes. Missing
standby.signal led to incorrect timeline
selection on Postgres Pro startup.
Fixed a bug where a node in the CSTATE_FORMING
state could vote for a candidate with a lower LSN when electing
the new leader.
Fixed a bug where the pg_hba.biha.conf include
directive was written at the end of pb_hba.conf
file.
Removed the following redundant options of the
bihactl utility: --user-postgres-cert,
--user-postgres-key, and --postgres-ssl-mode.
Ended support for OpenSSL version lower than 1.1.1. If you want to use SSL for service connections, ensure that your installed OpenSSL version is 1.1.1 or higher.
Ended support for Elbrus CPU architecture.
Added the pgpro_scout utility to detect sensitive (confidential) information in your database. The utility performs data intelligence to determine whether such information exists and show sensitive data samples.
Fixed a memory leak in the auto_dump extension.
Fixed a memory leak in the pgpro_sfile client functions.
Fixed a bug in postgres_fdw that could occur when
accumulating results of UPDATE ... RETURNING and
DELETE ... RETURNING commands. Previously, the
connection state of the remote server would not update after the
command execution.
Upgraded aqo to provide the following enhancements and bugfixes:
Optimized the mechanism of aqo learning.
Now aqo ignores plan nodes that do not
affect cardinality estimation, for instance
Materialized and Sort nodes.
These ignored nodes no longer write aqo
details in the EXPLAIN output and are not added
to aqo statistics.
Changed the implementation of the least recently used (LRU) cache
mechanism for the auto mode.
Now aqo uses two distinct caches for
aqo_data and
aqo_query_texts. When the
aqo.dsm_size_max limit is reached, the LRU
algorithm first removes data from
aqo_query_texts, if any, and only then
from aqo_data.
Fixed an issue where aqo did not learn
on Group plan nodes.
Fixed an issue where aqo did not distinguish subqueries from each other, which resulted in incorrect calculation of learning statistics for parent plan nodes.
Fixed a memory leak in aqo during data recovery on physical replicas.
Upgraded citus to versions 12.1.10.2 and 13.0.5.2.
Upgraded multimaster to provide the following enhancements:
Enhanced the mechanism of synchronization point creation when adding a new node to the cluster that fixes the potential issue of data divergence on nodes.
Enhanced filtering of replicated transactions that fixes the potential issue of data divergence on nodes.
Implemented filtering of the ALTER DATABASE
command type to execute these commands locally on the current
node. Previously, executing these commands could cause an error
due to an attempt to replicate them to all cluster nodes.
For more information about the commands that can only be executed
locally, refer to Section F.36.6.1.
Upgraded pgpro_bindump to provide the following bugfixes:
Fixed backup failures due to erroneous inclusion of unlogged tables and temporary tablespaces. Previously, if such files were deleted during the backup process, pg_probackup3 would treat them as missing and abort the operation.
Fixed incorrect Postgres Pro edition detection in the PRO data source mode for Shardman.
Upgraded pgbouncer to version 1.25.1 for each OS, except ALT SP 8, for which pgbouncer 1.24.0 is still shipped.
Upgraded pg_hint_plan
to ignore the no_result_cache hint provided by the
pgpro_result_cache extension, allowing you to use
pg_hint_plan and
pgpro_result_cache together.
Upgraded pg_proaudit to provide the following enhancements:
Added the pg_proaudit.log_rows configuration parameter that enables or disables logging of the number of rows affected by an SQL command.
Added a new event log field: connection duration.
DISCONNECT events now contain the total
connection duration alongside other connection parameters.
Upgraded pg_probackup to version 2.8.13 Enterprise, which provides the following new features, optimizations, and bug fixes:
Added verification and validation of recovery-target-name
in the WAL archive during recovery. This prevents situations where the
Postgres Pro cluster fails to start due to an
unreachable recovery target. If a named recovery target was created before
the last backup, the recovery process now correctly checks its existence.
Added the ability to pass parameters to a remote agent in a configuration file format to improve flexibility when working with backup agents in distributed environments.
Implemented compatibility with the pgpro_cpumeter extension.
The pgpro_cpumeter.stat file is now added to the
exclusion list during backup.
Added support for virtual-hosted-style requests for S3 storages, including automatic detection of virtual-hosted-style based on the hostname format (when the hostname starts with the bucket name) and improved compatibility with various S3 API implementations (AWS S3, SberCloud, and others). In virtual-hosted-style URLs, the bucket name is included in the hostname, eliminating the need to add it to the file path.
Fixed an issue where the --skip-block-validation flag was
being ignored during backup. Previously, this resulted in an error if the
cluster contained pages with invalid checksums in their headers. This is
critically important when enabling checksums in older clusters that may
have pre-existing checksum issues. Also, a warning is now displayed when
--skip-block-validation is used.
Improved backup status reporting. The backup status is now set to
DONE before the validation phase. Backup metadata is
written twice: before validation and after backup completion. The
show command now displays a more accurate backup status
during long-running validation checks.
Fixed an issue that could result in a crash if the
backup_content.control file was deleted before the
DELTA backup.
Upgraded pgpro_controldata to version 18.2.0.
Upgraded pgpro_cpumeter
to remove the warning message provoked by the empty
machine_id value.
Upgraded pgpro_datactl to version 1.3 to provide the following enhancements and bug fixes:
Added the estimate command to evaluate compression
ratios across different compression algorithms, analogous to
the cfs_estimate(relation) function.
Added the --per-file option for the stat
command to collect detailed statistics for each file.
Added support for Russian localization.
Fixed compression level ranges for compression algorithms.
Fixed the unpack command behavior. Previously,
compressed files were overwritten when unpacked to the same directory
and incorrectly deleted when unpacked to a different location.
Upgraded pgpro_gbtree to provide the following enhancements:
Added support of references from tables to the global index on a partitioned table using the foreign key constraint.
Added support for row-level locks in queries with global indexes.
Upgraded pgpro_multiplan to version 1.5, which provides the following enhancements and bugfixes:
Added the new pgpro_multiplan.show_hint_string
parameter that allows displaying sets of hints, which are formed
based on plans, in the EXPLAIN output.
Added the optional dbid argument to
functions
that remove frozen queries and update hint sets. For other remove
functions, this argument also becomes optional. It allows you to
specify the ID of a database for which these functions should be
used. If omitted, functions are used for the current database.
Added the new pgpro_multiplan_baseline_cost_update function to update the cost of the specified allowed plan.
Fixed an issue in pgpro_multiplan that could occur when working together with pgpro_stats for collecting statistics about usage of frozen plans.
Upgraded pgpro_queue to version 1.3 to provide the following enhancements:
Added new procedures for queue access management:
reset_queue_access,
grant_queue_access,
and revoke_queue_access.
Queue management procedures can now be used only by a superuser
who created the pgpro_queue extension,
while the grant_queue_access and
revoke_queue_access procedures are also
available to the queue owner.
Added support for callback functions, enabling asynchronous and parallel message processing to optimize the message reading mechanism. To manage this functionality, use new configuration parameters and procedures.
Added new functions for exchange management and procedures for message publishing to support efficient message distribution based on the publish-subscribe model.
Upgraded pgpro_result_cache to fix an issue, which could cause a a server crash with SIGABRT when attempting to read cached data of a column after the data type of this column was changed. Now when executing a query referencing such a column with a changed data type, the previously saved result set is deleted from the cache, and a new result set for the actual column data type is cached.
Upgraded pgpro_rp to add the
pgpro_rp_stat_sleep_view
and pgpro_rp_session_plans
views. These views show the time the working backend spent sleeping due
to resource prioritization and plans for all active sessions,
respectively.
Upgraded pgpro_scheduler to version 2.12.2, which provides an improved mechanism for calculating the number of required background workers, along with more detailed hint and warning messages about insufficient background workers. For more information, refer to Calculating Required Background Workers.
Upgraded pgpro_stats to provide the following enhancements and bug fixes:
Restored the possibility to track aggregate statistics for
sessions, which had previously been removed as unused. Whether
aggregate statistics for the sessions are tracked is controlled
by the pgpro_stats.track_sessions
configuration parameter.
Improved the behavior of session-tracing functions. The
pgpro_stats_trace_insert and
pgpro_stats_trace_update functions now
fail with an error if some filter attribute is listed in the
passed sequence of key-value pairs more than once. If a wrong
argument is passed to the
pgpro_stats_trace_update function, the
filter no longer gets updated. The
pgpro_stats_trace_show function now returns
exactly the values of explain* attributes
that were specified for the filter.
Fixed an issue to avoid crash when two or more constants are marked as having the same location in the SQL statement text.
Upgraded pgpro_tune to provide the following changes:
Added the autovacuum_vacuum_scale_factor
and autovacuum_vacuum_insert_scale_factor
parameters to the pgpro_tune
default.tune preset configuration.
Fixed an issue with pgpro_tune
not being able to process preset names with whitespaces when
specifying a preset in the initdb
PGPRO_TUNE environment variable. Now if
pgpro_tune fails,
initdb also fails.
Fixed the default.tune preset, which now
correctly displays the order of effective_io_concurrency
and random_page_cost parameter values
depending on the drive type.
Upgraded proxima to provide the following features, enhancements, and bug fixes:
Implemented new counters for client connection metrics:
client.lfe.failed, client.lfe.auth_ldap,
and client.lfe.auth_reject. For the full list
of available counters to monitor client connections, refer to the
Client Connection Counters table.
Implemented a range of internal fixes and optimizations to improve performance and reliability of the proxima extension.
Extended the list of objects and SQL functions that enable
proxima to automatically establish the
dynamic dedicated session when they are present in a query. A
session now turns to dedicated when executing
CREATE STATISTICS in a temporary schema. For
more information, refer to
Dynamic Dedicated Session.
Implemented the
adaptive-cpu
balancing algorithm.
Implemented system.cpu_load — a system
metrics counter that allows to monitor CPU utilization on nodes.
In a BiHA cluster, you can query the new
proxima.proxima_metrics_system
view to check the current counter value. For more information, refer to
System Metrics.
Upgraded rum to provide the following changes:
Added functions that allow inspecting all types of RUM index pages at a low level.
Fixed a bug that caused scanning of multi-column
RUM indexes to return incorrect results.
This happened when the index was created with
order_by_attach set to
true for one of the columns, and a query
specified conditions for several index columns, including the
one with order_by_attach.
Upgraded TDE to fix inconsistency of processing zero pages in relation files by TDE and pg_probackup/ pg_probackup3. Now TDE leaves such pages unencrypted, thus avoiding errors when pg_probackup/ pg_probackup3 is started.
If you are upgrading from a Postgres Pro Enterprise release based on the same PostgreSQL major version, it is enough to install the new version into your current installation directory.
ABI versions may change between minor releases of
Postgres Pro. If this is the case, and you see
the ABI mismatch error when trying to run your
extension, make sure to install a new version of the extension
supplied with a new release of Postgres Pro,
or recompile your third-party extension to be able to use it with the
current version of Postgres Pro.
To upgrade your BiHA cluster from Postgres Pro Enterprise 17.7 or earlier to Postgres Pro Enterprise 17.9, see the migration instructions for BiHA.
When using pgpro_multiplan together with proxima in a multi-node cluster, to upgrade to Postgres Pro Enterprise 17.7, consider migration recommendations for proxima.
To upgrade Postgres Pro Enterprise from version 16.X to version 17.X together with the citus extension of version 13.0, see the upgrade instructions.
To migrate from PostgreSQL, as well as Postgres Pro Standard or Postgres Pro Enterprise based on a previous PostgreSQL major version, see the migration instructions for version 17.