ClickHouse v24.9.2.42-stable 版本解析:SHOW CREATE 标识符引用规则、system.replicas 只读时长列与 11 项关键缺陷修复

📅 发布时间:2026/9/17 12:13:19
ClickHouse v24.9.2.42-stable 版本解析:SHOW CREATE 标识符引用规则、system.replicas 只读时长列与 11 项关键缺陷修复
ClickHouse v24.9.2.42-stable 版本解析SHOW CREATE 标识符引用规则、system.replicas 只读时长列与 11 项关键缺陷修复【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本文基于 ClickHouse 官方变更日志 docs/changelogs/archive/v24.9.2.42-stable.md 撰写逐条解读 v24.9.2.42-stable 稳定点版本基于 v24.9.1.3278-stable提交 de7c791a2ea的全部变更新增的show_create_query_identifier_quoting_rule设置与system.replicas.readonly_duration列的源码实现细节以及按主题归类的 11 项用户可见 Bug 修复。读完后你可以准确评估该点版本对复制表监控、DDL 安全性、JSON/Dynamic 类型以及查询日志敏感信息处理的影响并据此决定是否在 24.9 稳定线上升级。版本概述该版本的定位是 24.9 稳定线stable上的一个补丁版本变更日志标题为ClickHouse release v24.9.2.42-stable (de7c791a2ea) as compared to v24.9.1.3278-stable (6d058d82a8e)所有条目均标注 “Backported”即从主线main回合backport到 24.9 分支。整个版本共包含Improvement改进3 项Bug Fix11 项均为用户可见行为在正式稳定版本中的缺陷修复NOT FOR CHANGELOG / INSIGNIFICANT3 项仅影响测试基础设施、不对外发布的内部变更。功能改进SHOW CREATE 的标识符引用行为可配置化新增设置show_create_query_identifier_quoting_rule本版本最重要的功能性改进是为SHOW CREATE类查询新增了标识符引用quoting规则设置show_create_query_identifier_quoting_rule用于定义输出建表/建视图语句时何时给标识符表名、列名等加上引用符号。该设置声明在格式化设置中默认值为WhenNecessary源码位置见 src/Core/FormatFactorySettings.h#L1620-L1622DECLARE(IdentifierQuotingRule, show_create_query_identifier_quoting_rule, IdentifierQuotingRule::WhenNecessary, R( Set the quoting rule for identifiers in SHOW CREATE query ), 0)枚举取值及字符串映射定义在 src/Core/SettingsEnums.cpp#L365-L369IdentifierQuotingRule, {{user_display, IdentifierQuotingRule::UserDisplay}, {when_necessary, IdentifierQuotingRule::WhenNecessary}, {always, IdentifierQuotingRule::Always}}三个取值的语义如下取值行为user_display当标识符是保留关键字keyword时加引用when_necessary默认当标识符属于{distinct, all, table}之一、或可能造成歧义时加引用例如列名、字典属性名always对所有标识符一律加引用这一改进的直接价值在于当用户通过脚本消费SHOW CREATE TABLE/SHOW CREATE VIEW的输出来做迁移或同步时此前输出中的引用位置由内部固定逻辑决定现在可以把输出行为调整到与目标环境例如需要兼容特定 SQL 方言或解析器一致。实现侧的相关渲染逻辑位于 src/Databases/RenderedCreateQuery.cpp 与 src/Interpreters/formatWithPossiblyHidingSecrets.cpp。同时该设置在 src/Core/SettingsChangesHistory.cpp 中注册进设置变更历史可被system.settings_changes查询到。新增列system.replicas.readonly_duration第二个改进在system.replicas系统表中新增readonly_duration列。变更日志说明其动机是“在告警中区分真正的只读副本actual readonly replicas与哨兵副本sentinel ones”——在副本集中某些长期处于只读状态的行并非真实故障而是哨兵机制产生的条目运维告警需要据此过滤。从源码看该列是以“别名列”alias形式注册进系统表元数据的其表达式直接基于已有列readonly_start_time计算定义位于 src/Storages/System/StorageSystemReplicas.cpp#L92-L94description.setAliases({ {readonly_duration, std::make_sharedDataTypeNullable(std::make_sharedDataTypeUInt64()), if(isNull(readonly_start_time), NULL, now() - readonly_start_time)}, });也就是说类型为Nullable(UInt64)单位是秒当副本当前不处于只读状态readonly_start_time为 NULL时返回 NULL否则返回now() - readonly_start_time即进入只读状态后持续了多久。使用上可直接在告警 SQL 中这样写SELECT database, table, replica_name, readonly_duration FROM system.replicas WHERE readonly_duration 3600;JSON 解析器后续改进第三项改进是对此前 PR #69346 的后续补全修复其中第 4 点point 4未生效的问题涉及 JSON 类型解析流程。该条目原文仅一行无更多细节升级 JSON 相关依赖时可按此 PR 号#69563在仓库历史中追溯。缺陷修复按主题归类的 11 项 Bug Fix查询解析与执行create view t as (with recursive 42 as ttt select ttt);导致崩溃。此条目的 SQL 本身是非法/极端构造CTE 名称位置出现字面量42但解析器不应以崩溃而非报错的方式处理畸形输入。该修复PR #69676属于典型的解析健壮性问题。嵌套视图 WHERE条件时出现Block structure mismatch修复 issue #66209PR #70054。Block structure mismatch是查询管道中块结构与计划预期不一致时抛出的内部错误通常出现在视图嵌套展开过程中列集合推导出错时此修复保证这类查询得到正确结果而非中断。区间ranges中字面量替换时抛出错误的LOGICAL_ERRORPR #70122。区间谓词下推/常量替换路径在部分场景误判为逻辑错误修复后不再产生误报。类型系统与 DDLALTER TABLE MODIFY COLUMN时检查Nullable(Nothing)类型PR #70123。Nothing是空类型Nullable(Nothing)没有合法的存储表示此前这类列可以通过某些路径落到表中本修复在 DDL 修改列/查询时主动拦截防止再产生此类数据列。ALTER COLUMN作用于 Dynamic 类型时可能挂起hungPR #70144。Dynamic 列的后台变更mutation在锁/队列协调上的死锁风险被消除。JSON 子列创建 Dynamic 类型时使用正确的max_types参数PR #70147。max_types限制 Dynamic 类型可自动识别的子类型数量参数传错会导致 JSON 子列的动态类型化行为不符合配置预期。存储与数据正确性跳过索引skipping index导致查询结果错误PR #70127。跳过索引用于在数据块级别裁剪无关 granule一旦索引条件推导有误就会丢数据这是数据正确性级别的修复属于该点版本中应优先关注的一条。ColumnObject/ColumnTuple解压方法中的数据竞争data race可能引发堆上使用已释放内存heap use-after-freePR #70137。这是一个并发内存安全问题多线程同时对复合列解压时共享状态未正确同步后果不仅是偶发崩溃在多线程环境下还可能放大为更隐蔽的内存破坏。安全bcrypt 认证用户的密码明文出现在system.query_log中PR #70148。system.query_log记录查询文本当CREATE USER/SET PASSWORD一类语句带内联密码且用户采用 bcrypt 哈希方式认证时敏感信息会被写入查询日志。该修复属于安全敏感修复使用内置认证且依赖system.query_log做审计的团队应重点升级。JSON 解析JSON 类型解析器遵循allow_simdjson设置PR #70218。此前解析器在该设置被关闭时仍可能走 simdjson 路径修复后配置项语义与实际行为一致便于在 simdjson 解析出现边角问题时通过设置回退。以上 10 条加上“修复create view崩溃”合计覆盖了变更日志中的 11 项 Bug Fix 条目其中部分条目在原文中仅以关闭的 issue 编号形式给出例如条目 #69985 仅注明 “Closes #69752”无文字描述按原文照实收录未做推测性补充。未对外发布的内部变更变更日志末节 “NOT FOR CHANGELOG / INSIGNIFICANT” 收录了 3 项不影响最终用户、仅改进测试基础设施的变更改进 stateless 测试运行器PR #69864改进 Docker 镜像的 pipdeptree 生成脚本更新集成测试 runner 容器的 requirements.txt、移除若干小依赖、改进helpers/retry_decorator.py、并将 docker-compose 从已停止维护的 v1 升级到 v2PR #70146。集成测试的 docker-compose 相关配置可参考仓库 ci/docker/integration/ 目录下的 Dockerfile 与编排文件更新test_storage_s3_queue测试PR #70159。这类条目不会出现在对外发布的 release notes 中但对理解该版本的测试面变化有帮助。如何在本仓库中查证这些变更完整变更日志docs/changelogs/archive/v24.9.2.42-stable.md位于docs/changelogs/归档目录可按v大版本.次版本命名规律检索其他版本show_create_query_identifier_quoting_rule的声明与默认值src/Core/FormatFactorySettings.h#L1620-L1625另配有show_create_query_identifier_quoting_style控制引用风格默认 backticks枚举取值映射src/Core/SettingsEnums.cpp#L365-L369system.replicas的readonly_duration别名定义src/Storages/System/StorageSystemReplicas.cpp#L92-L94设置变更历史用于比对各版本新增/变更的设置项src/Core/SettingsChangesHistory.cpp。升级建议小结从变更构成看v24.9.2.42-stable 的核心价值集中在三点其一跳过索引查询结果错误与 bcrypt 密码泄漏属于正确性/安全级别修复生产环境建议优先升级其二ColumnObject/ColumnTuple解压数据竞争对高并发读写 JSON/嵌套类型的负载有稳定性意义其三readonly_duration与show_create_query_identifier_quoting_rule两项新能力对副本集监控告警和建表语句导出流程有直接实用价值。若当前运行在 v24.9.1.3278-stable 或其之前的 24.9 稳定线版本升级到该点版本即可同时获得全部上述修复与新特性。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考