magento 1.7: Impossible de réindexer product_flat_data

10

J'obtiens l'erreur suivante en essayant de réindexer ma base de données magento.

Erreur inconnue du processus d'indexation des données à plat du produit: exception 'PDOException' avec le message 'SQLSTATE [23000]: contrainte d'intégrité> violation: 1452 Impossible d'ajouter ou de mettre à jour une ligne enfant: une contrainte de clé étrangère échoue> ( d014505f.., CONSTRAINT> FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_IDFOREIGN KEY ( entity_id)> RÉFÉRENCES catalog_product_entity(`` e) '' dans> /www/htdocs/w00f5624/lib/Zend/Db/Statement/Pdo.php:228

Comment puis-je réparer ça??

David Vendryes
la source

Réponses:

28

comme indiqué correctement par Sander, les produits supprimés encore présents dans la table plate du produit provoquent cette erreur. De toute façon, tronquer la table entière ne sera pas nécessaire. Vous pouvez trouver ces produits par cette requête SQL:

SELECT pf1.entity_id
FROM catalog_product_flat_1 pf1
LEFT JOIN catalog_product_entity p ON pf1.entity_id = p.entity_id
WHERE ISNULL( p.entity_id ) 

Vous devrez ensuite supprimer ces éléments, ce qui peut être fait en utilisant cette requête SQL:

DELETE pf1.*
FROM catalog_product_flat_1 pf1
LEFT JOIN catalog_product_entity p ON pf1.entity_id = p.entity_id
WHERE ISNULL( p.entity_id ) 

Extrait d'ici (allemand): http://www.avs-webentwicklung.de/nc/blog/artikel/magento-fehler-beim-index-aufbau-sofortmassnahmen.html

Demandez-moi si vous avez besoin de plus de conseils.

simonthesorcerer
la source
Belle requête, les utilisez-vous pour une tâche de nettoyage périodique ou uniquement lorsque cela est nécessaire?
Sander Mangel
Merci :) Le générique du premier appartient à l'auteur du lien. Je ne les utilise que lorsqu'une telle erreur se produit, ce qui est principalement le cas lorsque les données sont supprimées directement de la base de données, c'est-à-dire avec MAGMI. Et ils sont encore rares. Je ne devais pas encore l'utiliser périodiquement, bien que je pense que ce serait possible. Lorsque vous gérez les produits manuellement, Magento s'occupe des tables d'index lors de l'enregistrement / de la suppression (lorsque les index sont correctement configurés).
simonthesorcerer
Quelques explications peuvent être trouvées ici: catgento.com/…
Dmytro Zavalkin
@simonthesorcerer Merci, cela m'aide à résoudre cette erreur :)
Bijal Bhavsar
4

j'ai déjà eu ce problème. Je l'ai résolu en tronquant les tables product_flat_data et en les réindexant ensuite. Elle est causée par des produits non existants encore présents dans le tableau.

Sander Mangel
la source
Bonjour Sander, j'ai essayé la solution mais rien ne s'est passé pour moi j'ai aussi tronqué le catalog_product_flat_1 mais l'indexeur pour les attributs du produit ne fonctionne pas.
Sarvagya