2010-12-07 2 views
4

это пр 1.4.1.1 Magento, повышен с пр 1.3.2.4
При попытке редактировать продукт появляется сообщение об ошибке:MySQL ошибка при редактировании продукта в Magento

exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6028-0-2' for key 'PRIMARY'' 

И если я пытаюсь переиндексации цены У меня такое же сообщение в exception.log
Я думаю, что проблема в таблице catalog_product_website, потому что, если я удалю строку, я могу запустить индексирование цен, но когда я пытаюсь отредактировать продукт, чтобы назначить ему сайт, Я получаю то же сообщение.
Странная вещь что catalog_product_website таблица имеет только две колонки, и за исключением переговоров о первичной таблице на 3 клавиши (правильно?)
Здесь весь трассировки стека:

2010-12-07T12:12:41+00:00 ERR (3): 
exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6028-0-2' for key 'PRIMARY'' in /var/www/ortoweb1314/lib/Zend/Db/Statement/Pdo.php:234 
Stack trace: 
#0 /var/www/ortoweb1314/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#1 /var/www/ortoweb1314/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array) 
#2 /var/www/ortoweb1314/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array) 
#3 /var/www/ortoweb1314/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array) 
#4 /var/www/ortoweb1314/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Price/Default.php(260): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ca...') 
#5 /var/www/ortoweb1314/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Price/Default.php(133): Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Indexer_Price_Default->_prepareFinalPriceData('6028') 
#6 /var/www/ortoweb1314/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Price.php(192): Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Indexer_Price_Default->reindexEntity('6028') 
#7 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Indexer/Abstract.php(144): Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Indexer_Price->catalogProductSave(Object(Mage_Index_Model_Event)) 
#8 /var/www/ortoweb1314/app/code/core/Mage/Catalog/Model/Product/Indexer/Price.php(255): Mage_Index_Model_Indexer_Abstract->callEventHandler(Object(Mage_Index_Model_Event)) 
#9 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Indexer/Abstract.php(85): Mage_Catalog_Model_Product_Indexer_Price->_processEvent(Object(Mage_Index_Model_Event)) 
#10 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Process.php(185): Mage_Index_Model_Indexer_Abstract->processEvent(Object(Mage_Index_Model_Event)) 
#11 [internal function]: Mage_Index_Model_Process->processEvent(Object(Mage_Index_Model_Event)) 
#12 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Indexer.php(252): call_user_func_array(Array, Array) 
#13 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Indexer.php(154): Mage_Index_Model_Indexer->_runAll('processEvent', Array) 
#14 /var/www/ortoweb1314/app/code/core/Mage/Index/Model/Indexer.php(219): Mage_Index_Model_Indexer->indexEvent(Object(Mage_Index_Model_Event)) 
#15 /var/www/ortoweb1314/app/code/core/Mage/Catalog/Model/Product.php(525): Mage_Index_Model_Indexer->processEntityAction(Object(Mage_Catalog_Model_Product), 'catalog_product', 'save') 
#16 [internal function]: Mage_Catalog_Model_Product->afterCommitCallback() 
#17 /var/www/ortoweb1314/app/code/core/Mage/Core/Model/Resource/Abstract.php(104): call_user_func(Array) 
#18 /var/www/ortoweb1314/app/code/core/Mage/Core/Model/Abstract.php(310): Mage_Core_Model_Resource_Abstract->commit() 
#19 /var/www/ortoweb1314/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php(663): Mage_Core_Model_Abstract->save() 
#20 /var/www/ortoweb1314/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Catalog_ProductController->saveAction() 
#21 /var/www/ortoweb1314/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('save') 
#22 /var/www/ortoweb1314/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) 
#23 /var/www/ortoweb1314/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch() 
#24 /var/www/ortoweb1314/app/Mage.php(596): Mage_Core_Model_App->run(Array) 
#25 /var/www/ortoweb1314/index.php(80): Mage::run('', 'store') 
#26 {main} 

