Altinity Stable® Build for ClickHouse® 25.8
Here are the detailed release notes for version 25.8.
Release history
Version 25.8.16.10001 is the latest release. We recommend that you use this version. But read the detailed release notes and upgrade instructions for version 25.8 first. Once you’ve done that, review the details for each release for known issues and changes between the Altinity Stable Build and the upstream release.
| Version | Release date | Details | Docker images |
|---|---|---|---|
| 25.8.16.10001 | 2026-02-18 | CI report Release page Install guide |
AMD64 and Aarch64 |
Builds are available for both AMD64 and Aarch64 from builds.altinity.cloud as either .deb, .rpm, or .tgz.
Finally, check the Altinity ClickHouse® Upgrade E-book, which provides guidelines for upgrading ClickHouse databases.
Major new features in 25.8 since the previous Altinity Stable release 25.3
Require attention
-
Enable the MergeTree setting
write_marks_for_substreams_in_compact_partsby default. This significantly improves performance of reading subcolumns from newly created Compact parts. Servers with versions earlier than 25.5 will not be able to read these new Compact parts. #84171. Disable this setting if you need to preserve downgrade compatibility.- NOTE: This change has been reverted in Altinity Stable 25.8.16 via #1407. Altinity Stable 25.8.16 disables this setting by default.
-
metric_lognow has more than 1.5K columns, which often causes high memory usage during merges (also check old tables such asmetric_log_X). -
Enable sending crash reports by default. This can be turned off in the server configuration file. #79838
-
Enable
compile_expressions(JIT compiler for fragments of ordinary expressions) by default. This closes #51264, #56386, and #66486. #79907 -
Enable the query condition cache by default. #79080.
-
All allocations made by external libraries are now visible to ClickHouse’s memory tracker and properly accounted for. This may result in “increased” reported memory usage for certain queries or failures with
MEMORY_LIMIT_EXCEEDED. #84082. -
Reduce logging verbosity: some log levels were downgraded. #79322
-
Distributed
INSERT SELECTis now enabled by default. -
Add the
conditionfield to the system tablesystem.query_condition_cache. It stores the plaintext condition whose hash is used as the key in the query condition cache. #78671. -
The
toTimefunction now returns the newTimedata type. The settinguse_legacy_to_timecan be enabled to preserve the old behavior for now. -
ClickHouse, Inc. is gradually phasing out
zero_copydue to architectural limitations in its implementation. They have a better-designed internal alternative (SharedMergeTree), but it is not available in the open-source version.At the moment, this mostly translates into removing unstable tests related to the feature from the codebase, as well as deprecating some less commonly used parts:
Click any tab in the tab bar above for more information.
Backward Incompatible Changes
-
Function
geoToH3()now accepts arguments in the order(lat, lon, res). To keep the legacy order(lon, lat, res), enablegeotoh3_lon_lat_input_order = true. #78852. -
Removed server setting
format_alter_commands_with_parentheses. Note: ALTER commands may not work correctly in mixed-version replication setups (25.4+ with replicas older than 24.2) until all replicas are upgraded. #79970. -
Default expressions now require backticks around identifiers containing dots. #83162.
-
Heredoc (dollar-quoted) tags are now restricted to word characters only to avoid parsing ambiguity. #84846.
-
Table engine setting
allow_dynamic_metadata_for_data_lakesis now enabled by default. #85044. -
Parquet output now writes Enum values as
BYTE_ARRAYwithENUMlogical type by default. #84169. -
JSON formats no longer quote 64-bit integers by default. #74079.
-
DeltaLake storage now uses the
delta-kernel-rsimplementation by default. #79541. -
Removed legacy index types
annoyandusearch. If present, they must be dropped. #79802. -
Experimental index
full_textwas renamed togin, then totext. #79024 #80855. -
Materialized views are now validated against the target table when
allow_materialized_view_with_bad_selectis disabled. #74481. -
SummingMergeTree validation now skips aggregation for columns used in partition or sort keys. #78022.
-
Fixed
dateTruncbehavior with negative date/datetime values. #77622. -
Removed legacy MongoDB integration. Setting
use_legacy_mongodb_integrationis now obsolete. #77895. -
Added filesystem cache setting
allow_dynamic_cache_resize(defaultfalse). Older versions allowed dynamic resizing without an explicit setting. #79148. -
URL reads now apply
enable_url_encodingconsistently across redirect chains. Default value ofenable_url_encodingis nowfalse. #79563 #80088. -
Server settings
backup_threadsandrestore_threadsare now enforced to be non-zero. #80224. -
bitNot()for String now returns a zero-terminated string. #80791. -
extractKeyValuePairsnow supports a 5th argument:unexpected_quoting_character_strategy. -
countMatchesnow continues counting after empty matches. To keep legacy behavior, enablecount_matches_stop_at_empty_match. #81676. -
BACKUP queries, merges, and mutations now use both server-wide throttlers and dedicated throttlers simultaneously. #81753.
-
Creating tables without insertable columns is now forbidden. #81835.
-
Cluster functions with archives can now process archives on multiple nodes using
cluster_function_process_archive_on_multiple_nodes(defaulttrue). Set it tofalsefor compatibility when upgrading to 25.7+ from earlier versions. #82355. -
SYSTEM RESTART REPLICASnow only affects databases where the user hasSHOW TABLESpermission. #83321. -
JSON input now infers
Array(Dynamic)instead of unnamedTuplefor mixed-type arrays. To keep legacy behavior, disableinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859. -
S3 latency metrics were moved to histograms. #82305.
-
Lazy materialization is now enabled only when the analyzer is enabled. #83791.
-
Default
concurrent_threads_schedulerchanged fromround_robintofair_round_robin. #84747.
Click any tab in the tab bar above for more information.
SQL / Main features
-
(Beta) Lightweight updates for MergeTree-family tables via patch parts, using
UPDATE ... SET ... WHERE .... Lightweight deletes are implemented via lightweight updates and can be enabled withlightweight_delete_mode = 'lightweight_update'(requiresenable_block_number_column,enable_block_offset_column,allow_experimental_lightweight_update). #82004 #85952- Added table setting
max_uncompressed_bytes_in_patchesto limit total uncompressed patch-part size and avoid SELECT slowdowns / misuse. #85641
- Added table setting
-
On-the-fly lightweight deletes are supported with
lightweight_deletes_sync = 0andapply_mutations_on_fly = 1. #79281 -
(Beta) Correlated subqueries (
EXISTS,IN, scalar) are enabled by default. #85107 -
Approximate vector search with vector similarity indexes is now GA (see also
vector_search_filter_strategy). #85888 -
CPU & resource management: workload scheduler (
CREATE WORKLOAD,CREATE RESOURCE) is available (see https://clickhouse.com/docs/operations/workload-scheduling). -
Added new data types
TimeandTime64([H]HH:MM:SS[.fractional]) with casts and related functions; compatibility settings for legacytoTime. #81217 -
Added
CoalescingMergeTreeengine. #79344 -
Data Lakes & catalogs are promoted to Beta (see below).
-
FINAL query improvements:
- Fixed cases where
FINALcould be lost forDistributedtables. #78428 - Settings
use_skip_indexes_if_finalanduse_skip_indexes_if_final_exact_modenow default totrue, enabling skip indexes forFINALqueries (setuse_skip_indexes_if_final_exact_mode = falseto keep legacy approximate behavior). #81331
- Fixed cases where
-
Added
NumericIndexedVector(bit-sliced + Roaring-compressed numeric vectors) and 20+ related functions (groupNumericIndexedVectorState,numericIndexedVector*) for building/analysis/arithmetic. Improves joins, filters, and aggregations on sparse data and can significantly reduce storage. #74193 -
Major areas with active development and notable improvements:
- JSON data type
- Database=Replicated
- Parallel replicas
- S3Queue
- Keeper
- Parquet format
Click any tab in the tab bar above for more information.
Functions
-
SimpleAggregateFunctionnow supportsanyLastRespectNullsandanyRespectNulls. #80219 -
Added functions
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNullto returnNULLwhen the right argument is zero. #78276. -
Users can now do case-insensitive JSON key lookups using
JSONExtractCaseInsensitive(and other variants ofJSONExtract). #83770. -
Text index improvements:
- Explicit parameters are now supported via key-value pairs (
tokenizerrequired; optionalmax_rows_per_postings_list,ngram_size). #80262 - Text index supports
stringtokenizer. #81752 tokens()supportsstringtokenizer. #80195hasAll()can usetokenbf_v1/ngrambf_v1full-text skipping indices. #77662- Added
mapContainsKey,mapContainsValue,mapContainsValueLike,mapExtractValueLikefunctions and bloomfilter-index support for filtering map values. #78171 (UnamedRus).
- Explicit parameters are now supported via key-value pairs (
-
Added experimental functions
searchAnyandsearchAllwhich are general purpose tools to search text indexes. #80641. -
Added setting
cast_string_to_date_time_modeto control DateTime parsing mode when casting from String. #80210 -
Added
dateTimeToUUIDv7(DateTime)conversion function. #84319 -
Added UInt128 ↔ IPv6 conversion support, enabling arithmetic/bitwise operations (e.g.
bitAnd) with conversion back to IPv6. #76928 -
Array functions:
arrayLevenshteinDistance,arrayLevenshteinDistanceWeighted,arraySimilarity. -
String functions:
stringBytesUniq,stringBytesEntropy;SparseGrams,SparseGramsUTF8,SparseGramsHashes(n-grams extraction with additional longer/unique chunks). -
DateTime functions:
-
Base32 / Bech32:
- Added
base32Encode,base32Decode. - Added
bech32Encode,bech32Decode. #80239
- Added
-
Geo functions:
-
Color space conversion functions:
colorOKLCHToSRGB,colorSRGBToOKLCH. #83679 -
Time series / PromQL helpers:
- Added
timeSeriesDerivToGridandtimeSeriesPredictLinearToGridaggregate functions. #84328 - Added
timeSeries*helper functions for resampling to a time grid and computing PromQL-likedelta,rate,idelta,irate. #80590 - Added helper functions:
timeSeriesInstantDeltaToGrid,timeSeriesInstantRateToGrid,timeSeriesRateToGrid,timeSeriesResampleToGridWithStaleness,timeSeriesDeltaToGrid,timeSeriesLastTwoSamples.
- Added
-
Added financial functions:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 -
SQL compatibility: added
lagandleadwindow functions. #82108 -
Introspection:
Click any tab in the tab bar above for more information.
MergeTree-related
-
Allow filtering query-selected parts by the disk they reside on. #80650
-
filterPartsByQueryConditionCachenow respectsmerge_tree_min_{rows,bytes}_for_seekto align with other index-based filtering methods. #80312 -
Secondary index performance improvements:
-
Added MergeTree virtual columns:
-
Projections: allow using
_part_offsetin normal projections (first step towards projection indexes). #78429 -
Added setting
max_merge_delayed_streams_for_parallel_writeto control how many columns merges can flush in parallel (analogous tomax_insert_delayed_streams_for_parallel_write). Helps reduce memory usage for vertical merges (notably for wide tables such assystem.metric_logdumped to S3).
Click any tab in the tab bar above for more information.
Performance
-
Added query plan optimization for lazy column materialization (read columns only after
ORDER BY/LIMIT), controlled byquery_plan_optimize_lazy_materialization. #55518 -
Filtering by multiple projections.
-
JOIN optimizations:
- Merge equality conditions from filter step into JOIN condition to use them as hash keys. #78877
- Added
parallel_hash_join_thresholdto fall back tohashalgorithm when the right table is small. #76185 - Added
min_joined_block_size_rows(default 65409) to squash small JOIN blocks (when supported by algorithm). #81886 - Added query-plan optimizations: merge WHERE into ON when possible (
query_plan_merge_filter_into_join_condition), and shard joins by PK ranges for similarly ordered large tables (query_plan_join_shard_by_pk_ranges=1). - Low-level hash JOIN optimizations.
-
User-defined functions: UDFs can be marked as deterministic in XML; query cache now checks UDF determinism and caches results when applicable. #77769
-
Bloom filter index optimizations.
-
Distributed query optimizations:
- Added
enable_parallel_blocks_marshallingto offload (de)compression and (de)serialization of network blocks into pipeline threads, improving performance of large distributed queries. #78694 - Added
enable_producing_buckets_out_of_order_in_aggregation(enabled by default) to send aggregation buckets out-of-order during memory-efficient aggregation, improving performance when some buckets merge slower (may slightly increase memory usage). #80179
- Added
-
Compressed logs and profile events in the native protocol to reduce bandwidth usage and improve responsiveness on large clusters. #82535
-
Avoid substituting table functions with
*-clustervariants when a query contains JOINs or subqueries. #84335 -
Improved cache locality using rendezvous hashing. #82511
-
Fixed incorrect use of
distributed_depthfor cluster-function detection (could lead to data duplication); useclient_info.collaborate_with_initiatorinstead. #85734
Click any tab in the tab bar above for more information.
Codecs / compression
-
Added
default_compression_codecfor MergeTree tables, used when column codecs are not explicitly specified inCREATE TABLE. #66394 -
DoubleDeltacodec can now be applied only to numeric columns (no longer allowed forFixedString). #84383 -
Changed default index granularity for
textindexes to 64. #82162
Click any tab in the tab bar above for more information.
Other small SQL things
-
Added
TRUNCATE ALL TABLES FROM db LIKE '%pattern%'. -
DESCRIBE SELECT ...is now supported in addition toDESCRIBE (SELECT ...). #82947 -
Added support for using external disks for temporary data.
-
Fixed snapshots for all tables via
enable_shared_storage_snapshot_in_query. -
Virtual column
_tableis now available everywhere.
Click any tab in the tab bar above for more information.
JSON data type
-
JSONdata type is production-ready (see https://jsonbench.com/).DynamicandVariantdata types are also production-ready. #77785 -
Improved performance of reading
JSONsubcolumns from shared MergeTree data by introducing new shared-data serializations. #83777 -
Compact parts: store marks per substream to allow reading individual subcolumns. The new format is controlled by
write_marks_for_substreams_in_compact_parts(old format is still supported for reads). #77940 -
write_marks_for_substreams_in_compact_partsis now enabled by default, significantly improving subcolumn reads from newly created Compact parts. Note: servers older than 25.5 cannot read these new Compact parts (disable the setting to preserve downgrade compatibility). #84171 -
Added MergeTree setting
merge_max_dynamic_subcolumns_in_wide_partto limit the number of dynamic subcolumns in Wide parts after merges. #87646 -
Marked settings
allow_experimental_variant/dynamic/jsonandenable_variant/dynamic/jsonas obsolete;Variant,Dynamic, andJSONare now enabled unconditionally. #85934 -
MergeTree shared-data serialization is controlled by
object_shared_data_serialization_versionandobject_shared_data_serialization_version_for_zero_level_parts. Default will remainmapfor the next few releases, then switch toadvanced(zero-level parts:mapormap_with_buckets). Note: changing shared-data serialization is supported only forobject_serialization_version = v3(currently default is v2, planned to switch to v3 in future releases). -
Fixed potential thread pool starvation when reading JSON column samples with many subcolumns by respecting
merge_tree_use_prefixes_deserialization_thread_pool. #91208
Click any tab in the tab bar above for more information.
ObjectStore - S3/Azure/GCS
-
Added support for custom IAM roles via S3
extra_credentials(role_arn = ...). #84011 -
Added setting
s3_slow_all_threads_after_network_error. #80035 -
Azure config: add missing
partition_columns_in_data_file. #85373 -
Azure Blob Storage: replace Curl HTTP client with Poco client (enabled by default). Added multiple Azure client settings mirroring S3, introduced aggressive connect timeouts for both Azure and S3, improved Azure profile events/metrics introspection, and significantly improved cold-query latencies. Revert to Curl via
azure_sdk_use_native_client=false. #83294 -
S3Queue/AzureQueue: improved resilience to ZooKeeper connection loss without potential duplicates. Requires enabling
use_persistent_processing_nodes(modifiable viaALTER TABLE MODIFY SETTING). #85995 -
azureBlobStoragetable engine: cache and reuse managed identity auth tokens to reduce throttling. #79860 -
Permissions:
azureBlobStorage,deltaLakeAzure, andicebergAzurenow properly validate AZURE permissions; all*-Clustervariants validate permissions via their non-clustered counterparts;icebergLocalanddeltaLakeLocalnow requireFILEpermissions. #84938 -
Azure Blob Storage: added
extra_credentialsauthentication withclient_idandtenant_id. #84235 -
Object storage auth: added AWS S3 authentication with explicitly provided IAM role; added OAuth for GCS; synchronized object storage connection parameter serialization interfaces (previously Cloud-only, now open-sourced). #84011
-
gcsfunction now requiresGRANT READ ON S3permission. #83503 -
Object removals: collect all removed objects and execute a single object storage remove operation. #85316
Click any tab in the tab bar above for more information.
Datalakes & catalogs
- Data Lake Catalogs (Unity, REST, Glue, Hive Metastore) are promoted from Experimental to Beta. #85848
- Added
_data_lake_snapshot_versionto Data Lake table engines. #84659 - Implemented file pruning in Data Lake engines by virtual columns. #84520
- Added
show_data_lake_catalogs_in_system_tablesto control exposing Data Lake tables insystem.tables. #85411
Iceberg
-
Writes & catalogs:
CREATE TABLEcan create a new Iceberg table;INSERTinto Iceberg is supported (controlled byallow_experimental_insert_into_iceberg), incl. compatibility for PyIceberg; REST and Glue catalogs are supported for writes;DROP TABLEremoves from REST/Glue catalogs and deletes metadata. #83983 #82692 #84466 #84684 #84136 #85395 -
Partitioning & pruning: Hive-style partitioned writes; partition columns are no longer virtual; bucket partitioning helpers
icebergHash/icebergBucketTransform; partition pruning is enabled by default. #76802 #79262 -
Time travel & metadata resolution: time travel via
iceberg_timestamp_ms/iceberg_snapshot_id; snapshot version is not cached between SELECTs anymore (fixes time-travel issues); REST catalog metadata resolution fixes;version-hint.textsupport (read viaiceberg_enable_version_hint, write support added).system.iceberg_history(availability/behavior to verify). #85038 #85531 #78594 #85130 -
Metadata caching/observability & scaling: Iceberg metadata files cache via
use_iceberg_metadata_files_cache; async iteration of Iceberg objects without materializing per-file object lists;system.iceberg_metadata_logrecords metadata files used during SELECT. #85369 #86152 -
Schema evolution & column IDs: schema evolution support incl. complex types (plus add/drop/modify for simple types); read data files by field/column IDs to support renamed columns. #85769 #83653
-
Statistics & optimizations: write more Iceberg stats (column sizes, lower/upper bounds) for pruning; pruning by bounds; faster
count()without filters. #85746 #78242 #78090 -
Deletes & maintenance: equality deletes and position deletes;
ALTER DELETEfor merge-on-read; reduced RAM usage for large position-delete files (keep only last Parquet row group in RAM);OPTIMIZE TABLEmerges position-delete files into data files to reduce Parquet count/size; Spark compatibility fix for position-delete files. #85843 #83094 #80237 #85549 #85329 #85250 #85762 -
Iceberg metadata format & write fixes: compressed
metadata.jsonviaiceberg_metadata_compression_method(all ClickHouse compression methods); fixes for complex-type writes; update metadata timestamp in writes. #85196 #85330 #85711 -
Catalog-specific: Glue catalog supports reading after schema evolution and
TimestampTZ; Hive Metastore catalog supported for Iceberg. #82301 #83132 #77677 -
Object storage Hive integration fixes (LowCardinality, column fill order, empty format LOGICAL_ERROR, partition-column-only edge cases, schema assertions, partial parallel replicas fix, deterministic containers). #85538
-
Since 25.7, ClickHouse works with Databricks-managed Iceberg tables.
Delta Lake
- Delta-kernel-based implementation enabled by default; local storage support;
deltaLakeLocaltable function for filesystem-mounted tables;deltaAzurefor Azure; time travel viadelta_lake_snapshot_version; experimental writes gateallow_experimental_delta_lake_writes+ write support forDeltaLake. #79541 #79416 #79781 #85295 #86180 #85564
MergeTree as a Data Lake
-
Readonly MergeTree tables support refresh for the one-writer / many-readers pattern. #76467
-
Custom disks for databases.
Click any tab in the tab bar above for more information.
Integrations
-
Experimental: Ytsaurus table engine and table function. #77606
-
Arrow Flight: ClickHouse can expose an Arrow Flight RPC endpoint via
arrowflight_portand can also query Arrow Flight servers using thearrowflight()table function (SELECT * FROM arrowflight('host:port', 'dataset_name')). #74184 -
Kafka:
- Added inline SASL credentials support (
kafka_sasl_username,kafka_sasl_password). - Fixed cases where a materialized view could start too late (after the Kafka table that streams into it). #72123
- Implemented Keeper-based rebalance logic for StorageKafka2 with permanent/temporary partition locks and dynamic redistribution across replicas. #78726
- Added a system table to store erroneous incoming messages from Kafka-like engines. #68873
- Added inline SASL credentials support (
-
PostgreSQL protocol:
-
Force secure connections for
mysql_portandpostgresql_port. #82962 -
MySQL protocol: implemented information schema tables to support C# MySQL clients. #84397
-
PromQL: added basic PromQL dialect support (
dialect='promql') for TimeSeries tables (promql_table_name). Supportsrate,delta,increase, andprometheusQuery()wrapper; no operators and no HTTP API yet. #75036
Click any tab in the tab bar above for more information.
S3Queue
-
Added per-table overrides for MV insert settings:
min_insert_block_size_rows_for_materialized_viewsandmin_insert_block_size_bytes_for_materialized_views(override profile-level settings). #83971 -
Improved S3Queue/AzureQueue performance by enabling parallel INSERT pipeline via
parallel_inserts=true(scales close to linearly withprocessing_threads_num). #77671 -
Added
_timevirtual column to S3Queue. #78926 -
Macros (e.g.
{uuid}) are now supported inkeeper_pathfor S3Queue. #82463 -
Added server setting
s3queue_disable_streaming(runtime changeable, no restart required) to disable streaming for S3Queue tables. #82515
Click any tab in the tab bar above for more information.
Formats
-
Added
Hashoutput format, which computes a single hash value over all rows and columns of the result (useful as a lightweight result fingerprint when data transfer is a bottleneck). Example:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashreturnse5f9e676db098fdb9530d2059d8c23ef. #84607 -
Parquet:
- Added experimental Parquet Reader v3 (new faster implementation with page-level filter pushdown and PREWHERE), enabled via
input_format_parquet_use_native_reader_v3. #82789 - Geo types: WKB-encoded geometry data is remapped to corresponding ClickHouse types.
- Added JSON support: write ClickHouse JSON columns to Parquet and read Parquet JSON columns as ClickHouse JSON. #79649
- Enum values are now written as
BYTE_ARRAYwithENUMlogical type by default. #84169 - Added
ParquetReadRowGroupsandParquetPrunedRowGroupscounters.
- Added experimental Parquet Reader v3 (new faster implementation with page-level filter pushdown and PREWHERE), enabled via
-
ORC: added settings for compression block size and changed the default from 64KB to 256KB (Spark/Hive compatible). #80602
-
Added
format_schema_sourcesetting to define the source offormat_schema. #80874
Click any tab in the tab bar above for more information.
Operations
-
Database engines
AtomicandOrdinarynow supportdisksetting to store table metadata files on a specified disk. #80546 -
Settings constraints now support explicitly disallowed values. #78499
-
Tweaked jemalloc configuration for improved performance. #81807
-
Memory tracking improvements:
- External library allocations are now accounted by ClickHouse memory tracker (may increase reported memory usage / trigger
MEMORY_LIMIT_EXCEEDED). #84082 - Added
MemoryResidentWithoutPageCachemetric for more accurate memory usage reporting when userspace page cache is enabled. #81233 - Memory tracker can be corrected using cgroup data via
memory_worker_correct_memory_tracker(when cgroups are available andmemory_worker_use_cgroupis enabled). #83981 - Improved cgroup v2 detection on systems with both v1 and v2 enabled. #78566
- External library allocations are now accounted by ClickHouse memory tracker (may increase reported memory usage / trigger
-
Backups: allow backing up PostgreSQL, MySQL, and DataLake databases (definition only, without data). #79982
-
ODBC/JDBC: allow using named collections and unify parameter names. #80334 #83410
-
Views created by ephemeral users now store a copy of the user and are not invalidated after the user is deleted. #84763
-
AWS ECS credentials: added token expiration so it can be reloaded. #82422
-
Added
bind_hostsetting in clusters configuration to force distributed connections through a specific network. #74741 -
Logging: introduced async logging and enabled it by default (
<logger><async>false</async></logger>disables it). Added tunable limits and introspection, per-channel JSON logging vialogger.formatting.channel, and fixedsend_logs_source_regexpafter refactoring. #82516 #80125 #85105 #86331 #85797 -
Added
schema_typesetting forsystem.metric_logwith schema optionswide,transposed, andtransposed_with_wide_view(note:transposed_with_wide_viewdoes not support subsecond resolution;event_time_microsecondsremains as alias for compatibility). #78412 -
Set
remote_filesystem_read_methoddefault tothreadpool. #77368 -
Allow specifying
http_response_headersin anyhttp_handlers. #79975 -
system.zookeepernow exposesauxiliary_zookeepersdata. #80146
Click any tab in the tab bar above for more information.
CLI
-
clickhouse-localsupports persistent database storage via--path(e.g.ch --path .). -
clickhouse-localsupports implicit tables (queries can omitFROM). -
Bundled <code>chdig</code> (top-like TUI for ClickHouse) as part of ClickHouse. #79666
-
clickhouse-client: added AI-powered SQL generation via??prefix (OpenAI/Anthropic, automatic schema discovery). Supports zero-config API key discovery viaOPENAI_API_KEY/ANTHROPIC_API_KEY. #83314 #83787 -
clickhouse-benchmark: added--max-concurrencyoption with gradual ramp-up of parallel queries. #85623
Click any tab in the tab bar above for more information.
Web UI
-
Added a landing page listing embedded web tools (opened automatically for browser-like user agents). #81129
-
Improved Web UI scrollbars appearance. #82869
-
clickhouse-serverwith embedded configuration now supports Web UI access by responding to HTTPOPTIONSrequests. #82870*
Click any tab in the tab bar above for more information.
Security
-
Fixed passing external roles in interserver queries. #79099
-
Parameterized
CREATE USERquery. -
External authentication: match
forward_headerscase-insensitively. #84737 -
Added setting
access_control_improvements.enable_user_name_access_typeto enable/disable precise user/role grants (introduced in #72246). Should be disabled for compatibility with replicas older than 25.1. #79842 -
Added new source access types
READandWRITE, deprecating previous source-related access types (e.g.GRANT READ, WRITE ON S3 TO user). Controlled byaccess_control_improvements.enable_read_write_grants(disabled by default). #73659 -
Azure/FILE permissions:
azureBlobStorage,deltaLakeAzure, andicebergAzurenow properly validateAZUREpermissions;*-Clustervariants validate against their non-clustered counterparts;icebergLocalanddeltaLakeLocalnow requireFILEpermissions. #84938 -
Added new syntax for scoped S3 grants:
GRANT READ ON S3('s3://foo/.*') TO user. #84503 -
Mask credentials in
deltaLakeAzure,deltaLakeCluster,icebergS3Cluster, andicebergAzureCluster. #85889 -
Query masking rules can now throw
LOGICAL_ERRORon match to detect credential leaks in logs. #78094
Click any tab in the tab bar above for more information.
Network
-
Drop TCP connections after a configured number of queries or after a time threshold. #81472
-
HTTP buffers: embed proxy configuration using builder-based setup. #77693
-
Server bandwidth throttling: allow reloading
max_local_read_bandwidth_for_serverandmax_local_write_bandwidth_for_serverwithout server restart. #82083
Click any tab in the tab bar above for more information.
Analyzer
-
Improved resolution of compound identifiers (notably better
ARRAY JOINcompatibility). To keep the old behavior, enableanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nested. #85492 -
Distributed queries: experimental query plan distribution via
serialize_query_plan/process_query_plan_packet.
Click any tab in the tab bar above for more information.
Database=Replicated
-
Added
logs_to_keepsetting for Replicated databases to control how many log entries are kept in ZooKeeper (lower values reduce ZNodes; higher values allow replicas to catch up after longer downtime). #84183 -
Added
database_replicatedsettings to define default values forDatabaseReplicatedSettingswhen they are not explicitly specified inCREATE DATABASE ... ENGINE=Replicated. #85127 -
Enabled backoff logic for replicated tasks to reduce CPU/memory usage and log volume. Added settings
max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_ms, andmax_postpone_time_for_failed_replicated_tasks_ms. #74576
Click any tab in the tab bar above for more information.
Parallel replicas
-
Added projection support for parallel replicas (controlled by
parallel_replicas_support_projection, requiresparallel_replicas_local_plan). #82807 -
Parallel replicas no longer wait for slow unused replicas once all read tasks are already assigned to other replicas. #80199
-
Distributed
INSERT SELECTinto replicated MergeTree now uses parallel replicas more efficiently by selecting different data on different nodes and inserting independently. #78041
Click any tab in the tab bar above for more information.
Keeper
-
Added support for setting arbitrary watches in Keeper multi queries. #84964
-
Added
clickhouse-keeper-utilsCLI tool to dump/analyze Keeper snapshots and changelogs (including extracting log ranges). #81677 -
keeper-utils: added configurable limit for dumping top subtrees. #85198 -
Added
get_aclcommand to KeeperClient. #84641 -
Keeper performance improvements:
- Reduced contention on storage lock. #84732
- Improved RocksDB initial loading. #83390
- Move changelog files between disks in a background thread to avoid blocking Keeper (e.g. when moving to S3 disk). #82485
- Added limits for log entry cache size via
latest_logs_cache_entry_count_thresholdandcommit_logs_cache_entry_count_threshold. #84877
-
ACL improvements:
Click any tab in the tab bar above for more information.
Introspection
-
Added pressure metrics to async metrics. #80779
-
Added a dimensional metric for
ConcurrentBoundedQueuesize, labelled by queue type and queue id. #84675 -
CGroup-level and OS-level metrics are now reported together: cgroup metrics use
CGroup<Metric>names, OS/procfs metrics useOS<Metric>. #84317 -
Added
query_idtosystem.errors. #76581 -
Added
last_error_message,last_error_trace, andquery_idtosystem.error_log. #79836 -
system.functionsnow shows the ClickHouse version where each function was introduced. #79839 -
Added
system.zookeeper_connection_logwith historical ZooKeeper connection information. #79494 -
Added support for partially aggregated metrics. #85328
-
Added
system.completionssystem table. #83833 -
Refreshes of refreshable materialized views are now logged in
system.query_log. #71333 -
Added
system.codecssystem table to introspect available codecs. #81600 -
Added async metrics for server TCP sockets. #80188
-
Added
mergeTreeProjectiontable function to read projection parts directly for introspection. #78429
Click any tab in the tab bar above for more information.
v25.8.16.10001
Released 2026-02-18
Build report - 25.8.16.10001 | Release page
Changes compared to upstream's v25.8.16.34-lts
Backward Incompatible Changes
- ALTER MODIFY COLUMN now requires explicit DEFAULT when converting nullable columns to non-nullable types. Previously such ALTERs could get stuck with cannot convert null to not null errors, now NULLs are replaced with column’s default expression (ClickHouse#84770 by** @vdimir **via #1344)
New Features
- Added new SQL statement EXECUTE AS to support user impersonation (ClickHouse#70775 by @shiyer7474, ClickHouse#90437 by @alexbakharew via #1340)
Critical Bug Fixes
- Fix crash in StorageDistributed when parsing malformed shard directory names (ClickHouse#90243 by @AVMusorin via #1343)
Bug Fixes (user-visible misbehavior in an official stable release)
-
Now datalakes catalogs will be shown in system introspection tables only if show_data_lake_catalogs_in_system_tables explicitly enabled (ClickHouse#88341 by @alesapin via #1331)
-
Now ClickHouse will show data lake catalog database in SHOW DATABASES query by default (ClickHouse#89914 by @alesapin via #1331)
-
Possible crash/undefined behavior in IN function where primary key column types are different from IN function right side column types (ClickHouse#89367 by @ilejn via #1339)
-
Fixed move-to-prewhere optimization, which did not work in the presence of row policy (ClickHouse#87303 by @KochetovNicolai via #1345)
-
Fixes a bug where certain distributed queries with ORDER BY could return ALIAS columns with swapped values (i.e., column a showing column b’s data and vice versa) (ClickHouse#94644 by @filimonov via #1346)
-
Split part ranges by volume characteristics to enable TTL drop merges for cold volumes. After this patch, parts with a max TTL < now will be removed from cold storage. The algorithm will schedule only single part drops. (ClickHouse#90059 by @Michicosun via #1363)
-
Check and mark the interserver IO address active in DDL worker (ClickHouse#92339 by @tuanpach via #1403)
-
Disable
write_marks_for_substreams_in_compact_partsby default to preserve downgrade compatibility (#1407 by @zvonand)
Improvements
-
Fix handling of users with a dot in the name when added via config file (ClickHouse#86633 by @mkmkme via #1342)
-
S3Queue auxiliary Zookeeper support using keeper_path setting from s3Queue (ClickHouse#95203 by @lesandie via #1357)
Performance Improvements
-
SELECT query with FINAL clause on a ReplacingMergeTree table with the is_deleted column now executes faster because of improved parallelization from 2 existing optimizations (ClickHouse#88090 by @shankar-iyer via #1332)
-
Reduce INSERT/merges memory usage with wide parts for very wide tables by enabling adaptive write buffers. Add support of adaptive write buffers for encrypted disks (ClickHouse#92250 by @azat via #1341)
Let’s Install!
Linux packages for both AMD64 and Aarch64 can be found at builds.altinity.cloud as either .deb, .rpm, or .tgz. Linux packages for upstream builds are at packages.clickhouse.com.
Altinity Stable Build images are available at DockerHub as altinity/clickhouse-server:25.8.16.10001.altinitystable.
For more information on installing ClickHouse from either the Altinity Builds or the upstream builds, see the ClickHouse Altinity Stable Builds Install Guide.
Please contact us at info@altinity.com if you experience any issues with the upgrade.