Кратко:

  • Миграция данных в облако репликацией включает настройку сервера-источника, экспорт схемы БД, создание кластера Managed Service for PostgreSQL, создание публикаций и подписки, перенос PostgreSQL-sequences после репликации и отключение репликации.
  • Настройте сервер-источник с помощью файла postgresql.conf и файла pg_hba.conf.
  • Экспортируйте схему БД с помощью утилиты pg_dump.
  • Создайте кластер Managed Service for PostgreSQL в Yandex Cloud с тем же именем БД, что и на сервере-источнике.
  • Восстановите схему в созданном кластере с помощью pg_restore.
  • Создайте публикации и подписки на сервере-источнике и сервере-приёмнике соответственно.
  • Следите за статусом репликации на приёмнике и сервере-источнике.
  • Запретите запись данных на сервере-источнике и перенесите PostgreSQL-sequences в кластер Managed Service for PostgreSQL.
  • Отключите репликации и перенесите нагрузку на сервер-приёмник.
SSL=ON
 
wal_level=logical
 

Если вы используете SSL:

hostssl    all            all             <адрес хоста>      md5
hostssl    replication    all             <адрес хоста>      md5
 
 
 

Если вы не используете SSL:

host    all            all             <адрес хоста>      md5
host    replication    all             <адрес хоста>      md5 
sudo ufw allow from <адрес хоста> to any port 5432
sudo systemctl restart postgresql
sudo systemctl status postgresql
pg_dump -h <адрес сервера СУБД> \
    -U <имя пользователя> \
    -p <порт> \
    --schema-only \
    --no-privileges \
    --no-subscriptions \
    -d <имя базы данных> -Fd -f /tmp/db_dump
pg_restore -Fd -v --single-transaction -s --no-privileges \
          -h <адрес приемника> \
          -U <имя пользователя> \
          -p 6432 \
          -d <имя базы данных> /tmp/db_dump
CREATE PUBLICATION p_data_migration FOR ALL TABLES;
 
 
Запрос с включённым SSL:
 CREATE SUBSCRIPTION s_data_migration CONNECTION 'host=<адрес сервера-источника> port=<порт> user=<имя пользователя> sslmode=verify-full dbname=<имя базы данных>' PUBLICATION p_data_migration;
 
select * from pg_subscription_rel;
pg_dump -h <адрес сервера СУБД> \
    -U <имя пользователя> \
    -p <порт> -d <имя базы данных> \
    --data-only -t '*.*_seq' > /tmp/seq-data.sql
psql -h <адрес сервера СУБД> \
    -U <имя пользователя> -p 6432 \
    -d <имя базы данных> \
    < /tmp/seq
DROP SUBSCRIPTION s_data_migration;