Миграция БД Core из MSSQL в PostgreSQL
Автор Maksim Efanov, Last modified by Maksim Efanov на 19 апреля 2024 10:00 AM

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

  • Установленный .NET Core Runtime 6
  • Созданная пустая БД на сервере PostgreSQL
  • Установленный docker и docker-compose

Контейнер для миграции: https://download.indeed-company.ru/s/Ven5SRetKDa8Q4a

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

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

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

Пример:

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

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

docker-compose up

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

3. Запустите скрипт восстановления таблицы миграций 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 и выполнения утилиты:

4. При миграции данных из 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'



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

Комментарии (0)
Добавить новый комментарий
 
 
Полное имя:
Email:
Комментарии: