Hi,
in meinem Modul bekomme ich unter bestimmten Konstellationen an dieser Stelle folgenden Abbruch:
my $sth_ih = $dbh->prepare_cached("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)");
my $rv_ih = $sth_ih->execute(($timestamp, $device, $type, $event, $reading, $value, $unit));
DBD::Pg::st execute failed: ERROR: value too long for type character varying(64) at ./FHEM/93_DbLog.pm line 386.
DBD::Pg::db begin_work failed: Already in a transaction at ./FHEM/93_DbLog.pm line 378.
Da mein Code aber mit ExceptionHandling folgendermaßen aussieht, sieht es so aus als ob hart aus der Prozedur herausgesprungen wird da kein Logeintrag stattfindet:
if ($@) {
Log3 $hash->{NAME}, 2, "DbLog: Failed to insert new readings into database: $@";
$dbh->rollback();
# reconnect
$dbh->disconnect();
DbLog_Connect($hash);
}
Frage ist nun, wie ich den Fehler im Modul abfangen und darauf reagieren kann.
Ohne DBD::Pg angeschaut zu haben: solche Meldungen werden gerne mit "die(...)" erzeugt, und abfangen kann man es mit
eval { aufruf }. Das Ergebnis prueft man mit $@