ACSD-60989:宣言型スキーマを使用して外部キーを持つ列を変更すると、MariaDBにエラーが発生する

ACSD-60989 パッチでは、MariaDBで宣言スキーマを介して外部キーを使用して列を変更すると、外部キーの制約が原因でセットアップのアップグレードエラーが発生する問題を修正します。 このパッチは、Quality Patches Tool (QPT) 1.1.78がインストールされている場合に利用できます。 パッチ IDはACSD-60989です。 この問題は、Adobe Commerce 2.4.8で修正されています。

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

パッチはAdobe Commerceのバージョン​用に作成されました

  • Adobe Commerce(すべてのデプロイメント方法) 2.4.6-p6

Adobe Commerceのバージョンとの互換性:

  • Adobe Commerce(すべてのデプロイメント方法) >=2.4.4 <2.4.8
NOTE
このパッチは、新しいQuality Patches Tool リリースを含む他のバージョンに適用される可能性があります。 パッチがAdobe Commerceのバージョンと互換性があるかどうかを確認するには、magento/quality-patches パッケージを最新バージョンに更新し、Quality Patches Tool:パッチの検索ページ ​で互換性を確認します。 パッチ IDを検索キーワードとして使用して、パッチを検索します。

イシュー

セットアップのアップグレード中に外部キー制約エラーが発生したため、MariaDBの宣言スキーマを使用して外部キーを含む列を変更できません。

複製する手順:

  1. Admin > Stores > Settings > Order Status​に移動します。

  2. Create New Status​をクリックし、すべてのフィールドに​ test ​と入力して保存します。

  3. Assign Status to State​をクリックします。

    1. Order Status​を​ テスト ​に設定します。
    2. Order State​を​ 受信済み ​に設定します。
    3. 割り当てを保存します。
  4. カスタムモジュールを作成、登録、有効化し、以下をdb_schema.xmlに追加します。

    code language-none
    <?xml version="1.0"?>
    <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/etc/db_schema.xsd">
        <table name="sales_order_status">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
        <table name="sales_order_status_state">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
        <table name="sales_order_status_label">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
    </schema>
    
  5. 次のコマンドを実行します。

    code language-none
    bin/magento setup:upgrade
    

期待される結果:

設定アップグレードは、外部キー制約エラーなしで正常に完了します。

実際の結果:

セットアップのアップグレード中にエラーが発生します。

Unable to apply patch Vendor\Sales\Setup\Patch\Schema\DataPatch for module Vendor_Sales.
Original exception message:
SQLSTATE[HY000]: General error: 1833 Cannot change column 'status': used in a foreign key constraint
'SALES_ORDER_STATUS_LABEL_STATUS_SALES_ORDER_STATUS_STATUS'
of table 'sales_order_status_label'

パッチを適用する

個別のパッチを適用するには、デプロイメント方法に応じて次のリンクを使用します。

関連トピックス

Quality Patches Toolについて詳しくは、次を参照してください。

recommendation-more-help
commerce-operations-help-tools