Я надеюсь, что кто-то может мне помочь Я действительно из идеи прямо сейчас :(

редактировать: Я повысить сообщение регистрации особых так что я могу видеть весь запрос, и вот оно:

#2 /var/www/ortoweb1314/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(
    "INSERT INTO `catalog_product_index_price_final_tmp` SELECT `e`.`entity_id`, `cg`.`customer_group_id`, `cw`.`website_id`, ta_tax_class_id.value AS `tax_class_id`, ta_price.value AS `orig_price`, IF(IF(ta_special_from_date.value IS NULL, 1, IF(DATE(ta_special_from_date.value) <= cwd.date, 1, 0)) > 0 AND IF(ta_special_to_date.value IS NULL, 1, IF(DATE(ta_special_to_date.value) >= cwd.date, 1, 0)) > 0 AND ta_special_price.value < ta_price.value, ta_special_price.value, ta_price.value) AS `price`, IF(IF(ta_special_from_date.value IS NULL, 1, IF(DATE(ta_special_from_date.value) <= cwd.date, 1, 0)) > 0 AND IF(ta_special_to_date.value IS NULL, 1, IF(DATE(ta_special_to_date.value) >= cwd.date, 1, 0)) > 0 AND ta_special_price.value < ta_price.value, ta_special_price.value, ta_price.value) AS `min_price`, IF(IF(ta_special_from_date.value IS NULL, 1, IF(DATE(ta_special_from_date.value) <= cwd.date, 1, 0)) > 0 AND IF(ta_special_to_date.value IS NULL, 1, IF(DATE(ta_special_to_date.value) >= cwd.date, 1, 0)) > 0 AND ta_special_price.value < ta_price.value, ta_special_price.value, ta_price.value) AS `max_price`, tp.min_price AS `tier_price`, tp.min_price AS `base_tier` FROM `catalog_product_entity` AS `e` 
INNER JOIN `customer_group` AS `cg` 
INNER JOIN `core_website` AS `cw` 
INNER JOIN `catalog_product_index_website` AS `cwd` ON cw.website_id = cwd.website_id 
INNER JOIN `core_store_group` AS `csg` ON csg.website_id = cw.website_id AND cw.default_group_id = csg.group_id 
INNER JOIN `core_store` AS `cs` ON csg.default_store_id = cs.store_id AND cs.store_id != 0 
INNER JOIN `catalog_product_website` AS `pw` ON pw.product_id = e.entity_id AND pw.website_id = cw.website_id 
LEFT JOIN `catalog_product_index_tier_price` AS `tp` ON tp.entity_id = e.entity_id AND tp.website_id = cw.website_id AND tp.customer_group_id = cg.customer_group_id 
INNER JOIN `catalog_product_entity_int` AS `tad_status` ON tad_status.entity_id = e.entity_id AND tad_status.attribute_id = 80 AND tad_status.store_id = 0 
LEFT JOIN `catalog_product_entity_int` AS `tas_status` ON tas_status.entity_id = e.entity_id AND tas_status.attribute_id = 80 AND tas_status.store_id = cs.store_id 
LEFT JOIN `catalog_product_entity_int` AS `ta_tax_class_id` ON ta_tax_class_id.entity_id = e.entity_id AND ta_tax_class_id.attribute_id = 81 AND ta_tax_class_id.store_id = 0 
LEFT JOIN `catalog_product_entity_decimal` AS `ta_price` ON ta_price.entity_id = e.entity_id AND ta_price.attribute_id = 60 AND ta_price.store_id = 0 
LEFT JOIN `catalog_product_entity_decimal` AS `ta_special_price` ON ta_special_price.entity_id = e.entity_id AND ta_special_price.attribute_id = 61 AND ta_special_price.store_id = 0 
LEFT JOIN `catalog_product_entity_datetime` AS `ta_special_from_date` ON ta_special_from_date.entity_id = e.entity_id AND ta_special_from_date.attribute_id = 62 AND ta_special_from_date.store_id = 0 
LEFT JOIN `catalog_product_entity_datetime` AS `ta_special_to_date` ON ta_special_to_date.entity_id = e.entity_id AND ta_special_to_date.attribute_id = 63 AND ta_special_to_date.store_id = 0 
INNER JOIN `cataloginventory_stock_status` AS `ciss` ON ciss.product_id = e.entity_id AND ciss.website_id = cw.website_id WHERE (e.type_id='simple') AND (IF(tas_status.value_id > 0, tas_status.value, tad_status.value)=1) AND (e.entity_id IN('6028')) AND (ciss.stock_status=1)", 
    array(
    ), 
) 

весь файл expetion.log находится здесь: http://www.dowhiletrue.net/exception.txt.tar.gz

+1

parloir как вы выполнить обновление? Вы сделали это из командной строки? Я только что обновил 1.3 до 1.4 пару недель назад, и это был кошмар. Трюк, который я узнал, заключается в том, что вам нужно сделать резервную копию своей базы данных, создать совершенно новую базу данных, загрузить данные, которые вы скопировали, а затем сделать новую установку (я сначала попробовал несколько других способов и всегда сталкивался с конфликтами внешнего ключа, пока не сделал это способ, описанный выше). – Chris 2010-12-07 17:22:51

+0

ну, на самом деле я удалил все файлы v1.3 и заменил их на v1.4, а затем я запустил установку, подключившись к db, я использовал для 1.3 – OSdave 2010-12-07 19:23:13

+1

Это может быть вашей проблемой. Я пробовал НЕ удалять базу данных, и у меня всегда были ключевые ошибки. Что-то происходит, когда вы удаляете базу данных, которая избавляется от ключевых конфликтов. Если вы еще этого не пробовали, я бы попытался использовать описанный здесь подход: http://www.webshopapps.com/blog/2010/02/upgrading-magento-to-version-1-4-keeping-it-simple/Возьмите мой совет, не пропустите ни одного шага :) – Chris 2010-12-08 02:08:57

ответ

1

Кажется, проблема не в catalog_product_website таблице. Проблема в таблице индексов цен, возможно, есть старые записи из предыдущей версии, которые следует удалить. Я бы рекомендовал вам переиндексировать все индексы. Полный процесс reindex сначала очищает индексную таблицу, а затем выполняет таблицу с данными. Это должно помочь.

Если полный реиндекс не помогает, возможно, что в вашем пакете есть модули, которые наблюдают событие prepare_catalog_product_price_index_table, которое изменяет выбор повторного индекса в виде дополнительного соединения, которое умножает количество строк с одним и тем же первичным ключом. Это также может вызвать такую ​​ошибку.

Приветствие, Ивана

0

Как глупо, как это звучит, так как вы получаете дублируетесь - auto_incremented - ключи, вы пробовали приращение своей ценности auto_increment для этой таблицы? Предполагая, что это конфликтное состояние БД каким-то образом, это исправит проблему. Если вы прыгаете на PK на 100, а вы все еще получите PK-нарушения, то код, вероятно, попытается вставить одну и ту же запись дважды.

Это будет соответствующий запрос:

ALTER TABLE catalog_product_website AUTO_INCREMENT=1234 
Смежные вопросы