Миграция PostgreSQL с помощью Trino
В лабораторной работе вы выполните миграцию таблиц между двумя источниками PostgreSQL с помощью Trino.
Постановка задачи
-
Создать таблицу-источник и целевую таблицу.
-
Перенести данные в целевую таблицу с помощью:
-
JDBC-клиента (DBeaver);
-
Python-скрипта.
-
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
-
Создайте кластер Data Platform, в котором будет размещен инстанс.
Назовите кластер «dp-labs».
-
Скачайте и установите root-сертификат на устройство.
-
Установите JDBC-клиент DBeaver.
Все сущности должны располагаться в одной VPC и подсетях одного типа.
Подготовка инфраструктуры
Подготовьте базу данных и таблицы, которые будете переносить, а также каталоги и инстанс Trino.
Создайте Managed PostgreSQL®
-
Создайте две базы данных с названиями:
-
pg_1 — это исходная база данных, которая содержит таблицы для миграции;
-
pg_2 — это целевая база данных, куда нужно перенести таблицы из pg_1.
-
-
Сохраните пароль из карточки кластера в сервисе Secret Manager.
Создайте каталог Managed Trino
-
Перейдите в раздел Evolution и выберите сервис Managed Trino.
-
Откройте раздел Каталоги.
-
Нажмите Создать каталог.
-
Заполните поля следующими значениями:
-
Название:
-
pg_1 — для исходной базы данных pg_1;
-
pg_2 — для целевой базы данных pg_2.
-
-
Коннектор — PostgreSQL.
-
Хост — внутренний IP, указанный в карточке кластера Managed PostgreSQL®.
-
Порт — порт, указанный в карточке кластера Managed PostgreSQL®.
-
Название базы данных:
-
pg_1
-
pg_2
-
-
Логин — логин, указанный в карточке кластера Managed PostgreSQL®.
-
Пароль — выберите секрет с паролем кластера Managed PostgreSQL®.
-
-
Нажмите Создать.
Создайте инстанс Managed Trino
-
Перейдите в раздел Evolution и выберите сервис Managed Trino.
-
Откройте раздел Инстансы.
-
Нажмите Создать инстанс.
-
В блоке Общие параметры заполните поля:
-
Название — trino-instance-migration.
-
Кластер — db-labs.
-
Вычислительные ресурсы — vCPU 4, RAM 16.
-
Количество node — 3.
-
-
Нажмите Продолжить.
-
На шаге Каталоги выберите каталоги «pg_1» и «pg_2».
-
Нажмите Продолжить.
-
В блоке Сетевые настройки заполните поля:
-
Зона доступности — выберите зону доступности, для которой создан SNAT-шлюз.
-
Подсеть — выберите подсеть с DNS-сервером.
-
Подключить публичный хост — активируйте опцию.
-
Пользователь — задайте имя пользователя для доступа к Trino.
-
Пароль — создайте пароль в сервисе Secret Manager, нажав Создать секрет, и выберите его.
-
-
Нажмите Создать.
Создайте структуру данных
Выполните команды:
CREATE SCHEMA IF NOT EXISTS pg_1.lab_migration;CREATE TABLE IF NOT EXISTS pg_1.lab_migration.users (id_user INT, email VARCHAR(255));INSERT INTO pg_1.lab_migration.users values (1, 'one@example.com'), (2, 'two@example.com'), (3, 'three@example.com');
Миграция
Рассмотрим два способа миграции таблиц c помощью:
С помощью DBeaver
-
Чтобы подготовить данные, в DBeaver выполните SQL-запросы:
CREATE SCHEMA IF NOT EXISTS pg_1.lab_migration;CREATE TABLE IF NOT EXISTS pg_1.lab_migration.users (id_user INT, email VARCHAR(255));INSERT INTO pg_1.lab_migration.users values (1, 'xxx@example.com'), (2, 'yyy@example.com'), (3, 'zzz@example.com');Можете создать дополнительные таблицы с данными в схеме «lab_migration» в базе данных «pg_1».
-
Выполните:
CREATE TABLE pg_2.lab_migration.users ASSELECT * FROM pg_1.lab_migration.users; -
Автоматизируйте миграцию таблиц.
-
Чтобы сгенерировать SQL-запросы для каждой таблицы, выполните:
SELECT'CREATE TABLE pg_2.lab_migration.' || table_name ||' AS SELECT * FROM pg_1.lab_migration.' || table_name || ';'FROM pg_1.information_schema.tablesWHERE table_schema = 'lab_migration'; -
Скопируйте полученные строки.
-
Выполните их по очереди.
-
С помощью скрипта
-
В командной строке выполните:
python3 -m venv venvsource venv/bin/activatepip install trino -
Скопируйте скрипт, введите необходимые значения и сохраните файл с названием trino_pg_migration.py:
Скрипт Python -
Запустите скрипт:
python trino_pg_migration.py
Проверка результата
В DBeaver выполните следующие запросы:
-
Чтобы проверить, что таблицы созданы:
SHOW TABLES IN pg_2.lab_migration; -
Чтобы проверить количество строк в каждой таблице:
SELECT COUNT(*) FROM pg_2.lab_migration.users;SELECT COUNT(*) FROM pg_2.lab_migration.products;SELECT COUNT(*) FROM pg_2.lab_migration.orders; -
Чтобы проверить содержимое (первые 10 строк):
SELECT * FROM pg_2.lab_migration.users LIMIT 10;SELECT * FROM pg_2.lab_migration.products LIMIT 10;SELECT * FROM pg_2.lab_migration.orders LIMIT 10;
- Постановка задачи
- Перед началом работы
- Подготовка инфраструктуры
- Миграция
- Проверка результата