1С. Could not create unique index при загрузке базы из .dt файла

Пока свежо воспоминание в памяти хочу коротко написать о том, что делать когда при загрузке базы из dt файла в PostgreSQL выдается ошибка:

ERROR: could not create unique index "files_pkey"
DETAIL: Table contains duplicated values."

Итак, если Вы видите это сообщение значит все чуть хуже чем предполагалось.

Что Вам не поможет:

  • Загрузка dt файла в файл-серверном варианте и выполнение полного тестирования и исправления;
  • Загрузка dt файла в файл-серверном и проверка 1CD файла утилитой chkdbf.exe

Другими словами если у Вас нет выгрузки данных средствами PostgreSQL дела плохи. Цитата из партнерского форума:

Единственным способом восстановления данной информационной базы является отправка выгрузки информационной базы на v8@1c.ru.

Резонным возникает вопрос что же произошло? Скорее всего в какой-то момент времени в системную таблицу files «попало» две записи с одинаковым первичным ключом, а именно filename. Как это могло произойти, пока лично для меня, остается загадкой, тк на таблицу есть вот такое ограничение:

CONSTRAINT files_pkey PRIMARY KEY(filename)

После того как стало понятно, что произошло и что точно не поможет разберем как можно исправить ситуацию. Схема последовательности действий следующая:

1.Восстановить базу из копии (сделанной pg_dump) посредством pg_restore
2.В консоли или в pgAdmin выполнить запрос:
select filename, max(creation), max(modified), max(attributes), max(datasize)
from files
group by filename
having count(*) > 1
order by filename

3.Из повторяющихся записей оставьте только запись с максимальным значением поля modified, а остальные записи удалить оператором:

delete from files
where filename = "имя файла" and modified = "устаревшая дата"

например:

delete from files
where filename = "071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl" and modified = "2009-11-17 15:33:48"

4.Повторно выгрузить базу средствами 1С

На данный момент нам не известны никакие другие способы решения проблемы (кроме отправки базы 1с).

Если Вы не используете штатные средства СУБД для архивации баз данных, мы настоятельно рекомендуем начать это делать уже сегодня :), тк иногда (как в подобном случае) это единственный шанс восстановить Вашу базу.

ps
Описанный выше способ является прямым нарушением лицензионного соглашения 1С, но именно такая рекомендация озвучивается на партнерском форуме.

1С. Could not create unique index при загрузке базы из .dt файла: 5 комментариев

  1. можно добраться до этой таблицы и в файловом режиме… готов помочь 89185892980

  2. На данный момент проблема уже давно решена и забыта, но если опишите способ буду признателен.

  3. Спасибо! Недавно наша 1С8.2 (deb6 64бит +postgreSQL 40Gb) глюкнула, т.е. при попытке выгрузить/загрузить/обновить конфигуратор вываливался с ошибкой на системную dll, пользователи работали нормально, только при закрытии 1С выдавало ту же ошибку. Поиски по коду ошибки, симптомам и т.д. на около1сных сайтах ничего не дала. При попытке загрузки dt в копийную базу выдала ошибку похожую на Ваш заголовок и все стало понятно — в таблице files было 2 дубляжа, причем один судя по дате вызвал предыдущий глюк — утром просто исчезли все пользователи системы, тогда восстановили из ночного бэкапа постгри и продолжили работу. После удаления дублированных записей работа восстановилась. Кстати, в рабочей базе не было ограничения files_pkey (видимо после предыдущего восстановления из дампа) добавил руками. В качестве конструктива замечу, что в примерах запросов вместо двойных кавычек надо одинарные использовать 🙂 С уважением

  4. Вообще проблема в дублированных записях в таблицах, проблема лечится… мне пришлось написать утилиту. Удалил записи и все стало хорошо)

  5. Всем привет, статья очень помогла, жаль не сразу нагуглил ее, если развернут dt и файловую базу открыть утилитой тулсиди, то в таблице FILES, можно стразу увидеть одинаковый ID, у меня было 23 записи из ин 2 одинаковые, в тулсиди можно изменить одну и все грузиться отлично.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *