Setup: Aktualisieren Sie den SQL-Fehler nach dem Update von 2.2.8 auf 2.3.1


7

Was könnte der Grund für diesen Fehler bin/magento setup:upgradenach dem Update von 2.2.8 auf 2.3.1 sein?

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1061 Doppelter Schlüsselname 'WISHLIST_CUSTOMER_ID', Abfrage war: ALTER TABLE wishlistADD CONSTRAINT WISHLIST_CUSTOMER_IDUNIQUE KEY ( customer_id)

Das db_schema.xmlModul der Wunschliste enthält diese Definition:

        <constraint xsi:type="unique" referenceId="WISHLIST_CUSTOMER_ID">
            <column name="customer_id"/>
        </constraint>

Aber es sollte nicht versuchen, die Einschränkung zu erstellen, wenn sie bereits vorhanden ist?

SHOW CREATE TABLE whishlist zeigt mir:

CREATE TABLE `wishlist` (
  `wishlist_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Wishlist ID',
  `customer_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Customer ID',
  `shared` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Sharing flag (0 or 1)',
  `sharing_code` varchar(32) DEFAULT NULL COMMENT 'Sharing encrypted code',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Last updated date',
  `name` varchar(255) DEFAULT NULL COMMENT 'Wish List Name',
  `visibility` smallint(6) DEFAULT '0' COMMENT 'Wish List visibility type',
  PRIMARY KEY (`wishlist_id`),
  KEY `WISHLIST_SHARED` (`shared`),
  KEY `WISHLIST_CUSTOMER_ID` (`customer_id`),
  CONSTRAINT `WISHLIST_CUSTOMER_ID_CUSTOMER_ENTITY_ENTITY_ID` FOREIGN KEY (`customer_id`) REFERENCES `customer_entity` (`entity_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=34412 DEFAULT CHARSET=utf8 COMMENT='Wishlist main Table'

Der Eintrag in der setup_moduleTabelle:

+------------------+----------------+--------------+
| module           | schema_version | data_version |
+------------------+----------------+--------------+
| Magento_Wishlist | 2.0.2          | 2.0.2        |
+------------------+----------------+--------------+

Antworten:


6

Anscheinend ist es ein Magento-Fehler. Beim Vergleich des aktuellen Schemas mit dem deklarierten Schema werden Einschränkungen und andere Indizes separat behandelt, der vorhandene Index wird jedoch nicht gelöscht, bevor der neue UNIQUEIndex erstellt wird.

Eine Problemumgehung in diesem Fall ist zu fallen lassen oder¹ Benennen Sie den vorhandenen Index in einem separaten Skript um, bevor Sie das Update durchführen.

alter table wishlist rename index WISHLIST_CUSTOMER_ID to WISHLIST_CUSTOMER_ID_DELETE_ME;

Nicht ganz zufriedenstellend, macht aber den Job, solange es keine Lösung für den Kernfehler gibt.

Update: Was den Fehler tatsächlich auslöste, war, dass das magento/module-multiple-wishlistModul aus Commerce / Enterprise Edition deaktiviert wurde. Durch erneutes Aktivieren wurde das Problem ebenfalls "gelöst".

¹) das Löschen war nicht möglich, ohne auch den davon abhängigen Fremdschlüssel zu entfernen


Können Sie mir sagen, wie ich das Modul aktivieren kann? Vielen Dank
Robert

Hängt davon ab. Wie haben Sie es deaktiviert?
Fabian Schmengler

Nein, ich verwende das Migrationstool und habe den gleichen Fehler. Ich versuche, den von Ihnen empfohlenen Befehl alter table zu verwenden, der auch nicht funktioniert.
Robert

Daher möchte ich von Magento 1.9.4.1 auf Magento 2.3.1 migrieren. Wenn ich den Befehl mysql alter verwende, tritt immer noch der gleiche Fehler auf: "SQLSTATE [23000]: Verletzung der Integritätsbeschränkung: 1062 Doppelter Eintrag '0' f oder Schlüssel 'WISHLIST_CUSTOMER_ID_DELETE_ME' ". Können Sie uns sagen, wie wir den davon abhängigen Fremdschlüssel entfernen oder wie wir diesen Fehler beheben können? Vielen Dank im Voraus
Robert

Wir erhalten denselben Fehler, wir verwenden Open Source, nicht Enterprise. Hat jemand herausgefunden, warum das passiert?
Nick Piro

0

Verwenden Sie möglicherweise MariaDB und nicht MySQL?

Vor kurzem sind wir beim Aktualisieren von Magento auf 2.3.2 auf einem Server auf ein seltsames Problem mit Einschränkungen gestoßen.

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1091 FOREIGN KEY kann nicht fallen gelassen werden SHARED_CATALOG_CREATED_BY_ADMIN_USER_USER_ID; Überprüfen Sie, ob es vorhanden ist. Die Abfrage lautete: ALTER TABLE shared_catalogDROP FOREIGN KEY SHARED_CATALOG_CREATED_BY_ADMIN_USER_USER_ID

Ich konnte das Problem nicht lokal reproduzieren. Das heißt, bis ich von MySQL 5.7 zu MariaDB 10.2 gewechselt bin.

Ich vermute, dass Magento während des Updates zweimal Einschränkungen hinzufügen / entfernen muss, dies aber wahrscheinlich in der falschen Reihenfolge. Könnte irgendwie damit zusammenhängen, dass beide Module ein db_schema.xmlund enthalten, db_schema_whitelist.jsonaber ich habe nicht weiter nachgeforscht.

Jedenfalls scheint es mir, dass MySQL in diesen Fällen einfach keinen Fehler auslöst, und für mich scheint es zu diesem Zeitpunkt die bessere Wahl für M2 zu sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.