Миграция базы данных из Greenplum® в PostgreSQL
Вы можете перенести базу данных из Greenplum® в кластер PostgreSQL с помощью сервиса Yandex Data Transfer.
Чтобы перенести базу данных из Greenplum® в PostgreSQL:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Для примера все нужные ресурсы будут созданы в Yandex Cloud. Подготовьте инфраструктуру:
-
Создайте кластер-источник Yandex Managed Service for Greenplum® любой подходящей конфигурации с именем пользователя-администратора
gp-user
и хостами в публичном доступе. -
Создайте кластер-приемник Yandex Managed Service for PostgreSQL любой подходящей конфигурации с хостами в публичном доступе. При создании кластера укажите:
- Имя пользователя —
pg-user
. - Имя БД —
db1
.
- Имя пользователя —
-
Если вы используете группы безопасности в кластерах, убедитесь, что они настроены правильно и допускают подключение к кластерам:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации greenplum-postgresql.tf
.В этом файле описаны:
- сети и подсети для размещения кластеров;
- группы безопасности для подключения к кластерам;
- кластер-источник Managed Service for Greenplum®;
- кластер-приемник Managed Service for PostgreSQL;
- эндпоинт для приемника;
- трансфер.
-
Укажите в файле
greenplum-postgresql.tf
пароли пользователя-администратора и версии Greenplum® и PostgreSQL. -
Выполните команду
terraform init
в директории с конфигурационным файлом. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте трансфер
-
Создайте эндпоинт-источник типа
Greenplum®
и укажите в нем параметры подключения к кластеру:- Тип подключения —
Кластер Managed Service for Greenplum
. - Кластер Managed Service for Greenplum —
<имя_кластера-источника_Greenplum®>
из выпадающего списка. - База данных —
postgres
. - Пользователь —
gp-user
. - Пароль —
<пароль_пользователя>
. - Схема служебных объектов —
public
.
- Тип подключения —
-
Создайте эндпоинт-приемник и трансфер:
ВручнуюTerraform-
Создайте эндпоинт-приемник типа
PostgreSQL
и укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Кластер Managed Service for PostgreSQL
. - Кластер Managed Service for PostgreSQL —
<имя_кластера-приемника_PostgreSQL>
из выпадающего списка. - База данных —
db1
. - Пользователь —
pg-user
. - Пароль —
<пароль_пользователя>
.
- Тип инсталляции —
-
Создайте трансфер типа Копирование, использующий созданные эндпоинты.
Для этой пары эндпоинтов репликация недоступна, но вы можете настроить регулярное копирование при создании трансфера. Для этого в блоке Параметры трансфера в поле Копирование выберите Регулярно, затем укажите интервал копирования. Трансфер будет автоматически активироваться через указанный промежуток времени.
Важно
Перед настройкой регулярного копирования убедитесь, что в параметрах эндпоинта-приемника указана политика очистки
DROP
илиTRUNCATE
. Иначе данные на приемнике будут дублироваться при копировании.
-
Укажите в файле
greenplum-postgresql.tf
переменные:gp_source_endpoint_id
— значение идентификатора эндпоинта для источника;transfer_enabled
– значение1
для создания трансфера.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Активируйте трансфер
-
Подключитесь к кластеру Managed Service for Greenplum®, создайте в нем таблицу
x_tab
и заполните ее данными:CREATE TABLE x_tab ( id NUMERIC, name CHARACTER(5) ); CREATE INDEX ON x_tab (id); INSERT INTO x_tab (id, name) VALUES (40, 'User1'), (41, 'User2'), (42, 'User3'), (43, 'User4'), (44, 'User5');
-
Активируйте трансфер и дождитесь его перехода в статус Завершен.
-
Чтобы проверить корректность переноса данных, подключитесь к кластеру-приемнику Managed Service for PostgreSQL и убедитесь, что колонки в таблице
x_tab
в базеdb1
совпадают с колонками таблицыx_tab
в базе источника:SELECT id, name FROM db1.public.x_tab;
┌─id─┬─name──┐ │ 40 │ User1 │ │ 41 │ User2 │ │ 42 │ User3 │ │ 43 │ User4 │ │ 44 │ User5 │ └────┴───────┘
Проверьте работу копирования при повторной активации
-
В параметрах эндпоинта-приемника установите политику очистки
DROP
илиTRUNCATE
. -
Удалите строку с идентификатором
41
и измените строку с идентификатором42
в таблицеx_tab
:DELETE FROM x_tab WHERE id = 41; UPDATE x_tab SET name = 'Key3' WHERE id = 42;
-
Повторно активируйте трансфер и дождитесь его перехода в статус Завершен.
-
Убедитесь, что в таблице
x_tab
на приемнике PostgreSQL отобразились изменения:SELECT id, name FROM db1.public.x_tab;
┌─id─┬─name──┐ │ 42 │ Key3 │ │ 40 │ User1 │ │ 43 │ User4 │ │ 44 │ User5 │ └────┴───────┘
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Убедитесь, что трансфер находится в статусе Завершен и удалите его.
-
Удалите кластеры:
ВручнуюTerraform-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
-