Frage zum ErrorException Handling...

Begonnen von Tobias, 05 Februar 2014, 07:30:03

Vorheriges Thema - Nächstes Thema

Tobias

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.
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

rudolfkoenig

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 $@