у нас есть модуль для импорта товаров в magento. Модуль был написан программистом Magento. Он использует Magento API и написан на PHP. Он читает CSV-подобный файл (фактический используемый разделитель - «#»), переводит строку в продукт, а затем записывает продукт обратно в Magento. Пока все хорошо.
Я продублировал и несколько раз менял модуль. Последним изменением было обновление продуктов, а не импорт целых продуктов. Модуль работал около 950 из этих продуктов, затем выдал исключение:
magento:/srv/www/vhosts/www.mysite.com/shell # php import_colors.php ../var/import/colors.csv.out.csv
PHP Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '12804-176-1-563' for key 'PRIMARY'' in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
#3 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
#4 /srv/www/vhosts/www.mysite.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(1537): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...', Array)
#5 /srv/www/vhosts/www.mysite.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Eav in /srv/www/vhosts/www.mysite.com/lib/Zend/Db/Statement/Pdo.php on line 234
Я ничего не думал об этом. Клиент с радостью менял последние 50 или около того продуктов самостоятельно, и сообщение об ошибке было забыто.
Однако сегодня заказчик назвал, что его индекс атрибута продукта не будет создан, индекс в бэк-офисе остался на оранжевом «Обработка». Итак, я исследовал и обнаружил, что индекс можно построить с помощью shell / indexer.php. Итак, я попробовал и, о чудо, точно такое же сообщение об ошибке, которое я почти забыл.
Я сбросил базу данных и попытался выяснить, какая таблица действительно содержит данные, перечисленные в сообщении об ошибке (12804-176-1-563), но мне не повезло. Похоже, что эти 4 даты нигде нельзя найти в этом порядке.
Теперь есть два варианта действий. Можно было бы выяснить, какая таблица содержит проблему, чтобы ее можно было исправить с помощью самого Magento. Другой способ может состоять в том, чтобы очистить соответствующую таблицу индексов и перестроить индекс с нуля. Я не уверен, что копаться в схеме базы данных, я не совсем понимаю, это хорошая идея.
Может кто-нибудь помочь мне определить проблему?