Back to Clickhouse

2025 Changelog

docs/changelogs/v25.11.1.558-stable.md

26.4.1.1-new112.7 KB
Original Source

2025 Changelog

ClickHouse release v25.11.1.558-stable (16f22f3d744) FIXME as compared to v25.11.1.1-new (ae414ae37fc)

Backward Incompatible Change

  • Introduce Geometry type. Support reading WKB and WKT formats for it. In previous versions, the Geometry type was aliased to String, but now it is a full-featured type. #83344 (scanhex12).
  • Remove deprecated Object type. #85718 (Pavel Kruglov).
  • Escape filenames created for Variant type subcolumns in Wide data part of MergeTree tables. This change breaks compatibility with old tables with Variant/Dynamic/JSON data types. It fixes storing types with special symbols inside Variant (like DateTime with specific timezone that contains \). Escaping can be disabled by changing MergeTree setting escape_variant_subcolumn_filenames (to keep compatibility disable this setting in the config for MergeTree or set compatibility setting to the previous version before upgrade). Resolves #69590. #87300 (Pavel Kruglov).
  • Remove the obsolete LIVE VIEW feature. If you use LIVE VIEW, upgrading to the new version will not be possible. #88706 (Alexey Milovidov).
  • Support exception tagging for HTTP results response to enable clients to parse exceptions more reliably. Resolves #75175. The setting http_write_exception_in_output_format is disabled by default for consistency across formats. #88818 (Kaviraj Kanagaraj).
  • Prohibit the creation of multiple plain-rewritable disks on top of the shared object storage path, as this can lead to undefined behavior during collisions of different metadata storage transactions. #89038 (Mikhail Artemenko).
  • Enable with_size_stream serialization format for the String data type by default. This change is backward compatible, but the new serialization format is supported only since version 25.10, which means that downgrading to versions before 25.10 will not be possible. If you want to keep the possibility of downgrading to 25.9 and earlier, configure serialization_info_version as basic and string_serialization_version as single_stream in the merge_tree section of the server configuration. #89329 (Alexey Milovidov).
  • Fixes Kafka storage SASL settings precedence. Table-level SASL settings specified in CREATE TABLE queries now correctly override consumer/producer-specific settings from configuration files. #89401 (János Benjamin Antal).
  • Fix Fatal when compressing data with size not aligned to element size (in T64 codec). Resolves #89282. #89432 (yanglongwei).

