Open Sky-Cat opened 7 years ago
Пропуск ошибочных записей запускается автоматически в процессе импорта.
А тут из-за отсутствующего ограничения уникальности ошибка не была перехвачена вовремя.
Дубликат обнаружился при восстановлении удалённых индексов. А обработать эту ситуацию гораздо сложнее (хотя, на этот счет у меня есть мысли, но это будет больше походить на костыли...).
Думаю, надо чуть поправить функцию удаления индексов, чтоб ограничения не удалялись.
PS Вы можете попробовать импортировать таблицу, отключив удаление индексов (--keep-indexes), но сейчас их уже нет и восстановить их штатно у вас не выйдет. Для этого тоже нужно разработать решение...
Спасибо за ответ. Правильно ли я понимаю, что коммит https://github.com/Yuego/django-fias/commit/83f3c0b73f5c633e997cb393af95db445161da56 решает проблему и без использования параметра --keep-indexes?
Кстати, при наличии фильтра скорость что с индексами что без них примерно одинакова - около полутора суток.
Правильно ли я понимаю, что коммит 83f3c0b решает проблему и без использования параметра --keep-indexes?
Да, эту конкретную проблему должно решить.
Кстати, при наличии фильтра скорость что с индексами что без них примерно одинакова - около полутора суток.
Это уже зависит от железа. На моём тест показал огромную разницу в скорости. Особенно это заметно на таблице house. Чем больше размер уже импортированных данных - тем медленнее идет импорт с индексами.
К сожалению, в последней версии (1.1.8) перестали вообще применяться фильтры.
Пример фильтра:
if item.regioncode == '76':
return item
Программа просто перебирает все значения в таблицах, но ни одна запись не вносится в базу.
Это очень странно, т. к. этот функционал не менялся последнее время. У меня пока нет возможности проверить, в чем дело.
Такое поведение наблюдается при импорте из DBF? Или с XML тоже?
Да, что XML, что DBF. Просто все мимо пролетает. База была с нуля создана, заполнена таблицами и затем была попытка сделать полный импорт.
Как временное решение, можно воспользоваться приведением типов:
if str(item.regioncode) == '76':
return item
Там наверняка проблема именно в несовпадении типов.
Попробовал все варианты:
Теперь вносятся ВСЕ данные в базу.
Дополнения и уточнения:
При импорте данных из таблицы room программа вылетает с ошибкой
django.db.utils.IntegrityError: (1062, "Duplicate entry '47aab24a73084c6c8756787b7172076a' for key 'fias_room_roomguid_f8e479d0_uniq'")
Подскажите, пожалуйста, можно ли как-то пропускать дубли и продолжать импорт данных?
Запускаю полный импорт так:
python manage.py fias --src auto --format xml
Полный лог ошибок: