> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Перенос данных PostgreSQL с помощью источников данных в ClickPipes

> Узнайте, как перенести базу данных PostgreSQL в ClickHouse Managed Postgres с помощью ClickPipes.

export const Image = ({img, alt, size = "lg", background}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  const backgroundColor = background === "white" ? "white" : background === "black" ? "rgb(31 31 28)" : undefined;
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} style={{
    backgroundColor
  }} />
      </Frame>
    </div>;
};

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}>
                <span>Бета</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Возможность в статусе бета</span>
        </a>;
};

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

ClickHouse Cloud теперь предлагает ClickPipes для миграции внешней базы данных PostgreSQL в сервис Managed Postgres. Эта встроенная интеграция упрощает подключение к исходной базе данных, экспорт схемы, её импорт в Managed Postgres и настройку непрерывной репликации.

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

* Доступ к вашей исходной базе данных PostgreSQL с учетной записью пользователя, у которой есть права на репликацию. Следуйте руководству по настройке для соответствующего источника:
  * [Amazon RDS Postgres](/ru/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/ru/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/ru/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/ru/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/ru/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/ru/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/ru/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/ru/integrations/clickpipes/postgres/source/timescale)
  * [Универсальный источник Postgres](/ru/integrations/clickpipes/postgres/source/generic) для любого другого провайдера или самоуправляемого экземпляра
* Сервис ClickHouse Managed Postgres в качестве целевого сервиса для миграции. Если у вас его еще нет, см. [руководство по быстрому началу](/ru/products/managed-postgres/quickstart).
* На локальной машине должны быть установлены `pg_dump` и `psql`. Оба входят в стандартный набор клиентских инструментов PostgreSQL.

<div id="considerations">
  ## Что нужно учесть перед миграцией
</div>

* **Распространение DDL**: непрерывная репликация (CDC) фиксирует операции DML и `ADD COLUMN`. Другие изменения DDL, такие как `DROP COLUMN` и `ALTER COLUMN`, не распространяются автоматически, и их нужно применять на целевой стороне вручную.

<Note>
  Если во время миграции возникнут проблемы, ознакомьтесь с [FAQ по миграциям Managed Postgres](/ru/products/managed-postgres/migrations/faq), где описаны распространённые ошибки и способы их устранения.
</Note>

<h2 id="step-1-connect">
  Шаг 1: Подключитесь к исходной базе данных
</h2>

