[gelöst] sqlite3 db exportieren/importieren, wie?

Begonnen von franky08, 29 Januar 2015, 18:23:17

Vorheriges Thema - Nächstes Thema

franky08

Hallo, ich stehe gerade vor der Frage, wie ich aus einer bestehenden fhem.db sämtliche Daten in eine, auf einem neuen System angelegten fhem.db, importieren kann. Im Netz fand ich nur den Weg über .csv (.mode
 csv 
TABELLENNAME .separator
 ; und dann .output
 DATEINAME.csv) aber so richtig verstehe ich die Vorgehensweise nicht.

Ist hierbei TABELLENNAME fhem und DATEINAME.csv fhem.csv?
Oder wie müsste man vorgehen? In der commandref finde ich dazu leider keinen Hinweis.
Hier im Forum habe ich nur das gefunden:
http://forum.fhem.de/index.php/topic,23731.msg170053.html#msg170053
Wobei mir das genaue Vorgehen leider auch nicht klar ist.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

#1
Habe jetzt im Netz folgendes gefunden:

sqlite3 database.db .dump .quit >> database_dump.sql

Also müsste ich, auf fhem angepasst:
sqlite3 fhem.db .dump .quit >> fhem_dump.sql

ausführen?

Und dann mit
.import fhem_dump.sql fhem.db

die Datensätze wieder in die neue Datenbank einlesen?

P.S. So wie oben beschrieben, geht es nicht. Mit .dump wird zwar ein dump der db erzeugt aber irgendwo muss ja das Ziel (Dateiname angegeben werden).
Mmh irgendwie blicke ich da nicht durch

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

So, dann will ich meinen Monolog hier mal beenden  ;)
Nach etwas längerer Suche im Netz hab ich jetzt rausgefunden

sqlite3 fhem.db .dump>fhem_dump.sql

so geht es!

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

So, nachdem .dump funktioniert würde ich die Daten natürlich gerne in die neue Datenbank importieren. Leider geht ein

frank1@zotac:/opt/fhem$ cat fhem_dump.sql | sqlite3 fhem.db
Error: near line 3: table `history` already exists


nicht. Mit .read fhem_dump.sql bekomme ich den gleichen Fehler. Muss ich die tables history und current in der fhem.db löschen und dann den Import starten?

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

betateilchen

Zitat von: franky08 am 30 Januar 2015, 11:16:02
Muss ich die tables history und current in der fhem.db löschen und dann den Import starten?

Wenn Du auch nur ansatzweise verstanden hättest, was Du versuchst zu tun, müsstest Du das nicht fragen.

Natürlich muss die Datenbank leer sein, wenn Du versuchst, einen kompletten Dump einer vorherigen Datenbank einzulesen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Danke betateilchen, ich bin davon ausgegangen das das dump File ja genauso aufgebaut ist und die tables history und current enthält und somit in die bestehende Db geschrieben werden kann.
Übrigends, wenn ich beispielsweise auf einem Digitalpult ein Memorydump mache, kann ich das File ohne Probleme auf einem anderen Pult nutzen, dass hatte ich wahrscheinlich im Hinterkopf.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

betateilchen

Das dump File enthält immer genau das, was Du im dump angibst. Nimmst Du nur eine Tabelle, enthält der dump auch nur Tabellendaten dieser Tabelle.

Du hast aber den dump auf oberster Datenbankebene durchgeführt. Also enthält der dump sowohl die Informationen, um die Tabellen anlegen zu können als auch die Daten, die in die Tabellen geschrieben werden.

Deshalb darf in der Zieldatenbank keine Tabelle enthalten sein, weil sonst das im dump enthaltene "create table" scheitern muss - wie Dir die Fehlermeldung ja zu verstehen gibt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Und wieder was gelernt.
Danke betateilchen.

Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

thymjan

Hänge mich hier an das Thema dran:

Möchte aus einer alten sqlite3 Datenbank historische Werte in die aktuelle laufende übernehmen/importieren und scheitere kläglich an dieser Aufgabe.

Hier wird ja beschrieben wie man den komplette Datenbank-Dump erstellt (Punkt 3):
https://wiki.fhem.de/wiki/DbLog#SQLite-Datenbanken_2
sqlite> .mode insert
sqlite> .output dump_all_20160516_1043.sql
sqlite> .dump
sqlite> .exit


Wenn ich jetzt nur einen Dump der Tabelle HISTORY machen möchte, gebe ich dies bei .dump mit an:
.dump HISTORY

FHEM ist angehalten. Nun versuche ich ich das erzeugte sql-File in die aktuelle Datenbank mit
.read dump filename.sql
einzulesen.
Hier kommt aber auch die Fehlermeldung:
Error: near line 3: table 'history' already exists
Error: near line 70110: index Search_Idx already exists


Wie kann ich denn nur die Werte der HISTORY-Tabelle exportieren und importieren?
Irgendwie stehe ich auf dem Schlauch. Das kann doch eigentlich nicht so schwer sein. Hat jemand einen Tip für mich?

DS_Starter

Du hast einen ziemlich alten Thread ausgegraben.
Für deine Aufgabe kannst du diese Vorgehensweise nutzen:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Datens.C3.A4tze_.28Devices.29_von_einer_Datenbank_in_eine_andere_umziehen_.28Export.2FImport.29

Hier ist ein Beispiel beschrieben um ein Device selektiv zu exportieren/importieren. Es geht natürlich auch für alle Einträge einer Datenbank.

Grüße
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