【问题标题】:Magento 1.7 cannot reindex product flat dataMagento 1.7 无法重新索引产品平面数据
【发布时间】:2013-03-22 15:50:35
【问题描述】:

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}

【问题讨论】:

    标签: magento-1.7 reindex


    【解决方案1】:

    您删除了一些信息后,Magento 似乎没有清理表;所以你需要手动清理它,使用这个 SQL 查询:

    TRUNCATE TABLE ´catalog_product_flat_1´;
    

    然后,运行重新索引过程。

    清空那张桌子没关系;因为 Magento 使用 EAV 表来重新构建(重新索引)它。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我今天遇到了同样的问题。要解决此问题,只需通过运行找到损坏的产品

      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”表 - 错误消息会告诉您哪个表包含损坏的产品。

      【讨论】:

        【解决方案4】:

        我遇到了几乎相同的错误: (类似的东西)SQLSTATE [HY000]:一般错误:1005无法创建表'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 中的所有表,我也不能只删除其中的 3 个: catalog_product_entity 和几个 eav_ 表(我不记得了)

        只有一种方法对我有帮助:

        1. 备份当前数据库(在任何更改之前执行此操作,即使您有要重新索引的消息)
        2. 删除 DB(不是所有表,而是直接删除 DB)
        3. 创建数据库(检查您是否仍有权限)
        4. 从备份中恢复数据库并检查管理面板。

        【讨论】:

          【解决方案5】:
          SET FOREIGN_KEY_CHECKS=0;
          TRUNCATE TABLE catalog_product_flat_1;
          TRUNCATE TABLE catalog_product_flat_2;
          SET FOREIGN_KEY_CHECKS=1;
          

          为我工作。

          之后我可以从 CLI 重新索引。

          【讨论】:

            猜你喜欢
            • 2013-08-11
            • 1970-01-01
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多