[gelöst] DBRep und Daten löschen

Begonnen von stera, 10 Februar 2021, 21:05:25

Vorheriges Thema - Nächstes Thema

stera

Hallo zusammen,

ich möchte gerne Daten in der SQL Datenbank (MariaDB) löschen, die älter als 180 Tage sind, aber bestimmte Device-Einträge sollen erhalten bleiben. In SQL funktioniert die Abfrage. Wie führe ich die mit DPRep aus? Der sagt mir ein Fehler im sqlCmd  ::) ::)


DELETE FROM `history`
WHERE DEVICE NOT REGEXP 'FRITZDECT_SD_Solar|FRITZDECT_SD_DachbodenHZ|HM_Temperatur.Aussen|HM_Zaehlersensor_Gas|HM_Zaehlersensor_Wasser|OBISStromzaehler|ShellyPlugS_Badoben_Heizkoerper|HM_Temperatur.Dachboden|HM_Zaehlersensor_Strom'
  AND DATEDIFF(NOW(), timestamp) >= 180




Internals:
   CFGFN     
   DATABASE   fhem
   DEF        myDbLog
   FUUID      602435ca-f33f-6e47-be78-7a7768bbf5714e0a
   FVERSION   93_DbRep.pm:v8.40.7-s22733/2020-09-04
   LASTCMD    sqlCmd DELETE FROM `history` WHERE DEVICE NOT REGEXP 'FRITZDECT_SD_Solar|FRITZDECT_SD_DachbodenHZ|HM_Temperatur.Aussen|HM_Zaehlersensor_Gas|HM_Zaehlersensor_Wasser|OBISStromzaehler|ShellyPlugS_Badoben_Heizkoerper|HM_Temperatur.Dachboden|HM_Zaehlersensor_Strom' AND DATEDIFF(NOW(), timestamp) >= 183
   MODEL      Client
   NAME       Rep.SQLDeleteRows
   NOTIFYDEV  global,Rep.SQLDeleteRows
   NR         2290979
   NTFY_ORDER 50-Rep.SQLDeleteRows
   ROLE       Client
   STATE      error
   TYPE       DbRep
   UTF8       0
   HELPER:
     DBLOGDEVICE myDbLog
     GRANTS     ALL PRIVILEGES
     IDRETRIES  3
     MINTS      2020-08-11 00:00:00
     PACKAGE    main
     VERSION    8.40.7
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2021-02-10 20:52:02   errortext       DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''FRITZDECT_SD_Solar' at line 1 at ./FHEM/93_DbRep.pm line 6268.

     2021-02-10 20:52:02   state           error
Attributes:
   allowDeletion 1
   showproctime 1


DS_Starter

Ich gehe erstmal davon aus dass die "|" maskiert werden müssen weil sie natürlich in Perl ebenfalls Bedeutung haben. Versuch doch mal:


DELETE FROM `history`
WHERE DEVICE NOT REGEXP 'FRITZDECT_SD_Solar\|FRITZDECT_SD_DachbodenHZ\|HM_Temperatur.Aussen\|HM_Zaehlersensor_Gas\|HM_Zaehlersensor_Wasser\|OBISStromzaehler\|ShellyPlugS_Badoben_Heizkoerper\|HM_Temperatur.Dachboden\|HM_Zaehlersensor_Strom'
  AND DATEDIFF(NOW(), timestamp) >= 180


Alternativ könntest du auch ein delEntries mit entsprechender Einstellung von timeOlderThan und dem device Attribut arbeiten


attr <name> device EXCLUDE=FRITZDECT_SD_Solar,FRITZDECT_SD_DachbodenHZ,...
Proxmox+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

stera

Das mit dem aus maskieren geht noch nicht, aber mit dem EXCLUDE Perfekt! Danke für die Info. Das wusste ich noch nicht  :D

Zitat von: DS_Starter am 10 Februar 2021, 21:39:38
Ich gehe erstmal davon aus dass die "|" maskiert werden müssen weil sie natürlich in Perl ebenfalls Bedeutung haben. Versuch doch mal:


DELETE FROM `history`
WHERE DEVICE NOT REGEXP 'FRITZDECT_SD_Solar\|FRITZDECT_SD_DachbodenHZ\|HM_Temperatur.Aussen\|HM_Zaehlersensor_Gas\|HM_Zaehlersensor_Wasser\|OBISStromzaehler\|ShellyPlugS_Badoben_Heizkoerper\|HM_Temperatur.Dachboden\|HM_Zaehlersensor_Strom'
  AND DATEDIFF(NOW(), timestamp) >= 180


Alternativ könntest du auch ein delEntries mit entsprechender Einstellung von timeOlderThan und dem device Attribut arbeiten


attr <name> device EXCLUDE=FRITZDECT_SD_Solar,FRITZDECT_SD_DachbodenHZ,...