Данная ошибка часто возникает при миграции баз с PostgreSQL на MSSQL, а именно при развертывании базы из выгрузки формата .dt
Рис. 1 Ошибка при загрузке базы из .dt
Чтобы исправить данную ошибку, нужно вернуться к базе в PostgreSQL и с помощью нескольких команд исправить ошибку.
В моем случае СУБД PostgreSQL установлена по пути C:\Program Files\PostgreSQL\15.14\. Нужно будет работать с папкой bin
Запуск CMD
Для начала запускаем CMD от имени Администратора и выполняем команду cd ваш путь до папки /bin
В моем случае команда выглядит так:
cd C:\Program Files\PostgreSQL\15.14\bin
Запуск консоли PostgreSQL
Теперь нужно запустить консоль PostgreSQL из командной строки psql -U postgres -d имя_базы. Команда запросит пароль от пользователя СУБД – postgres, его нужно будет ввести.
В моем случае команда выглядит так
psql -U postgres -d ka2024
Поиск в таблице params
Так как ошибка возникает в таблице params, то и искать нужно в ней. И найти повторения следует искать в конкретных полях.
Выполним команду select (filename, partno) from params;
select (filename, partno) from params;
После выполнения команды просматриваем список и еще дубли записей.
Рис. 2 Дубли записей
Удаление дублей
Теперь нужно просмотреть эти записи, убедится, что они дубли, и удалить лишние. Для этого сначала выполним команду select * from params where filename=’ibparams.inf’;
select * from params where filename='ibparams.inf';
Рис. 3 Проверка записей
Видим, что записи идентичны, отличие только во времени создания. Следовательно, можно удалить одну из них
Выполним команду delete from params where filename=’ibparams.inf’ and partno=0 and datasize=рамзер and creation=’дата создания’;
delete from params where filename='ibparams.inf' and partno=0 and datasize=рамзер and creation='дата создания';
В моем случае команда выглядит так
delete from params where filename='ibparams.inf' and partno=0 and datasize=292 and creation='2026-01-18 21:15:40';
Рис. 4 Команда удаления
Проверка удаления дублей
Убедимся, что запись удалилась, введем команду.
select * from params where filename='ibparams.inf';
Рис. 5 Запись без дубля
Теперь нужно повторить аналогично для другого дублирующегося параметра, из п. 2
После того как будут удалены все дубли, нужно заново выгрузить базу в .dt с PostgreSQL и заново развернуть уже в СУБД MSSQL, развертывание должно пройти без ошибок.