Date: 2026-03-26
This release is based on PostgreSQL 18.3 and Postgres Pro Enterprise 18.1.1. All changes inherited from PostgreSQL 18.3 are listed in PostgreSQL 18.3 Release Notes. As compared with Postgres Pro Enterprise 18.1.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
extra_query_transformations parameter is set to
full. 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.
Added the ability to insert rows in bulk from query results when
creating a table using CREATE TABLE AS with the
enabled append_optimized storage parameter.
Added the aggressive value of the
append_optimized storage parameter. It
allows always creating new pages for inserted rows instead of
searching for an appropriate page in the free space map. This
improvement optimizes bulk insertion for tables where free space is
fragmented across many pages.
Returned the ability to create temporary objects in permanent tablespaces and specify permanent tablespaces in the temp_tablespaces configuration parameter.
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 1 for
uncompressed relations.
Added the cfs_is_relation_compressed function to check whether the specified relation is compressed.
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 an issue potentially leading to a server crash that could occur when attempting to insert data in a reference-partitioned table if no partitions were created for this table and the table was created in the same transaction.
Fixed an issue potentially leading to a server crash that could occur
when specifying an expression as a partitioning key in the
PARTITION
BY REFERENCE clause to create a reference-partitioned
table.
Fixed an issue potentially leading to a server crash that could occur
in rare cases when attempting to create a reference-partitioned table.
The issue occurred if several tables were created or deleted in
parallel and the search_path configuration
parameters was modified.
Fixed an issue related to reference-partitioned tables created using
the PARTITION
BY REFERENCE clause. The issue could potentially cause
a server crash and occur when a parent partitioned table had a
DEFAULT partition, which was also a partitioned table.
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.
Changed the message severity level to ERROR in
case of page conversion errors from 32-bit to 64-bit format. Previously,
the server would crash with PANIC.
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:
Implemented migration of a BiHA cluster to a major version of Postgres Pro Enterprise with minimal downtime that is recommended to use if interruption of your database operation is required to be reduced to a minimum. The implemented migration method is based on the new commands of the bihactl utility designed to automate migration steps: bihactl upgrade start, bihactl upgrade move, and bihactl upgrade finish. Currently, the new method is supported for migrations from Postgres Pro Enterprise version 17.X to version 18.X. For more information, refer to Migrating the BiHA Cluster to Version 18.X with Minimal Downtime.
Implemented the ability to use SSL certificates for authentication
of biha_replication_user. For more information
about SSL authentication configuration and other available
authentication methods, see
User
Authentication Configuration.
Implemented compatibility with the replication slot synchronization feature.
Fixed the follower node deployment failure caused by divergence of versions of bihactl and pg_probackup.
Fixed a bug of the bihactl cluster init --node-name option that failed to set a custom node name.
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 the excessive timeout issue when no WAL was received that could cause replication cycling in a cascading BiHA cluster. Currently, if a node does not receive WAL within the time set in biha.no_wal_on_follower, it starts searching for a new replication source as configured in biha.preferred_roles.
Fixed a bug where the pg_hba.biha.conf include
directive was written at the end of pb_hba.conf
file.
Fixed an issue where bihactl did not use environment variables when operating with Postgres Pro utilities, such as initdb.
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.
Added the pgpro_wrap utility that obfuscates the PL/pgSQL code to prevent unauthorized modifications of stored procedures and functions.
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 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.
Fixed an issue where the PARTITION BY REFERENCE clause failed to operate with multimaster.
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_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.
Performed stabilization of KVik commands.
Implemented support for SSL encryption for KVik. You can now enable SSL encryption for incoming client connections to the proxima.kvik_port port using the new proxima.kvik_ssl_enabled configuration parameter. For more information, refer to Configuring SSL for KVik.
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 18.1 to Postgres Pro Enterprise 18.3, refer to Upgrading the BiHA Cluster from Version 18.1 to Version 18.3.
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 18.