Änderung an DbLog Create-Script - Einwände?

Begonnen von Johannes, 17 Februar 2013, 21:37:42

Vorheriges Thema - Nächstes Thema

Johannes

Hallo,

Da ich für die Entwicklung an meinem Frontend darauf angewiesen bin, in eine Spalte Daten zu speichern, die länger als 64 Zeichen sind, würde ich gerne das MySQL Setupscript anpassen.

Konkret geht es um die Spalte EVENT. Diese ist beim PostgreSQL Script auf 512 Zeichen beschränkt.
Bei MySQL allerdings auf nur 64:


CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(64), READING varchar(32), VALUE varchar(32), UNIT varchar(32));
CREATE TABLE `fhem`.`current` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(64), READING varchar(32), VALUE varchar(32), UNIT varchar(32));

Genau das würde ich gerne anheben auf 512 Zeichen, falls dazu niemand Einwände haben sollte.
Bestehende Tables lassen sich per Update auch auf die neue Länge anpassen.
Falls niemand Einwände haben sollte, nehme ich die Änderung in den nächsten Tagen vor.


Tobias

keine einwände... solange es varchar bleibt
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Wuppi68

#2
habe da noch ein paar Fehler in contrib/wiki gefunden

beim Anlegen der Datenbanken wurden die Feldlängen nicht erweitert :-(

Feldlängen aus 93_DbLog.pm
my %columns = ("DEVICE"  => 64,
               "TYPE"    => 64,
               "EVENT"   => 512,
               "READING" => 64,
               "VALUE"   => 128,
               "UNIT"    => 32
          );


in contrib/dblog/create_[mysql|sqlite].sql
CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'fhemuser'@'%' IDENTIFIED BY 'fhempassword';
CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));
CREATE TABLE `fhem`.`current` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));
GRANT SELECT, INSERT, DELETE, UPDATE ON `fhem`.* TO 'fhemuser'@'%';
CREATE INDEX Search_Idx ON `fhem`.`history` (DEVICE, READING, TIMESTAMP);


und im Wiki ...

Dieses erzeugt dann solche netten Fehler
2016.01.01 00:00:00 1: PERL ERROR: DBD::mysql::db begin_work failed: Turning off AutoCommit failed at ./FHEM/93_DbLog.pm line 481.

2016.01.01 00:00:00 1: PERL ERROR: DBD::mysql::st execute failed: Data too long for column 'VALUE' at row 1 at ./FHEM/93_DbLog.pm line 492.


für MYSQL kann man das ganze auf dem mysql prompt folgendermaßen fixen:

alter table `fhem`.`history` modify column `history`.`VALUE` varchar(128);
alter table `fhem`.`current` modify column `current`.`VALUE` varchar(128);
alter table `fhem`.`history` modify column `history`.`DEVICE` varchar(64);
alter table `fhem`.`current` modify column `current`.`DEVICE` varchar(64);
alter table `fhem`.`history` modify column `history`.`TYPE` varchar(64);
alter table `fhem`.`current` modify column `current`.`TYPE` varchar(64);
alter table `fhem`.`history` modify column `history`.`READING` varchar(64);
alter table `fhem`.`current` modify column `current`.`READING` varchar(64);


wenn es im svn "richtig" ist, dann kann ich gerne das WIKI entsprechend anpassen.

Danke für das Modul

Gruß

Ralf

PS.: Wo finde ich den initialen Threat für dbLog? Habe den auf die "schnelle" nicht gefunden
FHEM unter Proxmox als VM