Good day Colleagues,
i need a quick guide on how to go about to delete specific datavalues entered by a specific user at a specific time.
example;
username: training
has entered data on multiple forms for about 2 months, and this data this data needs to be cleaned.
Thanks for your help.
First it’s not an “easy task” , ideally for training it’s better/safer to have a separate server/instance and just “kill it” afterwards (or reset the db content)
Second
- Note that data modified by training or
- Deleted by training
will be fun harder to recover.
The procedure is should be adapted depending on the model used (tracker or aggregate, if you allowed user to add orgUnit/dataElements it will become much harder)
Before doing anything make a backup ! : you might delete things that are not supposed to be deleted
Then pick one of the 2 options :
- via sql
delete from datavalue where storedby = 'training'
(you can add criterion on updated/created timestamp if needed, you might also join on _periodstructure to delete by dhis2 period)
- via the api (generally soft delete)
DELETE /api/events/THEID
Or a mix of the 2 find events created by the user via sql and delete the events via the api
if you go for the sql you might be inspired by this directory : https://github.com/dhis2/dhis2-utils/tree/master/resources/sql