1
Подготовка Neon
Создайте отдельного пользователя ClickPipes с разрешениями на чтение и репликацию:Выполните эти шаги на продакшн-ветке Neon, повторив выдачу grant для каждой схемы, которую требуется перенести.
Каждая реплицируемая таблица должна иметь primary key или использовать
REPLICA IDENTITY FULL.В консоли Neon перейдите в Settings → Logical Replication и включите логическую репликацию.
Если вы используете ограничения по IP, разрешите статические IP-адреса ClickPipes. Подробные инструкции см. в руководстве по настройке источника Neon.2
Миграция и переключение с помощью ClickPipes
Следуйте руководству по миграции с ClickPipes, чтобы настроить и завершить миграцию.
ClickPipes автоматизирует весь процесс от начала до конца:
- Переносит исходную схему в пустую целевую базу данных.
- Выполняет оптимизированную первоначальную загрузку с параллельным снятием снимков.
- Использует CDC для поддержания синхронизации целевой базы с Neon.
- Предоставляет мониторинг прогресса, задержки репликации и ошибок.
- Проводит вас через проверку и переключение.
- Переведите Neon в режим только для чтения, чтобы остановить запись.
- Сверьте количество строк в источнике и целевой базе.
- Приостановите пайп.
- Сбросьте последовательности в целевой базе.
- Переключите трафик, обновив connection string приложения так, чтобы он указывал на ClickHouse Managed Postgres.
- Выполните очистку: удалите слот репликации и ClickPipe.
Что учесть при миграции
Ветки
Neon предоставляет мгновенное ветвление по принципу copy-on-write. ClickHouse Managed Postgres использует локальное NVMe-хранилище, что обеспечивает быструю, предсказуемую и надёжную работу Postgres. Обратная сторона в том, что ветки создаются не мгновенно: они разворачиваются как независимые развёртывания с помощью восстановления на определённый момент времени (PITR). Обычно они становятся доступны в течение нескольких минут. Для повседневной разработки мы рекомендуем держать небольшую базу данных ClickHouse Managed Postgres для разработки с репрезентативными обезличенными продакшн-данными — например, объёмом в несколько гигабайт — и создавать из неё PITR-ветки по мере необходимости. Создание и удаление веток можно автоматизировать с помощью clickhousectl, нашего официального CLI, либо через OpenAPI или Terraform Некоторые клиенты используют этот подход для управления сотнями сред разработки. Мы активно улучшаем работу с форками и песочницами. См. документацию по ветвлению.Neon Serverless Driver
Если ваше приложение не использует Neon Serverless Driver, этот раздел можно пропустить. Приложения, работающие на платформах вроде Vercel, могут использовать Neon Serverless Driver — драйвер на основе WebSocket, рассчитанный именно на Neon. Его нельзя просто перенаправить на ClickHouse Managed Postgres. Перед миграцией:- Проверьте наличие зависимостей, таких как @neondatabase/serverless. Если они есть, замените их стандартным драйвером Postgres, например node-postgres (pg).
- Для serverless-нагрузок, создающих множество короткоживущих соединений, используйте встроенный экземпляр PgBouncer.
- Подготовленные операторы поддерживаются. Однако, поскольку PgBouncer использует пулинг на уровне транзакций, проверьте приложения, которые полагаются на поведение уровня сеанса, — в большинстве приложений это встречается редко:
- Используйте
SET LOCALвместоSETилиRESETуровня сеанса. - Используйте временные таблицы в области транзакции с
ON COMMIT DROP. NOTIFYподдерживается,LISTEN— нет.- Используйте рекомендательные блокировки уровня транзакции, а не уровня сеанса.
- Курсоры в области транзакции поддерживаются,
WITH HOLD— нет.
- Используйте
- Если ваше приложение зависит от неподдерживаемого поведения уровня сеанса, подключайтесь к Postgres напрямую, минуя PgBouncer.
Ограничения на количество соединений
ClickHouse Managed Postgres по умолчанию поддерживает 500 прямых соединений с Postgres. Если ваша рабочая нагрузка в Neon превышает это значение, вы можете:- Использовать пул соединений на стороне приложения.
- Использовать входящий в комплект экземпляр PgBouncer, который поддерживает до 5 000 клиентских соединений.
- Увеличить
max_connections, если требуется больше прямых соединений.- Значение
max_connectionsможно изменить в разделе Settings → Edit parameters. Некоторые изменения вступают в силу только после перезапуска. См. документацию по конфигурации.
- Значение
Изменения схемы во время миграции
Промежуток между запуском ClickPipes и переключением должен быть максимально коротким — в идеале не более нескольких дней — и в течение этого периода следует избегать изменений схемы. Некоторые клиенты несколько дней поддерживают параллельные среды, тестируя свои приложения на ClickHouse Managed Postgres. По завершении тестирования они запускают новый ClickPipe для финальной миграции, тем самым сокращая время между первоначальной загрузкой и переключением. CDC реплицирует вставки, обновления, удаления иADD COLUMN, однако большинство прочих изменений DDL не распространяются. Это касается индексов, триггеров, изменений enum, ограничений (constraints), функций и большинства модификаций столбцов.
Некоторые изменения, например отсутствующее значение enum, приводят к остановке репликации и попадают в журналы ClickPipes. Внесите недостающее изменение в целевой системе — после этого репликация должна возобновиться. Другие изменения, такие как вновь созданный индекс или триггер, могут не прерывать CDC, но их всё равно необходимо создать вручную до переключения.
Прежде чем переключать трафик, сравните схемы источника и целевой системы, создайте отсутствующие объекты и сбросьте последовательности. В FAQ по миграции описаны распространённые ошибки и способы их устранения.