# `postgresConf`: платформа перевела параметр из `array-map-fixed` в `map-fixed` Дата: 2026-10-02 | Статус: **не начато** (по указанию владельца: «ничего пока не меняй») Сообщение из чата (Виталий Зайцев, 02.10.2026 12:26): «В Postgres поправил cfs-параметр postgresConf, это нужно будет учесть на всякий». ## Что за параметр `postgresConf` — cfs-параметр сервиса PostgreSQL (id **792**), дополнительные настройки серверного конфига. В провайдере выходит атрибутом `postgres_conf`. ## Что изменилось | | Было | Стало | |---|---|---| | Тип параметра | `array-map-fixed` (массив объектов) | `map-fixed` (один объект) | | Поля | generic-пара `paramValue` (id 117) + `paramName` (id 118, значения только `log_connections` / `log_disconnections`) | конкретные поля `log_connections` (id 118), `log_disconnections` (id 117) | | Значения | строки, в стенде писали `"''"` | `off` \| `on`, по умолчанию `off` | | В Terraform | `postgres_conf = jsonencode([{ paramName = "log_connections", paramValue = "''" }])` — **строка JSON** | `postgres_conf = { log_connections = "on" }` — **вложенный объект** | Источники: - новая спека — `generated/dev/resources_yaml/90_postgres.yaml` (блок `postgresConf`, id 792: `data_type: map-fixed`, `sub_params` id 117/118); - старая спека — `generated/dev/resources_yaml.bak-20260930T183804Z/90_postgres.yaml` (id 792: `data_type: array-map-fixed`, `paramValue`/`paramName`), она же закоммичена в `provider/resources_yaml/90_postgres.yaml`; - сгенерированный код: залитый провайдер — `provider/internal/resources_gen/90_postgres_resource.go:99` (`PostgresConf types.String`), новая генерация — `generated/dev/go/90_postgres_resource.go:75-79` и `:104` (`PostgresConf *PostgresPostgresConfModel{ LogConnections, LogDisconnections }`); - почему важны ключи: платформа парсит значение как JSON, при неверных ключах отвечает `Invalid JSON String` (`HISTORY/60_stands/2026-10-01_test_crud_pg_create_failure.md:24`). ## Почему это критично Смена **типа атрибута** (строка JSON → объект) — ломающее изменение: после заливки нового провайдера манифесты со старым `postgres_conf` перестанут работать. Значит, провайдер и все манифесты надо менять **вместе**, и предупредить тех, у кого уже есть `postgres_conf`. ## Что сделать (порядок) 1. Спеки из API: `./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/test` (в `generated/dev/resources_yaml` форма уже новая, но `provider/resources_yaml/90_postgres.yaml` старая — а её использует `TOOLS/scripts/dev-materialize.sh:28`; при работе через материализацию старую спеку заменить). 2. Генерация: `./TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/test` (читает спеки из `generated/<стенд>/resources_yaml` — `TOOLS/scripts/02_generate_resources_and_docs_v2.sh:67`). Заодно обновятся сгенерированные страницы (`postgres_params_create.md` и др.). 3. Поправить манифесты (пять мест ищем по `param_name`/`paramName`): - `TEST_STAND/CRUD/pg/postgres.tf`; - `DEV_STAND/CRUD/postgres.tf:30`; - `DEV_STAND/POSTGRES/nubes_postgres.tf:30`; - `PROD_STAND/PG1/resources.tf`, `PROD_STAND/POSTGRES/resources.tf` — **проверить**: в них `postgres_conf` мог не использоваться, тогда правок не нужно. Новый вид: ```hcl postgres_conf = { log_connections = "off" # off | on log_disconnections = "off" } ``` 4. Собрать и залить новую версию провайдера: `./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test ` (диапазоны: test `3.*.*`, dev `2.*.*`, prod `1.*.*`; версию выбирает владелец). 5. Учесть state стендов: там лежит старая форма (`TEST_STAND/CRUD/pg/terraform.tfstate:120` → `"postgresConf": "[{\"paramName\":...}]"`), поэтому первый `plan` покажет расхождение — либо принять modify-операцию, либо привести state. `apply` делает владелец. 6. Документация: поправить ручную страницу `docs/curated/crud/three_apps.md:182` («ключи строго `paramName` / `paramValue`» — станет неверно), затем `04_build_and_publish_docs.sh` и публикация. ## Критерии готовности - в манифестах всех стендов — объект `postgres_conf` с полями `log_connections`/`log_disconnections`; - новая версия провайдера в реестре, `terraform plan` на стенде не падает и показывает ожидаемое изменение только по этому параметру; - в документации нет упоминаний `paramName`/`paramValue` для `postgres_conf`; - в `VERSIONS.md` отмечено ломающее изменение (пользователям с заполненным `postgres_conf` нужно править манифест). ## Связанные документы - `HISTORY/30_provider/2026-07-16_subparams_nested_terraform_attributes.md` — переход на вложенные атрибуты (`array-map-fixed` → `ListNestedAttribute`); - `HISTORY/60_stands/2026-10-01_test_crud_pg_create_failure.md` — реальный сбой с `Invalid JSON String`; - `HOW_TO/HOWTO_ADD_NEW_SERVICE.md:87` — таблица типов параметров (`array-map-fixed`, `map-fixed`); - `TEST_STAND/CRUD/README.md`, `docs/curated/crud/three_apps.md` — там описан `postgres_conf`.