跳到主要内容
跳到主要内容

设置约束

设置约束可以在 user.xml 配置文件的 profiles 部分定义,并禁止用户通过 SET 查询更改某些设置。约束定义如下:

如果用户尝试违反约束,将抛出异常并且设置不会被更改。支持的约束类型有:minmaxreadonly(别名 const)和 changeable_in_readonlyminmax 约束指定了数值设置的上下边界,可以组合使用。readonlyconst 约束指定用户完全不能更改相应的设置。changeable_in_readonly 约束类型允许用户在 readonly 设置为 1 的情况下,在 min/max 范围内更改设置,否则在 readonly=1 模式下不允许更改设置。请注意,只有在启用 settings_constraints_replace_previous 的情况下才支持 changeable_in_readonly

如果用户有多个激活的配置文件,则约束会合并。合并过程取决于 settings_constraints_replace_previous

  • true(推荐):在合并过程中,相同设置的约束被替换,以便使用最后一个约束,之前的约束会被忽略,包括在新约束中未设置的字段。
  • false(默认):相同设置的约束以一种方式合并,即每个未设置的约束类型来自以前的配置文件,设置的约束类型则由新配置文件的值替换。

只读模式通过 readonly 设置启用(不要与 readonly 约束类型混淆):

  • readonly=0:没有只读限制。
  • readonly=1:只允许读取查询,除非设置为 changeable_in_readonly,否则无法更改设置。
  • readonly=2:只允许读取查询,但设置可以更改,除了 readonly 设置本身。

示例: 假设 users.xml 包含如下行:

以下查询都会抛出异常:

注意: default 配置文件有特别的处理:为 default 配置文件定义的所有约束都成为默认约束,因此它们限制所有用户,直到这些用户显式重写。

Merge Tree 设置的约束

可以为 merge tree 设置 设置约束。这些约束在创建使用 merge tree 引擎的表时或其存储设置被更改时应用。引用时,merge tree 设置名称必须以 merge_tree_ 前缀开头写在 <constraints> 部分中。

示例: 禁止创建新表时显式指定 storage_policy