Release date: 2026-04-06
This release is based on Postgres Pro Shardman 17.7.1 and PostgreSQL 17.9. It also inherits a number of enhancements and bugfixes from Postgres Pro Enterprise 17.9.2. All changes inherited from PostgreSQL 17.9 are listed in PostgreSQL 17 Release Notes. As compared with Postgres Pro Shardman 17.7.1, the following differences are worth mentioning:
Compared to Postgres Pro Shardman 17.7.1:
Ended support for Debian 11.
Fixed a bug with the foreign server update after restoring from a backup.
Enhancements and bugfixes inherited from Postgres Pro Enterprise 17.9.2:
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. 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 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 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 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.
Added support for SUSE Linux Enterprise Server (SLES) 16.
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 Shardman 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.
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_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.
Fixed an issue that could cause operations attempting to evict a
buffer from the temp_buffers cache to fail with the
“block N of table_name is still referenced” message.
Fixed an issue that allowed memory allocation in a critical section,
which could cause errors to be reported with PANIC
severity level instead of ERROR.
Implemented the ability to cache file descriptors for directories in
PGDATA and updated the open and
stat system calls to use these cached descriptors
to reduce CPU usage when planning SQL queries.
Compared to Postgres Pro Shardman 17.7.1:
Added the shared_xmin_raw metric to the
shardman.pg_stat_csn
view that shows the oldest XID disregarding the catalog transaction ID horizon.
Added the --for-upgrade parameter for the
shardmanctl restart command. Also added the
--with-restart parameter for the
shardmanctl upgrade command.
Improved the protection of Postgres Pro Shardman dictionaries against modifications by malicious users.
Updated the manual shard switching mechanism to take into account node priorities.
Updated the etcd version to 3.6.8 and fixed a corresponding bug for the cases when the etcd node did not send its version.
Fixed the shardmanctl shard rm command failure with
non-standard instance ports.
Fixed a bug with status display if the BiHA
was unavailable. Fixed the shardmanctl replicas reinit
command failure for the nodes where BiHA was
in the NODE_ERROR state.
Fixed the following vulnerabilities: CVE-2025-61724, CVE-2025-58187, CVE-2025-47912, CVE-2025-58183, CVE-2025-61723, CVE-2025-58186, CVE-2025-58185, CVE-2025-58188, CVE-2025-61725, CVE-2025-61727, CVE-2025-61729, CVE-2025-61726, CVE-2025-68121, CVE-2026-33186.
Provided the following bugfixes for checkup manager:
Fixed the shardmanctl schema verify --filter sequences
command failure to detect sequence inconsistencies across shards.
Fixed the shardman.check_sharded_tables
function failure to detect sharded table issues.
Fixed visibility issues when reading and updating data in the same query.