Back to Clickhouse

2026 Changelog

docs/changelogs/v25.12.6.38-stable.md

26.4.1.1-new12.1 KB
Original Source

2026 Changelog

ClickHouse release v25.12.6.38-stable (8bca0c86b58) FIXME as compared to v25.12.5.44-stable (6b09ccf262f)

Performance Improvement

  • Backported in #97061: If a FINAL query used primary key condition for filtering followed by skip indexes for other conditions, the PrimaryKeyExpand processing step will now only check the initial shortlisted primary key ranges for intersection. #94903 (Shankar Iyer).
  • Backported in #96176: Trim size of CachedOnDiskReadBufferFromFile structure 50x. #96098 (Azat Khuzhin).

Improvement

Bug Fix (user-visible misbehavior in an official stable release)

  • Backported in #97329: Remove unnecessary skip permissions check in ATTACH queries for a view with SQL Security. This prevents potential privilege escalation when a user attaches a view with a definer without validating required access. #94865 (pufit).
  • Backported in #95816: Fixed type inference for qualified columns from source tables when multiple joins are used with USING clause. Previously, subsequent joins incorrectly updated types of underlying source columns to a common supertype even when the column was not involved in that join (e.g., in SELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a), the t2.a column is only used by the first join, so its type should be the supertype of t1.a and t2.a, excluding t3.a). This could lead to logical errors or crashes when functions expected different column types than what actually appeared in the execution plan. #95157 (Vladimir Cherkasov).
  • Backported in #96394: Fix a logical error in some cases when negative LIMIT/OFFSET is used in distributed queries. #95357 (Nihal Z. Miaji).
  • Backported in #96220: Fix crash during tupleElement applied to arrays of JSON. Closes #95581. #95647 (Pavel Kruglov).
  • Backported in #96054: Fix squashing partitioned delta lake data. #95773 (Kseniia Sumarokova).
  • Backported in #96084: Fixed a NOT_SUPPORTED error that could occur when using the direct join algorithm with an empty MergeTree table. #95935 (Vladimir Cherkasov).
  • Backported in #96213: Fix skipping paths in JSON data type. Previously with JSON(SKIP path) all JSON keys with prefix path were skipped, even keys like "pathpath", so it could lead to data loss for these paths during insert. Now it's fixed and only key "path" is skipped. #95948 (Pavel Kruglov).
  • Backported in #96080: Fix period for global profilers (controlled by global_profiler_real_time_period_ns and global_profiler_cpu_time_period_ns). Instead of set value, a truncated value was used, causing profiler to wakeup more than intended. #96048 (Antonio Andelic).
  • Backported in #96542: Fix revoking default roles. #96103 (Vitaly Baranov).
  • Backported in #96160: Fix use-after-free in the index analysis in a rare combination of disabled use_primary_key and a very large number of disjunctions of conditions that use the index. #96112 (Alexey Milovidov).
  • Backported in #96157: Fix use-of-uninitialized-value in formatDateTime with non-fixed-width formatters, such as MySQL and JODA-style. #96133 (Alexey Milovidov).
  • Backported in #97153: Fix AccessRights::contains returning incorrect results with partial revokes. #96170 (pufit).
  • Backported in #96280: Fix possible deadlock in ProcessList. It can happen because of possible lock inversion if memory overcommit tracker triggers when we are adding task to cancellation checker. #96182 (Antonio Andelic).
  • Backported in #96462: Fixed a bug where queries involving outer joins (LEFT, RIGHT, or FULL) combined with multiple INNER JOINs could return incorrect results due to illegal join reordering. When an outer join's ON condition referenced columns from multiple previously joined tables, the optimizer failed to account for all table dependencies and could reorder the joins incorrectly, producing missing rows. Close #95972. #96193 (Vladimir Cherkasov).
  • Backported in #96562: When a table has no statistics defined, ClickHouse shouldn't try to them. This avoids some overhead (100+ms) for checking if the statistics files exist. (issue #96068). #96233 (Han Fei).
  • Backported in #96386: Fix incorrect partition pruning for not IN and not has function in some cases. #96241 (Nihal Z. Miaji).
  • Backported in #96327: Fix stack-use-after-scope in the vector similarity index. #96259 (Alexey Milovidov).
  • Backported in #96532: Fixes livelock in the cancellation checker thread for queries with high max_execution_time values. #96450 (Sergei Trifonov).
  • Backported in #96693: Validate witness version in bech32 to avoid buffer overflow. #96671 (Raúl Marín).
  • Backported in #97206: Fix min(timestamp) returning epoch (1970-01-01) via _minmax_count_projection after TTL merge when all rows in a block are filtered out. #96703 (Raquel Barbadillo).
  • Backported in #96919: Fixed ALTER TABLE DROP COLUMN queries failing after a lightweight update was previously performed on the same column. #96861 (Anton Popov).
  • Backported in #96938: Fix std::terminate exception in indexOfAssumeSorted when called with incompatible types (e.g., IPv4 array with integer search value). #96877 (Alexey Milovidov).
  • Backported in #97049: Fix exception Bad cast from type DB::ColumnNullable to DB::ColumnString when using window functions with group_by_use_nulls = 1 and CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
  • Backported in #97125: Fix crash (SEGFAULT) in clearCaches caused by BlockIO::operator= not moving query_metadata_cache, leading to premature destruction of cached storage snapshots and use-after-free of MergeTreeData storage. #96995 (Alexey Milovidov).

Build/Testing/Packaging Improvement

NO CL CATEGORY

NO CL ENTRY

  • NO CL ENTRY: 'Backport #93827 to 25.12: Fix rebuilding of projections with _part_offset during merge'. #95873 (Amos Bird).

NOT FOR CHANGELOG / INSIGNIFICANT