Update scheitert mit SQL Error

Hallo zusammen,
beim Versuch unseren Test Shop (Version 5.5.10) auf die neue Shopware 5 Version zu updaten kommt es zu folgender Fehlermeldung:

Could not apply migration (Migrations_Migration1607). Error: SQLSTATE[HY000]: General error: 1093 You can't specify target table 's_core_config_values' for update in FROM clause 

Please try to fix this error and restart the update.
Response
{"valid":false,"errorMsg":"Could not apply migration (Migrations_Migration1607). Error: SQLSTATE[HY000]: General error: 1093 You can't specify target table 's_core_config_values' for update in FROM clause "}

 

Der Shop ist eine Kopie unseres Produktiv Shops in einem eigenen Unterverzeichniss auf der selben Domain. Die URLs wurden in der s_core_shops Tabelle angepasst.

Hat jemand eine Idee woran das Update scheitert?

Hallo,

ich habe das gleiche Problem - konnte das bereits jemand lösen?

Wir wollen unseren Shop von 5.5.10 auf 5.6.9 updaten.

Gleicher Fehler kommt aber auch beim Update von 5.5.10 auf 5.6.5 (vorherige Versionen sind wegen PHP 7.4 nicht möglich)

Freue mich über eine Lösung!

Wir haben es im Test-Shop umgehen können, indem wir Zeile 83 und 84 in update-assets/migrations/1607-add-voucher-checkout-configs.php bei unserem manuellen Update auskommentiert haben.

Ok, damit könnte man das update durchbekommen, aber ist nicht im Sinne des Erfinders, oder?
Ich verstehe leider nicht, wie es überhaupt zu diesem Fehler kommen kann… Hat jemand inzwischen eine Lösung?

Das gleiche Problem habe ich auch und weiß leider nicht wie ich das lösen kann.

Error

Received the following error message:
Could not apply migration (Migrations_Migration1607). Error: SQLSTATE[HY000]: General error: 1093 You can’t specify target table ‚s_core_config_values‘ for update in FROM clause

„valid“:false,„errorMsg“:"Could not apply migration (Migrations_Migration1607). Error: SQLSTATE[HY000]: General error: 1093 You can’t specify target table ‚s_core_config_values‘ for update in FROM clause

Ich stehe vor dem gleichen Problem, dass die update-assets Migration Scripts offensichtlich etliche SQL Fehler enthalten. Zum Glueck versuche ich das Update auf einem Testsystem erst einmal durchzuspielen. Dabei faellt mir das nun auf.

Z. B.
Script 1434 hat das ’ in „shop’s“ nicht escaped UND der komplette String wurde nicht mit ’ beendet.
Script 1442 hat im zweiten SQL Teil einen Wert zu wenig in „VALUES“. Entweder den Wert fuer label oder description. Gehe von description aus.
Script 1459 die Zeile „FROM s_core_config_values“ ist hier zuviel, zumal hier eh kein SELECT, sondern ein UPDATE gemacht wird. Ausserdem ist eine „)“ zuviel nach @elementId.

1 „Gefällt mir“

Ich habe mir das mal in meiner Entwicklungsumgebung angeschaut. Speziell bei der Migration1607 in Zeile 72 gibt es Ungereimtheiten.

Diese Abfrage führt wohl ins Leere:

SET @commentArticleElementId = (SELECT id FROM `s_core_config_elements` WHERE `name` = 'commentVoucherArticle');

weil es den Namen „commentVoucherArticle“ nicht gibt. Bei mir im System heißt es „commentArticle“. Und weil deshalb die Variable „@commentArticleElementId“ nicht gesetzt werden kann, funktioniert auch die das SQL aus Zeile 83 und 84.

Offensichtlich stammt der Name „commentVoucherArticle“ noch aus älteren Shops. In aktuellen Systemen taucht dieser Name nicht auf.

Theoretisch müsste man also die Migration1607 per Hand ausführen damit alles wieder korrekt ist.

Gleiches Problem wie oben beschrieben - seit 3 Tagen keine Lösung gefunden.

Shopware-Update-Versuch: 5.5.6 auf 5.7.2
PHP: 7.4.21 und 8.0.8 [beides hilft nix]
Datenbank-Server-Version: 5.7.35 - MySQL Community Server (GPL)

Es scheint so [soweit ich das als Laie verstehen kann], als sei in der Update-relevanten php-Datei:
/files/update/update-assets/migrations/1607-add-voucher-checkout-configs.php der Wurm drin.

INSERT INTO `s_core_config_values` (`element_id`, `shop_id`, `value`)
            SELECT @voucherModeElementId, `id`, 'i:0;' FROM s_core_shops
            WHERE id NOT IN (SELECT `shop_id` FROM `s_core_config_values` WHERE `element_id` = @voucherModeElementId);
            DELETE FROM `s_core_config_values` WHERE `element_id` = @voucherModeElementId && 
            (SELECT value FROM `s_core_config_values` WHERE `element_id` = @commentArticleElementId) = 'b:1;';
SQL;

Der General Error: 1093 reklamiert „Migrations_Migration1607“ und dass ist ein Codeteil der versucht eine Tabelle s_core_config_values zu verändern, während der gleiche Codeteil auf die Tabelle s_core_config_values zugreift.

:flashlight: Hilfe von Shopware-Entwicklern würde ich mir wünschen. :flashlight: Als Shopbetreiber vermute ich, das die Fehlerursache ausserhalb meiner Reichweite liegt und nicht am eigenen Shop-Setup liegt. Möglicherweise fehlt auch nur ein Semikolon oder ein Hochkomma im PHP oder so. Das würde ich sogar noch ergänzen können. Mir fällt auf, das FROM -Befehl einmal ohne Hochkomma (s_core_shops) geschrieben ist.

Hallo,

gibt es denn eine Lösung dafür…? Letzt endlich läßt sich eine SW 5.5.10 Version mit 5.7.2 nicht updaten, da weiterhin der zuvor genannte Fehler immer wieder auftritt.

Weiß von Euch jemand Rat…?

Die vorher genannten Ideen habe ich alle mal durchprobiert. Ändert sich aber nichts. Das Backend hängt sich jedesmal auf…

Nachdem ich die betreffenden Zeilen entfernt habe lief das Update ohne Fehler durch. Die aktualisierte Version ist jetzt auch schon eine Weile im Einsatz und bisher konnte ich auch noch keine unerwünschten Nebeneffekte feststellen.

Ich habe folgendes in der Datei „update-assets/migrations/1607-add-voucher-checkout-configs.php“ angepasst:
Vorher:

            $sql = <<<'SQL'
            INSERT INTO `s_core_config_values` (`element_id`, `shop_id`, `value`)
            SELECT @voucherModeElementId, `id`, 'i:0;' FROM s_core_shops
            WHERE id NOT IN (SELECT `shop_id` FROM `s_core_config_values` WHERE `element_id` = @voucherModeElementId);
            DELETE FROM `s_core_config_values` WHERE `element_id` = @voucherModeElementId && 
            (SELECT value FROM `s_core_config_values` WHERE `element_id` = @commentArticleElementId) = 'b:1;';
SQL;

Nachher:

            $sql = <<<'SQL'
            INSERT INTO `s_core_config_values` (`element_id`, `shop_id`, `value`)
            SELECT @voucherModeElementId, `id`, 'i:0;' FROM s_core_shops
            WHERE id NOT IN (SELECT `shop_id` FROM `s_core_config_values` WHERE `element_id` = @voucherModeElementId);
SQL;
1 „Gefällt mir“