[PaaS のみ]{class="badge informative" title="Adobe Commerce on Cloud プロジェクト(Adobeが管理する PaaS インフラストラクチャ)およびオンプレミスプロジェクトにのみ適用されます。"}

同じエンティティのデータベース内の複数の行

この記事では、データベース内の同じエンティティ ID に対して複数の行が存在する問題の解決策を提供します。

影響を受ける製品とバージョン:

  • Adobe Commerce(すべてのバージョン)

問題

データベース内に同じエンティティ ID の行が複数あります。

例えば、エンティティ ID が重複するレコードのリストを受け取った後に、次のクエリを実行します。

SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;

カテゴリ/商品/買い物かご価格ルール/カタログ価格ルール/CMSページの $entityID = ID

Entity
$entityTable
列($C)
カテゴリ/製品
catalog_category_entity/catalog_product_entity
entity_id
買い物かご価格ルール/カタログ価格ルール
salesrule/catalogrule
rule_id
CMSページ
cms_page
page_id

原因:

これは想定されている動作です。 コンテンツのステージング機能によって、複数の行が作成されます。

  • 終了日を指定せずに開始日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 2 つ存在します。 1 つの行はエンティティの元の状態(created_in=1 の行)を示し、1 つの行は スケジュールされた更新の終了 を示します。

  • 開始日と終了日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 3 つ存在することになります。 1 つの行はエンティティの元の状態(created_in=1 の行)、1 つの行は 予定更新の開始、1 つの行は 予定更新の終了 を示します。

例えば、次のクエリの場合:

SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;

multiple_rows_in_database.png

  • created_inupdated_in の値は、次のパターンに従う必要があります。現在の行の created_in 値は、前の行の updated_in 値と等しくなります。 また、最初の行には created_in = 1 を、最後の行には updated_in = 2147483647 を含める必要があります。 (行が 1 つしかない場合は、created_in=1updated_in=2147483647 が表示されます)。

2 つ目の DB エントリ(および次のエントリすべて)が同じエンティティの DB に表示されるのはなぜですか?

  • 影響を受けるエンティティの 2 つ目の DB レコード(場合によっては次のレコード)は、Magento_Staging モジュールを使用してコンテンツステージングの更新がスケジュールされていることを意味します。これにより、各テーブルのエンティティに対して追加のレコードが作成されます。

問題は、レコードの created_in 列または updated_in 列の値が同じ場合にのみ発生します。

解決策

これは想定されている動作で、行間に不一致がある場合にのみ問題が発生します。

関連資料

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a