Back to Clickhouse

2026 Changelog

docs/changelogs/v25.8.17.37-lts.md

26.4.1.1-new11.9 KB
Original Source

2026 Changelog

ClickHouse release v25.8.17.37-lts (b4cc081ff0a) FIXME as compared to v25.8.16.34-lts (7938087aa80)

Performance Improvement

Improvement

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

  • Backported in #97109: Fix possible logical error when using analyzer_compatibility_join_using_top_level_identifier with multiple joins. #90010 (Vladimir Cherkasov).
  • Backported in #96400: Fixed possible incorrect query results after lightweight updates in SELECT queries with the enabled query condition cache. Fixes #90176. Fixes #90054. #90204 (Anton Popov).
  • Backported in #91754: Fix access validation for ALTER UPDATE queries when a remote table function is used with localhost as a target host. #90761 (pufit).
  • Backported in #97815: Related issue #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
  • Backported in #97327: 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 #95814: 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 #95484: The mergeTreeProjection table function was missing an access check, allowing users without SELECT permission on a table (but with permissions for table functions) to read data from its projections. This fix adds the same access check that mergeTreeIndex and mergeTreeAnalyzeIndexes already have. #95480 (Alexey Milovidov).
  • Backported in #96052: Fix squashing partitioned delta lake data. #95773 (Kseniia Sumarokova).
  • Backported in #96209: 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 #96076: 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 #96538: Fix revoking default roles. #96103 (Vitaly Baranov).
  • Backported in #97149: Fix AccessRights::contains returning incorrect results with partial revokes. #96170 (pufit).
  • Backported in #96276: 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 #96555: Fixed crash in old analyzer if JOIN and duplicated aliases. #96405 (Ilya Golshtein).
  • Backported in #96578: Fixes livelock in the cancellation checker thread for queries with high max_execution_time values. #96450 (Sergei Trifonov).
  • Backported in #96689: Validate witness version in bech32 to avoid buffer overflow. #96671 (Raúl Marín).
  • Backported in #97202: 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 #96934: Fix std::terminate exception in indexOfAssumeSorted when called with incompatible types (e.g., IPv4 array with integer search value). #96877 (Alexey Milovidov).
  • Backported in #97463: Fix SEGFAULT in supportsTrivialCountOptimization due to null dereference. #97281 (Pablo Marcos).
  • Backported in #97434: Remove TABLE_UUID_MISMATCH check for non-analyzer. #97323 (Azat Khuzhin).
  • Backported in #97607: Fix a possible use after free in StorageKafka2. #97520 (Bharat Nallan).
  • Backported in #97952: Fix logical error about missing stream during INSERT SELECT with JSON and buckets in shared data. Closes #97331. #97523 (Pavel Kruglov).
  • Backported in #97597: Fix null pointer dereference when applying patch parts during lightweight updates. #97583 (Alexey Milovidov).
  • Backported in #97713: BaseSettings::readBinary passes the index from accessor.find to field_infos[] without checking for the not-found sentinel value (i.e., -1), which may cause a std::vector out-of-bounds access. The issue was caught thanks to libcxx hardening. This probably happened during query plan deserialization when a newer server sends a setting unknown to an older server. The string-based read method already handles this correctly; readBinary was missing the same check. #97585 (Miсhael Stetsyuk).
  • Backported in #97911: Fix incorrect result when grace_hash algorithm is used with non-equi joins and left block cannot be processed completely because of the size constraints on the join result. #97866 (János Benjamin Antal).
  • Backported in #98072: Fix data race in ZooKeeper client between sendThread and receiveThread. #97887 (Pablo Marcos).
  • Backported in #98194: Fix segfault in query plan optimization when converting outer join to inner join with arrayJoin in filter expression. #98147 (Alexey Milovidov).
  • Backported in #98382: Fixed LOGICAL_ERROR exception "Invalid binary search result in MergeTreeSetIndex" triggered by toDate conversion on key columns with data crossing the 65535 boundary. #98276 (Alexey Milovidov).

NOT FOR CHANGELOG / INSIGNIFICANT