Altinity Stable® Build for ClickHouse® 25.3

Here are the detailed release notes for version 25.3.

Release history

Version 25.3.6.10034 is the latest release. We recommend that you upgrade to this version. But read the detailed release notes and upgrade instructions for version 25.3 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.3.6.10034 (latest) 2025-07-29 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.3 since the previous Altinity Stable release 24.8

A new release introduces a lot of changes and new functions. Click any of the tabs below for specifics:

Major New Changes

  • Production Ready Now!

    • Refreshable Materialized Views – production ready with new APPEND mode
    • JSON, Dynamic, Variant Data Types – incl. ALTER from deprecated Object, and support for subcolumns in PK/indexes #77785
  • Workload Management With SQL Added SQL syntax for workload/resource management. #69187

  • BFloat16 (16-bit brain floating point) Data Type 16-bit float with 8-bit exponent + 7-bit mantissa. Includes support in cosineDistance, dotProduct, L1/L2/LinfDistance. #73840

  • Lightweight Updates

    • apply_mutations_on_fly=1 allows applying pending mutations during SELECT #74877
    • lightweight_mutation_projection_mode – now supports drop / rebuild
    • Support DELETE ... IN PARTITION #66933
  • SQL Features

    • Standard CTE syntax now supported in INSERTs #70593
    • Table aliases can rename columns: CREATE VIEW my_view(a, b) AS SELECT 1, 2 #72480
    • create_if_not_exists SETTING
    • Better enum support: LIKE, =, IN
    • Parallel DDL: PARALLEL WITH
    • Support for staleness clause in ORDER BY ... WITH FILL #71151
    • Allow CREATE MATERIALIZED VIEW with UNION [ALL].First table in SELECT acts as insert trigger (like with JOINs). #72347
  • MergeTree-family Tables

    • Reverse Ordering: allow_experimental_reverse_key = 1 ORDER BY (time DESC, key) #71095 (Amos Bird)
    • ATTACH PARTITION ALL FROM #61987
    • Attach MergeTree as ReplicatedMergeTree (and vice versa) #65401 (Kirill)
    • Create table with query: CREATE TABLE ... CLONE AS ... Clones schema and attaches partitions #69091 Closes #65015
    • Improved CREATE TABLE AS #69739
    • Auto-cleanup of partitions after timeout via enable_replacing_merge_with_cleanup_for_min_age_to_force_merge #76440
    • Enable default min-max (skipping) indices: add_minmax_index_for_numeric_columns / add_minmax_index_for_string_columns (off by default) #74266
    • New: SYSTEM LOAD PRIMARY KEY – preloads indexes for all parts (useful in benchmarks) #66252
    • New setting: max_parts_to_move – limits number of parts moved #70520
  • New: DatabaseBackup engine – attach tables/dbs from backup instantly #75725

Click any tab in the tab bar above for more release notes.

Requires Attention

  • Upgrade caution (24.8 → 24.9+) – Pending mutation tasks can block server start. Ensure all mutations are complete before upgrading. #74528
  • Cluster version mismatch warning – Don’t mix pre-24.3 with 25.3 in the same cluster. Ensure all DDLs complete before upgrading/downgrading. Clean queue if needed. #75302
  • ZooKeeper compatibility enforcement – Removed metadata_version node creation on restart. Upgrades skipping 20.4 → 24.10 will throw an exception; update in supported steps. #71385
  • More introspection metrics/tables – Additional columns and metrics may increase memory usage; configure TTLs or disable unused tables.
  • Metrics behavior changesystem.cpu_usage now uses cgroup-specific metrics (instead of system-wide). #62003
  • Malformed HTTP responses – HTTP errors that occur after query start may result in malformed chunked encoding. Some clients may report protocol issues. #68800
  • Increased network traffic with progress formats
    • JSONEachRowWithProgress now streams updates continuously.
    • This may require tuning for sensitive networks. #73834
  • enable_job_stack_trace is now enabled by default. #71039, #71625
  • Kafka consumer lifecycle – Dropping Kafka table no longer exits consumer group immediately; it times out after session_timeout_ms. #76621
  • async_load_databases is now enabled by default, even without explicit config changes. #74772
  • See the Known Issues section below for other things that require your attention.

Click any tab in the tab bar above for more release notes.

Security

  • Wildcard GRANT syntax – support for granting privileges to wildcard table names, e.g. GRANT SELECT ON db.table_prefix_* TO user and GRANT SELECT ON db*.table TO user. #65311
  • Multiple credentials per user – each auth method can now have its own expiration date; credentials removed from the user entity. #70090 (Altinity)
  • TLS for PostgreSQL wire protocol – adds encryption support to Postgres-compatible interface. #73812
  • SSL for MySQL with named collections – adds support for SSL auth using named collections. Closes #59111, #59452
  • Storage encryption for named collections – encrypts storage used by named collection configs. #68615
  • Push external roles to cluster nodes – query originator can push external user roles to other nodes (e.g., LDAP scenarios). #70332 (Altinity)
  • CHECK GRANT query – verifies whether current user/role has privileges and if target table/column exists. #68885
  • Strict identifier enforcementenforce_strict_identifier_format prevents usage of insecure identifiers. #69411
  • Extended encryption support in config filesencrypted_by XML attribute can now be used in any config file (config.xml, users.xml, or nested). Previously limited to top-level config. #75911 (Mikhail Gorshkov)

Click any tab in the tab bar above for more release notes.