New Feature

  • Added new SQL statement EXECUTE AS to support user impersonation. Resolves #39048. #70775 (Shankar).
  • Add flipCoordinates function that unwraps the required number of dimensions in an array and swaps pointers inside the Tuple column. Resolves #79469. #79634 (Sachin Kumar Singh).
  • Add system.unicode table, containing a list of Unicode characters and their properties. Closes #80055. #80857 (wxybear).
  • Support for a part of the Prometheus HTTP Query API. To enable it, add a rule with type query_api in the <prometheus> section in the configuration file. Supported handlers are /api/v1/query_range and /api/v1/query. #86132 (Nikita Mikhaylov).
  • Enhanced IS NOT DISTINCT FROM (<=>) operator: added support for inverse IS DISTINCT FROM, support compatible numeric operands of different types (e.g., Nullable(UInt32) and Nullable(Int64)). #87581 (yanglongwei).
  • 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).
  • Added support for the cume_dist window function. Fixes #86920. #88102 (Manuel).
  • User can now add a new argument preprocessor in text index construction. The argument is an arbitrary expression that transforms each document before tokenization. #88272 (Jimmy Aguilar Mena).
  • Adds a memory_usage field to X-ClickHouse-Progress and X-ClickHouse-Summary. This can be used to collect memory usage of queries in real time on the client side. #88393 (Christoph Wurm).
  • Add support for fractional LIMIT and OFFSET for selecting a fraction of a table. Closes #81892. #88755 (Ahmed Gouda).
  • Add setting into_outfile_create_parent_directories to automatically create parent directories for INTO OUTFILE, preventing errors when output paths do not exist. This simplifies workflows where queries write results to nested directories. Resolves #88610. #88795 (Saksham).
  • Microsoft OneLake catalog integration. #89366 (scanhex12).
  • Support CREATE OR REPLACE syntax for temporary tables. Closes #35888. #89450 (Aleksandr Musorin).
  • Support for arrayRemove(arr, elem) to remove all elements equal to elem from the array arr. Resolves #52099. #89585 (tiwarysaurav).
  • Added send_profile_events setting which allows clients to reduce network traffic when profile events are unused. #89588 (Kaviraj Kanagaraj).
  • Added kafka_schema_registry_skip_bytes setting to Kafka table engine to skip envelope header bytes (e.g., AWS Glue Schema Registry's 19-byte prefix) before parsing message payload. This enables ClickHouse to consume messages from schema registries that add metadata headers. #89621 (Taras Polishchuk).
  • Allow disabling background download of nearby part data on a per query basis. Fixes #89524. #89668 (tanner-bruce).
  • Introduces midpoint scalar function that calculates average. Resolves #89029. #89679 (simonmichal).
  • Web UI now provides a download button. It downloads the full result even if the UI displays only part of it. #89768 (Alexey Milovidov).
  • Add arrow_flight_request_descriptor_type setting to support Dremio and other Arrow Flight servers that require command-style descriptors. Fixes #89523. #89826 (Shreyas Ganesh).
  • You can now retrieve both the argument and its corresponding minimum or maximum value using the new argAndMin and argAndMax functions. #89884 (AbdAlRahman Gad).
  • Added send_profile_events setting which allows clients to reduce network traffic when profile events are unused. #89972 (Kaviraj Kanagaraj).
  • Experimentally support e2k (Elbrus-2000) as a new platform for ClickHouse. #90159 (Ramil Sattarov).

Experimental Feature

Performance Improvement

  • RIGHT and FULL JOINs now use ConcurrentHashJoin; that means that these types of join are now running with a higher degree of parallelism. Improves various cases for RIGHT and FULL JOINs up to 2 times. Resolves #78027. #78462 (Yarik Briukhovetskyi).
  • Optimization for large value in ConstantNode. Closes #72880. #81104 (Yakov Olkhovskiy).
  • Up to 8x faster SELECT queries with heavy partition pruning on tables with 10K+ parts. #85535 (James Morrison).
  • Fix vsdo for aarch64 and possible other arch/kernel combinations. #86096 (Tomas Hulata).
  • When a query uses fixed hash map for aggregation state(group by a small integer), ClickHouse would merge the aggregation state in parallel to speed up the query. Resolves #63666. #87366 (Jianfei Hu).
  • Distributed execution: better split tasks by row groups IDs, not by files. #87508 (scanhex12).
  • Improve LZ4 decompression speed by simplifying the code and tweaking the selection algorithm. #88360 (Raúl Marín).
  • S3 partitions objects internally based on key-name prefixes and automatically scales to high request rates per partition. This change introduces two new BACKUP settings: data_file_name_generator and data_file_name_prefix_length. When data_file_name_generator=checksum, backup data files are named using a hash of their contents. Example: for a checksum = abcd1234ef567890abcd1234ef567890 and data_file_name_prefix_length = 3, the resulting path will be: abc/d1234ef567890abcd1234ef567890. The resulting key distribution enhances load balancing across S3 partitions and reduces the risk of throttling. #88418 (Julia Kartseva).
  • Implement lazy columns replication in JOIN and ARRAY JOIN. Avoid converting special columns representation like Sparse and Replicated to full columns in some output formats. This avoids unnecessary data copy in memory. #88752 (Pavel Kruglov).
  • Improved text index performance by caching dictionary blocks and using hashtables for token lookups instead of binary search. #88786 (Elmi Ahmadov).
  • Parquet reader v3 is enabled by default. #88827 (Michael Kolupaev).
  • Queries can now benefit from optimize_read_in_order and query_plan_optimize_lazy_materialization simultaneously. Resolves #88767. #88866 (Manuel).
  • Use aggregate projection for queries with DISTINCT. Closes #86925. #88894 (Nihal Z. Miaji).
  • Since posting lists are the largest by the data size, caching them would improve the performance in consecutive runs. #88912 (Elmi Ahmadov).
  • Run streaming LIMIT BY transform in cases when input sort order matches LIMIT BY keys. #88969 (Eduard Karacharov).
  • Disable ThreadFuzzer in non-server binaries by default. #89115 (Raúl Marín).
  • Allow rewriting ANY LEFT JOIN or ANY RIGHT JOIN to ALL INNER JOIN in some cases. #89403 (Dmitry Novik).
  • Less atomic operations per entry during async logging. #89651 (Sergei Trifonov).
  • When runtime filters are enabled in a query with multiple joins and multiple runtime filters are added there is a need to pushdown newly added filter steps over other BuildRuntimeFilterStep-s. #89725 (Alexander Gololobov).
  • Slightly speed up some countDistinct operations by reducing the overhead of HashSetTable::merge. #89727 (Raúl Marín).
  • RIGHT and FULL JOINs now use ConcurrentHashJoin; that means that these types of join are now running with a higher degree of parallelism. Improves various cases for RIGHT and FULL JOINs up to 2 times. Resolves #78027. #89737 (Yarik Briukhovetskyi).
  • Increase the limit for lazy materialization rows from 10 to 100. #89772 (Alexey Milovidov).

Improvement

  • Allow FETCH PARTITION when there are broken disks in replicated merge tree tables. #58663 (Duc Canh Le).
  • Add h3PolygonToCells function which can fill geometry with h3 hexagons. Resolves #33991. #66262 (Zacharias Knudsen).
  • Fix uncaught exception while getting MySQL table schema in MySQL database engine. #69358 (Duc Canh Le).
  • All DDL ON CLUSTER queries now execute with the original query user context for better access validation. #71334 (pufit).
  • Added parallelism for ALTER TABLE ... FREEZE queries. #71743 (Kirill).
  • Added support for UUID in Parquet when it is represented by FixedString(16) with the logical type UUID. #74484 (alekseev-maksim).
  • Add new virtual column _tags (Map(String, String)) with all the tags associated with the blob in S3 (Note, if blob does not have any tags no extra request will be done). Resolves #72945. #77773 (Zicong Qu).
  • This PR allows using normal projections as a secondary index. When enabled, certain query predicates can be used to read from projection parts and generate bitmaps to filter rows efficiently during the PREWHERE stage. This is the third step to implement projection index, following #80343. #81021 (Amos Bird).
  • Use OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
  • Enable enable_shared_storage_snapshot_in_query by default for better consistency guarantees. There should be no downsides. #82634 (Alexey Milovidov).
  • UNION should unify types with Variant if needed. Resolves #82772. #83246 (Mithun p).
  • Log internal queries (those executed internally by dictionaries, refreshable materialized views, etc) and add the new is_internal column to system.query_log. #83277 (Miсhael Stetsyuk).
  • Make query plan optimizations visible to the correlated subquery input subplan by postponing it's materialization. Part of #79890. #85455 (Dmitry Novik).
  • Add cache for bcrypt authentication. #87115 (Nikolay Degterinsky).
  • You can see a progress bar, logs and performance statistics for CREATE OR REPLACE TABLE queries with SELECT in clickhouse-client. This query will no longer lead to timeout even if the SELECT is quite time consuming. Resolves #38416. #87247 (Diskein).
  • Support JSON and Dynamic types in hash functions. Resolves #87734. #87791 (Pavel Kruglov).
  • Parquet no-timezone timestamps (isAdjustedToUTC=false) are now read as DateTime64(..., 'UTC') instead of DateTime64(...). This is less incorrect as converting such UTC timestamp to string produces a representation of the correct local time. Use input_format_parquet_local_time_as_utc=0 to get the old behavior. Resolves #87469. #87872 (Michael Kolupaev).
  • Implement missing parts of ArrowFlight server. #88013 (Vitaly Baranov).
  • Roles defined in SQL can now be granted to users defined in users.xml. #88139 (c-end).
  • Add multiple histogram metrics for the server and the keeper to instrument the durations of the keeper request execution stages. The following metrics will be added to the server: keeper_client_queue_duration_milliseconds, keeper_client_send_duration_milliseconds, keeper_client_roundtrip_duration_milliseconds. The following metrics will be added to the keeper: keeper_server_preprocess_request_duration_milliseconds, keeper_server_process_request_duration_milliseconds, keeper_server_queue_duration_milliseconds, keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • Add input_headers option to EXPLAIN query to add input headers to steps. #88311 (János Benjamin Antal).
  • If a skip index used in a FINAL query is on a column that is part of the primary key, the additional step to check for primary key intersection in other parts is unnecessary and now not performed. Resolves #85897. #88368 (Shankar Iyer).
  • Adds profile events to count the number of S3 and AzureBlobStorage requests delayed by throttlers. Fixes the inconsistency of disk-related and non-disk-related ThrottlerCount profile events. Now AzureBlobStorage HTTP DELETE requests are not throttled. #88535 (Sergei Trifonov).
  • Allow inserting into remote and data lake tables when disable_insertion_and_mutation is enabled. #88549 (Alexander Tokmakov).
  • Cache table-level statistics, add two settings: merge tree setting refresh_statistics_interval means the interval of refreshing statistics cache, 0 means no cache will be created. Session setting use_statistics_cache means whether to use table-level statistics in a query. Sometimes we want better statistics so we choose to ignore it. #88670 (Han Fei).
  • Fixed binary deserialization of Array and Map to use the max_binary_array_size setting instead of max_binary_string_size when validating size limits. This ensures that the proper limits are applied when reading in RowBinary format. #88744 (Raufs Dunamalijevs).
  • Introduced a LockGuardWithStopWatch class and used it in the background pool for executing merges. In case a mutex was held for a second or some thread was struggling to get it within a second a warning message will be printed. Moved the heavy code from the destructor of MergeMutateSelectedEntry to finalize() method to avoid holding the lock in MergeTreeBackground executor for too long. #88898 (Nikita Mikhaylov).
  • Allow using opt-in AWS regions for S3 automatically when the region is not specified in the endpoint. Reference: opt-in AWS regions. #88930 (Andrey Zvonov).
  • User can now cancel the query by pressing Ctrl-C when the pager is running. Resolves #80778. #88935 (Grigorii Sokolik).
  • Web UI will display bars in the table even when the values are negative. So it can display a double-sided bar chart with different colors of bars on the negative and positive sides. #89016 (Alexey Milovidov).
  • Disable shared_merge_tree_create_per_replica_metadata_nodes to reduce the amount of metadata SMT stores in Keeper. #89036 (Alexander Tokmakov).
  • Make s3Queue respect disable_insertion_and_mutation server setting. #89048 (Raúl Marín).
  • Set default s3_retry_attempts to 500 for 25.6 to make sure backups succeed when there's an S3 repartitioning and S3 responds with slow-down errors for more than 10 minutes. #89051 (Nikita Mikhaylov).
  • The kafka_compression_codec and kafka_compression_level settings can now be used to specify the compression for Kafka producers in both Kafka engines. #89073 (János Benjamin Antal).
  • Add a new column statistics in system.columns, indicating the types of statistics built on this table. If a type of statistics is automatically created, it will show as (auto) in the suffix. #89086 (Han Fei).
  • Improve error message when generic expansion is passed instead of cluster name to a -Cluster table function. #89093 (Konstantin Bogdanov).
  • YTsaurus: allow using a replicated_table as a data source. #89107 (MikhailBurdukov).
  • Queries starting with whitespace are no longer saved to history. #89116 (Konstantin Bogdanov).
  • Support array of string as an input to the hasAnyTokens or hasAllTokens functions. #89124 (Elmi Ahmadov).
  • This patch modifies how plain-rewritable disks store their metadata in memory, resolving numerous bugs related to directory nesting and around that. #89125 (Mikhail Artemenko).
  • Subqueries which take part inside IN expressions when querying Iceberg table will be precomputed in the right way before partition pruning analysis. #89177 (Daniil Ivanik).
  • The optimization enable_lazy_columns_replication is now the default, which will save memory usage in joins. #89316 (Alexey Milovidov).
  • Enable create_table_empty_primary_key_by_default by default. This is better for usability. #89333 (Alexey Milovidov).
  • Fix incorrect code in the Backup database engine when it can generate an invalid query with SHOW CREATE DATABASE or when querying engine_full from system.databases. Closes #89477. #89341 (Alexey Milovidov).
  • In previous versions, the setting create_table_empty_primary_key_by_default was ineffective when you didn't specify the table engine in the CREATE TABLE query. #89342 (Alexey Milovidov).
  • Introduce a per-table cache of ColumnsDescription for parts, reducing memory usage when tables contain many parts and many columns. #89352 (Azat Khuzhin).
  • Update the version of ai-sdk-cpp to include latest models and embeddings support. #89384 (Kaushik Iska).
  • Enable setting allow_special_serialization_kinds_in_output_formats by default. It will lead to less memory usage and improve query speed of output of Sparse/Replicated columns in some row output formats. #89402 (Pavel Kruglov).
  • Update chdig to v25.10 (changelog). #89452 (Azat Khuzhin).
  • Make the resizer of the query textarea in the Web UI full-width, which makes it a little bit more convenient. Also, the browser-native resizer was not available on Safari on iPad, and after this change, you can at least drag the bottom of the textarea if you know. #89457 (Alexey Milovidov).
  • Introduced cache for the deserialized header of the text index to reduce I/O and improve query performance. The cache can be configured via new server settings: - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).
  • Improved memory tracking in hash joins result generation. Previously, temporary allocations during generating join result were not properly tracked, which could lead to memory limit overruns. #89560 (Azat Khuzhin).
  • Async log: Flush earlier and increase default queue size. #89597 (Raúl Marín).
  • Fix wrong FilesystemCacheBytes (and others) in system.asynchronous_metrics. Run SYSTEM queries on filesystem caches only once. Atomic view for caches that points to the same path in system.filesystem_caches. #89640 (Azat Khuzhin).
  • clickhouse-client and clickhouse-local in the interactive mode will highlight identifiers in the command line that have the same name as the current one under the cursor. #89689 (Alexey Milovidov).
  • Clarified description of some columns in system.view_refreshes. #89701 (Tuan Pham Anh).
  • Cache S3 credentials interacting with STS endpoint so they can be reused for different function calls. Amount of cached credentials can be controlled with s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic).
  • Fix runtime Filter pushdown when there are multiple Expression steps below it. #89741 (Alexander Gololobov).
  • If the system memory is lower than 5GB, don't mlock the executable by default. #89751 (Alexey Milovidov).
  • Type hints in the Web UI no longer overflow into the table header. Also corrected the tooltips display - they are no longer behind the table header. #89753 (Alexey Milovidov).
  • Output format-related settings now don't affect query caching. Also, the query caching will ignore the http_response_headers setting. This is needed to allow implementation of features such as downloading the result from the cache in the Web UI. #89756 (Alexey Milovidov).
  • The HTTP interface will provide Age and Expires headers when the query result cache is used. The presence of the Age header tells whether the result is from the cache, while Expires is also set at the first write. Introduce new profile events: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Show table properties in Web UI. Clicking on the number of rows or bytes will bring up a query from system.tables. Clicking on the table engine will bring up SHOW TABLES. #89771 (Alexey Milovidov).
  • Support non_replicated_deduplication_window for tables with a disk that does not implement writing with append. Resolves #87281. #89796 (Tuan Pham Anh).
  • Added a possibility to set a list of tables to flush in command system flush async insert queue. #89915 (Sema Checherinda).
  • Store deduplication blocks ids in system.part_logs. #89928 (Sema Checherinda).
  • Update chdig to v25.11.1 - includes major improvements to logging and various other enhancements (release notes). #89957 (Azat Khuzhin).
  • Changed default of filesystem cache setting keep_free_space_remove_batch from 10 to 100, because it is more optimal. #90030 (Kseniia Sumarokova).
  • Introduce the TTL drop merge type, and do not update the next delete TTL merge schedule after this kind of merges. #90077 (Mikhail Artemenko).
  • Use lower node limit for RemoveRecursive Keeper request during S3Queue cleanup. #90201 (Antonio Andelic).
  • Backported in #90642: Retry network errors when S3 library parses XML response. #90216 (Sema Checherinda).
  • Backported in #90730: Update warning messages when approaching guardrails limits: show current and throw values. #90438 (Nikita Fomichev).
  • Backported in #90889: Entries in the vector similarity index cache are now removed when table parts are dropped or replaced by newer parts. Prior to this, these would be cleared only lazily by cache eviction. #90750 (Shankar Iyer).
  • Resolved CVE-2025-5318 in ClickHouse's libssh. #90807 (Robert Schulze).

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

  • Fix incorrect rows_before_limit_at_least when there are multiple remote shards involved in a distributed merging aggregation, or there are subqueries INs. This fixes #63280. #63511 (Amos Bird).
  • Fixed 0 rows in set appearance after INSERT INTO ... SELECT query. Closes #47800. #79462 (Engel Danila).
  • Fix multiIf with constant arguments and short-circuit evaluation. Closes #72714. #84546 (Yakov Olkhovskiy).
  • Fix LogicalError when selecting from a table with a subquery constraint. Resolves #84190. #85575 (Pervakov Grigorii).
  • Fixed a bug for special queries using a URI with question marks. #85663 (Yarik Briukhovetskyi).
  • Fixed sometimes missing columns in EXPLAIN indexes=1 output. Resolves #86696. #87083 (Michael Kolupaev).
  • Fix possible error Cannot add subcolumn with parallel replicas. Closes #84888. #87514 (Pavel Kruglov).
  • In parquet writer, emit created_by string in correct format, e.g. ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) instead of ClickHouse v25.9.1.1-testing. Fix parquet reader compatibility with bad files written by old parquet-mr. #87735 (Michael Kolupaev).
  • Fix phi-squared computation causing incorrect results in cramersV, cramersVBiasCorrected, theilsU, and contingency. #87831 (Nihal Z. Miaji).
  • Fix reading mixed array of Floats and Bools in JSON. Previously inserting such data led to an exception. #88008 (Pavel Kruglov).
  • Using shared_ptr for QueryState in TCPHandler to detect if the state is invalid in setProgressCallback, setFileProgressCallback and setBlockMarshallingCallback. #88201 (Tuan Pham Anh).
  • Fix logical error in cross join reordering when query_plan_optimize_join_order_limit > 1, Close #89409. #88286 (Vladimir Cherkasov).
  • Fix #88426 1. Disallow explicit column definitions in Alias and columns are automatically load from the target table. This ensures that the alias always matches the target table's schema. 2. Proxy more methods from the IStorage. #88552 (Kai Zhu).
  • After recovering, a Replicated database replica might get stuck for a long time printing messages like Failed to marked query-0004647339 as finished (finished=No node, synced=No node), it's fixed. #88671 (Alexander Tokmakov).
  • Fix possible "Context has expired" with new analyzer with subqueries. #88694 (Azat Khuzhin).
  • Fixed a segmentation fault in the Parquet reader when input_format_parquet_local_file_min_bytes_for_seek is set to 0. Resolves #78456. #88784 (Animesh).
  • Fix incorrect min(PK)/max(PK) result when PK is in reverse order. This fixes #83619. #88796 (Amos Bird).
  • Fix propagation of size restrictions by settings max_table_size_to_drop and max_partition_size_to_drop on DROP of inner tables. #88812 (Nikolay Degterinsky).
  • Fix top_k to respect the threshold parameter when called with a single argument. Closes #88757. #88867 (Manuel).
  • ArrowFlight endpoint sources that required an SSL connection (such as behind an AWS ALB) can now properly request a specific dataset. #88868 (alex-shchetkov).
  • Fix handling of non materialized Nested(Tuple(...)) (added via ALTER). Fixes #83133. #88879 (Azat Khuzhin).
  • Fix bug in the function reverseUTF8. In previous versions, it mistakenly reversed the bytes of UTF-8 code points of length 4. This closes #88913. #88914 (Alexey Milovidov).
  • Fix icebergS3Cluster protocol. Started supporting schema evolution, positional and equality deletes in iceberg cluster function. Resolves #88287. #88919 (Yang Jiang).
  • Disable parallel_replicas_support_projection for queries with parallel replicas over distributed tables. Closes #88899. #88922 (zoomxi).
  • Propagate context on internal casts. Fixing multiple issues where cast-settings weren't propagated. Closes #88873. Closes #78025. #88929 (Manuel).
  • Fix getting file format from globs in file() function. Resolves #88920. #88947 (Vitaly Baranov).
  • Do not check access SET DEFINER <current_user>:definer when creating a view with SQL SECURITY DEFINER. #88968 (pufit).
  • Fixed LOGICAL_ERROR in L2DistanceTransposed(vec1, vec2, p) where the optimisation for partial QBit reading incorrectly removed Nullable from the return type when p was Nullable. #88974 (Raufs Dunamalijevs).
  • Fix crash in unknown catalog type. Resolves #88819. #88987 (scanhex12).
  • This closes #88081. #88988 (scanhex12).
  • Fixed performance degradation in analysis of skipping indexes. #89004 (Anton Popov).
  • Fix ACCESS_ENTITY_NOT_FOUND error when trying to execute clusterAllReplicas from a user with a non-existing role. Resolves #87670. #89068 (pufit).
  • Fix sparse columns processing by CHECK constraint. Closes #88637. #89076 (Eduard Karacharov).
  • Fixed incorrect row count when filling virtual columns in MergeTreeReaderTextIndex causing a crash with LOGICAL_ERROR. #89095 (Peng Jian).
  • Prevent TTL merge counter leaks when exceptions occur during merge preparation. Resolves #89019. #89127 (save-my-heart).
  • Fix calculation of buffer size needed for base32/base58 encoding and decoding operations. #89133 (Antonio Andelic).
  • Fix use-after-free in Distributed due to race between shutdown and background INSERTs. Resolves #88640. #89136 (Azat Khuzhin).
  • Avoid possible data-races due to mutable exceptions while parsing Parquet. Fixes #88385. #89174 (Azat Khuzhin).
  • Refreshable materialized view: fixed rare server crash if source table was fully dropped during a refresh. #89203 (Michael Kolupaev).
  • Flush buffers when sending an error in the middle of compressed stream in HTTP interface. #89256 (Alexander Tokmakov).
  • Prevent query masking rules from being incorrectly applied to DDL statements. #89272 (MikhailBurdukov).
  • Fixed incorrect row count when filling virtual columns in MergeTreeReaderTextIndex causing a crash with LOGICAL_ERROR. Reopens #89095. #89303 (Jimmy Aguilar Mena).
  • Fix Statistics countmin does not support estimate data type of LowCardinality(Nullable(String)) LOGICAL_ERROR. #89343 (Han Fei).
  • Possible crash/undefined behavior in IN function where primary key column types are different from IN function right side column types. Example: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number'). Appears if many rows are selected and there are rows contain not compatible types. #89367 (Ilya Golshtein).
  • Fix truncating arguments of countIf(*). Closes #89372. #89373 (Manuel).
  • Avoid losing uncompressed checksums for statistics on mutations. #89381 (Azat Khuzhin).
  • Fix LOGICAL_ERROR in L2DistanceTransposed(vec1, vec2, p) where the optimization for partial QBit reading incorrectly removed Nullable from the return type when p was LowCardinality(Nullable(T)). Resolves #88362. #89397 (Raufs Dunamalijevs).
  • Fix loading tables with incorrect sparse serialization for tuple itself (that is written by older ClickHouse versions). #89405 (Azat Khuzhin).
  • Fixed incorrect merge handling of TTL-emptied parts with non-empty projections when using deduplicate_merge_projection_mode='ignore'. Resolves #89430. #89458 (Amos Bird).
  • Fix logical error in full_sorting_merge join with duplicate columns. Resolves #86957. #89495 (Vladimir Cherkasov).
  • Fix reading of changelogs during Keeper startup in cases a changelog was not renamed properly during rotation. #89496 (Antonio Andelic).
  • Fix incorrect JOIN results when using OR conditions with unique right table keys. Resolves #89391. #89512 (Vladimir Cherkasov).
  • Fix possible "Context has expired" with analyzer and PK IN (subquery) (v2). Fixes #89433. #89527 (Azat Khuzhin).
  • Fix MaterializedPostgreSQL replication for tables with configured uppercase column names. Resolves #72363. #89530 (Danylo Osipchuk).
  • Fix a crash in case if a state of an aggregate function contains a serialized value of a column of LowCardinality(String). #89550 (Pavel Kruglov).
  • Fix crash when using ARRAY JOIN on the right side of a JOIN with enable_lazy_columns_replication setting enabled. #89551 (Pavel Kruglov).
  • Fix logical error with query_plan_convert_join_to_in. Resolves #89066. #89554 (Vladimir Cherkasov).
  • Fixed exception in statistics estimator when trying to estimate conditions with mismatched column and constant types that cannot be converted. #89596 (Han Fei).
  • Add runtime filters only for supported join algorithms i.e. hash joins. A filter can only be built when join algorithm first fully reads the right side and then reads the left side, but FullSortingMergeJoin for example reads both sides simultaneously. Fixes #89220. #89652 (Alexander Gololobov).
  • Fix hasAnyTokens, hasAllTokens and tokens functions concurrent executions with the sparseGrams tokenizer. Resolves #89605. #89665 (Elmi Ahmadov).
  • Fix logical error/crash with join runtime filter in some cases. Fixes #89062. #89666 (Alexander Gololobov).
  • Fix possible logical error during ARRAY JOIN on Map column with enabled enable_lazy_columns_replication. Closes #89705. #89717 (Pavel Kruglov).
  • Avoid crash due to reading from remote server after disconnect in remote queries during cancellation. Resolves #89468. #89740 (Azat Khuzhin).
  • Fix race condition in projection index reading path. Resolves #89497. #89762 (Peng Jian).
  • Fix bug in projection index reading that could cause race conditions. Resolves #89497. #89775 (Amos Bird).
  • Fixed Paimon table function handling for tables with no partition. Resolves #89690. #89793 (JIaQi).
  • Backported in #90688: Fix Alias stability issues: Fix StrictnessLevel with SharedDatabaseCatalog, disallow target is also an alias, and implement additional interfaces (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Resolves #89106. #89812 (Kai Zhu).
  • Fix possible logical error during reading of paths and their subcolumns in advanced JSON shared data serialization. Closes #89805. #89819 (Pavel Kruglov).
  • Fix possible stack overflow in data types binary deserialization. Closes #88710. #89822 (Pavel Kruglov).
  • Fix logical error with empty tuple inside IN function. Closes #88343. #89850 (Nihal Z. Miaji).
  • Remove injective functions from GROUP BY regardless optimize_injective_functions_in_group_by in old analyzer for compatibility. Resolves #89854. #89870 (Raufs Dunamalijevs).
  • If the merge was interrupted by, for example, a memory limit, the merge mutate background executor will call cancel on the merge task without a lock, but, in this case, the partially created resulting part will not be removed (since it was not finished and at this stage was not visible). After that, the merge task will be destroyed, which will trigger the destruction of the resulting part. This will revert the disk transaction and cause the data to be removed from S3. At the end, this garbage cleanup was executed under the merge mutate background executor lock. #89875 (Mikhail Artemenko).
  • Fix logical error with empty tuple inside reverse and CAST function. Closes #89137. #89908 (Nihal Z. Miaji).
  • Now ClickHouse will show data lake catalog database in SHOW DATABASES query by default. #89914 (alesapin).
  • Fix using native copy on GCS for backups. Because of incorrect client cloning, GCS native copy always failed and used less optimal approach of manual reading and writing the data. #89923 (Antonio Andelic).
  • Fix buffer size calculation for base32Encode. Calculating base32Encode for column of strings of size smaller than 5 could lead to crashes. Resolves #89911. #89929 (Antonio Andelic).
  • Fix wrong escaping for SHOW COLUMNS and SHOW FUNCTIONS queries. #89942 (alesapin).
  • Fix URL validation in MongoDB engine when username contains '@' character. Previously, usernames with '@' would cause an error due to improper encoding. #89970 (Kai Zhu).
  • Backported in #90592: Fix possible crash during remote query with ARRAY JOIN inside IN and enabled enable_lazy_columns_replication setting. Resolves #90361. #89997 (Pavel Kruglov).
  • Backported in #90448: Fix inference of bad DateTime64 values from Strings in text formats in some cases. Resolves #89368. #90013 (Pavel Kruglov).
  • Fix logical error caused by empty tuple column in BSONEachRow and MsgPack. Closes #89814. Closes #71536. #90018 (Nihal Z. Miaji).
  • Backported in #90457: Do size checks when deserializing data from aggregation states and other sources. #90031 (Raúl Marín).
  • Fix possible 'Invalid number of rows in Chunk' error in JOIN with duplicate columns. Resolves #89411. #90053 (Vladimir Cherkasov).
  • Backported in #90588: Fix possible error Column with Array type is not represented by ColumnArray column: Replicated during insertion with usage of ARRAY JOIN and enabled enable_lazy_columns_replication setting. #90066 (Pavel Kruglov).
  • Allow files starting with dots in user_files. Closes #89662. #90079 (Raúl Marín).
  • Backported in #90647: Fix logical error and modulo bug in numbers system table when big step size is used. Closes #83398. #90123 (Nihal Z. Miaji).
  • Fix integer overflow in dictionary argument parsing. Closes #78506. #90171 (Raúl Marín).
  • Backported in #90468: 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).
  • Fixed possible incorrect query results after lightweight updates in SELECT queries with the enabled query condition cache. Fixes #90176. Fixes #90054. #90204 (Anton Popov).
  • Fix crash in StorageDistributed when parsing malformed shard directory names. #90243 (Aleksandr Musorin).
  • Handle implicit conversion from a string to an integer or a boolean in LogicalExpressionOptimizerPass. Resolves #89803. #90245 (Elmi Ahmadov).
  • Fix incorrect formatting of certain skip indexes in the table definition, causing METADATA_MISMATCH and breaking creation of new replicas in the Replicated Database. #90251 (Nikolay Degterinsky).
  • Backported in #90381: Fixes a row-count mismatch in MergeTreeReaderIndex when the part's only has fewer rows than index_granularity. Resolves #89691. #90254 (Peng Jian).
  • Backported in #90760: Fix some queries with aggregated projection optimization. #90288 (János Benjamin Antal).
  • Backported in #90608: Fix bug in reading subcolumns from JSON in compact parts that could lead to CANNOT_READ_ALL_DATA error. Resolves #90264. #90302 (Pavel Kruglov).
  • Fix trim, ltrim, rtrim functions not working with two arguments. Closes #90170. #90305 (Nihal Z. Miaji).
  • Backported in #90625: Fix possible logical error in prewhere on non-existing JSON path with index_granularity_bytes=0. Resolves #86924. #90375 (Pavel Kruglov).
  • Backported in #90484: Fixed a bug in L2DistanceTransposed that caused crashes when the precision argument exceeded valid range. Closes #90401. #90405 (Raufs Dunamalijevs).
  • Backported in #90709: Fixed a race condition in Hive partitioning where a static KeyValuePairExtractor caused data corruption or crashes during concurrent file reads. #90474 (Paresh Joshi).
  • Backported in #90577: Fixed incorrect distance calculations in L2DistanceTransposed when using array reference vectors (which default to Array(Float64)) with QBit columns of non-Float64 element types (Float32, BFloat16). The function now automatically casts the reference vector to match the QBit's element type. Resolves #89976. #90485 (Raufs Dunamalijevs).
  • Backported in #90601: Fix logical error caused by a rare case in equals function. Closes #88142. #90557 (Nihal Z. Miaji).
  • Backported in #90660: Fix logical error in concatWithSeparator function when using const non-string column. Closes #90596. #90655 (Nihal Z. Miaji).
  • Backported in #90674: Fix potential crash when executing mutations with subqueries and allow_statistics_optimize=1. Resolves #90626. #90664 (Azat Khuzhin).
  • Backported in #90876: 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 #90842: Disable enable_shared_storage_snapshot_in_query (leads to memory leaks). #90770 (Azat Khuzhin).
  • Backported in #90856: Fix possible inconsistent state of shared data and dynamic paths in JSON that could lead to logical errors and unexpected results. #90816 (Pavel Kruglov).

