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

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

  • Доступ к вашей исходной базе данных PostgreSQL с пользователем, у которого есть права на репликацию.
  • Сервис ClickHouse Managed Postgres в качестве целевого сервиса для миграции. Если у вас его ещё нет, см. руководство по быстрому старту.
  • На локальной машине должны быть установлены pg_dump и psql. Оба входят в стандартный набор клиентских инструментов PostgreSQL.

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

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

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

Откройте консоль ClickHouse Cloud и выберите свой сервис Managed Postgres. На левой боковой панели нажмите Источники данных. Нажмите Начать импорт. Заполните сведения о подключении к исходной базе данных PostgreSQL: хост, порт, имя пользователя, пароль и имя базы данных. Включите TLS, если это требуется для источника. Если для подключения к исходной базе данных требуется приватное соединение, выберите SSH-туннелирование и укажите необходимые параметры SSH. Это позволит миграции безопасно подключаться к базам данных без публичного доступа. Выберите способ ингестии:
  • Начальная загрузка + CDC — копирует существующие данные, а затем поддерживает синхронизацию целевой системы с последующими изменениями.
  • Только начальная загрузка — однократное копирование без дальнейшей репликации.
  • Только CDC — пропускает первоначальное копирование и реплицирует только новые изменения, начиная с этого момента.
Нажмите Далее.

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

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

Шаг 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Количество таблиц, для которых одновременно создаются снимки
Нажмите Next.

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

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

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

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