Magento: Rebuilding Index después de que la importación / actualización de productos autoescrita arroja una excepción

tenemos un módulo para importar productos a magento. El módulo fue escrito por un programador de Magento. Utiliza la API de Magento y está escrito en PHP. Lee un archivo similar a CSV (el delimitador real utilizado es '#'), traduce una línea en un producto y luego escribe el producto en Magento. Hasta ahora tan bueno.

He duplicado y cambiado el módulo varias veces. El último cambio fue actualizar los productos, no importar productos completos. El módulo funcionó para aproximadamente 950 de estos productos, luego lanzó una excepción:

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

No pensé en eso. El cliente estaba felizmente cambiando los últimos 50 productos por su cuenta y se olvidó del mensaje de error.

Sin embargo, hoy el cliente dijo que su índice de atributos de producto no se construiría, el índice en el backoffice permaneció en naranja "Procesamiento". Así que investigué y descubrí que el índice se puede construir usando shell / indexer.php. Así que lo intenté y, he aquí, exactamente el mismo mensaje de error que casi me olvido.

Dejé la base de datos e intenté averiguar qué tabla contenía realmente los datos enumerados en el mensaje de error (12804-176-1-563), pero no tuve suerte. Parece que estas 4 fechas no se encuentran en ningún lugar en este orden.

Ahora, hay dos opciones sobre cómo proceder. Una sería averiguar qué tabla contiene realmente el problema, de modo que pueda solucionarse utilizando Magento. La otra forma podría ser borrar la tabla de índice correspondiente y reconstruir el índice desde cero. No estoy seguro de que indagar en un esquema de base de datos que no entiendo por completo sea una buena idea.

¿Alguien puede ayudarme a identificar el problema?

preguntado el 10 de mayo de 11 a las 13:05

¿Me puede ayudar con eso? ¿Cómo registro consultas completas? A través de MySQL, ¿o hay alguna forma de usar Magento? -

2 Respuestas

Verifique que esto no sea algo simple, como algunos productos duplicados en la base de datos que han sido 'cancelados' para dejar una entrada de producto sin valor de SKU.

contestado el 11 de mayo de 11 a las 05:05

Esta es una especie de solución. No tengo idea de por qué hubo entradas duplicadas. He eliminado manualmente las entradas y el índice se vuelve a compilar correctamente. - 0xCAFEBABE

Tengo el mismo problema con un script de importación PHP escrito por mí mismo. Todavía no estoy seguro de cómo solucionar esto, pero encontré que en 12804-176-1-563, 12804 se refiere a la identificación del producto en la base de datos. Entonces, si elimina / recrea o deshabilita ese producto, entonces el indexador funcionará bien, funcionará bien. Si tiene algún consejo sobre por qué hay algunas violaciones de restricciones de integridad, ¡compártalo! :-)

Respondido el 18 de junio de 11 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.