Миграция БД Core из MSSQL в PostgreSQL
Автор Maksim Efanov, Last modified by Kirill Osipov на 06 июня 2025 02:50 PM

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

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

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

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

Если на машине с docker нет доступа в интернет, загрузите локальный образ (он также есть в дистрибутиве, в папке Misc\Indeed AM Pgloader\pgloader): 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 файл:
- закомментируйте строку: image: ghcr.io/dimitri/pgloader@sha256:3727cb8b65f3deecdfd126311e34bc0cece10ab66558fd08759ffce38bfea9c0;
- раскомментируйте строку: image: nexus.indeed-id.hq/pgloader:3.6.10;

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



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'

Настройка подключения к новой БД

После успешной миграции базы данных, в конфигурационном файле сервера C:\inetpub\wwwroot\am\core\Web.config, необходимо указать данные для подключения к базе данных Postgres, а также изменить rootDBContextId.
Подробнее в документации: Indeed Core Server | Документация Indeed Access Manager

Пример:

<dbContextSettings rootDbContextId="postgreSql">
    <postgresqlDbContexts>
      <postgresqlDbContext connectionString="server=192.168.1.2;port=5432;user id=postgres;password=!QAZ2wsx;database=indeedamcore" id="postgreSql" />
    </postgresqlDbContexts>
  </dbContextSettings>


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

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