設定に関する制約
概要
ClickHouseにおける「設定の制約」とは、設定に対して割り当てることのできる制限やルールを指します。これらの制約は、データベースの安定性、安全性、予測可能な動作を維持するために適用されます。
制約の定義
設定の制約は、user.xml
設定ファイルのprofiles
セクションで定義できます。これにより、ユーザーがSET
ステートメントを使用して特定の設定を変更することが禁止されます。
制約は次のように定義されます:
ユーザーが制約を侵害しようとすると、例外がスローされ、設定は変更されません。
制約の種類
ClickHouseでサポートされている制約の種類はいくつかあります:
min
max
disallowed
readonly
(エイリアスconst
)changeable_in_readonly
min
およびmax
制約は、数値設定の上限と下限を指定し、互いに組み合わせて使用できます。
disallowed
制約は、特定の設定に対して許可されるべきでない値を指定するために使用できます。
readonly
またはconst
制約は、ユーザーが対応する設定を変更できないことを指定します。
changeable_in_readonly
制約タイプは、readonly
設定が1
の場合でも、min
/max
範囲内で設定を変更できるようにします。そうでない場合、readonly=1
モードでは設定の変更は許可されません。
changeable_in_readonly
は、settings_constraints_replace_previous
が有効な場合のみサポートされます:
複数の制約プロファイル
ユーザーに対して複数のプロファイルがアクティブな場合、制約はマージされます。マージプロセスはsettings_constraints_replace_previous
に依存します:
- true(推奨):同じ設定に対する制約はマージ中に置き換えられ、最後の制約が使用され、以前の制約は無視されます。これには、新しい制約で設定されていないフィールドが含まれます。
- false(デフォルト):同じ設定に対する制約は、すべての未設定の制約タイプが前のプロファイルから取得され、すべての設定された制約タイプが新しいプロファイルからの値で置き換えられる形でマージされます。
読み取り専用モード
読み取り専用モードは、readonly
設定によって有効になり、これはreadonly
制約タイプとは混同しないでください:
readonly=0
:読み取り制限なし。readonly=1
:読み取り専用クエリのみが許可され、changeable_in_readonly
が設定されていない限り、設定は変更できません。readonly=2
:読み取り専用クエリのみが許可されますが、readonly
設定そのものを除いて設定を変更できます。
例
users.xml
に以下の行が含まれているとします:
次のクエリはすべて例外をスローします:
default
プロファイルは独自に処理されます:default
プロファイルに定義されたすべての制約がデフォルト制約となり、明示的にオーバーライドされるまで、すべてのユーザーに制限をかけます。
MergeTree設定の制約
MergeTree設定に対して制約を設定することが可能です。これらの制約は、MergeTreeエンジンを持つテーブルが作成されるとき、またはそのストレージ設定が変更されるときに適用されます。
MergeTree設定の名前は、<constraints>
セクションで引用される際にmerge_tree_
プレフィックスを追加する必要があります。
例
明示的に指定されたstorage_policy
で新しいテーブルを作成することを禁止できます。