Release Date: 2025-10-17
This release is based on PostgreSQL 17.6 and Postgres Pro Enterprise 17.5.1. All changes inherited from PostgreSQL 17.6 are listed in PostgreSQL 17.6 Release Notes. As compared with Postgres Pro Enterprise 17.5.1, this version also provides the following changes:
Added the num_xloginsert_locks configuration parameter, which specifies the number of insertion locks on concurrent write-ahead logging. This parameter is used to improve the efficiency of writing write-ahead logs.
Added the share_lock_fk storage parameter
that enables or disables acquisition of a single SHARE
lock on the table during foreign key constraint checks.
Added a possibility for the optimizer to use memoize nodes for parameterized
ANTI JOINs when the
enable_extra_transformations parameter is set
to on.
Implemented the following enhancements and bug fixes for Adaptive Query Execution:
Implemented a set of optimizations to improve query planning and execution time. In particular, time spent executing each plan node is no longer measured when the query execution time trigger is disabled, which has a significant impact on query performance.
Fixed an issue with logging the duration of completed statements with the extended query protocol when the log_duration parameter was enabled.
Improved performance by introducing a more efficient synchronization primitive instead of previously used spinlocks for a shared invalidation message queue, which allows avoiding a bottleneck. This may be useful for 1C.
Improved performance by suppressing catalog cache invalidation messages for DDL operations on temporary tables and for analyzing these tables. This is useful for 1C.
Improved performance by avoiding invalidation of the
pg_internal.init file when analyzing catalog tables,
particularly when statistics for these tables change frequently. This
may be useful for 1C.
Improved performance by reducing the number of lock requests for the pg_attribute and pg_statistic tables for queries with a large number of relations that are not present in the system cache. This may be useful for some usage scenarios with 1C.
Improved performance of non-transactional truncate operations on temporary tables and fast truncate operations. This is useful for 1C.
Improved performance by adding a possibility to skip locking for indexes on temporary relations, which can be enabled using the skip_temp_rel_lock parameter. This is useful for 1C.
Improved truncation performance for temporary relations. Previously, truncating a temporary relation required scanning the entire local buffer pool once per relation fork to invalidate buffers. Now the buffer pool is scanned only once for all forks. This is useful for 1C.
Improved the efficiency of parallel processing of table indexes in a parallel mode by refactoring the parallel autovacuum code.
Updated CREATE DATABASE, createdb,
and initdb to display an information message when
the value of lc_collate is used as the default for
icu_locale or
--icu-locale.
Optimized the behavior when working with the
COALESCE
function. Now this function is replaced with one of its arguments if
all other arguments were evaluated to null. This
allows improving the selectivity of query clauses and producing better
execution plans.
Introduced the following changes to the implementation of crash_info:
Added the crash_info_timer,
crash_info_timer_interval, and
crash_info_query_threshold configuration
parameters that allow profiling long queries in
crash_info output files.
Extended the diagnostic information that the
crash_info_dump configuration parameter can
specify to write in case of a backend crash. By default, now the
general information on the signal is dumped and for Linux x64, also
the information on the processor state and bytes near RIP (return
instruction pointer). All this ensures better diagnostics, in
particular, in case of SIGILL (illegal
instruction) signals. The way of dumping stack files in case of
crashes has also been changed for Linux x64. Besides,
memory_context has been removed from the default
list of sources to be dumped in order to avoid failures that could
occur when writing the diagnostic information.
Implemented the following enhancements and bug fixes for CFS:
Improved compressed tablespace operations on s390/s390x architectures.
Improved the compression ratio estimation for tables using the
cfs_estimate(relation) function. Note that
cfs_estimate(relation) should be used only
after a checkpoint to avoid incorrect
estimations.
Disabled truncation for compressed relations during vacuum operations.
Removed encryption support for CFS, including the
cfs_encryption configuration parameter.
Fixed an issue with autonomous transactions, which caused a failure to release resources, leading to accumulation of cached plan references.
Fixed page image inconsistency during heap insert on an empty page. Previously, this could result in incorrect page contents on standby servers.
Fixed an issue 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 a possible race condition in the walreceiver
process.
Fixed an issue in LISTEN/NOTIFY
queue handling, which caused failure to obtain transaction status.
Previously, VACUUM FREEZE could advance
datfrozenxid too far forward.
Fixed an issue where the planner could choose non-optimal execution
plans for queries that use the LIKE operator with
the mchar data type.
Fixed a memory leak in the enable_temp_memory_catalog implementation.
Fixed replication issues caused by incorrect WAL horizon advancement.
Previously, if transaction freeze was initiated when calculating the
page base for 64-bit XIDs rather than by VACUUM, an
incorrect horizon value was written to WAL. This could result in
invalidation of logical replication slots or replication lag on physical
standbys.
Fixed a possible segmentation fault, which could occur when handling an error during global index creation.
Added support for Debian 13, Red Hat Enterprise Linux 10, Rocky Linux 10, Oracle Linux 10, and AlmaLinux 10.
Ended support for Ubuntu 20.04.
Added the wal2json extension for logical decoding that converts database changes from the write-ahead log (WAL) into JSON format.
Upgraded aqo to provide the following enhancements and bugfixes:
Added the tmpoids field to the
aqo_data view and the
tmpoids parameter to the
aqo_data_update function
to support queries that involve temporary tables along with
persistent tables.
Fixed the race condition when calling the
aqo_cleanup
function from different sessions.
Fixed an issue where aqo learning data was not saved for queries that use materialization.
Fixed an issue with learning on early terminated nodes. Now for
these nodes, if the number of actual rows exceeds the number of
predicted rows, aqo learns but with the
minimum reliability value. Otherwise,
learning on these nodes is disabled.
Upgraded auto_explain to move the planning time of a
query in the output to a separate line under the planner tree, as in
the EXPLAIN output. With the former location of the
planning time in the output,
pgbadger
could not recognize the information on a query and therefore did not
include it in the report.
Upgraded the BiHA solution to version 1.6 to provide the following features, optimizations, and bug fixes:
Implemented the ability to use SSL certificates for user authentication. For more information about SSL authentication configuration and other available authentication methods, see User Authentication Configuration.
Implemented the STATUS_CHANGED callback that is
called on every node whenever values in the fields of the
biha.status_v
view change (except since_last_hb).
Implemented a set of functions to manage quorum-based synchronous replication in a BiHA cluster: biha.add_to_ssn, biha.get_ssn, biha.remove_from_ssn, and biha.set_ssn. For more information, see Managing Replication.
Implemented the ability to force the pg_rewind
process in a BiHA cluster when required, for example,
for partial database recovery, emergency repairs when standard
rewind fails, or for recovery of specific WAL ranges.
You can execute force run of pg_rewind
by specifying both --force and --start
options. The --force option overrides failed safety
check to allow pg_rewind execution. The
--start=
option specifies the exact WAL location (LSN[,TLI]LSN)
and an optional timeline ID (TLI) that
defaults to the current timeline of the target node if omitted. If
these options are specified, pg_rewind
replays WAL using the checkpoint preceding the specified WAL
location instead of the last common checkpoint.
Implemented the WAL trimming functionality that helps to avoid running pg_rewind to synchronize cluster nodes after failover when WAL divergence is caused only by redundant heartbeat records. The WAL trimming algorithm finds the last common point in WALs of the diverged node and the new leader, verifies that all subsequent records are only heartbeats, and automatically deletes redundant heartbeat records from the diverged node so it can resume replication. You can manage the WAL trimming functionality by means of the new biha.autowaltrim configuration parameter. For more information, see Automatic Cluster Synchronization after Failover.
Improved the LEADER_CHANGE_STARTED callback
functionality. Previously, the callback could fail on the old leader
after you set the new leader by biha.set_leader,
as the old leader immediately restarts. Currently, the callback is
delayed and then called on the old leader right after its restart.
For more information, see the LEADER_CHANGE_STARTED
description in the Callback Types table.
Improved the mechanism of managing
relaxed synchronous replication
in a BiHA cluster. Previously, it was required
that you set the --sync-standbys-min
option of bihactl init
when initializing the cluster to be able to relax synchronous
replication restrictions later. Currently, you can enable, modify,
or disable relaxed synchronous replication at any time using the
biha.set_sync_standbys_min function. The
biha.sync_standbys_min parameter was deleted as
redundant.
Fixed a bug where the biha.port value greater
than or equal to 32768 caused the server to loop.
Ensured compatibility with citus version 13.0.4.1.
Fixed an issue where fasttrun could fail to fully truncate temporary tables if the cached segment count was smaller than the actual number of file segments on disk, leaving disk space occupied even though the table appeared empty.
Upgraded multimaster to provide the following enhancements and bug fixes:
Improved the ability of the node to return to normal operation
after catchup by accelerating the transaction filter building
process at the start of walreceiver.
Fixed a bug that caused recovery hanging and potential data desynchronization when adding a new node.
Fixed unexpected errors in execution of DDL commands that were caused by incorrect processing of catalog cache invalidation messages.
Implemented the ability to configure LDAP authentication for pgbouncer by means of PAM (Pluggable Authentication Modules). For more information, see LDAP Authentication Configuration for pgbouncer.
Updated the pg_freespacemap
module to include the pg_freespace_relation_logical_blocks
function for computing the disk space used by relation forks. This
function works with both compressed and uncompressed tables.
Fixed a memory allocation issue in pg_prewarm, which
could previously produce errors like “invalid memory alloc request size”
when shared_buffers
was set to a huge value.
Upgraded pg_proaudit to provide the following enhancements:
Added support for CEF format for event log files.
Adjusted pg_proaudit output.
xid and vxid
fields are no longer displayed if they are zero.
Upgraded pg_probackup to version 2.8.10 Enterprise, which provides the following new features, optimizations, and bug fixes:
Added the --wal-tree option for the
add-instance command to store archived WAL files
in a tree-like structure. This improves WAL operation performance
with large volumes of logs.
Added the postgres-edition field to the
show command output in the
JSON format to display
DBMS edition information.
Improved the --dry-run option operation during
tablespace recovery. The operation estimation and plan output are
now more precise.
Fixed an issue related to the retention window calculation. The time value is now taken from the host where pg_probackup is running. The retention window is now calculated correctly even with the timezone differences between the servers.
Fixed a problem with the archive-get command
operation. The pbk_prefetch directory is now
created with correct access rights, inheriting permissions from
PGDATA.
Fixed false failure of the checkdb command in the
remote mode during concurrent TRUNCATE operations
or table drops on standby nodes.
Fixed the following issues in the pgpro_bindump module:
Fixed potential pg_probackup3 failure caused by temporary tables during backup validation using the pgpro_bindump module in the PRO mode.
Fixed a memory leak in pg_probackup3 using the pgpro_bindump module for PTRACK operations.
Fixed an issue that could cause infinite looping in pg_probackup3 when using the pgpro_bindump module.
Fixed an issue with multi-timeline backup in the PTRACK mode in pg_probackup3 using the pgpro_bindump module in the PRO mode.
Updated the pgpro_datactl utility to include the following new features:
Upgraded pgpro_gbtree
to accelerate VACUUM, scan, and uniqueness check for
global indexes. To this end, fetching a tuple with a dirty snapshot was
replaced with the use of the visibility map when searching values by
the primary key, and the order of performing VACUUM
for a partitioned table was changed: VACUUM is first
performed for partitions with their primary keys and then for global
indexes.
Upgraded pgpro_multiplan to version 1.3, which provides the following enhancements, changes, and bug fixes:
Added the new pgpro_multiplan.mode parameter that allows you to enable or disable the extension, the use of available plan types, as well as statistics collection.
Added the new pgpro_multiplan.aqe_mode parameter that allows you to enable or disable AQE-related features.
Added the baseline value for the
plan_type field of the
pgpro_multiplan_storage
view to identify allowed plans.
Renamed the following entities:
pgpro_multiplan_fs_counter view to
pgpro_multiplan_stats
usage_numb field of the
pgpro_multiplan_stats view to
counter
pgpro_multiplan_fs_counter() function to
pgpro_multiplan_stats()
pgpro_multiplan.fs_ctr_max parameter to
pgpro_multiplan.max_stats
Updated the set_aqe_trigger function, which
now accepts the query text string when setting individual
AQE trigger values for a query. The parameterized
version of the query text is displayed in the
aqe_triggers view.
Changed the default behavior of statistics collection. Now statistics
are not gathered unless you enable this feature using the
pgpro_multiplan.mode parameter.
Changed the default behavior of the
set_aqe_trigger()
function. Now this function does not work unless you enable individual
AQE trigger values using the
pgpro_multiplan.aqe_mode parameter.
Removed the pgpro_multiplan.enable parameter
that is no longer required. Instead, use the
pgpro_multiplan.mode parameter.
Removed the pgpro_multiplan.aqe_plans_auto_approve
and pgpro_multiplan.aqe_collect_stats parameters.
Instead, use the pgpro_multiplan.aqe_mode
parameter.
Added the sample_string field to the
pgpro_multiplan_storage
view to store a non-parameterized query for which a plan was frozen
or added to a set of allowed plans.
Added the planid field to the
pgpro_multiplan_captured_queries
and pgpro_multiplan_stats
views. This field specifies the plan ID compatible with the
pgpro_stats extension and allows you to get extended
statistics by joining information from the pgpro_multiplan_stats
and pgpro_stats_statements views.
Added the pgpro_multiplan_remove_baseline function that removes the specified plan from a set of allowed plans.
Fixed an issue with pgpro_multiplan
failing to register queries involving the INTERVAL 'const'
notation.
Fixed an issue where plan_hash was not calculated
when adding plans for queries with custom hints to a set of allowed
plans (baseline). Now such plans can be added to a baseline with
correct plan_hash values.
Fixed a segmentation fault, which occurred on attempts to access the aqe_triggers view or call the aqe_triggers_reset function with disabled pgpro_multiplan. Now all functionality related to AQE triggers works regardless of the whether pgpro_multiplan is enabled.
Upgraded pgpro_pwr to version 4.10, which completely redesigns the report and supports PostgreSQL 18.
Upgraded the pgpro_queue extension to version 1.2 and provided the following enhancements and bug fixes:
Fixed an issue with processing too long queue names when
using CREATE_QUEUE.
Corrected returned types for message reading functions.
Fixed an issue, which could cause data modification attempts on replicas after restart.
Upgraded pgpro_result_cache to version 1.1, which provides the following enhancements:
Implemented automatic invalidation of cached result sets that can be enabled using the new pgpro_result_cache.consistent parameter.
Added two new configuration parameters that will be useful for debugging purposes.
Upgraded pgpro_rp to version 1.4 to support upgrade from older major versions and to add new views. These views are reserved to be implemented in future releases. Until then, using them will return an error.
Upgraded pgpro_scheduler to version 2.12, which provides the following bug fixes and improvements:
Added the schedule.clean_at_jobs_done
and schedule.clean_at_jobs_done
functions that can clean schedule.at_jobs_done
by removing old records.
Provided the ability to change the next start time for
a cron job that has next_time_statement by
updating cron, date,
dates, or rule using the
set_job_attributes() function.
Upgraded pgpro_sfile
to add the sf_import and
sf_export server functions for
import and export of sfile objects, respectively, as well
as their client-side analogs.
Upgraded pgpro_stats to provide the following enhancements and bug fixes:
Implemented the ability to track utility commands by their
query_id, as it is done in
pg_stat_statements.
Previously, utility commands were tracked based on strict comparison
of their textual query strings, and therefore could not be properly
normalized.
Fixed a segmentation fault that could occur when defining custom metrics. The error originated from a memory allocation issue, which was fixed.
Added the Transparent Data Encryption (TDE) feature, which enables page level encryption in Postgres Pro Enterprise with the pgpro_tde extension.
Fixed an issue with incorrect configuration parameter values specified
when using the 1c.tune preset of the
pgpro_tune utility.
Upgraded the pgpro_usage extension to fix an issue with usage statistics, which could be unexpectedly lost after a crash. Now the statistics file is preserved at startup and updated regularly at checkpoints.
Upgraded pg_query_state to version 1.2 to add the pg_progress_bar and pg_progress_bar_visual functions that allow monitoring the current progress of query execution.
Added the --enable-large-mem-buffers option to the
pg_restore to allow restoring a database that
does not contain large bytea values and records with
several text values as a non-superuser.
Improved the pg_waldump utility behavior when used with a segment containing an unfinished WAL record. Previously, if an unfinished WAL record was found, the utility displayed a misguiding log message about an invalid page header. Now, the log message clearly informs about an unfinished WAL record found providing the beginning LSN of the record, as well as the lost part LSN.
Upgraded plpgsql_check to version 2.8.2 for all operating systems, except for AlterOS 7.5 and SLES 12, which continue using the previous version.
Fixed an issue in postgres_fdw, which could cause
UPDATE and DELETE queries with
a RETURNING clause to fail with
“out of memory for query result” errors. Now
RETURNING results are processed in batches, with
the buffer size for each batch controlled by the
fetch_size option.
Upgraded proxima to provide the following enhancements and bugfixes:
Implemented the monitoring functionality that allows tracking the proxima state in a BiHA cluster. For more information, see Monitoring.
Improved the distribution strategy for read-only workloads on the Proxy-to-Follower port. Previously, read-only transactions within one session were distributed across cluster replicas according to the selected algorithm. Currently, proxima attaches a client session to a certain cluster replica to ensure that all transactions within this particular session are executed on the same replica.
Improved proxima troubleshooting
capabilities by adding code location to the log file for messages
of the error log level.
Fixed a bug where proxima was unable to process or break a client connection query in case of unexpected memory shortage that could cause hanging on the client side.
Fixed a bug where proxima could not release some Postgres Pro backend processes when disabled or enabled using the proxima.enabled configuration parameter that led to a growing number of idle backend processes and memory leaks.
Fixed a bug that caused a referee node to fail when added to a BiHA cluster with proxima enabled. The main symptom was the connection loss in pg_basebackup followed by the error message: “error: could not initiate base backup: server closed the connection unexpectedly”.
Fixed an issue with incorrect termination of the system thread in proxima.
Fixed a bug that caused termination of the proxima process after restart of the BiHA cluster.
Fixed an issue with incorrect proxima startup order after restarting a node in a BiHA cluster.
Fixed memory leak in libev caused by unoptimized resource allocation.
Fixed a bug where log messages about modification of proxima configuration parameters were duplicated by other processes.
Upgraded rum to provide the following bugfixes:
Fixed a segmentation fault caused by invalid memory access when a buffer pointer was used after the underlying buffer was modified by another thread.
Fixed an index scan infinite loop when using multiple
ORDER BY clauses.
Upgraded utl_http to version 2.0, which provides the following improvements:
Added the support for TLS and MD5.
Improved the error message for setting invalid
OPT_SSL_VERIFYHOST.
The built-in analytical platform and pgpro_duckdb are no longer included. This functionality will be covered by the upcoming Postgres Pro AXE product.
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.5 or earlier to Postgres Pro Enterprise 17.6, see the migration instructions for BiHA.
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.