При переносе БД с MSSQL на Postgres, при помощи Утилита для переноса данных ЛЭРС УЧЁТ с SQL Server в БД Postgres столкнулся с тем, что в комментариях, названиях, адресах и пр. пропали пробелы, сам текст при этом нормальный.
Ошибок утилита никаких не выдает. Как заставить утилиту не глотать пробелы?
Спасибо за обращение! Мы поставили в план работ исправление данной ошибки. Как только она будет исправлена, обязательно сообщим в каком обновлении будет доступно исправление.
Попробуйте скачать новую версию утилиты от 21 ноября 2023. На ней проблему воспроизвести не удалось. Обновлённую утилиту выложили на сервер.
Да, проблема с пробелами устранена, но в этой версии почему то не скопировалась таблица MeasurePoint. Объекты есть, точек учета нет.
И еще хотел уточнить, утилита должна переносить архивные данные по водо- и электроснабжению? Что в прошлой версии, что в этой эти данные игнорируются, в config.json исключений на них нет.
Провели еще раз перенос на тестовом стенде. Точки учета и архивные данные по ним, в том числе по водоснабжению и электроэнергии, перенеслись.
Обращаю ваше внимание, что перенос необходимо делать строго по инструкции, в том числе перенос исключительно на созданную после установки пустую БД на Postgres.
Так и делается. Выключаю ЛЭРС, удаляю БД, включаю ЛЭРС, что бы создалась дефалтовая база, выключаю ЛЭРС, запускаю утилиту. А таблиц которые копируются стало на одну меньше, по сравнению с прошлой версией. В логе что показывает утилита таблицы точек и архивных нет.
Может как то влияют настройки в config.json?
Вот мой:
{
"IgnoreTables": [
"__EFMigrationsHistory",
"File",
"NodeFile",
"dtproperties",
"PreparedReport",
"ReportGeneratingTaskNode",
"sysdiagrams",
"GprsControllerSession",
"SystemLog",
"PollSessionLog",
"MeasurePointDeviceErrors",
"ContingencyLog",
"DryContactState",
"EquipmentPollStatistics",
"PollSession",
"AccountLog"
],
"LimitTables": [
]
}
Можно ли как то более детальный лог работы утилиты получить?
Более детального протокола в утилите нет.
Сказать сложно влияют ли указанные настройки. У таблиц существуют зависимости между сосбой и исключение одной таблицы может повлечь проблемы с переносом зависимой от нее.
Мы переносили данные с настройками по умолчанию. Попробуйте произвести перенос с настройками утилиты по умолчанию.
Попробовал с настройками по умолчанию, все равно нет точек учета и архивных данных. В профайлере видно, что он запрашивает информацию о таблице:
exec sp_executesql N'EXEC sp_fkeys @pktable_name, @pktable_owner',N'@pktable_name nvarchar(12),@pktable_owner nvarchar(3)',@pktable_name=N'MeasurePoint',@pktable_owner=N'dbo'
Таблицы по воде и ээ так же запрашиваются. Но дальше в список таблиц которые необходимо скопировать они не попадают.
Если сравнить зависимости, то у MeasurePoint в MSSQL есть зависимость к таблице SystemType, но в Postgres ее нет, утилита же ее пытается копировать. Все остальные зависимости копируются нормально.
Утилиту похоже не смущает, что она отправляет данные в никуда.
Пришлите, пожалуйста, резервную копию вашей БД.
Проблема здесь не в SystemType, а в циклической зависимости MeasurePoint → PersonalAccount → NodeSection → MeasurePoint, которая была добавлена в версии 3.52. Из-за этого топологическая сортировка не обрабатывает таблицу MeasurePoint и все таблицы с данными, которые от неё зависят.
Добавили эту зависимость в список игнорируемых и выложили новую версию утилиты. Загрузите её и проверьте импорт.
Попутно мы нашли ещё одну несостыковку в базе Postgres, которая помешает импортировать единицы измерения, что в дальнейшем может привести к проблемам с привязкой ячеек. Чтобы её исправить, перед импортом выполните в базе postgres следующие инструкции
DROP INDEX public."IDX_Unit_Title";
CREATE UNIQUE INDEX "IDX_Unit_Title" ON public."Unit" ("Unit_MeasuredParameterID", "Unit_Title");
Утилита теперь увидела на приблизительно 60 таблиц больше. Копирование архивов это на долго. Думаю тему можно закрыть, если “всплывут” еще какие то проблемы, создам новую тему. Спасибо за помощь.