Formats

  • New JSON formats: JSONCompactEachRowWithProgress and JSONCompactStringsEachRowWithProgress – continue work from #69989
  • Parquet
    • Evaluates bloom filters and min/max indexes together. #71383 (Altinity)
    • Boolean support in native reader. #71055 (Altinity)
    • Bloom filter support: filtering by bloom filters in 24.10; write support via output_format_parquet_write_bloom_filter
    • Parallel reading + prefetching of row groups in single-threaded mode. #69862
    • Support for Parquet Page V2 in native reader. #70807 (Altinity)
    • ParquetMetadata now indicates presence of bloom filters. #70947
  • Half-float support – can now read HALF_FLOAT values from Arrow/Parquet/ORC (mapped to Float32). #73836 Note: IEEE-754 half float ≠ BFloat16.
  • ORC
    • Enables reading LowCardinality string columns. #69481
  • Pretty & Vertical Format Usability
    • Thousand-group highlighting and readable number tooltips. #71630
    • Column name shortening via output_format_pretty_max_column_name_width_cut_to and ..._min_chars_to_cut. #73851
    • Trailing spaces highlighting in terminal via output_format_pretty_highlight_trailing_spaces. #73847
    • Block squashing if emitted within short intervals. Controlled via output_format_pretty_squash_consecutive_ms (default: 50ms) and output_format_pretty_squash_max_wait_ms (default: 1000ms). #73852
    • Mid-row cutting if output exceeds output_format_pretty_max_rows. #73929
    • Support for multi-line values: output_format_pretty_multiline_fields
    • Fallback to vertical format: output_format_pretty_fallback_to_vertical_max_rows_per_chunk=10, ..._min_columns=5
  • JSON
    • Pretty-print by default – controlled via output_format_json_pretty_print. #72148
    • Other format-related settings:
      • input_format_json_empty_as_default
      • schema_inference_make_columns_nullable = 0 / 1 / auto

Click any tab in the tab bar above for more release notes.

Functions

These are the most important changes to ClickHouse functions. For a complete list, see the Functions tab in the Appendix below.

  • Introspection
    • estimateCompressionRatio – estimates how compressible data is. #76661
    • initialQueryStartTime – returns the start time of the original query. #75087
  • String
    • overlay, overlayUTF8 – replace part of a string with another. #66933
    • translate – can now delete characters from input. #71441
    • stringCompare – compares two strings. #74070
  • DateTime
    • toStartOfInterval – supports 3-argument syntax. #56738
    • parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero – new parsing functions. #71581
    • toUnixTimestamp64Second #70597 / fromUnixTimestamp64Second #73146
  • Array
    • arrayElementOrNull – safe element access. #69646
    • arrayZipUnaligned – zip arrays of different lengths.
    • arrayUnion – union of arrays. #68989
    • arraySymmetricDifference – returns symmetric diff. #76231
    • Higher-Order Functions – now allow constant arguments.
    • arrayAUC – adds scale argument (default: true). #69717
    • arrayPrAUC – computes area under precision-recall curve. #72073
    • indexOfAssumeSorted – optimized search for sorted arrays. #72517
    • arrayNormalizedGini – returns normalized Gini coefficient. #72823
  • JSON Analysis
    • distinctDynamicTypes, distinctJSONPaths, distinctJSONPathsAndTypes – introspection of JSON structure.
  • Crypto Hash Functions
    • RIPEMD160 – new hash function.
    • keccak256 – Ethereum-compatible hashing. #76669
  • Aggregation
    • quantileExactWeightedInterpolated – new precise quantile function. #69619
    • anyRespectNulls, firstValueRespectNulls, anyValueRespectNulls, anyLastRespectNulls, lastValueRespectNulls – better null handling.
    • windowFunnel – new strict_once mode prevents double-counting events. #69738
    • groupConcat – now supports optional delimiter argument. #72540
    • sequenceMatchEvents – returns timestamps of matched events (longest chain in pattern). #72349 (Altinity)
    • groupUniqArrayArrayMap – now allowed as SimpleAggregateFunction. #75034

Click any tab in the tab bar above for more release notes.

New Optimizations

These are the most important new optimizations in ClickHouse 25.3. For a complete list, see the New Optimizations tab in the Appendix below.

  • JOINs
    • optimize_extract_common_expressions = 1 – extract common expressions from WHERE and ON to reduce hash table usage. #71537
    • Removed allow_experimental_join_condition, enabling non-equi JOINs by default. #69910
    • Parallel Hash Join – now default.
    • Automatic JOIN Reordering via query_plan_join_swap_table. #71577
    • New setting query_plan_join_inner_table_selection = auto – picks the smaller table as inner. #68682
    • temporary_data_in_cache support for partial merge joins. #77390
    • Push-down filter from JOIN ON condition. #75536
    • enable_adaptive_memory_spill_scheduler – spill multiple grace JOINs together based on combined memory usage. #72728
  • PREWHERE filter reordering – now allowed by default; controlled via allow_reorder_prewhere_conditions. #70657
  • Row comparison optimization – compare most likely unequal columns first. #63780 (Altinity)
  • pointInPolygon now uses indices.
  • Transitive condition inference – improved filtering, e.g. WHERE start_time >= '2025-08-01' AND end_time > start_time
  • TTL recalculation now respects ttl_only_drop_parts – reads only necessary columns. #65488 (Altinity)
  • ThreadPool improvements – optimized thread creation to avoid contention; improves performance under high load. #68694 (Altinity)
  • ALTER TABLE ... REPLACE PARTITION no longer waits for unrelated mutations/merges. #59138 (Altinity)
  • Short-circuit eval for Nullable columns – new settings: short_circuit_function_evaluation_for_nulls and its _threshold version. Functions that return NULL for NULL args will skip evaluation if NULL ratio is high. #60129
  • ReplacingMergeTree merge algorithm optimized for non-intersecting parts. #70977
  • JIT compilation enabled for more expressions: abs, bitCount, sign, modulo, pmod, isNull, isNotNull, assumeNotNull, casts to Int/UInt/Float, comparisons, logical ops. #70598 (李扬)
  • Distributed INSERT … SELECT – respects prefer_localhost_replica when building query plan. #72190 (Altinity)
  • Predicate pushdown for distributed queries – setting allow_push_predicate_ast_for_distributed_subqueries enables temporary AST-based pushdown until query plan serialization is ready. Closes #66878, #69472, #65638, #68030, #73718; implemented in #74085 (Nikolai Kochetov)
  • ALTER TABLE FETCH PARTITION now fetches parts in parallel; pool size set via max_fetch_partition_thread_pool_size. #74978
  • New MergeTree setting materialize_skip_indexes_on_merge – disables index materialization during merge, allowing explicit control via ALTER TABLE ... MATERIALIZE INDEX .... #74401
  • MergeTree optimizations for petabyte-scale workloads
    • Memory optimization for index granularity – new setting use_const_adaptive_granularity ensures efficient metadata memory use in large workloads. #71786 (Anton Popov)
    • Primary key caching – setting use_primary_key_cache enables LRU cache for PKs; prewarm_primary_key_cache warms it on insert/merge/fetch/startup. #72102 (Anton Popov)
  • Caches
    • use_query_condition_cache – remembers data ranges that don’t match repeated query conditions as temporary in-memory index. Closes #67768, implemented in #69236 (zhongyuankai)
    • Active eviction – cache no longer grows unnecessarily when data volume is smaller. #76641
    • Skipping index granule cache – in-memory cache improves repeated query performance. Controlled by skipping_index_cache_size and _max_entries. Motivated by vector similarity indexes. #70102 (Robert Schulze)
    • prewarm_mark_cache setting – loads mark cache on insert, merge, fetch, and table startup. #71053 (Anton Popov). Example: SYSTEM PREWARM MARK CACHE t
    • Userspace Page Cache – control with page_cache_max_size and use_page_cache_for_disks_without_file_cache

