DBLog -- DBD::mysql::st execute failed: Duplicate entry

Begonnen von kadettilac89, 22 März 2020, 10:33:20

Vorheriges Thema - Nächstes Thema

DS_Starter

Zitat
Man könnte ja
Code: [Auswählen]

set DbLog createPrimaryKey

einführen, der dann zuerst einen delDoublets ausführt und danach den PK erzeugt.
Nicht im DbLog, aber im DbRep. Dort gibt es für "normale" Index bereits Pflegeroutinen. Aber es bleiben ein paar Dinge. Zum Beispiel darf kein Logging während des Bereinigens laufen, d.h. der User _muß_ asynchron eingestellt haben. Datenbanken können groß sein, was auf einem PI auch wieder zu Performanceproblemen bei diesen Manipulationen führen kann und sicherlich noch viele Situationen mehr was den Support auf den Plan ruft....

ZitatDas beantwortet meine Frage noch nicht ganz. Klar kämen Fehlermeldungen wenn DbLog versuchen würde, zwei gleiche Datensätze einzufügen.
Heisst das, der "Primary Key Support" besteht "nur" darin, dass das Modul mit den Fehlermeldungen umgehen kann und den doppelten Datensatz verwirft?
Nein, es werden andere SQL's verwendet. Weiterhin kann ein gesetzter PK auch den normalen Search_Idx ersetzten. Beides braucht man nicht.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

abc2006

Zitat von: DS_Starter am 02 Februar 2021, 22:22:32
Zum Beispiel darf kein Logging während des Bereinigens laufen
ja.... an dem Punkt bin ich grade.
Hab jetzt erstmal meine Datenbank von der HDD auf ein btrfs-SSD-Volume umgezogen. Damit läuft da hoffentlich schonmal einiges schneller (nein, bin nicht auf dem Raspi).
Dabei habe ich die Fähigkeiten der cacheFiles benutzt, und mich dran erinnert, wie ich da vor einigen Jahren mir rumgetestet hab.
Seitdem lief es problemlos und ich hab heute mal wieder großen Respekt vor deiner Arbeit bekommen.

Ich habe mysql gestoppt, daraufhin loggt DbLog ja in den Cache (und ich kann das in eine Datei exportieren). Sobald die Datenbank wieder läuft, schreibt DbLog wieder in die Datenbank. (funktioniert einwandfrei, echt cool!. Ich bräuchte jetzt aber eine Möglichkeit, DbLog dazu zu bewegen, die Daten nicht zu schreiben, bis ich die Doublets entfernt und einen PK erzeugt habe.
Gibts dafür einen Parameter/Attribut? Sowas wie
attr DbLog SchreibNixInDieDatenbankAuchWennSieVerfügbarIst 1
?
reopen [n] ist mir zu gefährlich, weil ich nicht weiss, wie lange die db braucht.
Wäre aber auch nur ein "nettes Feature", ich ändere die Daten im config-File, das hat den gewünschten Effekt (DbLog sammelt weiter Meldungen, schreibt aber nicht in die Datenbank)

Zitat
Nein, es werden andere SQL's verwendet. Weiterhin kann ein gesetzter PK auch den normalen Search_Idx ersetzten. Beides braucht man nicht.
[/quote]
danke für die Info!

Viele Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

DS_Starter

Zitat
Gibts dafür einen Parameter/Attribut? Sowas wie
Code: [Auswählen]

attr DbLog SchreibNixInDieDatenbankAuchWennSieVerfügbarIst 1

?
reopen [n] ist mir zu gefährlich, weil ich nicht weiss, wie lange die db braucht.
Momentan gibt es nur das reopen XX. Ich weiß ein active/deactive nach dem Vorbils des AT-Moduls wäre sicherlich hilfreich.
Vielleicht baue ich das noch ein (habe schon lange nichts am DbLog gearbeitet).
Du könntest reopen ja auf ein Jahr setzen. Sollte vorerst reichen.  ;)

GN,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter