2011-11-13 9 views
0

J'ai mis à niveau mon site de la version 1.4.0.1 à la version 1.6. J'ai supprimé tous les produits du site Web et j'ai "réindexé tout" qui s'est terminé avec succès. Lorsque je tente de créer un nouveau produit et que faire réindexer à nouveau que je reçois cette erreur:Impossible de réindexer de nouveaux produits après la mise à niveau vers la version 1.6

Product Attributes index process unknown error: 
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`.../catalog_product_index_eav`, CONSTRAINT `FK_CAT_PRD_IDX_EAV_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CAS)' in .../lib/Zend/Db/Statement/Pdo.php:228 

J'ai essayé de TRUNCATE TABLE catalog_product_index_eav mais cela n'a pas aidé.

Comment puis-je résoudre ce problème?

+1

Si vous faites et mise à jour majeure et la suppression de tous les produits, il pourrait être plus simple de prendre un nouveau départ et d'importer les clients. – clockworkgeek

+0

J'ai beaucoup d'attributs de costumes et de contenu CMS qui prendront beaucoup de temps à copier. Malheureusement, il ne semble pas que Magento offre une exportation et une importation de cette information. – Shani1351

Répondre

0

Si vous faites cela sur un site en ligne, vous devrez probablement faire le processus de réindex à partir de la ligne de commande avec Apache désactivé.

http://overlycaffeinated.com/2011/02/when-reindexing-in-magento-fails-use-the-command-line/

Cela explique comment faire.

+0

Je fais le processus de réindex à partir de la ligne de commande sur un environnement de développement avec un seul produit de test (que j'ai créé après avoir supprimé tous les produits). L'indexation fonctionne bien quand il n'y a pas de produits – Shani1351

0

J'ai utilisé les requêtes suivantes pour nettoyer les tables de catalogue;

delete from `catalog_category_product` WHERE product_id not in(select entity_id from catalog_product_entity) 

delete from `catalog_category_product` WHERE category_id not in(select entity_id from catalog_category_entity) 

delete from ` catalog_product_website` WHERE product_id not in(select entity_id from catalog_product_entity) 

delete from ` catalog_product_entity_media_gallery` WHERE entity_id not in(select entity_id from catalog_product_entity) 

delete from ` catalog_product_index_eav_idx` WHERE entity_id not in(select entity_id from catalog_product_entity) 

delete from ` catalog_product_index_eav` WHERE entity_id not in(select entity_id from catalog_product_entity) 

delete from ` catalog_product_link` WHERE product_id not in(select entity_id from catalog_product_entity) 

delete from ` catalog_product_relation` WHERE parent_id not in(select entity_id from catalog_product_entity) 

Après cela, j'ai pu réindexer à partir du panneau d'administration.

+0

cela supprime-t-il les données en direct de la boutique ??? –

+0

Ce que disent les requêtes sql, c'est «supprimer du texte ou supprimer des numéros là où le produit n'existe plus dans la table produit principale», alors oui, il supprime des données mais supprime des données qui provoqueraient des problèmes de contraintes lors de l'indexation. C'est comme si les bras et les jambes flottaient sans aucun corps. Permet de se débarrasser de ces choses. – JaseC

15

Ceci supprime uniquement les données indésirables qui ne devraient pas s'y trouver.

J'ai développé ci-dessus car il peut sauver quelques heures de creuser:

delete FROM `catalog_product_entity_datetime` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_decimal` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_gallery` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_group_price` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_int` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_media_gallery` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_text` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_tier_price` where entity_id not in (select entity_id from catalog_product_entity); 
delete FROM `catalog_product_entity_varchar` where entity_id not in (select entity_id from catalog_product_entity); 
#originals with formatting fixed: 
delete from `catalog_category_product` WHERE product_id not in(select entity_id from catalog_product_entity); 
delete from `catalog_category_product` WHERE category_id not in(select entity_id from catalog_category_entity); 
delete from `catalog_product_website` WHERE product_id not in(select entity_id from catalog_product_entity); 
delete from `catalog_product_index_eav_idx` WHERE entity_id not in(select entity_id from catalog_product_entity); 
delete from `catalog_product_index_eav` WHERE entity_id not in(select entity_id from catalog_product_entity); 
delete from `catalog_product_link` WHERE product_id not in(select entity_id from catalog_product_entity); 
delete from `catalog_product_relation` WHERE parent_id not in(select entity_id from catalog_product_entity); 
+1

J'ai trouvé cela aide également à l'erreur de contrainte FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID 'SUPPRIMER PF1. * DE catalog_product_flat_1 PF1 LEFT JOIN catalog_product_entity p = ON pf1.entity_id p.entity_id OU ISNULL (p.entity_id)' – JaseC

+0

C'est ce que je recherchais pour longtemps. Merci mec! – Ross

Questions connexes