Ошибка 1с базы данных PostgreSQL: 23505: ERROR: duplicate key value violates unique constraint "params_pkey" DETAIL: Key (filename, partno)=(ibparams.inf, 0) already exists. CONTEXT: COPY params, line 18
В предыдущей статье мы убрали ошибки, которые мешали созданию резервной копии базы.
При попытке загрузки файла dt из конфигуратора выдает данную ошибку
1C активно использует так называемые уникальные индексы, которые не при каких обстоятельствах не позволяют дублирования ключевых значений.
В какой-то момент требовалось восстановить копию рабочей базы, созданную с помощью pg_dump. База была удалена, создана новая и в неё был загружен бэкап. Далее все продолжали работать в ней. В последствии понадобилась выгрузка в dt файл и загрузка файла dt в чистую базу, после чего появилась данная ошибка.
Что нужно сделать, чтобы такой ошибки не было? После восстановления базы из резервной копии через pg_dump обязательно нужно произвести реиндексацию базы
5.3. Проведём реиндексацию базы, хоть время уже и прошло больше месяца после восстановления
REINDEX (VERBOSE) DATABASE ut11db;После чего выгрузим снова в файл dt и попробуем загрузить его в чистую базу
Данный вариант не помог и база при импорте вываливается в ошибку.
5.4. Пробуем второй вариант
Разворачиваем базу 1с в файловом варианте. В файловом варианте уникальность значений в индексе не проверяется. Создаем чистую базу и загружаем файл dt. Затем запускаем через конфигуратор «Тестирование и исправление» с выбранными галочками:
- Реиндексация таблиц информационной базы;
- Проверка логической целостности информационной базы;
- Проверка ссылочной целостности информационной базы.
Долго не будем задерживаться на этом пункте идём дальше и ищем более быстрый способ.
5.5. Пробуем запустить тестирование и исправление в серверном режиме
После чего выгрузим снова в файл dt и попробуем загрузить его в чистую базу
Данный вариант не помог и база при импорте вываливается в туже ошибку
6. Исправляем данную ошибку вручную
Зайдем в консоль psql
psql -U postgres -d ut11dbСмотрим на ошибку
23505: ERROR: duplicate key value violates unique constraint "params_pkey" DETAIL: Key (filename, partno)=(ibparams.inf, 0) already exists. CONTEXT: COPY params, line 18
В тексте ошибки есть информация в какой таблице у нас проблема, это params, а также какие ключевые поля у нас дублируются — (filename, partno). Значения, которые совпадают это (ibparams.inf, 0).
Выберем записи по полям из ошибки — (filename, partno).
6.1. Выполним запрос:
select (filename, partno) from params;
Видно, что в этой таблице есть дубль не по одному значению, а по двум:
(ibparams.inf, 0)
(log.inf, 0)
6.2. Посмотрим детально на эти записи. Отберем по полю filename
select * from params where filename='ibparams.inf';
Да, в одной таблице две записи c одинаковыми ключами. Пробуем удалить вторую запись, она по времени была позже.
6.3. Выполним запрос:
delete from params where filename='ibparams.inf' and partno=0 and datasize=205 and creation='2024-10-21 16:10:40';В запросе делаем отбор по полям filename, partno, datasize, creation.
Запись удалена
6.4. проверяем
select * from params where filename='ibparams.inf';осталась одна запись
6.5. Теперь смотрим второй дубль (log.inf, 0)
select * from params where filename='log.inf';
Также, в одной таблице две записи c одинаковыми ключами. Пробуем удалить вторую запись, она по времени была позже.
6.6. Выполним запрос:
delete from params where filename='log.inf' and partno=0 and datasize=123 and creation='2024-10-21 16:10:40';В запросе делаем отбор по полям filename, partno, datasize, creation.
Запись удалена
6.7. проверяем
select * from params where filename='log.inf';осталась одна запись
После чего выгрузим в файл dt и попробуем загрузить его в чистую базу
Выгрузка и загрузка прошла успешно
- Комментарии
Загрузка комментариев...