NEWS
Sql adapter 1.4.3 Fehler
-
Hallo mitsammen!
Habe gestern den Adapter auf auf 1.4.3 upgedated (leider auch mein Produktionssystem).
Ich verwende Sqlite3 und hatte keine Probleme bis jetzt (Mit Ausnahme dass der Adapter leider bei belegter Datenbank manchmal einen Fehler meldet anstatt es später zu versuchen).
Nun, habe den Adapter auf 1.4.2 zurückgestellt und der Fehler bleibt
Heute wollte ich neue Datenpunkte loggen um meine scripte zu testen. Leider funktioniert das nicht mehr!
Setzt man im object-browser das loggen für sql.0 auf aktiviert setze wird der Datenpunkt nicht in die 'datapoints'-Tabelle eingetragen und beim Loggen werden dann natürlich fehler erzeugt da die Datenbank die Type und damit die richtige Wertetabelle nicht bestimmen kann.
Fehler die entstehen:
sql.0 2017-02-07 14:28:57.364 warn Cannot get index of "javascript.1.StateMachine.Astro": Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: datapoints.id sql.0 2017-02-07 14:28:57.363 error Cannot insert INSERT INTO datapoints (name, type) VALUES('javascript.1.StateMachine.Astro', 0);: Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: datapoints.id sql.0 2017-02-07 14:28:47.759 warn Cannot get index of "javascript.1.StateMachine.Astro": id not found history.0 2017-02-07 14:28:36.829 info enabled logging of javascript.1.StateMachine.Astro sql.0 2017-02-07 14:28:30.109 warn Cannot get index of "javascript.1.StateMachine.Astro": id not found web.0 2017-02-07 14:28:29.796 info 2017-02-07T13:28:29.796Z Connected system.user.admin sql.0 2017-02-07 14:28:28.202 warn Cannot get index of "javascript.1.StateMachine.Astro": id not found
Beim History-adapter funktioniert das Hinzufügen von neuen Objekten!
Eine weitere Analyse (siehe Fehlerliste oben) bringt zu tage dass bei dem INSERT INTO der 'id' fehlt!
Habe den adapter händisch eingetragen mit:
INSERT INTO datapoints (id, name, type) VALUES(64,'javascript.1.StateMachine.Astro', 0);
dann im admin.objektbrowser eine Werteänderung erzeugt und da kam noch ein Error:
sql.0 2017-02-07 14:57:36.552 warn Cannot get "from" for "system.adapter.admin.0": Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: sources.id sql.0 2017-02-07 14:57:36.550 error Cannot insert INSERT INTO sources (name) VALUES('system.adapter.admin.0');: Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: sources.id
Also fehlt auch beim Eintragen der Quelle in die sources Tabelle der id!
Nachdem ich händisch in der Datenbank in den sources und datapoints die daten hinzugefügt habe (mit neuen id's) kann ich loggen!
Was geht da schief? Ist vielleicht ein neueres Sqlite die Schuld?
-
Welche Version hattest Du davor? Es hat sich an der ganzen Logik an sich nichts geändert. SQLite ist (wie Du auch schon schreibst) so ne Sache … Eine Frage wäre ob es wieder funktioniert wenn Du das db-File wegwirfst (ja ich weiss alle früheren Daten weg) und quasi neu startest?
-
Du hast Recht, es liegt nicht an ioBroker.
Es fehlen die Autoincrement-Einträge und die scheinen beim re-importieren von einem anderen System verloren gegangen zu sein.
Ich habe ca. 1,5Mio Datensätze in der 70M-Datei gespeichert, z.B. Temperatur und Heizungsdaten der letzten 4 Jahre, inzwischen insgesamt an die 40 verschiedene Sensoren oder kalkulierte Werte.
Werd mir jetzt ein script schreiben mit dem man eine sql (sqllite oder mysql) auf eine andere übertragen kann oder wo man daten importieren kann…
Momentan helf ich mir aus die tables mit den id's selbst upzudaten wodurch ich die Datenbank weiter verwenden kann bevor das script 100%tig fertig ist in einigen Tagen...
p.s.: Bei den Analysen hab ich jetzt sqlitebrowser auf dem test-Raspi verwendet, nettes tool für Unix & Sqllite!
Danke jedenfalls für den Ansporn die Sql-Datei zu untersuchen!
-
Die Struktur der DB-Tabellen ist bei allen recht ähnlich. Wenn Du auf die SQLite Datei an sich zugreifen kannst und so über ein anderes Tool die Daten pro Tabelle Selektieren kannst dann sollte das einfach gehen. Vllt ist das hier eine Idee:
http://stackoverflow.com/questions/5776 … ell-script
SQLite in CSV exportieren ... dann vom iobroker die "neue" db anlegen lassen und dann die csv Files dort importieren. Die Datenfelder sollten alle ähnlich/gleich sein