Seite 1 von 1

Dublicate entry for key PRIMARY - nach DB-Migration

Verfasst: Do 11. Apr 2019, 10:27
von rethus
Hi Leute,
ich habe hier bei Contenido eine DB-Migration machen müssen... Artikel, templates usw. um den Inhaltlichen Datenbestand bei veränderter Konfiguration wieder herzustellen.

Hat soweit auch funktioniert. Nun habe ich allerdings das Problem, das ich in den Syslogs z.B. beim anlegen eines neuen Artikels DB-Fehler bezüglich der PRIMARY-ID's bekomme.
Sehen dann ungefähr so aus:

Code: Alles auswählen

/contenido/main.php?area=con_editart&frame=4&action=con_saveart&contenido=f4a5b577cafb10f512787fbf0954bc1e MySQL error 1062: Duplicate entry '8208' for key 'PRIMARY'
INSERT INTO con_art (idart, idclient) VALUES ('8208', '4')

 /contenido/main.php?area=con_editart&frame=4&action=con_saveart&contenido=f4a5b577cafb10f512787fbf0954bc1e MySQL error 1062: Duplicate entry '8228' for key 'PRIMARY'
INSERT INTO
                        con_art_lang (
Ich habe bereits in Mysql alle Tabellen einmal "optimiert", damit mögliche Index-Key für Autoincrement angeglichen werden. Das hat das Problem aber nicht behoben.

Weiß ggf. jemand aus dem Stehgreif, ob Contenido intern einen eigenen Zähler für die Tabellen hat, über den er die ID's für die PRIMARY-Spalte vergibt?

PS: In diesem Fall ist es contenido 4.8

Re: Dublicate entry for key PRIMARY - nach DB-Migration

Verfasst: Do 11. Apr 2019, 11:07
von rethus
Habs gefunden. con_sequence.

Re: Dublicate entry for key PRIMARY - nach DB-Migration

Verfasst: Do 11. Apr 2019, 11:16
von Faar
rethus hat geschrieben:
Do 11. Apr 2019, 10:27
Hi Leute,
ich habe hier bei Contenido eine DB-Migration machen müssen...
:(
Duplicate entry '8208' for key 'PRIMARY'
INSERT INTO con_art (idart, idclient) VALUES ('8208', '4')
Vermutlich passiert hier folgendes:
Autoincrement legt bereits eine Primary-ID an, bevor die Daten dort eingelesen werden.
Dann kommt das: INSERT INTO con_art (idart, idclient) VALUES ('8208', '4')
Also, diese eine ID die bereits mit autoincrement erzeugt wurde, soll nochmal mit einer ID belegt werden.
Das mag AUTOINCREMENT gar nicht, absolut nicht, weil autoincrement das selbst verwaltet.
Ich habe bereits in Mysql alle Tabellen einmal "optimiert", damit mögliche Index-Key für Autoincrement angeglichen werden. Das hat das Problem aber nicht behoben.
Wenn es so ist, wie oben beschrieben, dann nützt das auch nichts.
Weiß ggf. jemand aus dem Stehgreif, ob Contenido intern einen eigenen Zähler für die Tabellen hat, über den er die ID's für die PRIMARY-Spalte vergibt?
Auf jeden Fall war das so, bis zu irgendeiner Version.
Selbst im Setup von 4.10 ist noch ALTER TABLE xxx AUTO_INCREMENT drin, weil eben manche ältere Tabellen noch kein Autoincrement hatten.
TRUNCATE TABLE table_name; löscht alle Werte von Autoincrement und setzt es auf 1 zurück. Aber dann sind alle Daten auch weg.

Ich nehme an, dass beim Import bereits der Fehler passiert:
https://stackoverflow.com/questions/875 ... rimary-key

Hast Du noch die alte DB?
Wie sieht die SQL dieser Tabelle in der Konfiguration aus?
In der Sicherung stehen ja alle SQL Befehle, um die Tabellen wieder herzustellen und dann erst werden sie mit Werten gefüllt.
Wie sieht z.B. die CREATE TABLE con_art aus?
Diese SQL wird ja beim Export erzeugt und es kann sein, dass bei der Migration ein ALTER TABLE auto_increment auftaucht.

Re: Dublicate entry for key PRIMARY - nach DB-Migration

Verfasst: Do 11. Apr 2019, 11:17
von Faar
rethus hat geschrieben:
Do 11. Apr 2019, 11:07
Habs gefunden. con_sequence.
Was für eine Version ist oder war das?

Re: Dublicate entry for key PRIMARY - nach DB-Migration

Verfasst: Fr 12. Apr 2019, 06:01
von rethus
War ne 4.8.14er Version.
Falls es noch nicht entfernt wurde, wäre zu überlegen, die DB mal dahingehend umzustellen, das nur die DB-eigenen Autoincrements genutzt werden.
Auch da gibt es ja von Haus aus "nextid".

Wie es scheint wurde die con_sequence bei Contenido vor allem dafür ins Leben gerufen, um die nächste ID in der DB zu beziehen.
Würde man die entfernen, hätte man eine Fehlerquelle weniger.