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