Build/Testing/Packaging Improvement

NO CL ENTRY

  • NO CL ENTRY: 'Revert "Revert "Intern Task: Text Classification with Ngram Models""'. #88677 (Nihal Z. Miaji).
  • NO CL ENTRY: 'Revert "Revert "Fix coalescing merge tree for tuple types""'. #88828 (scanhex12).
  • NO CL ENTRY: 'Revert "Fix assertion when serializing empty tuple to protobuf"'. #88983 (Pavel Kruglov).
  • NO CL ENTRY: 'Revert "Revert "Fix assertion when serializing empty tuple to protobuf""'. #89000 (Amos Bird).
  • NO CL ENTRY: 'Revert "Proper image-library overrides"'. #89070 (Raúl Marín).
  • NO CL ENTRY: 'Revert "Analyzer: ConstantNode optimization."'. #89184 (Max Kainov).
  • NO CL ENTRY: 'Second attempt: Analyzer: ConstantNode optimization.'. #89195 (Yakov Olkhovskiy).
  • NO CL ENTRY: 'Revert "Fix incorrect row count when filling virtual columns in MergeTreeReaderTextIndex"'. #89230 (Robert Schulze).
  • NO CL ENTRY: 'Revert "Set correct default in config.xml (concurrent_threads_soft_limit_ratio_to_cores=0)"'. #89542 (Raúl Marín).
  • NO CL ENTRY: 'Revert "Update query_plan_optimize_join_order_limit in settings changes"'. #89581 (Vladimir Cherkasov).
  • NO CL ENTRY: 'Revert "Use ConcurrentHashJoin algorithm for RIGHT and FULL JOINs"'. #89719 (Alexander Tokmakov).
  • NO CL ENTRY: 'Revert "Fix ALTER DATABASE COMMENT/RENAME DATABASE"'. #89763 (Alexey Milovidov).
  • NO CL ENTRY: 'Revert "Support send_profile_events settings to reduce network flow"'. #89792 (Alexey Milovidov).
  • NO CL ENTRY: 'Revert "Fix ports conflicts for ytsaurus integration tests v2 "'. #89919 (Nikita Taranov).
  • NO CL ENTRY: 'Revert "Add memory usage to HTTP progress and summary headers"'. #90136 (Alexey Milovidov).
  • NO CL ENTRY: 'Revert "Fix analyzer: fix miltiIf short circuit with constant arguments"'. #90167 (Alexander Tokmakov).
  • NO CL ENTRY: 'Revert "Resolve CVE-2025-5318"'. #90862 (Robert Schulze).
  • NO CL ENTRY: 'Revert "Backport #90750 to 25.11: Eagerly free vector similarity index cache entries when parts are dropped"'. #90898 (Alexander Tokmakov).

NOT FOR CHANGELOG / INSIGNIFICANT