# ============================================================================= # PostgreSQL — пользователи и базы данных # ============================================================================= # # ЗАЧЕМ ЗДЕСЬ keep_on_destroy = true (не удалять подресурс при destroy): # # У самого кластера PostgreSQL режим по умолчанию — suspend_on_destroy = true # (generated/test/resources_yaml/90_postgres.yaml → lifecycle.suspend_on_destroy_default: true). # То есть `terraform destroy` НЕ удаляет кластер в облаке, а переводит его в Suspend. # # Пользователь и база — это отдельные операции (create_user / create_database), # и по умолчанию при destroy Terraform выполнил бы delete_user / delete_database. # Получилось бы расхождение: кластер в облаке жив (Suspend), а пользователь и база # из него удалены. После resume приложения работали бы с пустой БД, а следующий apply # создавал бы всё заново (для базы это потеря данных). # # keep_on_destroy = true переводит подресурс в режим state_only: при destroy он # НЕ удаляется и НЕ меняется в облаке, а только убирается из terraform state. # Провайдер печатает предупреждение «Подресурс оставлен как есть, а не удалён». # # Пара к keep_on_destroy = true обязательна: # adopt_existing_on_create = true — иначе следующий `terraform apply` попытается # СОЗДАТЬ уже существующие в облаке пользователя/базу и получит ошибку «уже существует». # С true провайдер усыновляет существующий объект обратно в state (авто-import). # # Как удалить по-настоящему: выставить keep_on_destroy = false и выполнить apply/destroy — # пойдут обычные delete_user / delete_database. # ============================================================================= resource "nubes_postgres_user" "crud_user_0" { postgres_id = nubes_postgres.main_pg.id username = local.pg_username role = local.pg_role adopt_existing_on_create = true # destroy: пользователя из кластера не удалять (кластер уходит в Suspend, а не удаляется) keep_on_destroy = true } resource "nubes_postgres_database" "pg_db" { postgres_id = nubes_postgres.main_pg.id db_name = local.pg_db_name db_owner = nubes_postgres_user.crud_user_0.username adopt_existing_on_create = true # destroy: базу из кластера не удалять — иначе данные пропадут после resume keep_on_destroy = true }