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

# Миграция в Managed Postgres с помощью pg_dump и pg_restore

> Узнайте, как перенести данные PostgreSQL в ClickHouse Managed Postgres с помощью pg_dump и pg_restore

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

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>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Beta feature. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Learn more.
                    </a>
                </u>
            </span>
        </div>;
};

Это руководство содержит пошаговые инструкции по миграции вашей базы данных PostgreSQL в ClickHouse Managed Postgres с помощью утилит `pg_dump` и `pg_restore`.

<div id="migration-pgdump-pg-restore-prerequisites">
  ## Предварительные требования
</div>

* Доступ к исходной базе данных PostgreSQL.
* На локальном компьютере должны быть установлены `pg_dump` и `pg_restore`. Обычно они входят в состав PostgreSQL. Если нет, их можно скачать с [официального сайта PostgreSQL](https://www.postgresql.org/download/).

<div id="migration-pgdump-pg-restore-setup">
  ## Настройка
</div>

Чтобы выполнить эти шаги, возьмём в качестве исходной базы пример базы данных RDS Postgres. Например, такую:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/source-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=172023020275391d1773c80d096a1969" alt="Настройка исходной базы данных PostgreSQL" size="xl" border width="3766" height="2312" data-path="images/managed-postgres/pg_dump_restore/source-setup.png" />

Вот с чем мы будем работать:

* Две таблицы — `events` и `users`. В `events` миллион строк, а в `users` — тысяча.
* У `events` есть индекс.
* Представление поверх таблицы `events`.
* Пара последовательностей

<div id="migration-pgdump-pg-restore-dump">
  ## Создайте dump исходной базы данных
</div>

Теперь воспользуемся `pg_dump`, чтобы создать dump-файл перечисленных выше объектов. Это простая команда:

```shell theme={null}
pg_dump \
  -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
  --format directory \
  -f rds-dump
```

Здесь:

* Замените `<user>`, `<password>`, `<host>`, `<port>` и `<database>` на учетные данные исходной базы данных. Большинство провайдеров Postgres предоставляют строку подключения, которую можно использовать напрямую.
* `--format directory` указывает, что дамп нужно сохранить в формате каталога, который подходит для `pg_restore`.
* `-f rds-dump` указывает выходной каталог для файлов дампа. Обратите внимание: этот каталог будет создан автоматически и не должен существовать заранее.
* Вы также можете распараллелить создание дампа, добавив флаг `--jobs`, а затем указав количество параллельных задач, которые нужно запустить. Подробнее см. в [документации pg\_dump](https://www.postgresql.org/docs/current/app-pgdump.html).

<Tip>
  Вы можете один раз запустить этот процесс, чтобы оценить, сколько времени он занимает и какого размера получится файл дампа.
</Tip>

Вот как выглядит выполнение этой команды:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/dump-command.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=ead214a4f46d3f6db79bd9ccf9e51e41" alt="Выполнение команды pg_dump" size="xl" border width="2158" height="386" data-path="images/managed-postgres/pg_dump_restore/dump-command.png" />

<div id="migration-pgdump-pg-restore-restore">
  ## Восстановите дамп в ClickHouse Managed Postgres
</div>

Теперь, когда у нас есть файл дампа, мы можем восстановить его в экземпляре ClickHouse Managed Postgres с помощью `pg_restore`.

<div id="migration-pgdump-pg-restore-create-pg">
  ### Создайте экземпляр Managed Postgres
</div>

Сначала убедитесь, что у вас настроен экземпляр Managed Postgres, желательно в том же регионе, что и исходный источник. Вы можете воспользоваться кратким руководством [здесь](/ru/products/managed-postgres/quickstart#create-postgres-database). Вот что мы развернем в рамках этого руководства:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/create-pg-for-migration.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=966d2a5124a3a3802e8c1072112c7e9b" alt="Создание экземпляра ClickHouse Managed Postgres" size="md" border width="1532" height="1570" data-path="images/managed-postgres/pg_dump_restore/create-pg-for-migration.png" />

<div id="migration-pgdump-pg-restore-restore-dump">
  ### Восстановите дамп
</div>

Теперь, вернувшись к локальной машине, мы можем использовать команду `pg_restore`, чтобы восстановить данные из дампа в наш экземпляр Managed Postgres:

```shell theme={null}
pg_restore \
  -d 'postgresql://<user>:<password>@<pg_clickhouse_host>:5432/<database>' \
  --verbose \
  rds-dump
```

Вы можете получить строку подключения для своего экземпляра Managed Postgres в консоли ClickHouse Cloud; очень простое объяснение приведено [здесь](/ru/products/managed-postgres/connection).

Здесь тоже есть пара флагов, на которые стоит обратить внимание:

* `--verbose` выводит подробную информацию в процессе восстановления.
* Здесь также можно использовать флаг `--jobs`, чтобы распараллелить восстановление. Подробнее см. в [документации pg\_restore](https://www.postgresql.org/docs/current/app-pgrestore.html).

В нашем случае это выглядит так:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/restore-command.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=67506ceea8f40517048a77a18629152f" alt="Выполнение команды pg_restore" size="xl" border width="2828" height="938" data-path="images/managed-postgres/pg_dump_restore/restore-command.png" />

<div id="migration-pgdump-pg-restore-verify">
  ## Проверьте миграцию
</div>

После завершения восстановления вы можете подключиться к своему экземпляру Managed Postgres и убедиться, что все данные и объекты были успешно перенесены. Для подключения и выполнения запросов можно использовать любой клиент PostgreSQL.
Вот как выглядит наш Managed Postgres после миграции:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/target-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=b9131e0cb02df6e8300f7e17d70fc7d5" alt="Настройка целевой базы данных Managed Postgres" size="xl" border width="3330" height="1966" data-path="images/managed-postgres/pg_dump_restore/target-setup.png" />

Как видно, все таблицы, индексы, представления и последовательности на месте, а количество данных совпадает.

<div id="migration-pgdump-pg-restore-considerations">
  ## Что следует учитывать
</div>

* Убедитесь, что версии PostgreSQL исходной и целевой баз данных совместимы.
  Использование версии pg\_dump старше, чем на исходном сервере, может привести к отсутствию некоторых возможностей или проблемам при восстановлении. В идеале используйте ту же основную версию pg\_dump, что и для исходной базы данных, или более новую.
* Создание дампа и восстановление больших баз данных может занять значительное время.
  Заранее спланируйте этот процесс, чтобы свести простой к минимуму, и при возможности используйте параллельное создание дампа и восстановление (--jobs).
* Обратите внимание, что pg\_dump / pg\_restore не переносят все объекты, связанные с базой данных, и не сохраняют всё состояние среды выполнения.
  К ним относятся роли и членство в ролях, слоты репликации, конфигурация на уровне сервера (например, postgresql.conf, pg\_hba.conf), табличные пространства и статистика времени выполнения.

<div id="migration-pgdump-pg-restore-next-steps">
  ## Следующие шаги
</div>

Поздравляем! Вы успешно перенесли базу данных PostgreSQL в ClickHouse Managed Postgres с помощью pg\_dump и pg\_restore. Теперь вы можете изучить возможности Managed Postgres и его интеграцию с ClickHouse. Для начала ознакомьтесь с этим 10-минутным кратким руководством:

* [Краткое руководство по Managed Postgres](/ru/products/managed-postgres/quickstart)
