Update von 6.7.14.2 auf 6.7.15.0 - Fehler

Das Update bricht ab, der Shop ist nicht erreichbar. habe diese auf einer Stage-Umgebung durchgeführt.

der Abbruch erfolgt ab’:

---------- ---------------------- 
  Action     Number of migrations  
 ---------- ---------------------- 
  Migrated   2 out of 13           
 ---------- ---------------------- 
10:28:13 CRITICAL  [console] Error thrown while running command "database:migrate core --all=1". Message: "
Migration error: An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`usrdb_xxl`.`#sql-d689e_5abc3a`, CONSTRAINT `fk.document.order_id` FOREIGN KEY (`order_id`, `order_version_id`) REFERENCES `order` (`id`, `version_id`) ON DELETE RESTRICT ON UPDATE CASCA)\n
Trace: \n

Ich vermute, das hier Zuordnungen von Bestellungen und deren Dokumente (bei uns wohl Rechnungen) nicht stimmen.

Die KI sagt mir, das wohl ausgerechnet hier Shopware bei diesem Update eine Änderung in der DB durchführt. Wie kann man das beheben? Muss man die betroffenen Bestellungen entfernen? Wie würdet Ihr vorgehen?

Vielen dank schonmal im voraus.

erstmal ein backup einspielen damit der shop wieder läuft

Ja, also wie gesagt, ich habe dieses erstmal in einer Stage-Umgebung durchgeführt. Das Live-System ist noch nicht geupdatet. Nach dem einspielen des BackUps läuft auch die Stage wieder. Noch jemand eine Idee?

gab es ne fehlemeldung beim update oder im log nach schauen

Vielleicht vor dem Update mal

SET FOREIGN_KEY_CHECKS = 0;

setzen und nach dem Update dann wieder zurück

SET FOREIGN_KEY_CHECKS = 1;

Vielleicht in dem Zusammenhang mal prüfen, ob

restrict_fk_on_non_standard_key = 0

gesetzt ist (Bug bei MySQL 8.4). Ist jetzt nur so eine Idee.

Das werde ich mal am Montag prüfen… super Idee. Ich melde mich. Vorab gutes WE Euch allen.

Deine Schema bzw. Keys einer Tabelle sind nicht in Ordnung. Das heißt eine frühere Migration ist schon einmal nicht korrekt durchgeführt worden.

Der Vorschlag FK Check zu deaktivieren ist hier sicherlich nicht sinnvoll (und wird vermutlich auch nicht funktionieren), da du ja das Problem beheben möchtest und nicht einfach umgehen und ggf. noch mehr Probleme und kaputte Datensätze in der Zukunft haben möchtest.

Am besten einen leeren Shop installieren und Schauen, wie das Schema der Tabelle in der Version vor dem Update ist und diesen dann in der Live „erzeugen“ so dass das Update ohne Fehler durchläuft.

SELECT
    LOWER(HEX(d.id)) AS document_id,
    LOWER(HEX(d.order_id)) AS order_id,
    LOWER(HEX(d.order_version_id)) AS order_version_id,
    d.created_at
FROM `document` AS d
LEFT JOIN `order` AS o
    ON o.id = d.order_id
   AND o.version_id = d.order_version_id
WHERE d.order_id IS NOT NULL
  AND d.order_version_id IS NOT NULL
  AND o.id IS NULL;

damit solltest du die kaputten einträge kriegen

Vielen dank Euch. shyim sein Script brachte den Erfolg. Update ist nun durch. Danke.

Hallo, ich habe das selbe Problem und nun 4 Einträge.
Was macht man nun?

Mir geht es gleich, ich habe zwei Einträge, die aber so alt sind, dass ich gar keine Bestellung dazu habe? Lösche ich die Einträge einfach? Danke! :slight_smile:

Update: Ich habe über das SQL zwei Einträge erhalten, habe mir dazu die Dokumente raus gesucht und diese beiden gelöscht. Hier handelte es sich um Dokumente die ohnehin im System nicht mehr vorhanden waren, vielleicht hatte ich die vorher schon mal gelöscht. Waren aus 2020. Danach lief das Update reibungslos durch.