Миграция баз данных PostgreSQL в облачные базы данных
Вы можете перенести данные из своей базы данных PostgreSQL в облачные базы данных Selectel с помощью логической репликации или с помощью логического дампа.
Перед миграцией создайте принимающий кластер баз данных PostgreSQL с версией не ниже, чем у исходного кластера. Если вы выбрали способ миграции с помощью логического дампа, то версии кластеров должны совпадать.
Логическая репликация
В логической репликации используется модель публикаций и подписок с одним или несколькими подписчиками. Они подписываются на одну или несколько публикаций на публикующем узле. На внешнем исходном кластере PostgreSQL создается публикация, на которую подписывается принимающий кластер облачных баз данных.
- Подготовьте исходный кластер.
- Перен есите схему базы данных.
- Создайте публикацию на исходном кластере.
- Создайте подписку на принимающем кластере.
1. Подготовить исходный кластер
-
Добавьте пользователю с доступом к реплицируемым данным привилегию replication:
ALTER ROLE <user_name> WITH REPLICATION;
Укажите
<user_name>
— имя пользователя. -
В файле postgresql.conf установите для уровня логирования (Write Ahead Log) значение logical:
wal_level = logical
-
В файле pg_hba.conf настройте аутентификацию:
host all all <host> md5
host replication all <host> md5Укажите
<host>
— IP-адрес или DNS-имя мастер-хоста принимающего кластера. -
Пе резапустите PostgreSQL для применения изменений:
systemctl restart postgresql
2. Перенести схему базы данных
На исходном и принимающем кластере должна быть одинаковая схема базы данных.
-
Создайте дамп схемы на исходном кластере с помощью утилиты pg_dump:
pg_dump \
-h <host> \
-p <port> \
-d <database_name> \
-U <user_name> \
--schema-only \
--no-privileges \
--no-subscriptions \
--no-publications \
-Fd -f <dump_directory>Укажите:
<host>
— IP-адрес или DNS-имя мастер-хоста исходного кластера;<port>
— порт;<database_name>
— имя базы данных;<user_name>
— имя пользователя базы данных;<dump_directory>
— путь до дампа.
-
Восстановите схему из дампа на принимающем кластере с помощью утилиты pg_restore:
pg_restore \
-Fd -v \
--single-transaction -s \
--no-privileges \
-O \
-h <host> \
-U <user_name> \
-p <port> \
-d <database_name> \
<dump_directory>Укажите:
<host>
— IP-адрес или DNS-имя хоста принимающего кластера;<user_name>
— имя пользователя базы данных;<port>
— порт;<database_name>
— имя базы данных;<dump_directory>