Back to Clickhouse

2026 Changelog

docs/changelogs/v25.12.2.54-stable.md

26.4.1.1-new16.5 KB
Original Source

2026 Changelog

ClickHouse release v25.12.2.54-stable (e06d8a2be22) FIXME as compared to v25.12.1.649-stable (bf4280aa19d)

Backward Incompatible Change

  • Backported in #93224: Enable advanced shared data for JSON by default. After that change downgrade to versions <25.8 will be not possible, because these versions won't be able to read new data parts with JSON column. For safe upgrades, it's recommended to set compatibility setting to the previous version or set MergeTree settings dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • Backported in #93061: Revert "Allow INSERT into simple ALIAS columns" (Reverts ClickHouse/ClickHouse#84154). It does not work with custom formats, and does not guarded with a setting. #92849 (Azat Khuzhin).

Performance Improvement

  • Backported in #92711: Optimize distinctJSONPaths aggregate function so it reads only JSON paths from data parts and not the whole JSON column. #92196 (Pavel Kruglov).

Improvement

  • Backported in #92604: Add a creation (implicit/explicit) column to system.data_skipping_indices. #92378 (Raúl Marín).
  • Backported in #93377: Fallback to read-write copy for Azure Blob Storage when native copy fails with BadRequest (e.g. invalid block list). Previously this was only done for Unauthorized error which was seen while copying blob to different storage accounts. But we also sometimes see "The specified block list is invalid" error. So now updated the condition to fallback to read & write for all native copy fails. #92888 (Smita Kulkarni).
  • Backported in #93015: Log background tasks that are slower than average (background_schedule_pool_log.duration_threshold_milliseconds=30) to avoid excessive tasks logging. #92965 (Azat Khuzhin).
  • Backported in #93338: Support geometry type for flipCoordinates. #93303 (Bharat Nallan).
  • Backported in #93395: Improve the UX of SYSTEM INSTRUMENT ADD/REMOVE: use String literals for function names, patch all functions that match and allow using function_name in REMOVE. #93345 (Pablo Marcos).

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

  • Backported in #92606: Fix for runtime filters working incorrectly when LEFT ANTI JOIN has extra post-condition. #91824 (Alexander Gololobov).
  • Backported in #92557: 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 #92685: Release request stream in insert select to prevent closing http connection. #92175 (Sema Checherinda).
  • Backported in #92709: Fix count_distinct_optimization pass over window functions and over multiple arguments. #92376 (Raúl Marín).
  • Backported in #92903: 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 #92624: Fix deadlock for SHOW CREATE DATABASE for Backup database. #92541 (Azat Khuzhin).
  • Backported in #92656: Prevent crash in tokens() with null second argument. #92586 (Raúl Marín).
  • Backported in #93090: Creating and materializing text indexes on tables containing large parts (over 4,294,967,295 rows) is temporarily disabled. This limitation prevents incorrect query results, as the current index implementation does not yet support such large parts. #92644 (Anton Popov).
  • Backported in #93091: Remove a bug that ngrambf_v1 indexes with ngram length (1st parameter) > 8 would throw an exception. #92672 (Robert Schulze).
  • Backported in #93125: 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 #92745: Fix bug in data skipping logic when not match(...) is used in WHERE causing incorrect results. Closes #92492. #92726 (Nihal Z. Miaji).
  • Backported in #92773: 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 #92805: Fix "Cannot add action to empty ExpressionActionsChain" for ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
  • Backported in #92990: Avoid crash due to reading from a disconnected Connection. #92807 (Raufs Dunamalijevs).
  • Backported in #92881: 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 #92855: Fixed calculation of uncompressed sizes of text indexes in the system.parts table. #92832 (Anton Popov).
  • Backported in #92945: 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 #93223: Fix creating type hint for path 'skip' in JSON. Closes #92731. #92842 (Pavel Kruglov).
  • Backported in #92964: 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 #92936: 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 #92969: Fixed several crashes during merges of text indexes in MergeTree tables. #92925 (Anton Popov).
  • Backported in #93024: Fix logical error during index analysis when empty array is used in has function. Closes #92906. #92995 (Nihal Z. Miaji).
  • Backported in #93184: 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 #93048: 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 #93034: Fix possible usage of outdated parts due to TOCTOU race for shared parts. #93022 (Azat Khuzhin).
  • Backported in #93059: Fix leaving connection in a broken state after preliminary cancellation distributed queries. #93029 (Azat Khuzhin).
  • Backported in #93097: Fixed merges of text indexes built on top of the complex expressions (such as concat(col1, col2)). #93073 (Anton Popov).
  • Backported in #93257: Fix order by tuple in iceberg. This closes #92977. #93225 (Konstantin Vedernikov).
  • Backported in #93313: Remove unused columns when the projection is rebuilt during the merge. It reduces memory usage and creates fewer temporary parts. #93233 (Nikolai Kochetov).
  • Backported in #93406: Fix unused columns removal from subqueries in the presence of a scalar correlated subquery. Before the fix column could have been removed if it was used only in the correlated subquery, and the query would fail with NOT_FOUND_COLUMN_IN_BLOCK error. #93273 (Dmitry Novik).
  • Backported in #93425: Fixed rebuilding of text indexes created on top of subcolumns. #93326 (Anton Popov).

NOT FOR CHANGELOG / INSIGNIFICANT