configDB mit Postgresql

Begonnen von Matze985, 01 März 2016, 22:50:12

Vorheriges Thema - Nächstes Thema

Matze985

Hallo,

da das hier mein erster Beitrag ist möchte ich mich kurz vorstellen.
Ich bin Matze, 24 und zur Zeit noch im Studium.
FHEM habe ich jetzt schon eine ganze weile auf einem Raspberry Pi 2 in Betrieb und arbeite vorallem mit MySensors. Ich bin damals von PiDome umgestiegen, weil es nicht genug Möglichkeiten zum Anpassen hatte.

Vor kurzem habe ich mir eine Postgresql Datenbank aufgesetzt und auf DbLog umgestellt. Jetzt wollte ich auch meine Konfiguration in die Datenbank packen.

Dazu habe ich eine weitere DB erstellt, und die configDB.conf angelegt.
Soweit alles gut, configDB kann auf die Datenbank zugreifen und nachdem ich ihm auch alle Rechte eingeräumt habe läuft die Migration los.

Allerdings bekomme ich dann folgenden Fehler:


2016.03.01 00:47:27 1: PERL WARNING: DBD::Pg::db do failed: ERROR:  type "blob" does not exist
LINE 1: ...E IF NOT EXISTS fhembinfilesave(filename TEXT, content BLOB)
                                                                  ^ at configDB.pm line 242.
DBD::Pg::db do failed: ERROR:  type "blob" does not exist
LINE 1: ...E IF NOT EXISTS fhembinfilesave(filename TEXT, content BLOB)
                                                                  ^ at configDB.pm line 242.


Danach kommt noch die Meldung über das rollback.
Google spuckt dazu leider garnichts aus. Fehlt mir eine Abhängigkeit oder liegt der Fehler nicht an meinem System?

Fhem ist auf dem Aktuellsten stand, und Postgres benutze ich die Version 9.4.

Vielen Dank schonmal für jede Hilfe!!
Matze

betateilchen

Die Ursache für Dein Problem steht doch eindeutig in der ersten Zeile der von Dir geposteten Fehlermeldungen:

2016.03.01 00:47:27 1: PERL WARNING: DBD::Pg::db do failed: ERROR:  type "blob" does not exist

Das hat nichts mit fehlenden Abhängigkeiten zu tun, sondern damit, dass Dein Postgresql den Datentyp blob für Datenbankfelder nicht kennt. In diesem Zusammenhang ist die Anmerkung "Dein" Postgresql genau so gemeint wie geschrieben - es scheint nämlich durchaus Postgresql Versionen zu geben, in denen blob kein Problem darstellt. Eine einfache Google Suche nach "postgresql type blob" bestätigt diese Vermutung.

Wie ich ein solches versionsabhängiges Problem fixen soll - keine Ahnung.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Matze985

#2
ok, es sollte damit aber mit keiner postgresql Datenbank funktionieren, da die soweit ich weiß und auch bei Google recherchiert habe keine blobs wie sie z.B. bei mysql verwendet werden unterstützt.

Ich hatte bisher nicht in deinen Code geschaut, sondern gehofft, dass es vielleicht einen Parameter gibt, den ich übersehen habe oder mir eben irgend eine Abhängigkeit fehlt.

ich hab den Code jetzt ein bisschen angepasst und den Datentyp blob durch bytea ersetzt, zumindest überall da wo es für das migrate notwendig ist. Das ist soweit ich jetzt heute Abend herausgefunden habe die Referenz Implementierung zu den normalen blobs.

Ich häng dir die Datei mal an, dann kannst du es dir eventuell mal anschauen.
Das migrate läuft damit jetzt durch:


Starting migration...
Processing: database initialization
Processing: save config
Processing: save state
Processing: fileimport
importing: ./log/eventTypes.txt
importing: ./www/gplot/template.gplot
importing: ./www/gplot/templateDB.gplot
importing: ./FHEM/template.layout
importing: ./www/gplot/SVG_LogFile_Paludarium_1.gplot
importing: ./db.conf
Migration completed

-----------------------------------------------------------------
configDB Database Information
-----------------------------------------------------------------
# $Id: configDB.pm 10533 2016-01-16 20:00:25Z betateilchen $
-----------------------------------------------------------------
dbconn: Pg:database=fhem_config;host=localhost;port=5432
dbuser: xxxxxxxxxxxxxxxxxxx
dbpass: xxxxxxxxxxxxxxxxxxx
dbtype: POSTGRESQL
-----------------------------------------------------------------
config: 245 entries

Ver 0 saved: Wed                              Mar                                                 2 00:49:41 2016 def: 48 attr: 188
Ver 1 saved: by                               cfgDB_Init                                          def: 3 attr: 4
-----------------------------------------------------------------
state: 172 entries saved: Wed Mar  2 00:49:42 2016
-----------------------------------------------------------------
filesave: 6 files stored in database
-----------------------------------------------------------------

betateilchen

Hallo,

danke, ich schau mir Deine Vorschläge bei Gelegenheit genauer an.

Was ich aber jetzt schon sagen kann: Deine Änderung in bytea für MYSQL Datenbanken dürfte eher kontraproduktiv sein, MYSQL kann definitiv blobs.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Matze985

ok danke.

ja, es müsste definitiv entweder über ein Attribut oder durch automatisches erkennen laufen. Das hab ich so auf die schnelle nicht eingebaut. Meine Erfahrung in perl beschränkt sich aktuell auch noch auf eine 100 zeilen myutils ;)

Matze985

#5
Ohje ich habe gesehen, dass ich sogar in dem if für MySQL das blob ersetzt habe. War wohl doch schon etwas spät gestern...
Habe eben noch das bytea schreiben in ein if gepackt.
Was ich bisher noch nicht getestet habe ist ob das ganze auch beim lesen klappt. Also ich habe configDB bisher nur migriert und noch nicht ausgeführt.
Vermutlich sind da auch noch ein paar kleine Änderungen notwendig.
Das kann ich hoffentlich die tage mal noch testen und dann evenutell auch gleich die nötigen Änderungen machen. Das File werde ich dann auch hoch laden.

Gruß Matze

betateilchen

Lass das mal bitte mit den Anhängen der Files. Es macht keinen Sinn, hier im Thread "inoffizielle" Modulversionen bereitzustellen, die nicht funktionieren. Dafür sind zu viele User viel zu große Spielkinder.

Es wäre mir ganz recht, wenn Du auch die bisher angehängten Modulversionen hier im Thread wieder entfernen würdest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Matze985

Entschuldigung, ich habe die Dateien entfernt.

Ich bin nochmal etwas zum testen gekommen und habe jetzt eine Version, die voll funktionsfähig ist. Änderungen waren kaum noch nötig und die anderen Datenbankentypen bleiben jetzt unverändert. Soll ich dir diese Version schicken?

Gruß Matze

betateilchen

Zitat von: Matze985 am 03 März 2016, 22:06:37
Ich bin nochmal etwas zum testen gekommen und habe jetzt eine Version, die voll funktionsfähig ist. Änderungen waren kaum noch nötig und die anderen Datenbankentypen bleiben jetzt unverändert. Soll ich dir diese Version schicken?

das wäre nett :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Ok, danke für die Datei. Die vorgeschlagenen Änderungen habe ich übernommen.

Über die anderen "Problemchen", die wir bereits per email festgestellt hatten, sollten wir erstmal weiter per email diskutieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!