当引发以下异常时,应用程序正在使用只读用户:
<Error> HTTPHandler: Code: 164, e.displayText() = DB::Exception: Cannot modify 'result_overflow_mode' setting in readonly mode
我阅读了ClickHouse的代码,发现当查询使用set setting
时,如果用户是只读的,就会抛出这个错误。
我在users.xml
中检查了我的只读用户的配置,发现max_result_rows/bytes
和result_overflow_mode
没有被主动设置。
但是,我的查询与set setting
不一致。
那么,是什么逻辑触发了这种设置的改变呢?
尝试指定<readonly>2</readonly>
。
readonly
参数说明:https://clickhouse.tech/docs/en/operations/settings/permissions_for_queries/#settings_readonly
可能的值:
0-允许所有查询
1--只允许读取数据查询
2-允许读取数据和更改设置查询。
因此,在readonly=2的情况下,允许客户端设置result_overflow_mode
,但不允许执行插入和其他修改数据的请求。