Magento 2 - 重新索引生成SQLSTATE [23000]:完整性约束违规

时间:2016-09-08 07:41:08

标签: magento indexing magento2

  • 我通过CSV导入功能导入了产品。
  • 导入没有任何问题。
  • 所有导入的产品都列在管理面板中。
  • 问题在于仅对index_product_attribute建立索引。其余索引重新索引确定。

当我尝试重新索引索引(在控制台中)以使它们在前端存储中可见时,我得到了SQLSTATE [23000]:完整性约束违规错误:

SQLSTATE [23000]:完整性约束违规:1062密钥'PRIMARY'重复条目'8942-138-1-265',查询为:INSERT INTO mag_catalog_product_index_eav_idxentity_idattribute_idstore_idvalue)VALUES(?,?,?,?),(?,?,?,?),(?,?,?,?),( ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?).....

请告诉我该怎么办?谢谢!

3 个答案:

答案 0 :(得分:1)

我在我的案例中发现了问题。我的属性属于multiselect类型。这意味着Magento会将字符串拆分为单独的ID,并为每个选项在索引表中创建唯一键。

但是......如果您的数据库中存在重复值(由于导入失败或其他原因),则会抛出此错误。

就我而言,我的数据库中的value227,15,227,其值为227 2次,引发了上述错误。将值更改为227,15可以解决此问题。

答案 1 :(得分:1)

问题描述:问题仅限于multiselect可过滤属性。假设我们从multiselect选项中为单个值保存单个值。 SKU然后在catalog_product_entity_varchar表中用逗号分隔存储的值(因为按照multselect行为,Magento用逗号分隔存储数据)。

解决方案 : 创建cron文件,通过该文件从catalog_product_entity_varchar表中获取该属性的所有值,然后使用PHP使用(,)逗号进行爆炸,然后创建唯一数组并使用primary_key再次更新相同的值。

为我工作。

答案 2 :(得分:0)

Magento软件升级后,我们需要使用标准方法通过Shell重新索引数据:

php bin/magento indexer:reindex

如果重新索引任务产生以下错误,则需要通过此script来修复产品实体表中的数据。