Откройте [консоль ClickHouse Cloud](https://clickhouse.cloud) и выберите свой сервис Managed Postgres.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=5da06beedac095dc527e7a83460f863e" alt="Карточка сервиса Managed Postgres в списке сервисов ClickHouse Cloud" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.webp" />

На левой боковой панели нажмите **источник данных**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=0fffed584827f3fb1386d27fc205b81a" alt="Пункт источник данных на боковой панели сервиса Managed Postgres" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.webp" />

Нажмите **Start import**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=4b335dc3b56a6bfa1a9ca04dc9447e56" alt="Страница источник данных с кнопкой Start import" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.webp" />

Заполните сведения о подключении к исходной базе данных PostgreSQL: host, port, username, password и имя базы данных. Включите **TLS**, если это требуется для исходной базы.

Если вам нужно приватное подключение к исходной базе данных, можно выбрать **SSH tunneling** и указать необходимые параметры SSH. Это позволит миграции безопасно подключаться к базам данных, которые недоступны из публичной сети.

Выберите метод ингестии:

* **Initial load + CDC** — копирует существующие данные, а затем поддерживает синхронизацию целевой системы с последующими изменениями.
* **Initial load only** — однократное копирование без дальнейшей репликации.
* **CDC only** — пропускает начальное копирование и реплицирует только новые изменения, начиная с этого момента.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=f360daf02b6b04240a0d9e9e7f143498" alt="Шаг 1: форма подключения к исходной базе данных с вариантами метода ингестии" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationform.webp" />

Нажмите **Next**.

<h2 id="automated-schema-migration">
  Автоматизированная миграция схемы
</h2>

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/automated.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=9951eb0470ed0a63c40543b2285057b9" alt="Шаг 2: автоматизированная миграция схемы с выбором целевой базы данных" size="lg" border width="2632" height="742" data-path="images/managed-postgres/pg_dump_restore/automated.webp" />

При выборе этого варианта ClickPipe автоматически получит схему исходной базы данных и применит её к сервису Managed Postgres на этапе [Setup](/ru/integrations/clickpipes/postgres/lifecycle#setup) после создания ClickPipe.

Эта возможность предполагает **пустую целевую базу данных**, поскольку переносит из исходной базы данных все объекты независимо от того, какие таблицы вы выберете позже в мастере. Если целевая база данных уже содержит данные или требуется более гибкая настройка, выберите режим [**Manual**](#manual-schema-migration).

Выберите целевую базу данных в раскрывающемся списке или нажмите **Create a new database**, чтобы создать её.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/newdb.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=7af9cb67d83ba390fa0dfbe9a26da87d" alt="Диалог создания новой базы данных Postgres" size="lg" border width="1642" height="742" data-path="images/managed-postgres/pg_dump_restore/newdb.webp" />

<h3 id="monitoring">
  Мониторинг
</h3>

Ход миграции схемы можно отслеживать в представлении сведений о ClickPipes. В разделе **Журналы** отображаются статус миграции схемы и все возникшие ошибки.

Этот режим имеет следующие ограничения:

* Пайпы, использующие SSH tunneling, не поддерживают автоматическую миграцию схемы. Схему необходимо [экспортировать и импортировать вручную](#manual-schema-migration).

<h2 id="manual-schema-migration">
  Ручная миграция схемы
</h2>

Если в целевой базе данных уже есть данные или вам нужна более индивидуальная настройка, а не чистое состояние, которое предполагает автоматический режим, выберите режим **Manual**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pg_dump_restore/manual.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=bcb9482e3070bd505e42dd20b49949e5" alt="Шаг 2: ручная миграция схемы с помощью команды экспорта pg_dump" size="lg" border width="2632" height="1022" data-path="images/managed-postgres/pg_dump_restore/manual.webp" />

<h3 id="step-2-export-schema">
  Экспортируйте схему базы данных
</h3>

Мастер покажет команду `pg_dump`, уже заполненную сведениями о подключении к исходной базе данных. Выполните её в терминале:

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=817489659403b6183ea9ca726b4c1c85" alt="Шаг 2: команда pg_dump для экспорта схемы" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextexport.webp" />

```shell theme={null}
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
```

В результате в текущем каталоге будет создан файл `pg.sql`.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=8cb54def65d2d7d581686c4339aa0df2" alt="Вывод терминала после выполнения pg_dump" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.webp" />

Нажмите **Next**.

<h3 id="step-3-import-schema">
  Импортируйте схему в свой сервис Managed Postgres
</h3>

Выберите целевую базу данных в раскрывающемся списке или нажмите **Create a new database**, чтобы создать новую.

Мастер покажет команду `psql` для применения дампа схемы к вашему сервису Managed Postgres. Выполните её в терминале:

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=59f3694d70eca58c60c9cb2f64509cd0" alt="Шаг 3: команда psql для импорта схемы" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextimport.webp" />

```shell theme={null}
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
```

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=3b4d6f4d7502e549ff3db7aa2e7b9c4a" alt="Вывод терминала после выполнения импорта схемы через psql" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.webp" />

Нажмите **Next**.

<h2 id="step-4-ingestion-settings">
  Шаг 4: Настройка параметров ингестии
</h2>

Укажите публикацию, которую нужно использовать для логической репликации. Если оставить это поле пустым, публикация будет создана автоматически.

Разверните **Расширенные настройки репликации**, чтобы настроить пропускную способность:

| Параметр | Значение по умолчанию | Описание |
| - | - | - |
| Интервал синхронизации (секунды) | 10 | Как часто опрашивается слот репликации |
| Параллельные потоки для начальной загрузки | 4 | Количество потоков для этапа пакетной загрузки |
| Размер батча Pull | 100,000 | Количество строк, извлекаемых за один батч репликации |
| Количество строк снимка на партицию | 100000 | Размер партиции для снимков больших таблиц |
| Количество таблиц для снимков в параллельном режиме | 1 | Количество таблиц, для которых снимки создаются одновременно |

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=b6c4dcaefdf8176f3d61636fabe70b95" alt="Шаг 4: форма параметров ингестии с публикацией и расширенными параметрами репликации" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

Нажмите **Далее**.

<h2 id="step-5-select-tables">
  Шаг 5: Выберите таблицы
</h2>

Выберите таблицы, которые нужно реплицировать. Таблицы сгруппированы по схемам. Вы можете выбрать отдельные таблицы или развернуть схему, чтобы выбрать все таблицы в ней.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=275772f47c4cbb55fdac96acdf8a8735" alt="Шаг 5: панель выбора таблиц, сгруппированных по схемам, с кнопкой Create migration" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

Нажмите **Create migration**.

<h2 id="monitor">
  Отслеживание миграции
</h2>

После создания миграции она появится в списке **источников данных** со статусом **Running**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=a8e8712ecd01d1bf7b6112ba26275965" alt="Список источников данных с миграцией в статусе Running" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.webp" />

Нажмите на миграцию, чтобы открыть подробное представление. На вкладке **Tables** отображается ход начальной загрузки для каждой таблицы, включая количество обработанных строк, число партиций и среднее время на партицию. На вкладке **Metrics** после запуска CDC отображаются задержка репликации и пропускная способность.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/4n4lv5U169Tcsz6l/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=4n4lv5U169Tcsz6l&q=85&s=8efa910d3f00341a552b81aca49b9c05" alt="Подробное представление миграции со статистикой начальной загрузки по таблицам" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.webp" />

<h2 id="cutover">
  Переключение трафика
</h2>

После завершения начальной загрузки и, если используется CDC, при значении задержки репликации, близком к нулю, можно переключить трафик с исходной исходной базы данных Postgres на ваш сервис Managed Postgres. Откройте подробное представление миграция и перейдите на вкладку **Post-migration steps**. Этот мастер проведёт вас по шести шагам, необходимым для безопасного завершения миграция. Шаги нужно выполнять строго по порядку: перейти к следующему можно только после завершения предыдущего.

<h3 id="cutover-read-only">
  Шаг 1. Переведите исходную базу данных Postgres в режим только для чтения
</h3>

Остановите запись из приложения в источник, чтобы во время cutover не возникло расхождений. Мастер покажет команду `ALTER DATABASE` с уже подставленным именем вашей исходной базы данных — выполните её на исходной базе данных:

```sql theme={null}
ALTER DATABASE "<source_db>" SET default_transaction_read_only = on;
```

Затем разорвите все существующие соединения, чтобы они подхватили настройку «только для чтения» и не осталось незавершённых операций записи:

```sql theme={null}
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = '<source_db>'
  AND pid <> pg_backend_pid();
```

<Note>
  В зависимости от вашего провайдера Postgres этот шаг может выглядеть иначе. Управляемые сервисы могут запрещать `ALTER DATABASE` или принудительное завершение backend-соединений, предлагая вместо этого включать режим только для чтения через собственную консоль, группы параметров или отзыв привилегий на запись. Обратитесь к документации вашего провайдера, чтобы узнать, каким способом можно перевести источник в режим только для чтения.
</Note>

Нажмите **Mark as completed**, чтобы продолжить.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/readonly.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=b5e1558c444dbf18d4a85850a9e2fe4d" alt="Шаг 1 после миграции: перевод исходной базы данных в режим только для чтения" size="lg" border width="1486" height="1818" data-path="images/managed-postgres/pgpg/post-migration/readonly.webp" />

<h3 id="cutover-validate">
  Шаг 2: проверка количества строк
</h3>

Выберите реплицированные таблицы, которые нужно проверить. ClickPipes подсчитывает строки в каждой выбранной таблице как в источнике, так и в целевой системе, и сравнивает результаты. Для больших таблиц количество может быть приблизительным. Нажмите **Select all tables**, чтобы проверить все таблицы, либо найдите и отметьте отдельные таблицы, после чего нажмите **Count rows**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/GFspt4gULfSkoH59/images/managed-postgres/pgpg/post-migration/validate-row-counts.webp?fit=max&auto=format&n=GFspt4gULfSkoH59&q=85&s=2a376bdc0028485f26c4e3f159b7fec4" alt="Шаг 2 после миграции: выбор таблиц и проверка количества строк между источником и целевой системой" size="lg" border width="1452" height="1612" data-path="images/managed-postgres/pgpg/post-migration/validate-row-counts.webp" />

<h3 id="cutover-pause">
  Шаг 3: приостановите пайп
</h3>

Приостановите ClickPipe, чтобы репликация прекратилась до того, как вы сбросите последовательности и переключите трафик. Нажмите **Pause ClickPipe** и, прежде чем продолжить, дождитесь, пока пайп будет приостановлен.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/pause-pipe.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=6d650c0e80230dd2fec9d6cce10d79de" alt="Шаг 3 после миграции: приостановка ClickPipe для остановки репликации" size="lg" border width="1408" height="1322" data-path="images/managed-postgres/pgpg/post-migration/pause-pipe.webp" />

<h3 id="cutover-reset-sequences">
  Шаг 4: сброс последовательностей
</h3>

Сбросьте последовательности в пункте назначения, чтобы новые вставки продолжались с корректных значений. Нажмите **Reset sequences**, чтобы привести каждую последовательность в соответствие с текущим максимальным значением в её таблице.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/reset-sequences.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=6df042af5d04372c4f3ea93ebc572073" alt="Шаг 4 после миграции: сброс последовательностей в пункте назначения" size="lg" border width="1382" height="1196" data-path="images/managed-postgres/pgpg/post-migration/reset-sequences.webp" />

<h3 id="cutover-traffic">
  Шаг 5: Переключение трафика
</h3>

Переведите операции чтения и записи на ваш сервис Managed Postgres, изменив URL базы данных в приложении на строку подключения Managed Postgres. Мастер предоставляет сведения о подключении в нескольких форматах — **url**, **psql**, **env**, **yaml** и **jdbc**, — так что вы можете скопировать тот, который подходит для вашего стека. После обновления приложения нажмите **Mark as completed**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/cutover-traffic.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=a9ac993e5c1d9de925668c7baf169b42" alt="Шаг 5 после миграции: переключение трафика с использованием строки подключения Managed Postgres" size="lg" border width="1486" height="1018" data-path="images/managed-postgres/pgpg/post-migration/cutover-traffic.webp" />

<h3 id="cutover-cleanup">
  Шаг 6: Очистка
</h3>

После переключения трафика, убедившись, что новый сервис работает исправно, удалите миграцию и освободите ресурсы источника. Мастер отображает команду `pg_drop_replication_slot` с уже подставленным именем слота — выполните её на источнике, чтобы удалить слот репликации:

```sql theme={null}
SELECT pg_drop_replication_slot('<slot_name>');
```

Затем нажмите **Delete ClickPipe migration**, чтобы удалить миграцию из раздела **источник данных**.

<Image img="https://mintcdn.com/private-7c7dfe99-parallel-read-in-order-multi-part/y9c9rzJ7kvnfRKJa/images/managed-postgres/pgpg/post-migration/cleanup.webp?fit=max&auto=format&n=y9c9rzJ7kvnfRKJa&q=85&s=bd1fc0408e1dd1b552f66cfc2f1e980e" alt="Post-migration step 6: clean up by dropping the replication slot and deleting the migration" size="lg" border width="1452" height="1432" data-path="images/managed-postgres/pgpg/post-migration/cleanup.webp" />

<h2 id="next-steps">
  Следующие шаги
</h2>

* [Краткое руководство по Managed Postgres](/ru/products/managed-postgres/quickstart)
* [Сведения о подключении к Managed Postgres](/ru/products/managed-postgres/connection)
* [FAQ по ClickPipes для Postgres](/ru/integrations/clickpipes/postgres/faq)
