Перейти к основному содержимому
Перейти к основному содержимому

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

Private preview

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

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

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

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

Если во время миграции возникнут проблемы, проверьте FAQ по миграциям Managed Postgres — там собраны распространённые ошибки и способы их устранения.

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

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

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

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

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

Нажмите Start import.

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

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

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

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

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

Нажмите Next.

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

Мастер покажет команду 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

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

Шаг 3: Импортируйте схему в сервис 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Количество потоков для этапа пакетной загрузки
Размер батча при выборке100,000Число строк, получаемых за один батч репликации
Количество строк в снимке на партицию100000Размер партиции для снимков больших таблиц
Количество таблиц в снимке параллельно1Число таблиц, для которых одновременно создаются снимки
Шаг 4: форма настроек ингестии с публикацией и расширенными параметрами репликации

Нажмите Next.

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

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

Шаг 5: выбор таблиц с группировкой по схемам и кнопкой «Создать миграцию»

Нажмите Создать миграцию.

Мониторинг миграции

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

Список источников данных с выполняющейся миграцией

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

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

Действия после миграции

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

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

SELECT COUNT(*) FROM public.orders;

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

ALTER DATABASE <source_db> SET default_transaction_read_only = on;

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

-- Run on both source and target
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>');

Дальнейшие шаги