我們有一個模塊將產品導入到magento中。該模塊是由Magento程序員編寫的。它使用Magento API並使用PHP編寫。它讀取一個類似CSV的文件(實際使用的分隔符是'#'),將行翻譯爲產品,然後將產品寫回Magento。到現在爲止還挺好。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本身來解決問題。另一種方法可能是清除相應的索引表並從頭開始重建索引。我不確定在數據庫模式中挖掘我不完全明白是一個好主意。
任何人都可以幫助我找出問題嗎?
你能幫我嗎?如何記錄完整查詢?通過MySQL,或者有使用Magento本身的方法嗎? – 0xCAFEBABE 2011-05-10 13:27:18