Click any tab in the tab bar above for more release notes.

Operations

These are the most important changes to ClickHouse operations. For a complete list, see the Operations tab in the Appendix below.

  • Configuration
    • allowed_feature_tier – global switch to disable all experimental/beta features. #71841
    • Limit number of replicated tables, dictionaries, and views. #71179 (Kirill)
    • User-level disk space checks: min_free_disk_bytes_to_perform_insert and min_free_disk_ratio_to_perform_insert. #69755 (Marco Vilas Boas)
    • IP family filtering with dns_allow_resolve_names_to_ipv4 and dns_allow_resolve_names_to_ipv6. #66895
    • Add users to startup scripts; allows controlling DEFINER, etc. #74894
  • Usability
    • Embedded documentation for settings is now richer and will become the source for website docs (always accurate, versioned, and offline-capable). #70289
    • print_pretty_type_names – improves Tuple display.
    • Automatic disk spilling in GROUP BY / ORDER BY based on memory use. Controlled via max_bytes_ratio_before_external_group_by and ..._sort. #71406, #73422
  • Monitoring
    • New per-host dashboards: Overview (host) and Cloud overview (host) in advanced dashboard. #71422
  • Cluster
    • Dynamic cluster autodiscovery via <multicluster_root_path>. Extends node autodiscovery. #76001 (Altinity)
    • Uses auxiliary keepers for autodiscovery. #71911 (Altinity)
  • Disks: plain_rewritable
    • Allow ALTER TABLE DROP PARTITION on plain_rewritable disk. #77138
    • Can combine read-only and writable disks in storage policies (for Copy-on-Write). #75862
    • Shared disk metadata across server instances; tolerate object-not-found errors. #74059
  • Userspace Page Cache
    • New implementation caches in-process (useful for remote VFS without local FS cache). #70509
  • External Tables
    • Support for attaching external tables without databases: table_disk = 1
  • CPU Scheduling
    • New setting concurrent_threads_scheduler = round_robin | fair_round_robin – improves CPU fairness across INSERT/SELECT. #75949
  • Memory Tracker
    • memory_worker_correct_memory_tracker – correct memory tracker regularly. #75714
  • Introspection & Logging
    • processors_profile_log has 30-day TTL by default. #66139
    • system.filesystem_cache_log now respects enable_filesystem_cache_log. #77650
    • New table system.histogram_metrics – supports observe(value) histogram-style metrics (e.g., Keeper response times). #75736
    • system.trace_log now includes symbols and lines (symbolized stack traces); controlled via trace_log.symbolize, enabled by default. #73896
    • date_time_utc config option – enables UTC datetime formatting in logs (RFC 3339 / ISO 8601). #71560
    • Disable heavy async metrics by default – avoids unnecessary overhead. #71087
    • Skip detached parts from readonly/write-once disks in system.detached_parts. #71086
    • New introspection tables: system.s3_queue_settings, system.azure_queue_settings #70841
    • system.replicas has new column: readonly_duration – useful for distinguishing sentinel replicas. #69871
    • Throttle frequency of log messages. #70601
    • system.query_metric_log – tracks query memory/metric history and flushes to disk. #66532
    • New profile events for merges and mutations. #68015
    • system.projections – added
    • system.trace_log (again) – now includes symbolized stack traces. #73896
    • Use cgroup-specific CPU metrics for more accurate accounting. #62003
  • TLS
    • Client certificates can now be reloaded without restarting – same as server certs. #70997
  • Merge Fine-Tuning (Experts Only)
    • Experimental merge_selector_use_blurry_base – aggressively merges partitions near part count limits. #70645
    • New merge selector: Trivial (worse than Simple, for testing). #70969
    • Exposed merge selector heuristics:
      • merge_selector_enable_heuristic_to_remove_small_parts_at_right #71313
      • merge_selector_base (expert-level setting). #71497
      • MergerMutator is now more customizable. #73294
  • Official Docker Image – ClickHouse now has one! (But no strong reason to switch if your current setup works.)
  • Backup Database Engine – allows mounting a backup as a read-only database.

Click any tab in the tab bar above for more release notes.

Interfaces

