PostgreSQL Error 55P02 cant_change_runtime_param: Конфигурация параметров
- Ошибка выполнения:
ERROR: 55P02: parameter "shared_buffers" cannot be changed without restarting the server. - Сбой при попытке изменить параметры памяти или сокетов через
SETвнутри пользовательской сессии 1С. - Отказ выполнения команды
ALTER SYSTEM SETбез последующей аппаратной перезагрузки инстанса. - Невозможность динамически применить настройки кластера в скриптах тюнинга.
1. Контексты параметров в PostgreSQL (GUC Contexts)
Каждый параметр в PostgreSQL имеет строго определенный контекст (уровень изменения). Ошибка 55P02 возникает при попытке изменить параметр уровня postmaster на лету:
| Контекст | Где можно менять | Требуется ли перезапуск? |
|---|---|---|
| internal | Только при инициализации кластера (initdb) | Нельзя изменить |
| postmaster | Только в postgresql.conf | Да (Рестарт службы) |
| sighup | В postgresql.conf / ALTER SYSTEM | Нет (pg_reload_conf) |
| user / superuser | В сессии через SET | Нет (Действует на сессию) |
2. Проверка контекста конкретного параметра
Выполните запрос к представлению pg_settings, чтобы узнать требования параметра:
SELECT name, setting, unit, context, short_desc
FROM pg_settings
WHERE name IN ('shared_buffers', 'max_connections', 'work_mem', 'listen_addresses');
3. Правильное применение параметров postmaster
Для параметров со значением context = 'postmaster' (например, shared_buffers, max_connections, huge_pages):
-- 1. Запись параметра в postgresql.auto.conf:
ALTER SYSTEM SET shared_buffers = '16GB';
-- 2. Перезапуск службы PostgreSQL в ОС (Обязательно):
-- Linux Systemd:
-- sudo systemctl restart postgresql-16
4. Правильное применение параметров sighup (без перезагрузки)
Для параметров со значением context = 'sighup' (например, effective_cache_size, checkpoint_completion_target, max_wal_size):
ALTER SYSTEM SET effective_cache_size = '48GB';
SELECT pg_reload_conf(); -- Применяется мгновенно без перезапуска
Частые вопросы (FAQ)
Какие основные параметры 1С требуют обязательного перезапуска PostgreSQL?
Критичные параметры уровня postmaster: shared_buffers, max_connections, max_prepared_transactions, max_locks_per_transaction, track_activity_query_size, huge_pages.
Можно ли менять work_mem на лету без перезапуска?
Да, параметр work_mem имеет контекст user: его можно менять динамически как глобально (pg_reload_conf), так и для конкретной роли (ALTER ROLE) или даже внутри одной транзакции (SET work_mem).
Где сохраняются параметры после выполнения ALTER SYSTEM SET?
Параметры записываются в файл postgresql.auto.conf внутри директории базы данных (PGDATA). Этот файл имеет наивысший приоритет над основным postgresql.conf.
Как отменить ошибочно внесенный параметр в postgresql.auto.conf?
Выполните команду ALTER SYSTEM RESET <имя_параметра>; или ALTER SYSTEM RESET ALL; и затем перечитайте конфигурацию через pg_reload_conf().