Миграция БД Core из MSSQL в PostgreSQL
Автор Maksim Efanov, Last modified by Kirill Osipov на 18 апреля 2025 03:46 PM

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

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

Скрипт установки схемы БД, нужно выбрать и скачать необходимую Вам версию, скрипты размещены во вложении к данной статье.

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

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

docker load -i pgloaderLocalInstall.tar

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

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

2. Запустите скрипт установки схемы schema_v.v.v_clean.sql.
Если имя пользователя отличается от стандартного (postgres), в файле скрипта со схемой следует указать имя этого пользователя в строке /set DatabaseOwner 'user_name'.

psql -h <host_address> -U postgres -d <db_name> -f schema_v.v.v_clean.sql

Результат выполнения:


Если PostgreSQL сервер установлен на Windows, можно выполнить скрипт с помощью утилиты C:\Program Files\PostgreSQL\{версия pgsql}\scripts\runpsql.bat.
• Обязательно при входе указать целевую базу и УЗ
• Абсолютные пути пишутся через /

Пример:

\i schema_v.v.v_clean.sql

Результат выполнения:


3.
Откройте файл 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 pgloaderLocalInstall.tar

А также внесите изменения в docker-compose файл:
- закомментируйте строку №7;
- раскомментируйте строку №9;

Внимание! Данный шаг нужно выполнять, только если используется локальный контейнер.



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

docker-compose up

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

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

psql -h <host_address> -U postgres -d <db_name> -f sql/datafix.sql

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

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

\i sql/datafix.sql


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


Данный скрипт может завершиться с ошибкой, если использовать кодировку, отличную от UTF16. В powershell сменить кодировку можно так:
$PSDefaultParameterValues['*:Encoding'] = 'utf16'



Вложения 
 
 schema_8.2.4_clean.sql (31.67 кБ)
 schema_8.2.6_clean.sql (39.58 кБ)
 schema_8.2.7_clean.sql (39.58 кБ)
 schema_9.2.0_clean.sql (38.92 кБ)
 pgloader.zip (2.46 кБ)
(19 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)
Портал технической поддержки компании Индид