Перейти к основному содержанию
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. На левой боковой панели нажмите источник данных. Нажмите Start import. Заполните сведения о подключении к исходной базе данных PostgreSQL: host, port, username, password и имя базы данных. Включите TLS, если это требуется для исходной базы. Если вам нужно приватное подключение к исходной базе данных, можно выбрать SSH tunneling и указать необходимые параметры SSH. Это позволит миграции безопасно подключаться к базам данных, которые недоступны из публичной сети. Выберите метод ингестии:
  • Initial load + CDC — копирует существующие данные, а затем поддерживает синхронизацию целевой системы с последующими изменениями.
  • Initial load only — однократное копирование без дальнейшей репликации.
  • CDC only — пропускает начальное копирование и реплицирует только новые изменения, начиная с этого момента.
Нажмите Next.

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

Мастер показывает команду pg_dump, уже заполненную сведениями о подключении к исходной базе данных. Выполните её в терминале:
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
Это создаст pg.sql в текущем каталоге. Нажмите Далее.

Шаг 3: Импорт схемы в сервис Managed Postgres

Выберите целевую базу данных в раскрывающемся списке или нажмите Create a new database, чтобы создать новую. Мастер покажет команду psql, с помощью которой можно применить дамп схемы в вашем сервисе Managed Postgres. Выполните её в терминале:
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
Нажмите Далее.

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

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

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

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

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

После создания миграции она появится в списке источник данных со статусом 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>');

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

Последнее изменение 10 июня 2026 г.