В этом руководстве приведены пошаговые инструкции по переносу базы данных PostgreSQL в ClickHouse Managed Postgres с использованием нативной логической репликации Postgres.
БетаПредварительные требования
- Доступ к исходной базе данных PostgreSQL.
- На локальной машине должны быть установлены
psql,pg_dumpиpg_restore. Они нужны для создания пустых таблиц в целевой базе данных. Обычно эти утилиты входят в состав PostgreSQL. Если нет, их можно скачать с официального сайта PostgreSQL. - Исходная база данных должна быть доступна из ClickHouse Managed Postgres. Убедитесь, что необходимые правила брандмауэра или настройки группы безопасности разрешают такое подключение. Получить исходящий IP-адрес экземпляра ClickHouse Managed Postgres можно следующим образом:
dig +short <your-managed-postgres-hostname>Настройка
Чтобы логическая репликация работала, нужно убедиться, что исходная база данных настроена правильно. Вот основные требования:
- В исходной базе данных параметр
wal_levelдолжен быть установлен вlogical. - В исходной базе данных параметр
max_replication_slotsдолжен быть установлен как минимум в1. - Для RDS (который в этом руководстве используется в качестве примера) нужно убедиться, что в вашей группе параметров параметр
rds.logical_replicationустановлен в1. - Пользователь исходной базы данных должен иметь привилегию
REPLICATION. В случае RDS нужно выполнить:GRANT rds_replication TO <your-username>; - Роль, которую вы используете для целевой базы данных, должна иметь права на запись в объекты целевой базы данных:
GRANT USAGE ON SCHEMA <schema_i> TO subscriber_user; GRANT CREATE ON DATABASE destination_db TO subscriber_user; GRANT pg_create_subscription TO subscriber_user; -- Предоставление прав на таблицы GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA <schema_i> TO subscriber_user;
Убедитесь, что ваша исходная база данных настроена именно так:

Дамп схемы исходной базы данных
Перед настройкой логической репликации необходимо создать схему в целевой базе данных ClickHouse Managed Postgres. Для этого можно создать дамп схемы исходной базы данных с помощью pg_dump:
pg_dump \
-d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
-s \
--format directory \
-f rds-dumpЗдесь:
- Замените
<user>,<password>,<host>,<port>и<database>на учетные данные вашей исходной базы данных. -sуказывает, что нужен дамп только схемы.--format directoryуказывает, что нужен дамп в формате каталога, который подходит дляpg_restore.-f rds-dumpуказывает каталог вывода для файлов дампа. Обратите внимание: этот каталог будет создан автоматически и не должен существовать заранее.
В нашем случае есть две таблицы — events и users. В events миллион строк, а в users — тысяча строк.

Создайте экземпляр ClickHouse Managed Postgres
Сначала убедитесь, что у вас уже настроен экземпляр ClickHouse Managed Postgres, желательно в том же регионе, что и исходный экземпляр. Для этого можно воспользоваться кратким руководством здесь. Для этого руководства мы развернем следующее:

Восстановите схему в ClickHouse Managed Postgres
Теперь, когда у нас есть дамп схемы, мы можем восстановить её в нашем экземпляре ClickHouse Managed Postgres с помощью pg_restore:
pg_restore \
-d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
--verbose \
rds-dumpЗдесь:
- Замените
<user>,<password>,<host>,<port>и<database>на учетные данные для доступа к целевой базе данных ClickHouse Managed Postgres. --verboseвыводит подробную информацию в процессе восстановления. Эта команда создаст в целевой базе данных все таблицы, индексы, представления и другие объекты схемы, но без данных.
В нашем случае после выполнения этой команды у нас есть две пустые таблицы:

Настройте логическую репликацию
Когда схема уже готова, можно настроить логическую репликацию из исходной базы данных в целевую базу данных ClickHouse Managed Postgres. Для этого нужно создать публикацию в исходной базе данных и подписку в целевой базе данных.
Создайте публикацию в исходной базе данных
Подключитесь к исходной базе данных PostgreSQL и создайте публикацию, включающую таблицы, которые вы хотите реплицировать.
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;Создайте подписку в целевой базе данных ClickHouse Managed Postgres
Затем подключитесь к целевой базе данных ClickHouse Managed Postgres и создайте подписку, подключенную к публикации в исходной базе данных.
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;Это автоматически создаст слот репликации в исходной базе данных и запустит репликацию данных из указанных таблиц в целевую базу данных. В зависимости от объема данных этот процесс может занять некоторое время.
В нашем случае после настройки подписки данные начали поступать:

Новые строки, вставляемые в исходную базу данных, теперь будут реплицироваться в целевую базу данных ClickHouse Managed Postgres почти в реальном времени.
Ограничения и важные моменты
- Логическая репликация передаёт только изменения данных (INSERT, UPDATE, DELETE). Изменения схемы (например, ALTER TABLE) нужно обрабатывать отдельно.
- Убедитесь, что сетевое соединение между исходной и целевой базами данных стабильно, чтобы избежать прерывания репликации.
- Следите за задержкой репликации, чтобы убедиться, что целевая база данных не отстаёт от исходной. Установка подходящего значения
max_slot_wal_keep_sizeв исходной базе данных поможет контролировать рост слота репликации и не допустить чрезмерного расхода дискового пространства. - В зависимости от вашего сценария использования может потребоваться настроить мониторинг и оповещения для процесса репликации.
Следующие шаги
Поздравляем! Вы успешно перенесли свою базу данных PostgreSQL в ClickHouse Managed Postgres с помощью pg_dump и pg_restore. Теперь вы готовы ознакомиться с возможностями ClickHouse Managed Postgres и его интеграцией с ClickHouse. Ниже — 10-минутное краткое руководство для быстрого старта: