Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Бета

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

Предварительные требования

Что нужно учесть перед миграцией

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

Шаг 1: Подключитесь к исходной базе данных

Откройте консоль ClickHouse Cloud и выберите свой сервис Managed Postgres.

Карточка сервиса Managed Postgres в списке сервисов ClickHouse Cloud

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

Пункт источник данных на боковой панели сервиса Managed Postgres

Нажмите Start import.

Страница источник данных с кнопкой Start import

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

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

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

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

Нажмите Next.

Автоматизированная миграция схемы

Шаг 2: автоматизированная миграция схемы с выбором целевой базы данных

При выборе этого варианта ClickPipe автоматически получит схему исходной базы данных и применит её к сервису Managed Postgres на этапе Setup после создания ClickPipe.

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

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

Диалог создания новой базы данных Postgres

Мониторинг

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

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

Ручная миграция схемы

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

Шаг 2: ручная миграция схемы с помощью команды экспорта pg_dump

Экспортируйте схему базы данных

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

Шаг 2: команда pg_dump для экспорта схемы
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql

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

Вывод терминала после выполнения pg_dump

Нажмите Next.

Импортируйте схему в свой сервис Managed Postgres

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

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

Шаг 3: команда psql для импорта схемы
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
Вывод терминала после выполнения импорта схемы через psql

Нажмите Next.

Шаг 4: Настройка параметров ингестии

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

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

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

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

Шаг 5: Выберите таблицы

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

Шаг 5: панель выбора таблиц, сгруппированных по схемам, с кнопкой Create migration

Нажмите Create migration.

Отслеживание миграции

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

Список источников данных с миграцией в статусе Running

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

Подробное представление миграции со статистикой начальной загрузки по таблицам

Задачи после миграции

После завершения начальной загрузки и, если используется CDC, когда задержка репликации близка к нулю:

Проверьте количество строк. Выборочно сверьте критически важные таблицы в исходной и целевой системах, прежде чем переключать трафик:

SELECT COUNT(*) FROM public.orders;

Остановите запись в источнике. Приостановьте запись со стороны приложения. Чтобы принудительно перевести систему в режим только для чтения во время переключения:

ALTER DATABASE <source_db> SET default_transaction_read_only = on;

Убедитесь, что репликация синхронизирована. Сравните последнюю строку в источнике и в целевой системе:

-- Выполните на источнике и целевой базе данных
SELECT MAX(id), MAX(updated_at) FROM public.orders;

Сбросьте последовательности. Приведите последовательности в соответствие с текущими максимальными значениями в каждой таблице:

DO $$
DECLARE r RECORD;
BEGIN
    FOR r IN
        SELECT
            n.nspname AS schema_name,
            c.relname AS table_name,
            a.attname AS column_name,
            pg_get_serial_sequence(format('%I.%I', n.nspname, c.relname), a.attname) AS seq_name
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        JOIN pg_attribute a ON a.attrelid = c.oid
        WHERE c.relkind = 'r'
            AND a.attnum > 0
            AND NOT a.attisdropped
            AND n.nspname NOT IN ('pg_catalog', 'information_schema')
    LOOP
        IF r.seq_name IS NOT NULL THEN
            EXECUTE format(
                'SELECT setval(%L, COALESCE((SELECT MAX(%I) FROM %I.%I), 0) + 1, false)',
                r.seq_name, r.column_name, r.schema_name, r.table_name
            );
        END IF;
    END LOOP;
END $$;

Переключите трафик приложения. Направьте операции чтения и записи на сервис Managed Postgres и отслеживайте ошибки, нарушения ограничений и состояние репликации.

Выполните очистку. После переключения и подтверждения, что новый сервис работает нормально, удалите миграцию из раздела Источники данных. Если вы использовали CDC, удалите слот репликации в источнике, чтобы освободить ресурсы:

SELECT pg_drop_replication_slot('<slot_name>');

Следующие шаги

Navigation