Błąd przy indeksowaniu płaskiego katalogu (product flat data)

Błąd przy indeksowaniu płaskiego katalogu (product flat data) 4.80/5 / 5

Jeśli nie jesteś w stanie przeindeksować płaskiego katalogu produktów, to może ten wpis Cię zainteresuje.

Czasem zdarza się, że z bliżej nieokreślonego powodu nie da się przeindeksować danych i w adminie Magento nie ma konkretnego błędu. Warto wtedy użyć indexera z poziomu wiersza poleceń.

Wchodzimy w katalog shell i odpalamy konsolowy odpowiednik zakładki w adminie:

php indexer.php reindexall

Jest to polecenie, które przeindeksuje nam wszystkie indeksy, a przy okazji wyświetli cały komunikat o ewentualnym błędzie.

W moim przypadku problem tkwił w płaskim indeksie produktów:

Product Flat Data 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 (`104_guepardobuty`., CONSTRAINT `FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_ent)'

Spowodowane to było tym, że wcześniej skasowałem pewne produkty, ale nie zostały one usunięte z indeksu.

Aby sprawdzić o co chodzi odpalamy na przykład PHPMyAdmina i zapuszczamy takie zapytanie:

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 );

Zwrócimy nam id wszystkich wpisów, które powodują problem. Trzeba je usunąć z tabeli catalog_product_flat_1.

Po usunięci błędnych produktów zapuszczamy index ponownie:

php indexer.php --reindex catalog_product_flat