2

Magento 1.7は製品フラットデータのインデックスを再作成できません...データベースのインデックスを再作成しようとすると、次のエラーが発生します。

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 (`d014505f`.<result 2 when explaining filename '#sql-1f6c_39a11d'>, CONSTRAINT `FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_entity` (`e)' in /www/htdocs/w00f5624/lib/Zend/Db/Statement/Pdo.php:228

Stack trace:#0 /www/htdocs/w00f5624/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement-    >execute(Array)
#1 /www/htdocs/w00f5624/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /www/htdocs/w00f5624/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /www/htdocs/w00f5624/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /www/htdocs/w00f5624/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('ALTER TABLE `ca...', Array)
#5 /www/htdocs/w00f5624/lib/Varien/Db/Adapter/Pdo/Mysql.php(419): Zend_Db_Adapter_Pdo_Abstract->query('ALTER TABLE `ca...', Array)
#6 /www/htdocs/w00f5624/lib/Varien/Db/Adapter/Pdo/Mysql.php(340): Varien_Db_Adapter_Pdo_Mysql->query('ALTER TABLE `ca...')
#7 /www/htdocs/w00f5624/lib/Varien/Db/Adapter/Pdo/Mysql.php(2569): Varien_Db_Adapter_Pdo_Mysql->raw_query('ALTER TABLE `ca...')
#8 /www/htdocs/w00f5624/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(816): Varien_Db_Adapter_Pdo_Mysql->addForeignKey('FK_CAT_PRD_FLAT...', 'catalog_product...', 'entity_id', 'catalog_product...', 'entity_id', 'CASCADE', 'CASCADE')
#9 /www/htdocs/w00f5624/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(1390): Mage_Catalog_Model_Resource_Product_Flat_Indexer->prepareFlatTable(1)
#10 /www/htdocs/w00f5624/app/code/core/Mage/Catalog/Model/Product/Flat/Indexer.php(296): Mage_Catalog_Model_Resource_Product_Flat_Indexer->reindexAll()
#11 /www/htdocs/w00f5624/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php(336): Mage_Catalog_Model_Product_Flat_Indexer->reindexAll()
#12 /www/htdocs/w00f5624/app/code/core/Mage/Index/Model/Process.php(209): Mage_Catalog_Model_Product_Indexer_Flat->reindexAll()
#13 /www/htdocs/w00f5624/app/code/core/Mage/Index/Model/Process.php(255): Mage_Index_Model_Process->reindexAll()
#14 /www/htdocs/w00f5624/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#15 /www/htdocs/w00f5624/shell/indexer.php(198): Mage_Shell_Compiler->run()
#16 {main}

4

5 に答える 5

7

一部の情報を削除したときに、Magentoがテーブルをクリーンアップしなかったようです。したがって、次のSQLクエリを使用して、手動でクリーンアップする必要があります。

TRUNCATE TABLE ´catalog_product_flat_1´;

次に、インデックスの再作成プロセスを実行します。

そのテーブルを空にしても大丈夫です。MagentoはEAVテーブルを使用して再度再ビルド(インデックスの再作成)するためです。

于 2013-03-23T11:57:13.417 に答える
1

Magento プログラムでインデックスを再作成する

ID      Code

1       catalog_product_attribute

2       catalog_product_price

3       catalog_url

4       catalog_product_flat

5       catalog_category_flat

6       catalog_category_product

7       catalogsearch_stock

8       cataloginventory_stock

9       tag_summary
for ($i = 1; $i <= 9; $i++) {
    $process = Mage::getModel('index/process')->load($i);
    $process->reindexAll();
}
于 2013-07-04T08:20:41.780 に答える
1

今日、同じ問題が発生しました。これを修正するには、実行して破損した製品を見つけます

SELECT cpf.entity_id FROM catalog_product_flat_1 AS cpf LEFT JOIN catalog_product_entity AS cpe ON cpf.entity_id = cpe.entity_id WHERE ISNULL(cpe.entity_id);

次のような結果が得られます

+-----------+
| entity_id |
+-----------+
|     14029 |
|     14111 |
+-----------+
2 rows in set (0.01 sec)

これで、実行してこれらの製品を削除できます

DELETE FROM catalog_product_flat_1 where entity_id IN (14029,14111);

注: 「catalog_product_flat_1」テーブルを変更する必要がある場合があります。エラー メッセージには、破損した製品が含まれているテーブルが示されます。

于 2016-10-12T16:59:53.933 に答える
0

ほとんど同じエラーが発生しました:(そのようなもの) SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-4ebf-e07' (errno: 121)

次に、同じ外部キー「FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID」を持っていることを調査しました

次のようにテーブルを切り捨てても:

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE TABLE catalog_product_flat_1;
SET FOREIGN_KEY_CHECKS=1;

私の問題を解決しませんでした。

DB 内のすべてのテーブルをドロップしても、catalog_product_entity とカップル eav_ テーブルの 3 つしかドロップできませんでした (覚えていません)。

唯一の方法が私を助けました:

  1. 現在の DB のバックアップを作成します (インデックスを再作成するメッセージが表示された場合でも、変更前にこれを実行してください)
  2. DB を削除 (すべてのテーブルではなく、直接 DB)
  3. DB の作成 (まだ権限があることを確認してください)
  4. バックアップから DB を復元し、管理パネルを確認します。
于 2014-08-24T20:35:22.433 に答える