> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Справочник по Terraform для Managed Postgres

> Справочник по управлению сервисами ClickHouse Managed Postgres с помощью Terraform-провайдера ClickHouse.

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Бета</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Возможность в статусе бета. 
                <u>
                    <a href="/docs/docs/beta-and-experimental-features#beta-features">
                        Подробнее.
                    </a>
                </u>
            </span>
        </div>;
};

<BetaBadge link="https://clickhouse.com/cloud/postgres" galaxyTrack={true} galaxyEvent="docs.managed-postgres.terraform-beta" />

Сервисы ClickHouse Managed Postgres можно создавать и управлять ими с помощью ресурса `clickhouse_postgres_service` в [Terraform-провайдере ClickHouse](https://registry.terraform.io/providers/ClickHouse/clickhouse/latest/docs/resources/postgres_service). На этой странице описаны настройка провайдера и примеры конфигурации для этого ресурса и связанных с ним источников данных.

<Note>
  Этот ресурс находится на стадии альфа, и его поведение может измениться в будущих версиях провайдера. Он входит в стандартную сборку провайдера. На этой странице описывается версия провайдера **v3.21.0** и более поздние версии, в которых изменён способ управления учётными данными; более ранние версии ведут себя иначе и по состоянию на 31 июля 2026 года больше не работают корректно. Подробности см. в [релизах провайдера](https://github.com/ClickHouse/terraform-provider-clickhouse/releases).
</Note>

<Warning>
  **Обновите провайдер до v3.21.0 до 31 июля 2026 года**

  По состоянию на **31 июля 2026 года** API Managed Postgres больше не возвращает в ответах пароль суперпользователя и строку подключения; учётные данные возвращаются только при создании сервиса или сбросе его пароля. Версии провайдера **v3.21.0 и новее** работают одинаково как до, так и после этого изменения. Более старые версии провайдера полагаются на то, что API повторно возвращает учётные данные: с 31 июля 2026 года они больше не заполняют `connection_string`, а сервис, созданный без явно заданного `password`, создаётся успешно, но сгенерированный пароль при этом нигде не сохраняется.

  Обновитесь до 31 июля 2026 года. Ваше состояние будет автоматически перенесено при первом `plan` или `apply` с v3.21.0. Если какие-либо из ваших сервисов используют сгенерированный сервером пароль (без `password` в конфигурации), сначала восстановите его с помощью `terraform state pull` и объявите его, поскольку v3.21.0 требует `password` или `password_wo` для стандартного сервиса.
</Warning>

<div id="provider-setup">
  ## Настройка провайдера
</div>

Добавьте провайдер ClickHouse в конфигурацию Terraform:

```hcl theme={null}
terraform {
  required_providers {
    clickhouse = {
      source  = "ClickHouse/clickhouse"
      version = ">= 3.21.0"
    }
  }
}

provider "clickhouse" {
  organization_id = var.organization_id
  token_key       = var.token_key
  token_secret    = var.token_secret
}
```

См. [Управление ключами API](/docs/ru/products/cloud/features/admin-features/api/openapi), чтобы узнать, как создать ключ API для работы с провайдером.

<div id="resource-overview">
  ## Обзор ресурса
</div>

Ресурс `clickhouse_postgres_service` поддерживает следующие аргументы:

| Аргумент                   | Обязательный                                             | Описание                                                                                                                                                                                                                                                                                                                      |
| -------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                     | Да                                                       | Понятное человеку имя сервиса. Неизменяемо — при изменении сервис удаляется и создаётся заново.                                                                                                                                                                                                                               |
| `cloud_provider`           | Только при обычном создании                              | Облачный провайдер, в котором размещён экземпляр. Сейчас поддерживается только `aws`. Не указывайте для реплики для чтения или восстановления на определённый момент времени (значение наследуется от источника).                                                                                                             |
| `region`                   | Только при обычном создании                              | Облачный регион (например, `us-east-1`). Не указывайте для реплики для чтения или восстановления на определённый момент времени (значение наследуется от источника).                                                                                                                                                          |
| `size`                     | Только при обычном создании                              | Размер экземпляра (VM SKU), например `m6gd.large`. Можно изменять без пересоздания. Не указывайте для восстановления на определённый момент времени (восстановленный экземпляр будет создан с размером из резервной копии).                                                                                                   |
| `postgres_version`         | Нет                                                      | Основная версия Postgres (например, `18`). Изменение основной версии приводит к удалению и повторному созданию сервиса.                                                                                                                                                                                                       |
| `ha_type`                  | Нет                                                      | Режим высокой доступности: `none`, `async` или `sync`. См. [Высокая доступность](#high-availability).                                                                                                                                                                                                                         |
| `password`                 | Только при обычном создании, если не задан `password_wo` | Пароль суперпользователя, управляемый из вашей конфигурации. Terraform никогда не считывает его обратно через API. Хранится в состоянии Terraform как чувствительные данные. Не указывайте для реплики для чтения (наследуется) или восстановления на определённый момент времени (сохраняется из резервной копии источника). |
| `password_wo`              | Только при обычном создании, если не задан `password`    | Пароль суперпользователя только для записи: применяется к сервису, но никогда не сохраняется в состоянии Terraform. Требует `password_wo_version`; требует Terraform 1.11 или новее.                                                                                                                                          |
| `password_wo_version`      | С `password_wo`                                          | Номер версии для `password_wo`. Измените его, чтобы выполнить ротацию и применить текущее значение `password_wo`.                                                                                                                                                                                                             |
| `pg_config`                | Нет                                                      | Параметры сервера Postgres в виде map ключ-значение.                                                                                                                                                                                                                                                                          |
| `pgbouncer_config`         | Нет                                                      | Параметры пулера соединений PgBouncer в виде map ключ-значение.                                                                                                                                                                                                                                                               |
| `tags`                     | Нет                                                      | Теги ресурса в виде map ключ-значение.                                                                                                                                                                                                                                                                                        |
| `read_replica_of`          | Нет                                                      | ID основного сервиса, от которого нужно реплицировать данные. См. [Реплики для чтения](#read-replicas). Взаимоисключаемо с `restore_to_point_in_time`.                                                                                                                                                                        |
| `restore_to_point_in_time` | Нет                                                      | Создаёт сервис путём восстановления другого сервиса на определённый момент времени. См. [Восстановление на определённый момент времени](#point-in-time-restore). Взаимоисключаемо с `read_replica_of`.                                                                                                                        |

Следующие атрибуты доступны только для чтения и заполняются ClickHouse Cloud после создания: `id`, `state`, `created_at`, `is_primary`, `hostname`, `port` и `username`. Атрибут `connection_string` отсутствует (удалён в v3.21.0): формируйте URI подключения из `hostname`, `port`, `username` и объявленного вами пароля, например `postgres://${username}:${password}@${hostname}:${port}/postgres?sslmode=require`.

<Warning>
  Значение `password` хранится в состоянии Terraform в открытом виде. Поэтому файл состояния Terraform нужно надёжно защитить, например использовать удалённый backend с шифрованием при хранении или `password_wo`, чтобы пароль вообще не попадал в состояние Terraform.
</Warning>

<div id="create-a-service">
  ## Создайте сервис
</div>

```hcl theme={null}
resource "clickhouse_postgres_service" "example" {
  name           = "my-postgres"
  cloud_provider = "aws"
  region         = "us-east-1"
  size           = "m6gd.large"
  password       = var.postgres_password

  # High-availability mode — number of standby replicas:
  #   "none"  – primary only, no standby (default)
  #   "async" – 1 standby, asynchronous replication
  #   "sync"  – 2 standbys, synchronous replication
  ha_type = "async"

  tags = {
    environment = "production"
    team        = "data"
  }
}
```

Стандартный сервис должен объявлять `password` или `password_wo`. Значение должно содержать не менее 12 символов, включая как минимум одну строчную букву, одну заглавную букву и одну цифру. `password_wo` (вместе с `password_wo_version`) подчиняется тем же правилам для пароля, но никогда не сохраняется в состоянии Terraform; для ротации измените `password_wo_version`. Поскольку API не возвращает учетные данные, Terraform должен оставаться единственным средством записи пароля: ротация пароля вне Terraform (в консоли или через API) не обнаруживается, и следующая ротация через Terraform повторно применит объявленное значение.

<div id="high-availability">
  ## Высокая доступность
</div>

Аргумент `ha_type` определяет количество резервных реплик:

| `ha_type` | Резервные реплики     | Репликация                                                                         |
| --------- | --------------------- | ---------------------------------------------------------------------------------- |
| `none`    | нет (только основной) | —                                                                                  |
| `async`   | 1 резервная реплика   | Асинхронная — запись завершается без ожидания резервной реплики                    |
| `sync`    | 2 резервные реплики   | Синхронная — основной ожидает подтверждения как минимум от одной резервной реплики |

`ha_type` можно изменять после создания; его изменение вызывает переход HA. Подробности см. в разделе [Высокая доступность](/docs/ru/products/managed-postgres/high-availability).

<div id="read-replicas">
  ## Реплики для чтения
</div>

Задайте `read_replica_of` равным `id` основного сервиса, чтобы создать стриминговую реплику для чтения. Реплика наследует `cloud_provider`, `region`, `postgres_version` и superuser основного сервиса — не указывайте эти параметры (и `password`):

```hcl theme={null}
resource "clickhouse_postgres_service" "replica" {
  name            = "my-postgres-replica"
  size            = "m6gd.large"
  read_replica_of = clickhouse_postgres_service.example.id
}
```

Подробнее см. в разделе [реплики для чтения](/docs/ru/products/managed-postgres/read-replicas).

<div id="point-in-time-restore">
  ## Восстановление на определённый момент времени
</div>

Задайте `restore_to_point_in_time`, чтобы создать сервис, восстановив резервную копию другого сервиса на указанный момент времени. Параметры `cloud_provider`, `region` и `postgres_version` наследуются от исходного сервиса, поэтому их указывать не нужно; `size` и `ha_type` также следует опустить:

```hcl theme={null}
resource "clickhouse_postgres_service" "restored" {
  name = "my-postgres-restored"

  restore_to_point_in_time = {
    source_id      = clickhouse_postgres_service.example.id
    restore_target = "2026-06-01T12:00:00Z"
  }
}
```

Весь этот блок используется только на этапе создания: изменение `source_id` или `restore_target`, а также удаление блока приводят к удалению и повторному созданию сервиса. Подробности см. в разделе [Резервное копирование и восстановление](/docs/ru/products/managed-postgres/backup-and-restore).

<div id="data-sources">
  ## Источники данных
</div>

Три дополнительных источника данных позволяют найти существующие сервисы:

```hcl theme={null}
# A single service by ID.
data "clickhouse_postgres_service" "example" {
  id = clickhouse_postgres_service.example.id
}

# All Managed Postgres services in the organization.
data "clickhouse_postgres_services" "all" {}

# The CA certificates for a service, for TLS connections.
data "clickhouse_postgres_service_ca_certificates" "certs" {
  service_id = clickhouse_postgres_service.example.id
}
```

<div id="importing-existing-services">
  ## Импорт существующих сервисов
</div>

Существующие сервисы Managed Postgres можно импортировать в состояние Terraform по идентификатору сервиса:

```bash theme={null}
terraform import clickhouse_postgres_service.example xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

При импорте пароль не восстанавливается (API его не возвращает). После импорта при первом apply для сервиса используется `password` или `password_wo`, указанный в вашей конфигурации.

<div id="unsupported-operations">
  ## Неподдерживаемые операции
</div>

Следующее намеренно не включено в схему ресурса:

* Операционные команды (`restart`, `promote`, `switchover`).
* Списки разрешённых IP-адресов, частные конечные точки, конфигурация резервного копирования, окна обслуживания, управляемые клиентом ключи шифрования и BYOC.
* Настраиваемые тайм-ауты жизненного цикла — блока `timeouts {}` нет.
