|
Предварительные требования:
- Созданная пустая БД на сервере PostgreSQL
- Linux машина с установленными docker и docker-compose
Скрипт установки схемы БД, нужно выбрать и скачать необходимую Вам версию, скрипты размещены во вложении к данной статье. (Схема БД 8.2.7 совместима с версиями 8.2.8 и 8.2.10)
Контейнер для миграции (требуется доступ в интернет для загрузки образа): 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>
|