These are the most important changes to ClickHouse interfaces. For a complete list, see the Interfaces tab in the Appendix below.

  • SSH
    • Added SSH interface – connect via any SSH client for interactive queries using embedded clickhouse-client (PTY-based). #48902
  • HTTP
    • Web UI: now features interactive database navigation. #75777
    • Play UI enhancements:
      • Progress bar with live stats, cancellation, speed metrics
      • Incremental rendering with HTTP compression
      • Sticky headers, cell navigation via arrow keys
      • Improved number formatting, fixed cell resizing issues
      • Client-side rendering finalization logic
      • Mouse-over shows column data types
      • Displays server status, version, uptime
      • Better support for nested data and special floats (inf, nan)
      • Overall refreshed design, incl. Safari-compatible cloud icon #74204
    • HTML merge visualizer: available at http://localhost:8123/merges. #70821
    • Custom HTTP response headers: via http_response_headers. Enables e.g. image rendering in browser. Closes #59620, #72656
    • Support for user/password in http_handlers for dynamic_query_handler / predefined_query_handler. #70725
    • Username-only authentication in HTTP handlers now allowed (password optional). #74221
    • Better handling of streaming errors – generate malformed chunked encoding when exceptions occur. #68800
  • CLI (clickhouse-client & clickhouse-local)
    • --progress-table – new mode shows live query metrics as a table; can toggle using Ctrl+Space if --enable-progress-table-toggle is set. #63689
    • clickhouse-local supports --copy mode as shortcut for format conversion. #68503, #68583
    • CLI tools now auto-detect stdin compression. Closes #70865, implemented in #73848
    • Implicit command-line mode: ch "SELECT 1" or ch script.sql
    • clickhouse-compressor now supports --threads for parallel compression. #70860
    • Logs now include script_query_number and script_line_number in system.query_log and native protocol. #74477
    • Replaced send_settings_to_client (server-side) with client-side apply_settings_from_server to control client behavior (only applies to native protocol). #75478, #75648
    • Set custom prompt via:
      1. --prompt CLI option
      2. <prompt> in config
      3. <connections_credentials><prompt> in config #74168
    • Secure connection auto-detect: recognizes port 9440 as TLS. #74212
  • PostgreSQL Wire Protocol
    • Now supports prepared statements. #75035
  • MySQL Wire Protocol
    • Error codes now match MySQL compatibility. #73948

Click any tab in the tab bar above for more release notes.

Integrations

These are the most important changes to ClickHouse integrations. For a complete list, see the Integrations tab in the Appendix below.

  • Storage (S3/Azure) Queue
    • ALTER TABLE ... MODIFY/RESET SETTING ... is now supported for S3Queue. #70811
  • Kafka
    • Upgraded librdkafka to 2.8.0. #76621 (Altinity)
  • MongoDB
    • Full refactor:
      • Switched to mongocxx driver (from deprecated Poco::MongoDB)
      • Support for URI-based connections, full MongoDB type mapping
      • Support for WHERE / ORDER BY pushdowns, restricted unsupported expressions #63279
    • Binary UUID supported #74452
  • URL Engine
    • New _headers column
    • User-defined Content-Type via custom headers. #70859
  • Datalakes
    • Iceberg
      • REST Catalog integration. #71542
      • Supports Iceberg on Azure, HDFS, S3, Local
      • Support reading Iceberg tables on HDFS. #70268
      • Schema evolution support: column reordering, renaming, type widening. #69445
      • Partition pruning with truncate transform (SET use_iceberg_partition_pruning = 1). Implements icebergTruncate, toYearNumSinceEpoch, toMonthNumSinceEpoch. #77403
      • Iceberg-related Parsing improvements:
        • Sequence ID parsing in manifest files
        • Extendable Avro metadata parsing #75010
      • Support iceberg_metadata_file_path to explicitly select Iceberg metadata file. #77318
      • Experimental AWS Glue catalog integration. #77257
    • DeltaLake
      • Support for Unity Catalog on AWS S3 and local FS. #76988
      • Delta Rust Kernel integration
      • New table functions: deltaLakeCluster, iceberg[S3;HDFS;Azure]Cluster, hudiCluster. #72045
      • DeltaLake kernel now supports AWS session tokens + env credentials. #77661
    • S3
      • Fixes for S3 Express support. #73777
    • Azure
      • Support for SAS Tokens. #72959
    • Performance
      • Automatic parallelization for external data queries using parallel_replicas_for_cluster_engines and cluster_for_parallel_replicas
      • Hive-style partition pruning supported

Note: Starting with version 25.4, icebergCatalog, UnityCatalog, and Delta were unified under the DataLakeCatalog umbrella (with subtypes). Altinity builds support that remapping in 25.3 for convenience.

Click any tab in the tab bar above for more release notes.

Backward Incompatible Changes

