
bug: Had to turn off query_plan_optimize_lazy_materialization in ClickHouse to prevent errors with `Scores`
快速结论:当使用 Langfuse 自托管部署,且搭配 ClickHouse 26.x 版本时,访问 Scores 页面可能触发 NOT_FOUND_COLUMN_IN_BLOCK 崩溃。优先检查 ClickHouse 版本和 query_plan_optimize_lazy_materialization 设置。
问题场景
在自托管的 Langfuse 环境中,用户通过 Web 界面访问项目的 Scores 页面(左侧菜单)时,ClickHouse 抛出异常导致查询失败。已知受影响的版本组合为 Langfuse 3.188.0 与 ClickHouse 26.5.1.882。
报错原文
Code: 10. DB::Exception: Not found column and(equals(__table1.project_id, '[REDACTED_PROJECT_ID]'_String), in(__table1.data_type, __set_String_7806885024967049900_11826187103487421056), notIn(__table1.environment, __set_LowCardinality(String)_18272326867462620477_14610479355148930747), greaterOrEquals(__table1.timestamp, _CAST('1781683861.228'_DateTime64(3), 'DateTime64(3)'_String)), lessOrEquals(__table1.timestamp, _CAST('1781770261.228'_DateTime64(3), 'DateTime64(3)'_String))): in block __table1.id String String(size = 0), __table1.project_id String String(size = 0)... [Truncated for brevity] ... (NOT_FOUND_COLUMN_IN_BLOCK)
原因分析
ClickHouse 26.x 版本引入了新的查询分析器(analyzer),其懒物化(lazy materialization)优化特性与 Langfuse 在 getScoresUiGeneric 查询中构建的复合 WHERE 谓词存在不兼容。具体表现为查询优化器在尝试优化时,错误地从数据块中查找不存在的列,导致崩溃。
环境排查
- Langfuse 版本(例如 3.188.0)
- ClickHouse 版本(例如 26.5.1.882)
- ClickHouse 配置项
query_plan_optimize_lazy_materialization状态(默认开启,下坠后可能需要显式关闭) - Langfuse 环境变量
CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION的值("true"或"auto")
解决步骤
- 方法一(推荐,可优先尝试): 在 Langfuse 的 Web 和 Worker 容器中设置环境变量
CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION为"true",这等效于在 ClickHouse 配置中禁用query_plan_optimize_lazy_materialization。 - 方法二: 直接修改 ClickHouse 的
users.xml配置文件,在<default>profile 下添加:<query_plan_optimize_lazy_materialization>0</query_plan_optimize_lazy_materialization> - 方法三(临时规避): 将 ClickHouse 降级到 25.5.2 版本,该版本不存在此兼容性问题。
- 注意: 更新到较新的 Langfuse 版本后,
CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION的默认值可能已改为"auto",Langfuse 会自动检测 ClickHouse 版本并应用必要的兼容性设置,无需手动配置。
验证方法
应用上述任一修复方案后,重新通过 Web 界面访问项目的 Scores 页面。如果页面正常加载数据且无错误日志,则说明问题已解决。


