v4.5.0 Release Notes
Release date: April 2026
Version: v4.5.0
This SynxDB release expands vectorized and GPORCA parallel execution to help heavy analytical queries run faster and more reliably, with additional fixes that improve stability across optimizer, storage, replication, security, and tooling.
New query execution capabilities: Extends the vectorized execution engine with hash-based window aggregation (WindowHashAgg) and spill-to-disk support for hash joins; enhances GPORCA with parallel index-only scan, parallel UNION and UNION ALL execution, and WindowAgg Top-K pushdown for top-N-per-group queries.
Key bug fixes and improvements: Resolves PAX toast SIGSEGV crashes that occurred when ANALYZE processed tables where NULL rows precede toasted rows, and fixes failures when creating ZomboDB indexes on partitioned tables so that parent tables can be indexed successfully from Elasticsearch. Additional changes further improve correctness and operational behavior in several internal components.
New features
Database
Category |
Feature |
User documents |
|---|---|---|
Query processing and optimization |
Introduces spill-to-disk support for vectorized hash joins. When the estimated hash table size exceeds the configurable memory budget ( |
|
Query processing and optimization |
Adds hash-based window aggregation ( |
|
Query processing and optimization |
Enables GPORCA to push a Top-K filter below the |
|
Query processing and optimization |
Enables GPORCA to execute index-only scans in parallel for queries that select only index-covered columns, reading results entirely from the index without accessing table data blocks and reducing I/O compared to a parallel index scan. |
|
Query processing and optimization |
Enables GPORCA to execute |
|
Security |
Adds a strict password policy option to the PasswordCheck plugin. When |
New feature details
Query processing and optimization
Spill-to-disk for vectorized hash joins: Vectorized hash joins can now spill the build side to disk when the estimated hash table size exceeds the memory budget set by
vector.hashjoin_spill_memory_mb(default: 512 MB). Spilled data is automatically split into partitions and processed in multiple passes, preventing out-of-memory failures when joining large datasets. This makes vectorized execution viable for hash joins that previously required reducingmax_parallel_workers_per_gatheror disabling vectorization altogether. Setting the parameter to0disables spill-to-disk entirely. The parameter only takes effect on PAX or AOCS tables with vectorization enabled; heap tables fall back to non-vectorized execution regardless of this setting.Vectorized window hash aggregation: The vectorized execution engine now supports hash-based window aggregation (
WindowHashAgg), which processesPARTITION BYclauses using hash-based partitioning instead of sorting. This eliminates sort overhead for window functions on large datasets, reducing query latency for analytical patterns such as running totals, ranking, and moving averages. When vectorization is enabled with the GPORCA optimizer, the optimizer automatically selects the hash-based execution path for eligible window functions. The feature requires PAX or AOCS tables; heap tables fall back to non-vectorized execution.WindowAgg Top-K pushdown: GPORCA can now push a Top-K filter below the
WindowAggoperator for top-N-per-group queries that useRANK() OVER (PARTITION BY ... ORDER BY ...) <= K. GPORCA inserts aPartition Top-Knode that retains only rows within the top K ranks per partition—including all tied rows at the rank boundary—and discards the rest before full window rank computation, reducing memory and CPU usage on large datasets. The optimization is disabled by default and is enabled by settingoptimizer_force_partition_topk = on. OnlyRANK()with<= Kor< (K+1)filter conditions is supported;ROW_NUMBER()andDENSE_RANK()fall back to standardWindowAggexecution.Parallel index-only scan: GPORCA can now execute index-only scans in parallel for queries that select only columns covered by an index, reading results entirely from the index without accessing table data blocks. This reduces I/O compared to a parallel index scan, making it effective for queries on wide tables where a covering index eliminates data block reads. The feature requires a populated visibility map (run
VACUUMon the table first) and applies to B-tree indexes only; bitmap AM indexes are not supported. Setoptimizer_enable_indexonlyscan = offto disable this behavior.Parallel UNION and UNION ALL: GPORCA can now distribute
UNIONandUNION ALLwork across multiple workers within each segment, improving throughput for queries that combine multiple result sets. The feature is enabled by default through theoptimizer_parallel_unionparameter. Setoptimizer_parallel_union = offto disable intra-segment parallelism for UNION queries. Requires the GPORCA optimizer andenable_parallel = on.
Security
Strict password policy for PasswordCheck: The PasswordCheck plugin now supports an optional strict password policy controlled by the
passwordcheck.strict_policyparameter (default:off). When enabled, passwords must meet hardcoded complexity requirements, including at least 9 characters long, at least 2 uppercase letters, at least 2 lowercase letters, at least 2 digits, and at least 2 special characters. Thepasswordcheckmodule must be loaded viashared_preload_librariesbefore this parameter can take effect. Enable it withgpconfig -c passwordcheck.strict_policy -v onfollowed bygpstop -u.
Product change information
GUC configuration parameters
Newly added GUCs
The following configuration parameters are added:
vector.hashjoin_spill_memory_mb: default512(MB). Controls the memory budget for vectorized hash join spill-to-disk. See Vectorization query computing.vector.winagg_spill_work_mem: default0(kB). Controls the memory budget forWindowHashAggspill-to-disk;0means usework_mem. See Vectorization query computing.optimizer_force_partition_topk: defaultoff. EnablesWindowAggTop-K pushdown for top-N-per-group queries in GPORCA. See ORCA performance tuning.optimizer_parallel_union: defaulton. Enables parallelUNIONandUNION ALLexecution in GPORCA. See Execute queries in parallel.passwordcheck.strict_policy: defaultoff. Enables a strict password policy for the PasswordCheck plugin, requiring passwords to meet enhanced complexity rules. See Check password security.
Changed GUCs
optimizer_enable_indexonlyscan: Now also controls parallel index-only scan plans whenenable_parallel = on. See Execute queries in parallel.
Bug fixes and improvements
Query optimizer and executor
Fixed ORCA assigning zero local cost to window functions without an
ORDER BYclause by usingmax(ulSortCols, 1)in the cost formula, preventing the optimizer from underestimating window function evaluation overhead.Fixed
SPI_committo trap errors and start a clean transaction before re-throwing, preventing Python interpreter crashes whenplpythonprocedures encounter commit or rollback failures (Python 3.11 compatibility).Removed a fast path in
TransactionIdIsInProgressthat incorrectly returned false for transactions committed in CLOG but not yet removed from the process array, fixing potential phantom update anomalies andt_xminvisibility errors.Fixed dump/reload failures caused by dropped composite type columns referenced through functions in
FROMby emitting?dropped?column?inruleutilsoutput instead of raising an error.Fixed
postgres_fdwasync data fetch to correctly detectPQsendQuery()failures (which return 0, not a negative value), preventing silently ignoredFETCHquery failures in async mode.Removed an unnecessary loop in a single-iteration code path identified by SonarQube static analysis.
Added
qsort_interruptible()that callsCHECK_FOR_INTERRUPTSperiodically during sort operations applied to statistics collection, allowing previously un-cancelable multi-second sorts to be interrupted.
Storage and access methods
Fixed two PAX bugs that caused external toast pointers to reach
detoast_attr()un-detoasted, resulting in SIGSEGV: aGetDatumindex mismatch whenNULLrows precede toasted rows, and an off-by-one error inAddToastIndex.Fixed three PAX snapshot bugs:
SNAPSHOT_ANYwas incorrectly passed to catalog lookups during index scans, andgp_select_invisiblewas not honored inIndexUniqueCheckor sequential scans.Added
GUC_GPDB_NEED_SYNCtopax.enable_sparse_filterandpax.enable_row_filterso coordinatorSETcommands are dispatched to segment instances; previously, setting these parameters on the coordinator had no effect.Fixed incorrect use of
GetBufferDescriptorinstead ofGetLocalBufferDescriptorfor local buffers, preventing out-of-bounds reads whentemp_buffersexceedsshared_buffers.Fixed stale
diskquota.table_sizeentries persisting after cluster restart by invalidating them during diskquota worker startup in addition topg_classvalidation.Fixed a memory leak in diskquota
refresh_rejectmapwhereSearchSysCacheCopy1tuple copies were not freed after use.Fixed diskquota shared memory allocation by removing DDL message memory from segment processes (needed only on the coordinator) and skipping launcher shared memory initialization on segments.
Added support for ZomboDB indexes on partitioned tables, resolving Elastic errors when creating indexes on parent tables.
Processes and concurrency
Fixed a race condition in DTX recovery by registering all mirrors in a single transaction, preventing an assert failure in
cdbcomponent_getComponentInfowhen recovery readsgp_segment_configurationin a partial state.Fixed a string length calculation in
gpvars_check_gp_resource_group_cgroup_parentthat allowed invalid cgroup parent names containing spaces to pass validation.Fixed stale partition map entries, data inconsistency from schema changes, and missing replica identity checks on partition tables during logical replication.
Added
WAIT_USE_SELF_PIPEas a fallback forepollon illumos to avoidsignalfd()hangs and kernel panics, making self-pipes the default on illumos while preservingsignalfd()on Linux.Fixed a memory leak on logical replication subscribers where attribute mapping memory was not freed when rebuilding the relation mapping.
Security
Fixed missing privilege checks in
pg_stats_extandpg_stats_ext_exprsviews (CVE-2024-4317) to restrict data to table owners or roles with inherited owner privileges, including expression statistics and row-level security policies.Fixed
pg_signal_backendto block signaling of superuser-owned background workers, autovacuum workers, and logical replication launcher processes (CVE-2023-5870).Fixed dump/reload of indexes referencing operator classes, collations, or exclusion operators in non-standard schemas by using the original user ID for ACL checks during
CREATE INDEX.
Tools and utilities
Fixed the GPG verify step in the release script to use absolute artifact paths, resolving “No such file or directory” errors when running with
--repofrom a different working directory.Fixed DEB packaging by setting architecture to
any, correcting theDESTDIRpath forcloudberry-env.sh, and usingDEB_HOST_MULTIARCHinstead of a hardcodedx86_64path.Fixed the
ecpglibpatch for MPP compatibility and applied upstream fixes fornewlocale()call-once-per-process behavior and ppc Darwin builds.Added a pre-upgrade check to
pg_upgradeto detect user-defined operators and aggregates relying on built-in functions changed fromanyarraytoanycompatiblearray, preventing mid-upgrade failures.Fixed premature
IDLEstate transitions inlibpqpipeline mode that caused “message type 0x33 arrived while idle” warnings and lostNULLresult values.Fixed
pgcryptoregression test failures on FIPS-enabled Rocky Linux 8 by updating error message regex patterns and masking ephemeral line numbers.Added
allow_in_place_tablespacesto the GUC sync list and applied rebase compatibility fixes for upstream in-place tablespace support.Fixed
adjust_confto useTestLib::slurp_filedirectly after a refactor removed the inlinePostgreSQL::Test::Utilspackage fromTestLib.pm.Fixed Perl test package aliasing to use full symbol table aliasing instead of per-symbol lists, preventing segfaults on Perl v5.10.1 and earlier.
Added error handling for
mktemp,git fetch, andmkdirfailures incode-review.sh, fixed diff truncation to use byte count, and added auth token validation before MR context gathering.