These are the most important backward incompatible changes in ClickHouse 25.3. For a complete list, see the Backward Incompatible Changes tab in the Appendix below.

  • Docker default user – Passwordless default user is now disabled. Restore via CLICKHOUSE_SKIP_USER_SETUP=1 (unsafe!). #77212
  • Parquet output type changes (#70950)
    • DateDate32; DateTimeDateTime64(3) by default
    • Restore legacy UInt32 output using output_format_parquet_datetime_as_uint32 = 1
  • Security grants
    • CHECK TABLE now requires CHECK privilege (not just SHOW TABLES). #74471
    • New SOURCES.* grant hierarchy for Kafka, NATS, RabbitMQ. #71250
  • Mutations – Full query (incl. subqueries) now validated before execution. #71300
  • Removed: StorageExternalDistributed (MySQL/PostgreSQL with shard/replica). #71176
  • Removed: system tables generate_series and generateSeries – added by mistake. #71091
  • Renamed settingskip_download_if_exceeds_query_cachefilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578
  • deltaSumTimestamp function – dropped support for:
    • Enums, UInt128/UInt256 (first arg)
    • Int8, UInt8, Int16, UInt16 (timestamp arg) #71790
  • Functions greatest / least now ignore NULLs – behavior matches PostgreSQL. Use least_greatest_legacy_null_behavior = true to restore old behavior. #65519, #73389, #73344
  • MongoDB legacy integration removeduse_legacy_mongodb_integration is obsolete. #71997
  • Dictionary validation – added validation when ClickHouse is used as a dictionary source. #72548
  • ORDER BY/comparisons – disallow non-comparable types (JSON, Object, AggregateFunction) by default. #73276
  • MaterializedMySQL engine removed – deprecated and no longer available. #73879
  • MySQL dictionary optimization – no longer executes SHOW TABLE STATUS (was irrelevant for InnoDB). #73914
  • Merge table type inference – now unifies structure across tables using union of columns. May break in cases where type coercion was implicit. Restore old behavior with merge_table_max_tables_to_look_for_schema_inference = 1 or compatibility = 24.12. #73956
  • h3ToGeo() now returns (lat, lon) (standard order). Restore legacy (lon, lat) via h3togeo_lon_lat_result_order = true. #74719
  • Forced merges ignore max bytes when both min_age_to_force_merge_seconds and min_age_to_force_merge_on_partition_only are enabled. #73656
  • Non-SQL dialects degraded to experimental #74224:
    • PRQL: allow_experimental_prql_dialect = 1
    • KQL: allow_experimental_kusto_dialect = 1
  • JSONCompactWithNames and ...AndTypes no longer emit “totals” row (was a bug). #75037
  • format_alter_operations_with_parentheses = true by default – may break replication with pre-24.3 clusters. #75302
  • Cache config strictness – invalid settings now throw errors (were previously ignored). #75452
  • TRUNCATE DATABASE is now disallowed for replicated DBs. #76651 (Bharat Nallan)
  • Parallel replicas disabled by default if analyzer is off. Can override via parallel_replicas_only_with_analyzer = false. #77115
  • Disallow NaN/inf as values in float-type settings. #77546 (Yarik Briukhovetskyi)
  • New mergetree constraintenforce_index_structure_match_on_partition_manipulation allows attaching partitions only when projections/secondary indices of source ⊆ target. Closes #70602, #70603
  • lightweight_mutation_projection_mode moved to merge_tree_settings

Click any tab in the tab bar above for more release notes.

Known Issues

Here is your cleaned-up and clearly formatted Known Issues section. Each item has been tightened for clarity, grouped by topic when possible, and all GitHub issue links are inlined and deduplicated.

  • PostgreSQL Certificate Errors
    • Certificate error – workaround: set PGSSLCERT env var. #70365, #83611
  • Table Creation & Dependency Check Regression
    • CREATE TABLE significantly slower in 25.3 vs 24.3 due to O(n²) performance in dynamic workloads. #82883, #79366
  • Bloom Filter Issues
    • Not triggered for arrayMap(v -> lowerUTF8(v), arr) #81963, #79586
    • Segmentation fault in 25.3+ with Bloom Filter indexes. Possibly related: #80025, #78485
  • Kafka Metrics
    • Incorrect KafkaAssignedPartitions metric since 25.3. #81950
  • Azure Blob Crashes
    • Segfault when creating tables against Azure Blob with getCombinedIndicesExpression. #79504
  • Analyzer & Query Planner
    • Short-circuiting disrupted by query_plan_merge_filters. #83611
    • Analyzer not fully controlled by initiator. #65777
    • Many open issues under label: Analyzer Issues
  • Performance Degradations
    • Modified TPC-H queries regress. #76519
    • Trivial queries slower. #76334
    • Multiple JOINs result in slowdown. #75261 (workaround: join_algorithm='direct,hash')
    • Major regression from 24.10 to 24.11+ – same JOIN reads 20x less data on 24.10. #74754 (query_plan_merge_filters=1)
    • Upgrade from 23.8 → 24.8 degrades performance. #82406 (workaround: query_plan_optimize_prewhere=0, enable_analyzer=0)
    • Regression on Gorilla codec. #78253
    • Increased query latency and page faults reported in new versions. #78430
  • Query Execution Bugs
    • Multiple predicates on indexed column causes exception. #60660
    • SELECT ... WHERE ... AND ... returns wrong result with trivial count enabled. #71895
    • SELECT queries no longer fail fast on row limits. #61872
  • ALTER / UPDATE Concurrency
    • Concurrent ALTER TABLE UPDATE may cause some to fail. #71456
    • Race condition: MERGE + ALTER RENAME COLUMN may lead to data loss. #80648
  • Index & Dictionary Issues
    • secondary_indices_enable_bulk_filtering may cause data read issues. #82283
    • Unexpected key in named collection (headers.header.name) for HTTP dictionary. #70262
  • Configuration / Limits
    • vm.max_map_count issue affects all versions <25.5. #79147
    • Suggest enabling send_profile_events to reduce network load. #80761
  • TRIM function bugs #78796, #82900

Click any tab in the tab bar above for more release notes.

List of changes from 24.8.14 to 25.3.6.56

  • Number of authors: 344
  • Number of commits: 13843
  • Number of pull requests: 3377

There are a number of new fields in system tables, particularly in system.metric_log, which now has more than 1200 fields, and system.query_metric_log, which now has more than 850. You can run DESCRIBE system.metric_log or DESCRIBE system.query_metric_log for a complete list of all the fields, including short descriptions of each.

Click any tab in the tab bar above for more release notes.

Appendix: Complete details

The sections above highlight the most important changes. For advanced users, this appendix contains all of the details not covered above.

Functions - Complete details

  • Introspection
    • estimateCompressionRatio – estimates how compressible data is. #76661
    • initialQueryStartTime – returns the start time of the original query. #75087
  • String
    • overlay, overlayUTF8 – replace part of a string with another. #66933
    • translate – can now delete characters from input. #71441
    • stringCompare – compares two strings. #74070
  • DateTime
    • toStartOfInterval – supports 3-argument syntax. #56738
    • parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero – new parsing functions. #71581
    • toUnixTimestamp64Second #70597 / fromUnixTimestamp64Second #73146
  • Array
    • arrayElementOrNull – safe element access. #69646
    • arrayZipUnaligned – zip arrays of different lengths.
    • arrayUnion – union of arrays. #68989
    • arraySymmetricDifference – returns symmetric diff. #76231
    • Higher-Order Functions – now allow constant arguments.
    • arrayAUC – adds scale argument (default: true). #69717
    • arrayPrAUC – computes area under precision-recall curve. #72073
    • indexOfAssumeSorted – optimized search for sorted arrays. #72517
    • arrayNormalizedGini – returns normalized Gini coefficient. #72823
  • JSON Analysis
    • distinctDynamicTypes, distinctJSONPaths, distinctJSONPathsAndTypes – introspection of JSON structure.
  • Crypto Hash Functions
    • RIPEMD160 – new hash function.
    • keccak256 – Ethereum-compatible hashing. #76669
  • Aggregation
    • quantileExactWeightedInterpolated – new precise quantile function. #69619
    • anyRespectNulls, firstValueRespectNulls, anyValueRespectNulls, anyLastRespectNulls, lastValueRespectNulls – better null handling.
    • windowFunnel – new strict_once mode prevents double-counting events. #69738
    • groupConcat – now supports optional delimiter argument. #72540
    • sequenceMatchEvents – returns timestamps of matched events (longest chain in pattern). #72349 (Altinity)
    • groupUniqArrayArrayMap – now allowed as SimpleAggregateFunction. #75034 -

Click any tab in the tab bar above for more information.

New Optimizations - Complete details

  • JOINs
    • optimize_extract_common_expressions = 1 – extract common expressions from WHERE and ON to reduce hash table usage. #71537
    • Removed allow_experimental_join_condition, enabling non-equi JOINs by default. #69910
    • Parallel Hash Join – now default.
    • Automatic JOIN Reordering via query_plan_join_swap_table. #71577
    • New setting query_plan_join_inner_table_selection = auto – picks the smaller table as inner. #68682
    • temporary_data_in_cache support for partial merge joins. #77390
    • Push-down filter from JOIN ON condition. #75536
    • enable_adaptive_memory_spill_scheduler – spill multiple grace JOINs together based on combined memory usage. #72728
  • PREWHERE filter reordering – now allowed by default; controlled via allow_reorder_prewhere_conditions. #70657
  • Row comparison optimization – compare most likely unequal columns first. #63780 (Altinity)
  • pointInPolygon now uses indices.
  • Transitive condition inference – improved filtering, e.g. WHERE start_time >= '2025-08-01' AND end_time > start_time
  • TTL recalculation now respects ttl_only_drop_parts – reads only necessary columns. #65488 (Altinity)
  • ThreadPool improvements – optimized thread creation to avoid contention; improves performance under high load. #68694 (Altinity)
  • ALTER TABLE ... REPLACE PARTITION no longer waits for unrelated mutations/merges. #59138 (Altinity)
  • Short-circuit eval for Nullable columns – new settings: short_circuit_function_evaluation_for_nulls and its _threshold version. Functions that return NULL for NULL args will skip evaluation if NULL ratio is high. #60129
  • ReplacingMergeTree merge algorithm optimized for non-intersecting parts. #70977
  • JIT compilation enabled for more expressions: abs, bitCount, sign, modulo, pmod, isNull, isNotNull, assumeNotNull, casts to Int/UInt/Float, comparisons, logical ops. #70598 (李扬)
  • Distributed INSERT … SELECT – respects prefer_localhost_replica when building query plan. #72190 (Altinity)
  • Predicate pushdown for distributed queries – setting allow_push_predicate_ast_for_distributed_subqueries enables temporary AST-based pushdown until query plan serialization is ready. Closes #66878, #69472, #65638, #68030, #73718; implemented in #74085 (Nikolai Kochetov)
  • ALTER TABLE FETCH PARTITION now fetches parts in parallel; pool size set via max_fetch_partition_thread_pool_size. #74978
  • New MergeTree setting materialize_skip_indexes_on_merge – disables index materialization during merge, allowing explicit control via ALTER TABLE ... MATERIALIZE INDEX .... #74401
  • MergeTree optimizations for petabyte-scale workloads
    • Memory optimization for index granularity – new setting use_const_adaptive_granularity ensures efficient metadata memory use in large workloads. #71786 (Anton Popov)
    • Primary key caching – setting use_primary_key_cache enables LRU cache for PKs; prewarm_primary_key_cache warms it on insert/merge/fetch/startup. #72102 (Anton Popov)
  • Caches
    • use_query_condition_cache – remembers data ranges that don’t match repeated query conditions as temporary in-memory index. Closes #67768, implemented in #69236 (zhongyuankai)
    • Active eviction – cache no longer grows unnecessarily when data volume is smaller. #76641
    • Skipping index granule cache – in-memory cache improves repeated query performance. Controlled by skipping_index_cache_size and _max_entries. Motivated by vector similarity indexes. #70102 (Robert Schulze)
    • prewarm_mark_cache setting – loads mark cache on insert, merge, fetch, and table startup. #71053 (Anton Popov). Example: SYSTEM PREWARM MARK CACHE t
    • Userspace Page Cache – control with page_cache_max_size and use_page_cache_for_disks_without_file_cache

Click any tab in the tab bar above for more information.

Operations - Complete details

  • Configuration
    • allowed_feature_tier – global switch to disable all experimental/beta features. #71841
    • Limit number of replicated tables, dictionaries, and views. #71179 (Kirill)
    • User-level disk space checks: min_free_disk_bytes_to_perform_insert and min_free_disk_ratio_to_perform_insert. #69755 (Marco Vilas Boas)
    • IP family filtering with dns_allow_resolve_names_to_ipv4 and dns_allow_resolve_names_to_ipv6. #66895
    • Add users to startup scripts; allows controlling DEFINER, etc. #74894
  • Usability
    • Embedded documentation for settings is now richer and will become the source for website docs (always accurate, versioned, and offline-capable). #70289
    • print_pretty_type_names – improves Tuple display.
    • Automatic disk spilling in GROUP BY / ORDER BY based on memory use. Controlled via max_bytes_ratio_before_external_group_by and ..._sort. #71406, #73422
  • Monitoring
    • New per-host dashboards: Overview (host) and Cloud overview (host) in advanced dashboard. #71422
  • Cluster
    • Dynamic cluster autodiscovery via <multicluster_root_path>. Extends node autodiscovery. #76001 (Altinity)
    • Uses auxiliary keepers for autodiscovery. #71911 (Altinity)
  • Disks: plain_rewritable
    • Allow ALTER TABLE DROP PARTITION on plain_rewritable disk. #77138
    • Can combine read-only and writable disks in storage policies (for Copy-on-Write). #75862
    • Shared disk metadata across server instances; tolerate object-not-found errors. #74059
  • Userspace Page Cache
    • New implementation caches in-process (useful for remote VFS without local FS cache). #70509
  • External Tables
    • Support for attaching external tables without databases: table_disk = 1
  • CPU Scheduling
    • New setting concurrent_threads_scheduler = round_robin | fair_round_robin – improves CPU fairness across INSERT/SELECT. #75949
  • Memory Tracker
    • memory_worker_correct_memory_tracker – correct memory tracker regularly. #75714
  • Introspection & Logging
    • processors_profile_log has 30-day TTL by default. #66139
    • system.filesystem_cache_log now respects enable_filesystem_cache_log. #77650
    • New table system.histogram_metrics – supports observe(value) histogram-style metrics (e.g., Keeper response times). #75736
    • system.trace_log now includes symbols and lines (symbolized stack traces); controlled via trace_log.symbolize, enabled by default. #73896
    • date_time_utc config option – enables UTC datetime formatting in logs (RFC 3339 / ISO 8601). #71560
    • Disable heavy async metrics by default – avoids unnecessary overhead. #71087
    • Skip detached parts from readonly/write-once disks in system.detached_parts. #71086
    • New introspection tables: system.s3_queue_settings, system.azure_queue_settings #70841
    • system.replicas has new column: readonly_duration – useful for distinguishing sentinel replicas. #69871
    • Throttle frequency of log messages. #70601
    • system.query_metric_log – tracks query memory/metric history and flushes to disk. #66532
    • New profile events for merges and mutations. #68015
    • system.projections – added
    • system.trace_log (again) – now includes symbolized stack traces. #73896
    • Use cgroup-specific CPU metrics for more accurate accounting. #62003
  • TLS
    • Client certificates can now be reloaded without restarting – same as server certs. #70997
  • Merge Fine-Tuning (Experts Only)
    • Experimental merge_selector_use_blurry_base – aggressively merges partitions near part count limits. #70645
    • New merge selector: Trivial (worse than Simple, for testing). #70969
    • Exposed merge selector heuristics:
      • merge_selector_enable_heuristic_to_remove_small_parts_at_right #71313
      • merge_selector_base (expert-level setting). #71497
      • MergerMutator is now more customizable. #73294
  • Official Docker Image – ClickHouse now has one! (But no strong reason to switch if your current setup works.)
  • Backup Database Engine – allows mounting a backup as a read-only database.

Click any tab in the tab bar above for more information.

Interfaces - Complete details

  • SSH
    • Added SSH interface – connect via any SSH client for interactive queries using embedded clickhouse-client (PTY-based). #48902
  • HTTP
    • Web UI: now features interactive database navigation. #75777
    • Play UI enhancements:
      • Progress bar with live stats, cancellation, speed metrics
      • Incremental rendering with HTTP compression
      • Sticky headers, cell navigation via arrow keys
      • Improved number formatting, fixed cell resizing issues
      • Client-side rendering finalization logic
      • Mouse-over shows column data types
      • Displays server status, version, uptime
      • Better support for nested data and special floats (inf, nan)
      • Overall refreshed design, incl. Safari-compatible cloud icon #74204
    • HTML merge visualizer: available at http://localhost:8123/merges. #70821
    • Custom HTTP response headers: via http_response_headers. Enables e.g. image rendering in browser. Closes #59620, #72656
    • Support for user/password in http_handlers for dynamic_query_handler / predefined_query_handler. #70725
    • Username-only authentication in HTTP handlers now allowed (password optional). #74221
    • Better handling of streaming errors – generate malformed chunked encoding when exceptions occur. #68800
  • CLI (clickhouse-client & clickhouse-local)
    • --progress-table – new mode shows live query metrics as a table; can toggle using Ctrl+Space if --enable-progress-table-toggle is set. #63689
    • clickhouse-local supports --copy mode as shortcut for format conversion. #68503, #68583
    • CLI tools now auto-detect stdin compression. Closes #70865, implemented in #73848
    • Implicit command-line mode: ch "SELECT 1" or ch script.sql
    • clickhouse-compressor now supports --threads for parallel compression. #70860
    • Logs now include script_query_number and script_line_number in system.query_log and native protocol. #74477
    • Replaced send_settings_to_client (server-side) with client-side apply_settings_from_server to control client behavior (only applies to native protocol). #75478, #75648
    • Set custom prompt via:
      1. --prompt CLI option
      2. <prompt> in config
      3. <connections_credentials><prompt> in config #74168
    • Secure connection auto-detect: recognizes port 9440 as TLS. #74212
  • PostgreSQL Wire Protocol
    • Now supports prepared statements. #75035
  • MySQL Wire Protocol
    • Error codes now match MySQL compatibility. #73948

Click any tab in the tab bar above for more information.

Integrations - Complete details

  • Storage (S3/Azure) Queue
    • ALTER TABLE ... MODIFY/RESET SETTING ... is now supported for S3Queue. #70811
  • Kafka
    • Upgraded librdkafka to 2.8.0. #76621 (Altinity)
  • MongoDB
    • Full refactor:
      • Switched to mongocxx driver (from deprecated Poco::MongoDB)
      • Support for URI-based connections, full MongoDB type mapping
      • Support for WHERE / ORDER BY pushdowns, restricted unsupported expressions #63279
    • Binary UUID supported #74452
  • URL Engine
    • New _headers column
    • User-defined Content-Type via custom headers. #70859
  • Datalakes
    • Iceberg
      • REST Catalog integration. #71542
      • Supports Iceberg on Azure, HDFS, S3, Local
      • Support reading Iceberg tables on HDFS. #70268
      • Schema evolution support: column reordering, renaming, type widening. #69445
      • Partition pruning with truncate transform (SET use_iceberg_partition_pruning = 1). Implements icebergTruncate, toYearNumSinceEpoch, toMonthNumSinceEpoch. #77403
      • Iceberg-related Parsing improvements:
        • Sequence ID parsing in manifest files
        • Extendable Avro metadata parsing #75010
      • Support iceberg_metadata_file_path to explicitly select Iceberg metadata file. #77318
      • Experimental AWS Glue catalog integration. #77257
    • DeltaLake
      • Support for Unity Catalog on AWS S3 and local FS. #76988
      • Delta Rust Kernel integration
      • New table functions: deltaLakeCluster, iceberg[S3;HDFS;Azure]Cluster, hudiCluster. #72045
      • DeltaLake kernel now supports AWS session tokens + env credentials. #77661
    • S3
      • Fixes for S3 Express support. #73777
    • Azure
      • Support for SAS Tokens. #72959
    • Performance
      • Automatic parallelization for external data queries using parallel_replicas_for_cluster_engines and cluster_for_parallel_replicas
      • Hive-style partition pruning supported

Note: Starting with version 25.4, icebergCatalog, UnityCatalog, and Delta were unified under the DataLakeCatalog umbrella (with subtypes). Altinity builds support that remapping in 25.3 for convenience.

Click any tab in the tab bar above for more information.

Backward Incompatible Changes - Complete details

  • Docker default user – Passwordless default user is now disabled. Restore via CLICKHOUSE_SKIP_USER_SETUP=1 (unsafe!). #77212
  • Parquet output type changes (#70950)
    • DateDate32; DateTimeDateTime64(3) by default
    • Restore legacy UInt32 output using output_format_parquet_datetime_as_uint32 = 1
  • Security grants
    • CHECK TABLE now requires CHECK privilege (not just SHOW TABLES). #74471
    • New SOURCES.* grant hierarchy for Kafka, NATS, RabbitMQ. #71250
  • Mutations – Full query (incl. subqueries) now validated before execution. #71300
  • Removed: StorageExternalDistributed (MySQL/PostgreSQL with shard/replica). #71176
  • Removed: system tables generate_series and generateSeries – added by mistake. #71091
  • Renamed settingskip_download_if_exceeds_query_cachefilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578
  • deltaSumTimestamp function – dropped support for:
    • Enums, UInt128/UInt256 (first arg)
    • Int8, UInt8, Int16, UInt16 (timestamp arg) #71790
  • Functions greatest / least now ignore NULLs – behavior matches PostgreSQL. Use least_greatest_legacy_null_behavior = true to restore old behavior. #65519, #73389, #73344
  • MongoDB legacy integration removeduse_legacy_mongodb_integration is obsolete. #71997
  • Dictionary validation – added validation when ClickHouse is used as a dictionary source. #72548
  • ORDER BY/comparisons – disallow non-comparable types (JSON, Object, AggregateFunction) by default. #73276
  • MaterializedMySQL engine removed – deprecated and no longer available. #73879
  • MySQL dictionary optimization – no longer executes SHOW TABLE STATUS (was irrelevant for InnoDB). #73914
  • Merge table type inference – now unifies structure across tables using union of columns. May break in cases where type coercion was implicit. Restore old behavior with merge_table_max_tables_to_look_for_schema_inference = 1 or compatibility = 24.12. #73956
  • h3ToGeo() now returns (lat, lon) (standard order). Restore legacy (lon, lat) via h3togeo_lon_lat_result_order = true. #74719
  • Forced merges ignore max bytes when both min_age_to_force_merge_seconds and min_age_to_force_merge_on_partition_only are enabled. #73656
  • Non-SQL dialects degraded to experimental #74224:
    • PRQL: allow_experimental_prql_dialect = 1
    • KQL: allow_experimental_kusto_dialect = 1
  • JSONCompactWithNames and ...AndTypes no longer emit “totals” row (was a bug). #75037
  • format_alter_operations_with_parentheses = true by default – may break replication with pre-24.3 clusters. #75302
  • Cache config strictness – invalid settings now throw errors (were previously ignored). #75452
  • TRUNCATE DATABASE is now disallowed for replicated DBs. #76651 (Bharat Nallan)
  • Parallel replicas disabled by default if analyzer is off. Can override via parallel_replicas_only_with_analyzer = false. #77115
  • Disallow NaN/inf as values in float-type settings. #77546 (Yarik Briukhovetskyi)
  • New mergetree constraintenforce_index_structure_match_on_partition_manipulation allows attaching partitions only when projections/secondary indices of source ⊆ target. Closes #70602, #70603
  • lightweight_mutation_projection_mode moved to merge_tree_settings

Click any tab in the tab bar above for more information.

v25.3.6.10034

Released 2025-07-29

Build report - 25.3.6.10034 | Release page

Changes in Altinity Stable build compared to upstream build 25.3.6.56-lts

Like upstream builds, Altinity Stable builds for ClickHouse are open source and are based on upstream LTS versions.

Fixes backported to Altinity Stable Build 25.3.6.10034

Altinity Stable Build version 25.3.6.10034 is based on upstream 25.3.6.56-lts, but we have additionally backported several fixes:

  • Fix lambdas in skip index analysis #80025
  • Remove guard pages from fibers and alternative stack for signals in threads #79147
  • Do not check for cyclic dependencies on create table with no dependencies #83077
  • Fix wrong results for grouping sets with ColumnConst #79743
  • Ignore parse error in system.distributed_ddl_queue #79369
  • Add _time virtual column in S3Queue engine #78926

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.3.6.10034.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.