среда, 8 апреля 2020 г.

Ошибка при загрузке dt файловой базы в PostgreSQL

Получение информации о структуре хранения базы данных в терминах 1С:Предприятие и СУБД
Размещение данных 1С:Предприятия 8. Таблицы и поля
1CDBStorageStructureInfo v2.1
Платформа 8.3 → Битый dt-шник



Ошибка при загрузке dt файловой базы в PostgreSQL:

Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Нарушено условие уникальности данных.

Сообщение при загрузке в 1с:

Попытка вставки неуникального значения в уникальный индекс:
ERROR:  could not create unique index "_reference643_bydatakey_rr"
DETAIL:  Key (_idrref, _nodetref, _noderref)=(\x8e02283452a573354532b8d7a08ab2ae, \x00000009, \x9d04902b34af533b11e2c757fa890d98) is duplicated.


В логе PostgreSQL смотрим:

< 2020-04-09 10:32:08.514 MSK >ERROR:  could not create unique index "_reference643_bydatakey_rr"
< 2020-04-09 10:32:08.514 MSK >DETAIL:  Key (_idrref, _nodetref, _noderref)=(\x8e02283452a573354532b8d7a08ab2ae, \x00000009, \x9d04902b34af533b11e2c757fa890d98) is duplicated.
< 2020-04-09 10:32:08.514 MSK >STATEMENT:  create unique index _reference643_bydatakey_rr on _referencechngr643(_IDRRef, _NodeTRef, _NodeRRef); alter table _referencechngr643 cluster on _reference643_bydatakey_rr;
< 2020-04-09 10:32:08.515 MSK >WARNING:  there is no transaction in progress


Мы наши таблицу с которой связана ошибка - _referencechngr643

Простейший вариант очистить таблицу, если повезет (немного данных) может помочь

postgres=# \c demo
demo=# SELECT * FROM _referencechngr643;

Картинка (обрезок).


demo=# TRUNCATE _referencechngr643;

Если не повезло, нужно смотреть обработкой  1CDBStorageStructureInfo v2.1
что за объект




Справочник.ВидыОпераций.Изменения

После очистки Справочник.ВидыОпераций.Изменения

можно попробовать выгрузить, загрузить Справочник.ВидыОпераций через xml

В данном случае это не поможет, потому что справочник Справочник.ВидыОпераций.Изменения не выгружается через xml.

2. Будем решать вопрос средствами PostgreSQL
Итак наша ошибка:

Попытка вставки неуникального значения в уникальный индекс:
ERROR:  could not create unique index "_reference643_bydatakey_rr"
DETAIL:  Key (_idrref, _nodetref, _noderref)=(\x8e02283452a573354532b8d7a08ab2ae, \x00000009, \x9d04902b34af533b11e2c757fa890d98) is duplicated.

Создадим запрос для  таблицы _referencechngr643
выводящий повторяющиеся записи:

Как найти повторяющиеся записи в PostgreSQL

select _nodetref, _noderref, _idrref, count(*)
from _referencechngr643
group by _nodetref, _noderref, _idrref
HAVING count(*) > 1;
 
 
 \x00000009 | \x9d04902b34af533b11e2c757fa890d98 | \x90a27b112207742446ec93ee478ec1d1 |     2
 \x00000009 | \x9d04902b34af533b11e2c757fa890d98 | \x8e02283452a573354532b8d7a08ab2ae |     2
 \x00000009 | \x9d04902b34af533b11e2c757fa890d98 | \xa69d3ff7873e291d48644a507a39f06b |     2
 \x00000009 | \x9d04902b34af533b11e2c757fa890d98 | \x9a8b53541966765449d0031809109897 |     2
 \x00000009 | \x9d04902b34af533b11e2c757fa890d98 | \xbd6f371cc86afff24983dc095af41b21 |     2
 
Пример обращения по конкретному условию
where _noderref=E'\\x9d04902b34af533b11e2c757fa890d98' 
 
Introduction to inserting PostgreSQL records with Unicode characters 

demo=# select _nodetref, _noderref, _idrref
from _referencechngr643 where _noderref=E'\\x9d04902b34af533b11e2c757fa890d98';
 

 
 
Однако запросом удалить дубликаты записей мы не сможем, из за отсутствия первичного
ключа. (Будут удалены все записи)
 
Удалим повторяющиеся записи выгрузив таблицу в файл, отредактировав, а потом
загрузить обратно.
 
Выгрузим таблицу в файл 
 
demo=# COPY _referencechngr643 TO '/tmp/file.csv'  CSV; 
 
COPY 565 
 
Сделаем копию. 
demo=# COPY _referencechngr643 TO '/tmp/file-cop.csv'  CSV;
 
COPY 565
 
В файле мы должны найти и удалить все задвоенные записи, например
\x90a27b112207742446ec93ee478ec1d1
 
  
Сохранить файл.

Очистить таблицу
demo=# TRUNCATE _referencechngr643;
 
Загрузим таблицу из файла demo=# COPY _referencechngr643 FROM '/tmp/file.csv'  CSV; 
 
COPY 560 

demo=# REINDEX TABLE _referencechngr643;
REINDEX
 
Проверка:demo=# COPY _referencechngr643 TO '/tmp/file-ver.csv'  CSV;
 
COPY 565 
 

Поскольку при загрузке dt реиндексация не прошла до конца: 
 
postgres@u1804$ reindexdb demo

1 комментарий:

  1. 1С И Linux: Ошибка При Загрузке Dt Файловой Базы В Postgresql >>>>> Download Now

    >>>>> Download Full

    1С И Linux: Ошибка При Загрузке Dt Файловой Базы В Postgresql >>>>> Download LINK

    >>>>> Download Now

    1С И Linux: Ошибка При Загрузке Dt Файловой Базы В Postgresql >>>>> Download Full

    >>>>> Download LINK wf

    ОтветитьУдалить