2011-05-10 89 views
2

我們有一個模塊將產品導入到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本身來解決問題。另一種方法可能是清除相應的索引表並從頭開始重建索引。我不確定在數據庫模式中挖掘我不完全明白是一個好主意。

任何人都可以幫助我找出問題嗎?

+0

你能幫我嗎?如何記錄完整查詢?通過MySQL,或者有使用Magento本身的方法嗎? – 0xCAFEBABE 2011-05-10 13:27:18

回答

2

請檢查這不是一件簡單的事情,例如數據庫中的某些重複產品已被「中止」以保留沒有SKU值的產品條目。

+0

這是一種解決方案。我不知道爲什麼有重複的條目。我已經手動刪除條目,並且索引再次正確地構建。 – 0xCAFEBABE 2011-05-30 07:23:25

2

我自己寫的PHP導入腳本有同樣的問題。我仍然不確定如何解決這個問題,但是我發現在12804-176-1-563中,12804指的是DB中產品的ID。所以,如果你刪除/重新創建或禁用該產品,那麼索引器將正常工作將正常工作。 如果您有任何提示爲什麼有一些完整性約束違規,請分享! :-)

+1

對我來說,編輯並保存產品就足夠了 – 2013-10-01 14:14:36