E.1. Postgres Pro Shardman 18.3.2 #

Release date: 2026-04-02

This is the first Postgres Pro Shardman 18 release. It is based on Postgres Pro Shardman 17.9.2 and PostgreSQL 18.3 and includes all the new features introduced in PostgreSQL 18, as well as bug fixes implemented in PostgreSQL 18.3 update. It also inherits a number of features from Postgres Pro Enterprise 18.3.2. For the detailed description, see PostgreSQL 18 Release Notes, and PostgreSQL 18.3 Release Notes.

For the list of extension modules and utilities specific to Postgres Pro Shardman, as well as the main user-visible core changes over vanilla PostgreSQL, including the inherited Postgres Pro Enterprise features, see Section 2. As compared to PostgreSQL 18.3.2 and Postgres Pro Shardman 17.9.2, the following differences are worth mentioning:

E.1.1. Core and Extensions #

Compared to Postgres Pro Shardman 17.9.2:

  • Added a new approach for global objects. Now there are managed (distributed/replicated and internal) and unmanaged objects.

    • Updated the mechanism of creating managed objects.

  • Added automatic check of the dictionary metadata for DDL operations.

  • 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 a new shardman.pg_stat_fast_path view and its global view shardman.gv_stat_fast_path that show the number of queries that used or didn't use fast path, including queries to unmanaged tables.

  • Added support for multiple sharding keys for FastPath.

  • Added the shardman.global_analyze_async procedure for cluster-wide parallel analysis of managed tables.

  • Added the shardman.pg_stat_reset function that resets some statistics counters to zero, depending on the argument.

  • Improved simple query deparsing and planning for partitioned tables.

  • Improved MVCC logic, now it is closer to the PostreSQL behavior.

  • Improved silkworm to support parallel query execution.

  • Implemented a foreign data wrapper in Postgres Pro Shardman. Now it is not required to install the postgres_fdw extension to access foreign tables on other Postgres Pro Shardman servers.

  • Optimized the statistics transfer between nodes.

  • Reduced the time the horizon is held, which results in less bloating.

  • Removed the list of replicated tables from foreign server parameters.

Enhancements inherited from Postgres Pro Enterprise 18.3.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 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.

  • 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 crash_info:

    • Changed the name format of crash_info output files to specify date and time with microseconds.

  • 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.

  • 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.

  • Added the pgpro_wrap utility that obfuscates the PL/pgSQL code to prevent unauthorized modifications of stored procedures and functions.

  • 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.

  • 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_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 the event log field: connection duration. DISCONNECT events now contain the total connection duration alongside other connection parameters.

  • 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.

E.1.2. Management Utilities #

