ACSD-60989: a modificação de uma coluna com uma chave estrangeira por meio de um esquema declarativo causa erros em MariaDB

O patch ACSD-60989 corrige o problema em que a modificação de uma coluna com uma chave estrangeira por meio de esquema declarativo em MariaDB causa erros de atualização de configuração devido a restrições de chave estrangeira. Este patch está disponível quando o Quality Patches Tool (QPT) 1.1.78 está instalado. A ID do patch é ACSD-60989. Observe que esse problema foi corrigido no Adobe Commerce 2.4.8.

Produtos e versões afetados

O patch foi criado para a versão do Adobe Commerce:

  • Adobe Commerce (todos os métodos de implantação) 2.4.6-p6

Compatível com as versões do Adobe Commerce:

  • Adobe Commerce (todos os métodos de implantação) >=2.4.4 <2.4.8
NOTE
O patch pode se tornar aplicável a outras versões com as novas versões do Quality Patches Tool. Para verificar se o patch é compatível com a sua versão do Adobe Commerce, atualize o pacote magento/quality-patches para a versão mais recente e verifique a compatibilidade na Quality Patches Tool: página Procurar patches. Use a ID do patch como palavra-chave de pesquisa para localizar o patch.

Problema

Falha ao modificar uma coluna com uma chave estrangeira por meio do esquema declarativo em MariaDB devido a erros de restrição de chave estrangeira durante a atualização da instalação.

Etapas a serem reproduzidas:

  1. Vá para Admin > Stores > Settings > Order Status.

  2. Clique em Create New Status, digite test em todos os campos e salve.

  3. Clique em Assign Status to State.

    1. Defina Order Status como teste.
    2. Defina Order State como Recebido.
    3. Salve a atribuição.
  4. Crie, registre e habilite um módulo personalizado e adicione o seguinte a 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. Execute o seguinte comando:

    code language-none
    bin/magento setup:upgrade
    

Resultados esperados:

A atualização da instalação é concluída com êxito sem erros de restrição de chave estrangeira.

Resultados reais:

Ocorre um erro durante a atualização da instalação:

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'

Aplicar o patch

Para aplicar patches individuais, use os links a seguir, dependendo do método de implantação:

Leitura relacionada

Para saber mais sobre Quality Patches Tool, consulte:

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