docs/changelogs/v25.6.1.3206-stable.md
countMatches would stop counting at the first empty match even if the pattern accepts it. To overcome this issue, countMatches now continues execution by advancing by a single character when an empty match occurs. Users who like to retain the old behavior can enable setting count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).enable_shared_storage_snapshot_in_query to enable sharing the same storage snapshot across all subqueries in a single query. This ensures consistent reads from the same table, even when the table is referenced multiple times within a query. #79471 (Amos Bird).chdig - TUI interface for ClickHouse (top like) as part of ClickHouse. #79666 (Azat Khuzhin).MultiPolygon support for pointInPolygon. #79773 (Nihal Z. Miaji).deltaLakeLocal table function. #79781 (roykim98).cast_string_to_date_time_mode that allows to choose DateTime parsing mode during cast from String. #80210 (Pavel Kruglov).disk setting for Atomic and Ordinary DB engines, specifying the disk to store table metadata files. #80546 (Tuan Pham Anh).timeSeries* helper functions to speedup some scenarios when working with time series data: - re-sample the data to the time grid with specified start timestamp, end timestamp and step - calculate PromQL-like delta, rate, idelta and irate. #80590 (Alexander Gololobov).ToTime. #81217 (Yarik Briukhovetskyi).system.codecs to introspect the available codecs. (issue #81525). #81600 (Jimmy Aguilar Mena).lag and lead window functions. Closes #9887. #82108 (Dmitry Novik).tokenizer and two optional max_rows_per_postings_list and ngram_size. #80262 (Elmi Ahmadov).gin were renamed to text. Existing indexes of type gin remain loadable but they will throw an exception (suggesting text indexes instead) when one tries to use them in searches. #80855 (Robert Schulze).Pipe::resize creates a single Resize or StrictResize node by inserting it into the pipeline topology, which then acts as a central hub connecting all input streams (upstream nodes) to a unified set of output streams (downstream nodes). This design leads to contention for the ExecutingGraph::Node::status_mutex during pipeline graph execution, especially in high-core-count environments. When pipelines scale to tens or hundreds of streams, this contention results in:. #77562 (Zhiguo Zhou).enable_parallel_blocks_marshalling. It should speed up distributed queries that transfer significant amounts of data between the initiator and remote nodes. #78694 (Nikita Taranov).UniqExactSet::merge when one of the sets is empty. Also, now if the LHS set is two-level and the RHS is single-level, we won't do the conversion to two-level for the RHS. #79971 (Nikita Taranov).<async>false</async> under <logger>. #80125 (Raúl Marín).concatenateBlocks. Maybe it's good for parallel hash join. #80328 (李扬).EXPLAIN SYNTAX now uses a new analyzer. It returns AST built from the query tree. Added option query_tree_passes to control the number of passes to executed before converting query tree to the AST. #74536 (Vladimir Cherkasov).AuthenticationRequired. #77353 (Vitaly Baranov).system.asynchronous_metrics - DictionaryMaxUpdateDelay - The maximum delay(in seconds) of dictionary update. - DictionaryTotalFailedUpdates - Number of errors since last successful loading in all dictionaries. #78175 (Vlad).all_topic_partitions / active_replicas_count (here all_topic_partitions is the number of all partitions, active_replicas_count is the number of active replicas) permanent locks on the replica, if there are more, then the replica releases some partitions. Some partitions are temporarily held by the replica. The maximum number of temporary locks on a replica changes dynamically to give other replicas a chance to take some partitions into permanent locks. When updating temporary locks, the replica releases them all and tries to take some others again. #78726 (Daria Fomina).param-<name> (dash) along with param_<name> (underscore). This closes #63093. #79429 (Engel Danila).input_format_parquet_max_block_size = 0 ClickHouse would stuck. Now this behaviour is fixed. This closes #79394. #79601 (abashkeev).throw_on_error setting for startup_scripts: when throw_on_error is true, the server will not start unless all queries complete successfully. By default, throw_on_error is false, preserving the previous behavior. #79732 (Aleksandr Musorin).http_response_headers in http_handlers of any kind. #79975 (Andrey Zvonov).GLOBAL [NOT] IN predicate to PREWHERE clause if applicable. #79996 (Eduard Karacharov).auxiliary_zookeepers data from system.zookeeper table. #80146 (Nikolay Govorov).tokens now supports string as a tokenizer. #80195 (Robert Schulze).adjustCreateQueryForBackup() for replicated databases. #80282 (Vitaly Baranov).-- like -- --config.value='abc') in clickhouse-local without the equality sign. Closes #80292. #80293 (Alexey Milovidov).SHOW ... LIKE queries. This closes #80275. #80297 (Alexey Milovidov).clickhouse-local. The previously created function will be loaded at startup. This closes #80085. #80300 (Alexey Milovidov).s3_plain_rewritable storage with projections. In previous versions, metadata objects in S3 referencing projections would not get updated when moved. Closes #70258. #80393 (Sav).parallel_replicas_connect_timeout_ms setting. Before connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms settings were used as connection timeout values for parallel replicas queries (1 second by default). #80421 (Igor Nikonov).SYSTEM UNFREEZE command will not try to look up parts in readonly and write-once disks. This closes #80430. #80432 (Alexey Milovidov).output_format_native_use_flattened_dynamic_and_json_serialization. This serialization can be used for easier support for Dynamic and JSON in TCP protocol in clients in different languages. #80499 (Pavel Kruglov).packed storage was not supported for the full-text index, because the segment id was updated on-fly by reading and writing (.gin_sid) file on disk. In case of packed storage, reading a value from the uncommited file is not supported and this led to an issue. #80852 (Elmi Ahmadov).prefer_column_name_to_alias was hardcoded to True for MySQL handler because the new analyzer was not enabled by default. Now, it can be unhardcoded. #80916 (Yarik Briukhovetskyi).system.iceberg_history shows history for catalogs databases like glue or iceberg rest. Also renamed table_name and database_name columns to table and database in system.iceberg_history for consistency. #80975 (alesapin).merge table function, so the CREATE TEMPORARY TABLE grant is not required for using it. #80981 (Miсhael Stetsyuk).system.metrics over incomplete system.asynchronouse_metrics). Add in-memory caches size (in bytes) into dashboard.html. VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize has been renamed to VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin).filesystem_caches and named_collections in the clickhouse-local configuration file. #81105 (Alexey Milovidov).PARTITION BY in INSERT queries. In previous versions, PARTITION BY was not highlighted as a keyword. #81106 (Alexey Milovidov).CREATE, INSERT (until recently, these queries resulted in an infinite spinner); - when double clicking on a table, scroll to the top. #81131 (Alexey Milovidov).c-ares to v1.34.5. #81159 (Konstantin Bogdanov).use_skip_indexes_if_final and use_skip_indexes_if_final_exact_mode now default to True. Queries with FINAL clause will now use skip indexes (if applicable) to shortlist granules and also read any additional granules corresponding to matching primary key ranges. Users needing earlier behaviour of approximate/imprecise results can set use_skip_indexes_if_final_exact_mode to FALSE after careful evaluation. #81331 (Shankar Iyer).mkdir is written to the journal of filesystem which is persisted to disk. In case of slow disk this can take long time. Definitely make sense to move out from reserve lock scope. #81371 (Kseniia Sumarokova).KeyCondition matches a continuous range, if the key is wrapped with a non-strict function chain, a Constraint::POINT may needs to be converted to aConstraint::RANGE. For example: toDate(event_time) = '2025-06-03' implies a range for event_time: ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). This PR fixes this behavior. #81400 (zoomxi).postgres 16.9. #81437 (Konstantin Bogdanov).openssl 3.2.4. #81438 (Konstantin Bogdanov).abseil-cpp 2025-01-27. #81440 (Konstantin Bogdanov).mongo-c-driver 1.30.4. #81449 (Konstantin Bogdanov).krb5 1.21.3-final. #81453 (Konstantin Bogdanov).orc 2.1.2. #81455 (Konstantin Bogdanov).--database argument in clickhouse-local. You can switch to a previously created database. This closes #44115. #81465 (Alexey Milovidov).clickhouse/ch aliases will invoke clickhouse-client instead of clickhouse-local if --host or --port are specified. Continuation of #79422. Closes #65252. #81509 (Alexey Milovidov).grpc 1.73.0. #81629 (Konstantin Bogdanov).delta-kernel-rs v0.12.1. #81707 (Konstantin Bogdanov).PageCacheReadBytes. #81742 (Kseniia Sumarokova).addressToSymbol and system.symbols table will use file offsets instead of virtual memory addresses. #81896 (Alexey Milovidov).abseil-cpp 20250512.0. #81945 (Konstantin Bogdanov).google-protobuf v31.1. #81976 (Konstantin Bogdanov).max_local_read_bandwidth_for_server and max_local_write_bandwidth_for_server on fly without restart server. #82083 (Kai Zhu).keeper_server.cleanup_old_and_ignore_new_acl. If enabled, all nodes will have their ACLs cleared while ACL for new requests will be ignored. If the goal is to completely remove ACL from nodes, it's important to leave the config enabled until a new snapshot is created. #82496 (Antonio Andelic).allow_push_predicate_ast_for_distributed_subqueries is enabled. Fixes #75647. Fixes #79672. #77316 (Dmitry Novik).currentDatabase function was used in CONSTRAINT sections for ON CLUSTER queries Closes #78100. #79070 (pufit).argMax for types Dynamic/Variant/JSON. #79166 (Pavel Kruglov).TopK / TopKWeighted functions that would cause excessive error values even when capacity was not exhausted. #79939 (Joel Höner).readonly setting in azure_blob_storage object storage. #79954 (Julia Kartseva).match(column, '^…') with backslash-escaped characters. #79969 (filimonov).used_functions column of the system.query_log table, unlike other functions. This PR implements the addition of the eUDF name if the eUDF was used in the request. #80073 (Kyamran).KeyCondition. #80207 (Yarik Briukhovetskyi).DateTime with timezone in StripeLog tables. This closes #44120. #80304 (Alexey Milovidov).NOT_FOUND_COLUMN_IN_BLOCK error caused by filter-push-down optimization of the logical JOIN sep in case ON expression is not a trivial equality. Fixes #79647 Fixes #77848. #80360 (Nikolai Kochetov).shardNum function in Distributed tables with join_use_nulls. #80612 (János Benjamin Antal).CREATE DICTIONARY failed with CANNOT_SCHEDULE_TASK it is possible to leave dangling pointer in the dictionary registry, which later lead to crash). #80714 (Azat Khuzhin).timestamp_ntz for unity catalog. Fixes #79535, Fixes #79875. #80740 (alesapin).THERE_IS_NO_COLUMN error for distributed queries with IN cte. Fixes #75032. #80757 (Nikolai Kochetov).NOT_FOUND_COLUMN_IN_BLOCK, which is caused by predicate-push-down optimization. Fixes #80443. #80834 (Nikolai Kochetov).Table does not exist error for distributed queries with pushed-down predicate (allow_push_predicate_ast_for_distributed_subqueries=1) when the source table does not exist on the initialtor. Fixes #77281. #80915 (Nikolai Kochetov).SHOW TABLES query. Fixes #79725. #81046 (alesapin).system.query_log table, unlike other functions. This PR implements the addition of the UDF name to one of the two columns used_executable_user_defined_functions or used_sql_user_defined_functions if the UDF was used in the request. #81101 (Kyamran).Too large size ... passed to allocator errors or possible crashes on inserts via http protocol with text formats (JSON, Values, ...) and omitted Enum fields. #81145 (Anton Popov).Unknown table expression identifier for distributed_product_mode_local=local with cross-replication. #81162 (Nikolai Kochetov).deltaLakeCluster, icebergCluster, etc): (1) fix potential segfault in DataLakeConfiguration when using Cluster function with old analyzer; (2) remove duplicating data lake metadata updates (extra object storage requests); (3) fix redundant listing in object storage when format is not explicitly specified (which was already done for non-cluster data lake engines). #81300 (Kseniia Sumarokova).Aggregator in case of exception during merge. #81450 (Nikita Taranov).background_.*pool_size). #81473 (Azat Khuzhin).Npy format happening when writing to a table with the URL engine. This closes #81356. #81502 (Alexey Milovidov).NaN% (typical JavaScript problems). #81507 (Alexey Milovidov).DatabaseReplicated for database_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin).IN execution with transform_null_in=1 with null in the left argument and non-nullable subquery result. #81584 (Pavel Kruglov).Unexpected relative path for a deduplicated part during ATTACH to ReplicatedMergeTree. #81647 (Azat Khuzhin).use_iceberg_partition_pruning will not take effect for iceberg storage, because it uses global context rather than query context. it's not critical because its default value is true. this pr can fix it. #81673 (Han Fei).merge_max_block_size to ensure that it's non zero. #81693 (Bharat Nallan).clickhouse-local involving stuck DROP VIEW queries. #81705 (Bharat Nallan).ConcurrentHashJoin with empty USING () and old analyzer enabled. #81754 (Nikita Taranov)./js. This closes #61890. #81895 (Alexey Milovidov).MongoDB table engine definitions could include a path component in the host:port argument which was silently ignored. The mongodb integration refuses to load such tables. With this fix we allow loading such tables and ignore path component if MongoDB engine has five arguments, using the database name from arguments. Note: The fix is not applied for newly created tables or queries with mongo table function, as well as for dictionary sources and named collections. #81942 (Vladimir Cherkasov).Aggregator in case of exception during merge. #82022 (Nikita Taranov).LOGICAL_ERROR, close #80620. #82056 (Vladimir Cherkasov).Not found column error for queries with arrayJoin under WHERE condition and IndexSet. #82113 (Nikolai Kochetov).map<string, decimal(9, 2)>. Fixes #81301. #82114 (alesapin).CARGO_HOME. #79560 (Konstantin Bogdanov).flake.nix for Nix builds. #81463 (Konstantin Bogdanov).delta-kernel-rs requiring network access during build. Closes #80609. #81602 (Konstantin Bogdanov).03322_initial_query_start_time_check, introduced in https://github.com/ClickHouse/ClickHouse/pull/75087 This closes: #80287. #80354 (Alexander Tokmakov).test_backup_restore_on_cluster/test_cancel_backup.py. #80375 (Vitaly Baranov).03237_create_or_replace_view_atomically_with_atomic_engine. #80380 (Alexey Milovidov).02479_race_condition_between_insert_and_droppin_mv.sh. #80383 (Alexey Milovidov).01287_max_execution_speed. #80411 (Alexey Milovidov).EnvironmentChecks.cpp. #80422 (Alexey Milovidov).IMergeTreeDataPart::state. #80437 (Alexey Milovidov).filesystem_prefetch_max_memory_usage = 0. #80572 (Robert Schulze).gin_filter_condition was unnecessarily difficult to read. The condition was as follows: cpp const auto gin_filter_condition = /* dynamic casting */ if (gin_filter_condition == nullptr) // casting failed, use default impl else // use gin_filter_condition specific impl With this change: ```cpp. #80622 (Elmi Ahmadov).rust_vendor submodule commit. #80661 (Konstantin Bogdanov).clone method was used in several places completely unnecessarily (when creating StorageObjectStorageSource::KeysIterator it was not needed completely, in StorageObjectStorageSink its usage is not warranted as well). 2. clone method was based on copy constructor, which was never updated when someone added new fields to the class, making it work incorrectly (though it did not lead to any noticeable problem, because those fields were not used after clone had been called, but no guarantee that it would not have caused problems in the future). 3. We forgot to override clone method in DataLakeConfuguration, which inherits from S3(Azure/etc)StorageConfiguration, leading to DataLakeConfiguration always becoming its base class after clone, which again did not cause any noticeable problem, because of how little usage we made of this object after using clone, but it will change in the future. #80756 (Kseniia Sumarokova).executeInsertSelectWithParallelReplicas. #81049 (Nikita Taranov).quantileDeterministic. #81109 (Alexey Milovidov).03236_squashing_high_memory. #81116 (Alexey Milovidov).timezoneOf. #81128 (Kenny Sun).read_in_order_optimization_with_virtual_row with parallel replicas. #81130 (Alexey Milovidov).02530_dictionaries_update_field and add update_lag. #81180 (Nikita Taranov).parent_part_offset calculation in unordered MergeTree during merge. This addresses https://github.com/ClickHouse/ClickHouse/pull/78429#issuecomment-2925591105 . Mark as not for changelog, as this is part of ongoing work on projection index which is not landed yet. #81188 (Amos Bird).ReplicatedAccessStorage for shared use. #81245 (Krishna Mannem).03525_sql_udf_names_in_system_query_log test in parallel. #81284 (Kyamran).NamedSessionsStorage::mutex while destroying stale sessions. Fixes #71307. #81310 (Alexander Tokmakov).test_replicated_users in "flaky check" mode. #81334 (Konstantin Bogdanov).divideOrNull, moduloOrNull, intDivOrNull, positiveModuloOrNull, follow-up #78276. #81384 (Yarik Briukhovetskyi).allow_ddl=false, some of the inner queries for RMV can fail. #81433 (pufit).EPHEMERAL columns. #81464 (Alexey Milovidov).clickhouse stop will ignore if pid file does not exist only during polling, otherwise it hides errors. Now clickhouse stop will not kill random clickhouse-servers (remove pidof). Improve some logging. #81474 (Azat Khuzhin).ConfigManager add test configs atomically. #81515 (Vitaly Baranov).La Casa Del Dolor and setting fixes. #81578 (Pedro Ferreira).grpc logging. #81699 (Konstantin Bogdanov).chcache dependencies. #81706 (Konstantin Bogdanov).appendRemovalTIDToVersionMetadata for covered_parts in MergeTreeTransaction::addNewPartAndRemoveCovered so that there is a removal_id in the transaction metadata file even when it is removed without a transaction. Hence, when restarting, it can load the outdated parts successfully without triggering: Logical error: \'Data part 202410_1_42_8 is Outdated and has creation TID (94, 40, 3ce64a6c-c10e-4c02-8891-47977f2b6a1a) and CSN 95, but does not have removal tid. It\'s a bug or a result of manual intervention.\'.. #81734 (Tuan Pham Anh).grpc/opentelemetry-cpp submodule. #81760 (Konstantin Bogdanov).La Casa del Dolor. #81782 (Pedro Ferreira).query_log. #81825 (Mikhail Artemenko).test_keeper_invalid_digest. #81925 (Antonio Andelic).use_legacy_to_time not important. #82195 (Yarik Briukhovetskyi).use_legacy_to_time. It should be enabled on old instances. #82271 (Nikita Fomichev).03532_crash_in_aggregation_because_of_lost_exception with distr. #82399 (Nikita Taranov).