Compared to Postgres Pro Shardman 17.9.2:

  • Added support for a disaster recovery cluster that provides a higher level of availability for the distributed systems.

    • Added the transition from and to the standby mode for the cluster and keeper with the shardmanctl cluster standby enable and shardmanctl cluster standby disable commands.

    • Added automatic creation of replication slots on primary and standby nodes.

    • Improved the logic of syncpoint file generation based on WAL processing.

    • Added the feature to view storage files with shardmanctl files list and shardmanctl files get commands.

    • Added the stopping of pg_receivewal before a standby cluster is initialized from a backup with shardmanctl probackup restore.

    • Added automatic update of configuration options of a standby cluster to follow the configuration changes of the primary cluster on the Main data center to further apply them on the Backup data center.

    • Added the shardmanctl cluster standby config command that creates a configuration file for a Backup data center.

    • Added the ability to manage standby clusters in terms of the primary shards and standby nodes by using options --lost-shards, --lost-nodes, and -s/--soft to shardmanctl cluster standby disable command.

    • Allowed avoiding situations when CSN is not written to the WAL due to no writing load with the ShardSpec.noopTransactionMonitorTimeout parameter.

    • Updated the shardmanctl cluster status command that now can show status of a cluster in standby mode.

    • Added a feature to synchronize the cluster instance on the Backup data center with the cluster instance in the Main data center with the shardmanctl cluster standby catchup command.

  • Improved the upgrade mechanism.

    • Added a shardmand mechanism that allows showing the services that are currently running in the system.

    • Added a feature to convert a JSON store dump into binary format of the distributed configuration storage with the shardmanctl store convert command.

    • Added the shardmanctl cluster maintenance set command to manage the maintenance mode on the specified PostgreSQL instances in a cluster.

    • Updated logic for working with foreign tools that are initiated with shardmand and shardmanctl by adding new environment variables SDM_PG_MAJOR,SDM_BIN_PATH, and SDM_PROBACKUP_PATH, and -bin-path, probackup-path, and -pg-major common options.

  • Created the distributed storage based on shardmand to replace etcd. Each shardmand instance is now a node in the new distributed storage.

    • Added the shardmanctl store conflicts command to show the store conflicts.

    • Improved the revision storage logic by updating the shardmanctl commands.

    • Updated the shardmanctl cleanup command to work with the new configuration storage.

    • Updated shardmanctl store commands to support the distributed storage.

    • Updated the discover mechanism. Added support for two parallel running shardmand on one node.

    • Updated the node deleting process that now includes deleting information about these nodes from the configuration storage.

    • Allowed normalizing the distributed storage configuration based on the current node cluster configuration with shardmanctl store normalize.

    • Allowed deleting of a host from the distributed storage after deleting of the last DB instance on that host.

    • Removed the DataDir configuration parameter. Now it is required to use the --data-dir parameter or the SDM_DATA_DIR environment variable instead.

  • Added support for the backup process to comply with the pg_probackup version 3, it is considered experimental and is recommended for using in production with caution.

    • Allowed merging incremental backups with the shardmanctl probackup merge --merge-from-id and shardmanctl probackup merge --merge-interval command options.

    • Added the buffer management options for the shardmanctl probackup command.

    • Added the shardmanctl probackup retention command to set the backup retention policy for an instance or directory and launch backup merge or purge according to the specified parameters.

    • Added the pgpro_bindump loading check in shared_preload_libraries and walsender_plugin_libraries.

    • Updated shardmanctl probackup validate, shardmanctl probackup set-config, shardmanctl probackup show-config and deleted the shardmanctl probackup checkdb.

    • Adjusted the backup process to work with the S3-compatible storage.

  • Improved the utilities usability.

    • Added a feature that allows keeping or deleting all unmanaged tables with --copy-local-tables when adding a new shard.

    • Added the --for-upgrade parameter for the shardmanctl restart command. Also added the --with-restart parameter for the shardmanctl upgrade command.

    • Added a feature to send PSQL commands to a specific shard with the shardmanctl psql command.

    • Added a feature to form the connection string for one specified shard with shardmanctl getconnstr --shard command option.

    • Added a feature to specify the socket with the --ipc-socket shardmand option.

    • Added occupied port verification for the following commands to prevent their hanging: shardmanctl init, shardmanctl nodes add, shardmanctl shard add.

    • Added support for the SDM_SERVER_HOST variable that defines whether an instance belongs to shardmand. Also added support for several hosts with the shardmanctl --server-host command.

    • Added a feature to stop or start specific instances with shardmanctl nodes start, shardmanctl nodes stop, shardmanctl shard start, and shardmanctl shard stop by specifying a PostgreSQL port in --node=host:port.

    • Prohibited to run shardmanctl and shardmand under the root user.

    • Updated shardmand that now does not start if the directory does not have the required permissions.

    • Updated the shardmanctl cluster status command that now does not include the nodes of referee or referee_with_wal instances from the output, if the command is executed for a cluster in the standby mode.

    • Updated the shardmanctl config get and shardmanctl config generate command output that now hide the fields with no specified values.

    • Updated the shardmanctl commands to accept the specification file in YAML format and define the format automatically.

    • Improved transferring logic of the environment variable values for the shardcmanctl bench commands.

    • Improved logging for the cluster instance management commands.

    • Updated the cluster and shard stopping process. Now primary node fully stops first, only then followed by standbys when running the commands shardmanctl cluster stop, shardmanctl shard stop, shardmanctl nodes stop.

    • Updated the shardmanctl status, shardmanctl status transactions, shardmanctl rebalance, shardmanctl restart, and shardmanctl restart rolling commands so that they run on the cluster level, thus changing them to shardmanctl cluster status, shardmanctl cluster status transactions, shardmanctl cluster rebalance, shardmanctl cluster restart, and shardmanctl cluster restart rolling

    • Updated the shardmanctl set and shardmanctl unset command syntax, now they are shardmanctl params set and shardmanctl params unset.

    • Updated the shardmanctl params unset that now cannot be called for walsender_plugin_libraries.

    • Adapted the Postgres Pro Shardman utilities to work with shardman_fdw.

    • Updated the shardmanctl config get command that now runs without meta lock.

    • Improved the dictionary check logic for shardmanctl cluster status that considers the core changes.

    • Improved the consistency check for cluster indexes, extensions, procedure languages, sequence, users, tables, collations, tablespaces, schemas, and functions with different --filter options of the shardmanctl schema verify command.

    • Allowed executing commands outside of the transaction block with the --no-transaction flag of the shardmanctl forall command.

  • Added validation to prevent duplicate users in the sdmspec.json at cluster initialization.

  • Added a feature to transfer environment variable values for the pg_ctl commands.

  • Allowed specifying the shardmand port when adding nodes.

  • Improved the promotion logic in case of the quorum loss.

  • Updated the manual shard switching mechanism to consider node priorities.

  • Deleted the syncPointMonitorLimit and syncPointMonitorEnabled configuration parameters.

  • Updated postgres_fdw to work with distributed systems, now it is shardman_fdw. Hence, when upgrading from former Postgres Pro Shardman versions, after running shardmanctl upgrade mind running drop extension postgres_fdw on each cluster node. Also it is required to delete postgres_fdw from shared_preload_libraries.

  • Ended support for the relations option saving for foreign servers.

  • Upgraded supported version for bihactl to 2.

  • Improved dump storage logic for the shardman schema and added data compression.

  • Improved the locking logic for operations that require exclusive cluster access.

  • Deleted the shardmanSchemaDumpMonitorDisabled and shardmanSchemaDumpMonitorTick configuration parameters as redundant during the dumping and backup process.

  • 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.