Operations & Reliability
Upgrading Self-Managed ClickHouse in 2026: Breaking Changes from 26.3 LTS to 26.8 LTS and 26.9
ClickHouse 26.3 to 26.9 removes features, changes defaults and tightens grants. What can stop a server starting, and how to plan the upgrade.
What this article covers
Self-managed open-source ClickHouse (Apache License 2.0) only, from 26.3 LTS (2026-03-26) to 26.8 LTS (2026-08-27) and 26.9 stable (2026-09-21), as listed in the 2026 changelog and SECURITY.md on 2026-10-22. ClickHouse Cloud upgrades are managed by the vendor and are out of scope.

Self-managed ClickHouse shipped two LTS releases in 2026, 26.3 in March and 26.8 in August, followed by 26.9 in September. Together they carry an unusually long list of backward-incompatible changes. Some only change a default. Others stop a server from starting if an obsolete object or setting is still present.
This article groups those changes by the kind of risk they create, then sets out an upgrade procedure. It covers open-source ClickHouse that you operate yourself, under the Apache License 2.0. ClickHouse Cloud manages upgrades for you and is a separate route.
Release lines on the research date
The 2026 changelog lists these releases, and the project’s security policy lists which versions receive security updates:
| Release | Date | Type | Security updates (SECURITY.md) |
|---|---|---|---|
| 26.9 | 2026-09-21 | Stable | Supported |
| 26.8 | 2026-08-27 | LTS | Supported |
| 26.7 | 2026-07-22 | Stable | Supported |
| 26.4 to 26.6 | April to June 2026 | Stable | Not supported |
| 26.3 | 2026-03-26 | LTS | Supported |
| 25.x and earlier | Not supported |
Two consequences follow. Any cluster still on a 25.x release is outside the security-update list. And a team on 26.3 LTS should plan its move to 26.8 LTS now, rather than when 26.3 leaves the list. The self-managed upgrade guide describes a compatibility window of about one year, which includes two LTS versions, so 26.3 to 26.8 is a supported jump for a rolling upgrade.
Changes that can stop a server from starting
These deserve the most attention, because they turn a routine restart into an outage. Each comes from the changelog entries for the version shown.
- Window views (26.9). The experimental
WINDOW VIEWfeature, theWATCHstatement and thewindowIDfunction are removed. A server that finds a window view in its metadata fails to start. Drop window views before upgrading. - CatBoost (26.9).
catboostEvaluate,system.modelsandSYSTEM RELOAD MODEL(S)are removed. RevokeSYSTEM RELOAD MODELfrom all users and roles first, because an access entity that still mentions the privilege cannot be parsed on startup. Let any pendingON CLUSTERentries for it drain. - WasmEdge (26.9). A server configured with
webassembly_udf_engine = 'wasmedge'will not start. Remove the setting or set it towasmtime. - Insert deduplication (26.6 and 26.7). 26.6 changes the default of
insert_deduplication_versiontonew_unified_hash. From 26.7 the unified hash is always used, and the server refuses to start if the setting holds a legacy value. - Nullable tuples (26.9).
Nullable(Tuple(...))becomes generally available and on by default. Some tables whose keys, TTLs or skip indexes depend on tuple subcolumns extracted fromDynamic,Variant,JSONorNullable(Tuple)columns needallow_nullable_tuple_in_extracted_subcolumns = 0in the default profile before first startup. Read the full entry if you use these types. - CPU target (26.6). The default x86 build now targets x86-64-v3, which requires AVX2. Hosts without AVX2 need the
amd64compatbuild.
Defaults that change results or behaviour
These changes do not stop the server, but they can change query results, part counts or client behaviour without an error. Most can be reverted per setting, and several entries name the compatibility setting as a way to restore earlier defaults.
| Version | Change | How to restore |
|---|---|---|
| 26.5 | date_time_input_format and cast_string_to_date_time_mode default to best_effort, so strings that used to fail may now parse |
Set both to basic |
| 26.8 | max_insert_threads defaults to auto, which can change the number of parts and the order of inserted rows |
Set it to 1, or compatibility below 26.8 |
| 26.8 | The X-ClickHouse-Format HTTP header now overrides the query’s FORMAT clause |
Review clients that send the header |
| 26.8 | Unquoted JSON numbers for DateTime and DateTime64 are read as Unix timestamps |
Check ingestion pipelines that send raw scaled values |
| 26.8 | arrayIntersect and arraySymmetricDifference no longer count repeated values within one argument as several |
Re-test queries that rely on the old result |
| 26.9 | The analyzer can no longer be disabled; enable_analyzer = 0 is rejected and compatibility does not revert it |
None; queries must work with the analyzer |
The analyzer change matters most for older estates. The changelog notes it has been the default since 24.3, but teams that kept it off for specific queries must fix those queries before moving to 26.9. The changelog suggests using a version older than 26.9 to compare behaviour with the old query analysis.
Storage and replication changes
Two changes affect how data is written and how mixed-version clusters behave during a rolling upgrade.
Default compression (26.9). The default compression method moves from LZ4 to ZSTD(3) for client and server network traffic. For MergeTree column data the built-in default becomes size-aware: LZ4 for parts below 100 MB and ZSTD(3) at or above it. The changelog describes the change as backward compatible, because compressed frames are self-describing, and expects better compression ratios at a modest increase in CPU use. To keep the old behaviour, set network_compression_method = 'LZ4' or use compatibility for network traffic, and set CODEC(LZ4) or the server compression default for column data. Measure CPU headroom on your own workload before and after.
Lightweight update patch parts (26.8). Patch parts for lightweight UPDATE use a new v2 on-disk format. During a rolling upgrade from a version before 26.8, keep patch_parts_version = 'v1', or use compatibility, until every replica is upgraded.
The upgrade guide also notes that checksum mismatch errors can appear while replicas run different versions, and should stop once all replicas match. Plan to finish a rolling upgrade promptly rather than leave a cluster mixed.
Security hardening that needs grants or configuration
Several 2026 changes close paths where user SQL could act with the server’s own rights. They are improvements, but each can break an existing job until grants or configuration are updated.
- S3 credentials (26.7). S3 access from user SQL no longer resolves the server’s own cloud credentials, such as instance profiles or environment credentials, by default. Such requests need explicit credentials or
NOSIGN. - PostgreSQL database engines (26.8).
PostgreSQLandMaterializedPostgreSQLdatabases now respectremote_url_allow_hostswhen created or attached. - TLS file paths from SQL (26.8). MySQL source certificates can no longer be given as file paths from SQL; use the new
ssl_ca_pem,ssl_cert_pemandssl_key_pemparameters. - Implicit include file (26.8).
include_fromno longer defaults to/etc/metrika.xml. Add it explicitly to each config file that relied on it. - Backups to disks (26.9).
BACKUPandRESTOREwithDisk(...)now requireWRITE ON DISKorREAD ON DISKgrants. Check the identity your backup job uses. - File renaming (26.9).
rename_files_after_processingnow requiresWRITE ON FILEas well asREAD ON FILE.
Other removals to search for include the library dictionary source and the Apache Arrow library-based reader (26.8), the config-based workload scheduling sections (26.7), and the read_resource and write_resource disk options (26.9).
An upgrade procedure for 26.3 LTS to 26.8 LTS or 26.9
- Choose the target line. 26.8 LTS suits teams that prefer fewer, larger upgrades. 26.9 brings the analyzer and compression changes now, so the next LTS will not.
- Read every changelog section between your current and target versions, as the upgrade guide recommends, and list each change that applies to your estate.
- Inventory metadata on a production copy: window views, CatBoost usage and grants, WebAssembly UDF settings,
insert_deduplication_version, tables using tuple subcolumns in keys, and the proxy tables the 26.9 entries identify withSELECT database, name FROM system.tables WHERE engine = 'Proxy'. - Check hardware for AVX2, and confirm the package or image you will deploy.
- Keep custom configuration in
config.d, as the upgrade guide advises, becauseconfig.xmlcan be overwritten during an upgrade. - Restore a recent backup into a staging cluster on the target version. Run representative queries, ingestion jobs and backup jobs, and compare results with production.
- Decide which old defaults to pin with explicit settings or
compatibility, and record why and for how long. - Run the rolling upgrade one replica per shard at a time, as the upgrade guide describes, watching Keeper and server logs. Upgrade Keeper separately, after the servers.
- Remember that downgrade works only if new features have not been used. Avoid adopting new features until the upgrade is accepted.
Our ClickHouse OSS page and migration and modernization services describe how we run this kind of change in practice.
When a managed route is worth considering
This year’s changes show the cost of operating ClickHouse yourself: someone must read each changelog, test each upgrade and track the security-update list. For many teams that work is worthwhile, because it keeps full control of versions, hardware and data location. Others prefer to hand version management to a provider. ClickHouse Cloud, available through Bassirah’s ClickHouse partner route, is a separate commercial offering with its own upgrade policy and terms, not the same product as the open-source server.
How Bassirah can help
We help teams on self-managed ClickHouse inventory their exposure to these changes, rehearse the upgrade on a staging copy and run the rolling upgrade with a tested rollback plan. Our open-source support is independent engineering, not vendor support: upstream fixes follow the ClickHouse community’s timeline, as described in our support model.
Independent engineering services
These are independent Bassirah engineering and support offerings. They do not imply upstream vendor or foundation endorsement, official vendor support rights, enterprise feature entitlement or maintenance guarantees.
Sources
- Changelog 2026 (ClickHouse OSS)
- Self-managed Upgrade
- ClickHouse Security Policy (SECURITY.md)
- ClickHouse LICENSE (Apache License 2.0)
Related pages
More insights
Architecture Patterns
YugabyteDB Multi-Region Topologies: Synchronous Replication, xCluster or Read Replicas
Synchronous replication, geo-partitioning, xCluster and read replicas solve different problems. What each does, what it costs and how to choose.
YugabyteDB
Operations & Reliability
YugabyteDB LTS and STS Releases: Upgrade Planning and the PostgreSQL 15 Path
v2024.2, the last PostgreSQL 11-based LTS series, leaves maintenance in December 2026. How to choose a target series and plan the YSQL major upgrade.
YugabyteDB
Read article : YugabyteDB LTS and STS Releases: Upgrade Planning and the PostgreSQL 15 Path→
Comparisons & Decisions
Moving a PostgreSQL Application to YugabyteDB: Compatibility Testing and Migration Planning
YSQL reuses the PostgreSQL query layer, but it is not a drop-in replacement. How to test compatibility, redesign the schema and choose a migration route.
PostgreSQLYugabyteDB
Discuss This With an Architect
Map these trade-offs against your workloads, constraints and operating model.
