Back to Clickhouse

2026 Changelog

docs/changelogs/v25.10.4.104-stable.md

26.4.1.1-new32.5 KB
Original Source

2026 Changelog

ClickHouse release v25.10.4.104-stable (5051266d584) FIXME as compared to v25.10.3.100-stable (1e703eae565)

Backward Incompatible Change

  • Backported in #92119: Follow-up to https://github.com/ClickHouse/ClickHouse/pull/88380. This PR marks disabled positional arguments in the projections as a backward-incompatible change. Additionally, it introduces the enable_positional_arguments_for_projections setting to enable a safe ClickHouse cluster upgrade when positional arguments are present in the projections. #92007 (Dmitry Novik).

New Feature

  • Backported in #91308: Add a new MergeTree setting merge_max_dynamic_subcolumns_in_wide_part to be able to limit the number of dynamic subcolumns in the Wide part after merge regardless of the parameters specified in the data type. #87646 (Pavel Kruglov).

Performance Improvement

Improvement

  • Resolved CVE-2025-5318 in ClickHouse's libssh. #90808 (Robert Schulze).
  • Backported in #91252: Fixed potential thread pool starvation when reading column samples for JSON columns with many subcolumns by respecting the merge_tree_use_prefixes_deserialization_thread_pool setting instead of unconditionally using the thread pool. #91208 (Raufs Dunamalijevs).
  • Backported in #92301: Allow implicit type conversion when casting Array to QBit. Integer and float arrays can now be inserted directly into QBit columns without explicit type casts. #91846 (Raufs Dunamalijevs).
  • Backported in #92569: Make query memory usage detection for spilling to disk during aggregation/sorting more robust. #92500 (Azat Khuzhin).
  • Backported in #93373: For all AzureBlobStorage native copy fails, we try to read & write. #92888 (Smita Kulkarni).

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

  • Backported in #92187: Fix removing unused projection columns in the presence of UNION. Fixes #88180. #88350 (Sema Checherinda).
  • Backported in #92261: Fixed several issues caused by premature column removal in TTL. Resolves #88002. #88860 (Amos Bird).
  • Backported in #92222: Fix handling of non materialized Nested(Tuple(...)) (added via ALTER). Fixes #83133. #88879 (Azat Khuzhin).
  • Backported in #91505: Fix hive partitioning incompatibility preventing smooth upgrade in 25.8 (fixes error All hive partitioning columns must be present in the schema during upgrade). #90202 (Kseniia Sumarokova).
  • Backported in #90606: Fix bug in reading subcolumns from JSON in compact parts that could lead to CANNOT_READ_ALL_DATA error. Resolves #90264. #90302 (Pavel Kruglov).
  • Backported in #90975: Fix possible logical error during renaming and modifying the same Nested column in one ALTER. Resolves #90406. #90412 (Pavel Kruglov).
  • Backported in #91057: Fix parsing JSON/Dynamic/Variant values from HTTP parameters. Resolves #88925. #90430 (Pavel Kruglov).
  • Backported in #91874: Fixes a bug where toDateTimeOrNull of a negative argument returns NULL. #90490 (Yarik Briukhovetskyi).
  • Backported in #91037: Fix possible logical error during output of LowCardinality(Bool/Date32) in Arrow format. Resolves #83883. #90505 (Pavel Kruglov).
  • Backported in #90790: Retry to markReplicasActive when failing to resolve address during local host check: Print a warning log if there is an exception during self host check in DDLTask. In DDLWorker::markReplicasActive, throw an exception to retry if there is no local host found and there are host IDs in clusters. #90556 (Tuan Pham Anh).
  • Backported in #91721: Fix type-casting errors when using LowCardinality columns in partition keys. Closes #89412. #90666 (xiaohuanlin).
  • Backported in #91758: Fix access validation for ALTER UPDATE queries when a remote table function is used with localhost as a target host. #90761 (pufit).
  • Backported in #90873: Fix named collections hidden secrets to depend on display_secrets_in_show_and_select and format_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • Backported in #90854: Fix possible inconsistent state of shared data and dynamic paths in JSON that could lead to logical errors and unexpected results. #90816 (Pavel Kruglov).
  • Backported in #90943: Fix ALTER MODIFY QUERY with dictGet() and dictionary name in CSE for SharedCatalog (cloud only feature). #90860 (Azat Khuzhin).
  • Backported in #91322: Fix compatibility of in-memory serialization of String aggregation state. Different serialization could lead to duplicate results if aggregation query is executed on instances with different versions. New serialization can be enabled with serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • Backported in #90935: Fix background flush of Buffer in case of frequent INSERTs. #90892 (Azat Khuzhin).
  • Backported in #91048: Fix high memory usage during reading JSON/Dynamic/Variant columns. #90907 (Pavel Kruglov).
  • Backported in #91296: Fix buffer allocation for base58Decode function. #90909 (Antonio Andelic).
  • Backported in #91223: Fix wildcard grants check for partial revoke. Added more tests. #90922 (pufit).
  • Backported in #91502: Fixes SummingMergeTree aggregation for Nested LowCardinality columns. #90927 (Ivan Babrou).
  • Backported in #91769: Fix handling global grants with wildcard revokes Fixes the issue when revoking a wildcard grant can accidentally revoke some global-level grants like CREATE USER. #90928 (pufit).
  • Backported in #91080: Fix possible infinite loop in azure list blobs. #90947 (Julia Kartseva).
  • Backported in #91139: Fix excessive Buffer flushes (burns CPU and produce tons of logs). #91000 (Azat Khuzhin).
  • Backported in #91075: Fix bug in JSON when path can be both in shared data and dynamic paths during sub-object reading in Compact parts with disabled write_marks_for_substreams_in_compact_parts. #91014 (Pavel Kruglov).
  • Backported in #91090: Fix std::out_of_range in CTE with dictGet with no arguments. Closes #91027. #91022 (Pavel Kruglov).
  • Backported in #91692: Fix reading dynamic subcolumns from materialized columns in mutations. Closes #90653. #91040 (Pavel Kruglov).
  • Backported in #92082: Fix logical error in ARRAY JOIN when one of the table columns is empty tuple column. Closes #90801. #91123 (Nihal Z. Miaji).
  • Backported in #91349: Fix lazy materialization of a column added via alter add column in old parts. #91142 (Pavel Kruglov).
  • Backported in #91267: Fix merging JSON columns in Summing/Aggregating/Coalescing MergeTree. Previously it could lead to unexpected dynamic paths durign writing to data parts. #91151 (Pavel Kruglov).
  • Backported in #91319: Fix possible inconsistent dynamic structure during writing in compact parts that could lead to segfault. #91152 (Pavel Kruglov).
  • Backported in #91404: Fix inserting into CoalescingMergeTree column with Tuple of JSON/Dynamic and LowCardinality. Closes #91215. #91270 (Pavel Kruglov).
  • Backported in #91340: Fix SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • Backported in #91548: Fix a crash when maliciously crafted byte streams deserialize into nested QBit types, which should be impossible but could be exploited to crash the server. #91313 (Raufs Dunamalijevs).
  • Backported in #91539: Fix Alias table with empty args in Replicated database. Resolved #91378. #91382 (Kai Zhu).
  • Backported in #91564: Currently, the setting is set to false, so when async insert queue is flushed to a remote server, the inserts are always synchronous. Even in case of the setting is True for a user. #91386 (Mikhail f. Shiryaev).
  • Backported in #91443: Remove Sparse columns from header in merge algorithms. Closes #91377. #91396 (Pavel Kruglov).
  • Backported in #92137: Fix crash in dictGetDescendants caused by NULL when dictionary type has Hierarchy support but no column is HIERARCHICAL. Closes #92026. Closes #92121. #91420 (Nihal Z. Miaji).
  • Backported in #91670: Fixed QBit type failing with query parameters like SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • Backported in #91801: Fix logical error caused by asterisks argument in remote function. Closes #90568. #91524 (Nihal Z. Miaji).
  • Backported in #91661: Disallow ALTERs for Object Storage table engines. For example, ALTER ADD PROJECTION could have led to an inability to restart the server, since Object Storage engines do not support projections. #91573 (Nikolay Degterinsky).
  • Backported in #91807: Fixed L2DistanceTransposed returning incorrect results when using non-constant reference vectors (e.g., from a table). #91517. #91593 (Raufs Dunamalijevs).
  • Backported in #91865: Fix increased memory usage in join with "additional filter", close #91011. #91664 (Vladimir Cherkasov).
  • Backported in #92691: Fix possible logical error in Log engine during subcolumns reading. Closes #91710. #91711 (Pavel Kruglov).
  • Backported in #91892: Fix delta lake setting delta_lake_snapshot_version which could give incorrect result when used with table engine (not table function) and value -1 (disabled) after snapshot version was used before that. Closes #87676. #91818 (Kseniia Sumarokova).
  • Backported in #91919: Fix LOGICAL_ERROR in RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • Backported in #92255: Add repair mechanism for JSON with duplicated path in shared data and dynamic paths that could happen because of the bug that was fixed in https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • Backported in #92688: Cache schema only for the file it was inferred from in globs instead of all files during schema inference. Closes #91745. #92006 (Pavel Kruglov).
  • Backported in #92273: Fixes incorrect results that could appear when reading certain subcolumns (e.g., string size) with sparse encoding. #92156 (Pavel Kruglov).
  • Backported in #92681: Release request stream in insert select to prevent closing http connection. #92175 (Sema Checherinda).
  • Backported in #92244: Fix UDF replace in format. #92210 (Raúl Marín).
  • Backported in #92332: In ddlworker::markreplicasactive, if there is no active host found, and the remote_servers has some host_ids, we print a warning log instead of throwing an exception. #92223 (Tuan Pham Anh).
  • Backported in #92365: Fix crash when reading both String data and .size subcolumn from Log engine. This fixes #89909. This contains some commits in #92290. #92341 (Amos Bird).
  • Backported in #92438: Fix logical error caused by using Nothing type in caseWithExpression function arguments . Closes #85354. #92351 (Nihal Z. Miaji).
  • Backported in #92705: Fix count_distinct_optimization pass over window functions and over multiple arguments. #92376 (Raúl Marín).
  • Backported in #92429: Fix possible crash in aggregate functions after MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
  • Backported in #92673: Inherit source part serialization info settings during mutation in MergeTree. It fixes possible incorrect result of the query over mutated part after changes in data types serialization. #92419 (Pavel Kruglov).
  • Backported in #92899: Fix possible conflict in column and subcolumn with the same name leading in using wrong serialization and query failures. Closes #90219. Closes #85161. #92453 (Pavel Kruglov).
  • Backported in #92664: Prevent crash in tokens() with null second argument. #92586 (Raúl Marín).
  • Backported in #93121: Reworks incorrect logic in access grant checks for wildcard grants. The previous attempt https://github.com/ClickHouse/ClickHouse/pull/90928 addressed a critical vulnerability but ended up being too restrictive, resulting in some wildcard GRANT statements failing due to unrelated revokes. #92725 (pufit).
  • Backported in #92741: Fix bug in data skipping logic when not match(...) is used in WHERE causing incorrect results. Closes #92492. #92726 (Nihal Z. Miaji).
  • Backported in #92769: Do not attempt to delete temporary directories at startup if a MergeTree table is created over a read-only disk. #92748 (Alexey Milovidov).
  • Backported in #92801: Fix "Cannot add action to empty ExpressionActionsChain" for ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
  • Backported in #92986: Avoid crash due to reading from a disconnected Connection. #92807 (Raufs Dunamalijevs).
  • Backported in #92877: Fix logical error Failed to set file processing within 100 retries in storgae S3Queue in Ordered mode. It is now replaced with a warning. This error could happen before 25.10 version if keeper session expired, however it will still be a warning in 25.10+ versions, as it is still theoretically possible to get this error in case of high processing concurrency in Ordered mode. #92814 (Kseniia Sumarokova).
  • Backported in #92941: Fixed usage of primary index in lightweight updates that have an IN clause with subqueries in the predicate of the WHERE clause. #92838 (Anton Popov).
  • Backported in #93221: Fix creating type hint for path 'skip' in JSON. Closes #92731. #92842 (Pavel Kruglov).
  • Backported in #92960: Fix possible error FILE_DOESNT_EXIST after mutation of a sparse column with ratio_of_defaults_for_sparse_serialization=0.0. Closes #92633. #92860 (Pavel Kruglov).
  • Backported in #92932: Fix parquet schema inference in the old parquet reader (not used by default) when a JSON column comes after a Tupe column. Fix the old parquet reader (not used by default) failing on empty tuples. #92867 (Michael Kolupaev).
  • Backported in #93180: Fix possible error FILE_DOESNT_EXIST after sparse column mutation when setting ratio_of_defaults_for_sparse_serialization was changed to 1.0 via alter. #93016 (Pavel Kruglov).
  • Backported in #93044: Fix bug in data skipping logic when not materialize(...) or not CAST(...) is used in WHERE causing incorrect results. Closes #88536. #93017 (Nihal Z. Miaji).
  • Backported in #93055: Fix leaving connection in a broken state after preliminary cancellation distributed queries. #93029 (Azat Khuzhin).
  • Backported in #93309: Remove unused columns when the projection is rebuilt during the merge. It reduces memory usage and creates fewer temporary parts. #93233 (Nikolai Kochetov).

Build/Testing/Packaging Improvement

NO CL CATEGORY

NO CL ENTRY

NOT FOR CHANGELOG / INSIGNIFICANT