Descripción general
En ClickHouse, las "restricciones" de los ajustes se refieren a limitaciones y reglas que se pueden asignar a los ajustes. Estas restricciones pueden aplicarse para mantener la estabilidad, la seguridad y un comportamiento predecible de la base de datos.
Definición de restricciones
Las restricciones de configuración pueden definirse en la sección profiles del archivo de configuración user.xml.
Impiden que los usuarios cambien algunos ajustes mediante la
sentencia SET.
Las restricciones se definen de la siguiente manera:
<profiles>
<user_name>
<constraints>
<setting_name_1>
<min>lower_boundary</min>
</setting_name_1>
<setting_name_2>
<max>upper_boundary</max>
</setting_name_2>
<setting_name_3>
<min>lower_boundary</min>
<max>upper_boundary</max>
</setting_name_3>
<setting_name_4>
<readonly/>
</setting_name_4>
<setting_name_5>
<min>lower_boundary</min>
<max>upper_boundary</max>
<changeable_in_readonly/>
</setting_name_5>
<setting_name_6>
<min>lower_boundary</min>
<max>upper_boundary</max>
<disallowed>value1</disallowed>
<disallowed>value2</disallowed>
<disallowed>value3</disallowed>
<changeable_in_readonly/>
</setting_name_6>
</constraints>
</user_name>
</profiles>Si el usuario intenta incumplir las restricciones, se lanza una excepción y la configuración permanece sin cambios.
Tipos de restricciones
ClickHouse admite varios tipos de restricciones:
minmaxdisallowedreadonly(con el aliasconst)changeable_in_readonly
Las restricciones min y max especifican los límites inferior y superior de una
configuración numérica, y pueden usarse en combinación.
La restricción disallowed puede usarse para especificar valores concretos que no
deben permitirse para una configuración determinada.
La restricción readonly o const especifica que el usuario no puede cambiar en
absoluto la configuración correspondiente.
El tipo de restricción changeable_in_readonly permite a los usuarios cambiar la configuración
dentro del rango min/max incluso si la configuración readonly está establecida en 1;
de lo contrario, no se permite cambiar configuraciones en el modo readonly=1.
Varios perfiles de restricciones
Si hay varios perfiles activos para un usuario, las restricciones se fusionan.
El proceso de fusión depende de settings_constraints_replace_previous:
- true (recomendado): las restricciones para el mismo ajuste se sustituyen durante la fusión, de modo que se usa la última restricción y se ignoran todas las anteriores. Esto incluye los campos que no están definidos en la nueva restricción.
- false (predeterminado): las restricciones para el mismo ajuste se fusionan de forma que cada tipo de restricción no definido se toma del perfil anterior y cada tipo de restricción definido se sustituye por el valor del nuevo perfil.
Modo de solo lectura
El modo de solo lectura se habilita mediante la configuración readonly, que no debe confundirse
con el tipo de restricción readonly:
readonly=0: Sin restricciones de solo lectura.readonly=1: Solo se permiten consultas de lectura y no se puede cambiar la configuración, salvo que se haya establecidochangeable_in_readonly.readonly=2: Solo se permiten consultas de lectura, pero sí se puede cambiar la configuración, excepto la propia configuraciónreadonly.
Ejemplo
Incluya las siguientes líneas en users.xml:
<profiles>
<default>
<max_memory_usage>10000000000</max_memory_usage>
<force_index_by_date>0</force_index_by_date>
...
<constraints>
<max_memory_usage>
<min>5000000000</min>
<max>20000000000</max>
</max_memory_usage>
<force_index_by_date>
<readonly/>
</force_index_by_date>
</constraints>
</default>
</profiles>Las siguientes consultas producirán excepciones:
SET max_memory_usage=20000000001;
SET max_memory_usage=4999999999;
SET force_index_by_date=1;Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be greater than 20000000000.
Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be less than 5000000000.
Code: 452, e.displayText() = DB::Exception: Setting force_index_by_date should not be changed.Restricciones en la configuración de MergeTree
Es posible establecer restricciones para la configuración de MergeTree. Estas restricciones se aplican al crear una tabla con el motor MergeTree o al modificar su configuración de almacenamiento.
El nombre de la configuración de MergeTree debe llevar el prefijo merge_tree_ cuando
se haga referencia a ella en la sección <constraints>.
Ejemplo
Puede prohibir la creación de tablas nuevas con storage_policy especificada explícitamente
<profiles>
<default>
<constraints>
<merge_tree_storage_policy>
<const/>
</merge_tree_storage_policy>
</constraints>
</default>
</profiles>