> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по SETTINGS PROFILE

# ALTER SETTINGS PROFILE

Изменяет профили настроек.

Синтаксис:

```sql theme={null}
ALTER SETTINGS PROFILE [IF EXISTS] name1 [RENAME TO new_name |, name2 [,...]]
    [ON CLUSTER cluster_name]
    [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [CONST|READONLY|WRITABLE|CHANGEABLE_IN_READONLY] | INHERIT 'profile_name'] [,...]
    [ADD|MODIFY SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [CONST|READONLY|WRITABLE|CHANGEABLE_IN_READONLY] [,...]
    [DROP SETTINGS variable [,...] ]
    [ADD PROFILES 'profile_name' [,...] ]
    [DROP PROFILES 'profile_name' [,...] ]
    [DROP ALL SETTINGS]
    [DROP ALL PROFILES]
    [TO {{role1 | user1 [, role2 | user2 ...]} | NONE | ALL | ALL EXCEPT {role1 | user1 [, role2 | user2 ...]}}]
```

Предложение `ON CLUSTER` позволяет изменять профили настроек в кластере, см. [Distributed DDL](/ru/reference/statements/distributed-ddl).

<div id="replacing-vs-modifying">
  ## Замена и изменение настроек
</div>

`ALTER SETTINGS PROFILE` поддерживает два разных способа изменения настроек и родительских (наследуемых) профилей. Они работают совершенно по-разному, поэтому важно выбрать подходящий вариант.

<div id="replacing-form">
  ### Форма замены: просто `SETTINGS` / `INHERIT`
</div>

Предложение `SETTINGS` без дополнительных ключевых слов (то есть без `ADD`, `MODIFY` или `DROP`) **полностью заменяет список настроек и все родительские профили** профиля на ровно то, что вы перечислите. Всё, что было задано ранее, но не указано в списке, будет молча удалено — без каких-либо предупреждений.

```sql theme={null}
CREATE SETTINGS PROFILE OR REPLACE p
    SETTINGS max_execution_time = 10, enable_lazy_columns_replication = 1;

ALTER SETTINGS PROFILE p SETTINGS max_memory_usage = 16106127360;

SHOW CREATE SETTINGS PROFILE p;
-- → CREATE SETTINGS PROFILE p SETTINGS max_memory_usage = 16106127360
-- max_execution_time and enable_lazy_columns_replication are gone.
```

<Warning>
  Поскольку форма `SETTINGS` без дополнительных указаний полностью заменяет содержимое, её использование для того, чтобы "переопределить один параметр" поверх заполненного базового профиля, приведёт к удалению всех остальных параметров (и всех родительских профилей) этого профиля. Если вам нужно изменить только один параметр, сохранив остальные, используйте инкрементальную форму `MODIFY`/`ADD`/`DROP`, описанную ниже.
</Warning>

Это то же поведение, что и у `SETTINGS` в [`CREATE SETTINGS PROFILE`](/ru/reference/statements/create/settings-profile): это предложение `SETTINGS` задаёт полный список параметров.

<div id="incremental-form">
  ### Инкрементальная форма: `ADD` / `MODIFY` / `DROP`
</div>

Ключевые слова `ADD`, `MODIFY` и `DROP` изменяют отдельные записи, не затрагивая всё остальное в профиле:

* `ADD SETTINGS variable = value [constraints]` — добавляет настройку, которой ещё нет.
* `MODIFY SETTINGS variable = value [constraints]` — заменяет запись одной настройки. Перезаписывается вся запись целиком (значение и ограничения), поэтому, если вы хотите их сохранить, заново укажите `MIN`/`MAX`/`READONLY`/и т. д.
* `DROP SETTINGS variable [,...]` — удаляет перечисленные настройки.
* `ADD PROFILES 'profile_name' [,...]` / `DROP PROFILES 'profile_name' [,...]` — добавляет или удаляет родительские (наследуемые) профили.
* `DROP ALL SETTINGS` / `DROP ALL PROFILES` — удаляет все настройки или все родительские профили.

Несколько таких секций можно объединить в одном операторе, например `DROP SETTINGS a ADD SETTINGS b = 1`.

<div id="examples">
  ## Примеры
</div>

Переопределите один параметр, сохранив остальные параметры в уже заполненном профиле:

```sql theme={null}
ALTER SETTINGS PROFILE p MODIFY SETTINGS max_memory_usage = 16106127360;
```

Добавьте новую настройку с ограничениями и удалите другую:

```sql theme={null}
ALTER SETTINGS PROFILE my_profile
    DROP SETTINGS readonly
    ADD SETTINGS max_threads = 8 MIN 4 MAX 16 WRITABLE;
```

Управляйте родительскими профилями в инкрементальном режиме:

