Миграция БД Core из MSSQL в PostgreSQL
Автор Maksim Efanov, Last modified by Maksim Efanov на 12 августа 2024 02:08 PM

Предварительные требования:

  • Созданная пустая БД на сервере PostgreSQL
  • Linux машина с установленными docker и docker-compose

Контейнер для миграции (требуется доступ в интернет для загрузки образа): https://download.indeed-company.ru/s/Ven5SRetKDa8Q4a

Если на машине с docker нет доступа в интернет, загрузите локальный образ (он также есть в дистрибутиве, в папке Misc): https://download.indeed-company.ru/s/VUdlmpY653KQOdC. Образ нужно будет подгрузить следующей командой:

docker load -i pgloader.tar

Процесс миграции

1. Переместите содержимое скачанного архива в любую удобную папку на Linux машине с docker.

2. Откройте файл config\ms.load и укажите данные для подключения к базам во 2 (MSSQL) и 3 (Postgre) строках:

from mssql://{username}:{password}@{host}:{port}/{db_name}
into pgsql://{username}:{password}@{host}:{port}/{db_name}

Пример:

Порт для MSSQL можно найти в конфигурации SQL сервера:

3. Если был загружен локальный дистрибутив, выполните команду:

docker load -i pgloader.tar

4. Запустите утилиту с помощью следующей команды (утилиту можно запускать с любой машины с доступом до MSSQL и PostgreSQL):

docker-compose up

После успешного завершения миграции, будет подобный вывод:

5. Запустите скрипт восстановления таблицы миграций migrations.sql.

  • Если база данных Postgres находится на другой машине, предварительно скопируйте на эту машину папку sql;
  • Если имя пользователя отличается от имени по умолчанию (от postgres), используйте файл migrations_no_owner.sql.

psql -U postgres -d db_name < sql/migrations.sql

Или, если PostgreSQL сервер установлен на Windows, можно выполнить скрипт с помощью утилиты C:\Program Files\PostgreSQL\{версия pgsql}\scripts\runpsql.bat.

  • Обязательно при входе указать целевую базу (в примере Migrate5)
  • Абсолютные пути пишутся через /

\i sql/migrations.sql

Пример использования runpsql.bat и выполнения утилиты:

6. При миграции данных из Microsoft SQL в PostgreSQL могут возникнуть ошибки из-за разного формата в типах данных. После успешной миграции данных, обязательно запустите скрипт, который устранит такие ошибки:

psql -U postgres -d db_name < sql/datafix.sql

Или через C:\Program Files\PostgreSQL\{версия pgsql}\scripts\runpsql.bat:

\i sql/datafix.sql

При успешном выполнении:

Данный скрипт может завершиться с ошибкой, если использовать кодировку, отличную от UTF16. В powershell сменить кодировку можно так:

$PSDefaultParameterValues['*:Encoding'] = 'utf16'



(12 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)
Добавить новый комментарий
 
 
Полное имя:
Email:
Комментарии:
Портал технической поддержки компании Индид