```sql theme={null}
ALTER SETTINGS PROFILE my_profile ADD PROFILES p1;
ALTER SETTINGS PROFILE my_profile DROP PROFILES p1;
```

Всегда проверяйте результат командой [`SHOW CREATE SETTINGS PROFILE`](/ru/reference/statements/show):

```sql theme={null}
SHOW CREATE SETTINGS PROFILE my_profile;
```

<div id="incremental-vs-full-replacement">
  ## Инкрементальные изменения vs полная замена
</div>

<Warning>
  Предложение `SETTINGS` само по себе **удаляет из профиля все существующие настройки и все наследуемые (родительские) профили** перед применением новых.
</Warning>

Чтобы изменить одну настройку, сохранив остальные, используйте `ADD SETTINGS` или `MODIFY SETTINGS` (см. примеры ниже).

<div id="add-vs-modify">
  ## ADD и MODIFY
</div>

И `ADD SETTINGS`, и `MODIFY SETTINGS` сохраняют остальные настройки в профиле, но по-разному обрабатывают существующую запись для *той же* настройки:

* `ADD SETTINGS variable = value ...` сначала удаляет любую существующую запись для `variable`, а затем добавляет новую. Поэтому эта команда **заменяет значение вместе со всеми ограничениями** этой настройки. Любые ранее заданные `MIN`, `MAX` или режим записи (`READONLY`/`WRITABLE`/`CONST`/`CHANGEABLE_IN_READONLY`) для `variable`, которые вы не повторите, будут отброшены.
* `MODIFY SETTINGS variable = value ...` **объединяет изменения по полям**: команда переопределяет только те поля, которые вы действительно укажете (значение, `MIN`, `MAX` или режим записи), а остальные поля этой настройки оставляет без изменений.

<Tip>
  Кратко: используйте `MODIFY SETTINGS`, если хотите изменить только один аспект настройки (например, только значение, сохранив существующий `MAX`); используйте `ADD SETTINGS`, если хотите заново определить настройку с нуля.
</Tip>

<div id="examples">
  ## Примеры
</div>

Создайте профиль для использования в примерах ниже:

```sql theme={null}
CREATE SETTINGS PROFILE OR REPLACE p SETTINGS max_execution_time = 60;
```

<div id="example-modify-settings">
  ### ИЗМЕНИТЬ НАСТРОЙКИ
</div>

Добавьте или измените один параметр, оставив остальные без изменений:

```sql theme={null}
ALTER SETTINGS PROFILE p MODIFY SETTINGS max_memory_usage = 20000000000;
SHOW CREATE SETTINGS PROFILE p;
-- CREATE SETTINGS PROFILE p SETTINGS
--     max_execution_time = 60,
--     max_memory_usage = 20000000000
```

Поскольку `MODIFY` выполняет слияние по полям, изменение только значения настройки сохраняет её существующие ограничения:

```sql theme={null}
ALTER SETTINGS PROFILE p MODIFY SETTINGS max_memory_usage = 20000000000 MAX 30000000000;
ALTER SETTINGS PROFILE p MODIFY SETTINGS max_memory_usage = 25000000000;
SHOW CREATE SETTINGS PROFILE p;
-- ... max_memory_usage = 25000000000 MAX 30000000000  -- the MAX constraint is preserved
```

<div id="example-add-settings">
  ### ADD SETTINGS
</div>

Добавить настройку (при этом сохранив остальные), полностью переопределив её, если она уже существует:

```sql theme={null}
ALTER SETTINGS PROFILE p ADD SETTINGS max_threads = 8 MAX 16 READONLY;
```

В отличие от `MODIFY`, при повторном выполнении `ADD` только со значением ранее заданные ограничения для этого параметра удаляются:

```sql theme={null}
ALTER SETTINGS PROFILE p ADD SETTINGS max_threads = 4;
SHOW CREATE SETTINGS PROFILE p;
-- ... max_threads = 4   -- the MAX and READONLY constraints are gone
```

<div id="example-drop-settings">
  ### DROP SETTINGS
</div>

Удаляет одну или несколько настроек по имени:

```sql theme={null}
ALTER SETTINGS PROFILE p DROP SETTINGS max_threads;
```

Удалите все настройки сразу:

```sql theme={null}
ALTER SETTINGS PROFILE p DROP ALL SETTINGS;
```

<div id="example-profiles">
  ### Работа с наследуемыми профилями
</div>

Добавляйте и удаляйте родительские (наследуемые) профили, не изменяя собственные настройки профиля:

```sql theme={null}
ALTER SETTINGS PROFILE p ADD PROFILES base_profile;
ALTER SETTINGS PROFILE p DROP PROFILES base_profile;
ALTER SETTINGS PROFILE p DROP ALL PROFILES;
```
