Easily monitor database usage - and clean it up (based on your django models)
Project description
django-dbcleanup
Easily monitor database usage - and clean it up (based on your django models)
This pluggable app provides:
- visibility over database disk space usage for your models
- command to remove unused tables and recover disk space
- remove historical data from models that have any
DateTimeField
(configurable in the project settings.py)
Usage
model and admin view
dbcleanup.Table
is an unmanaged model mapped to information tables in MySQL and PostgreSQL and added to django admin
command
dbcleanup
is the management command that can be used (or scheduled) to remove unused
$ ./manage.py dbcleanup -h
usage: manage.py dbcleanup [-h] [-f] [-i] [-j {tables,history,analyze,migrations}] [--no-fk] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color]
[--force-color] [--skip-checks]
Remove database tables that do not map to any models, such as when a django app is removed/disabled.
optional arguments:
-h, --help show this help message and exit
-f, --force Delete the items (instead of just listing them)
-i, --interactive Ask which items to delete, interactively
-j {tables,history,analyze,migrations}, --just {tables,history,analyze,migrations}
Perform only a subset of actions
--no-fk Disable FOREIGNKEY_CHECK when DROPping tables - CAREFUL! use only if you are sure the constraints are not from a table in use (ie: circular dependencies between drop candidates)
Need to use --force
or --interactive
to actually perform changes, otherwise it'll be a dry run.
Covered actions are:
tables
: remove database tables that do not map to any model (ie: when a app is removed from the project, there is no migration to delete the tables) - usesettings.DBCLEANUP_REQUIRED_TABLES
to whitelist tables that would otherwise be removedhistory
: remove old records for the models defined insettings.DBCLEANUP_HISTORY_MODELS
(more below)analyze
: only for MySQL - force analyze on all the tables to update the row count and size estimatesmigrations
: remove migrations (fromdjango_migrations
table) that not in the project migration path (ie: after migration squashing and reset)
historical data
settings.DBCLEANUP_HISTORY_MODELS
is a list of tuples where each tuple is (MODEL_NAME, DAYS_TO_KEEP, DATE_TIME_FIELD_NAME)
.
# someproject/settings.py
DBCLEANUP_HISTORY_MODELS = [
('notifications.notification', 365, 'time'),
...
]
With this setup, when ./manage.py dbcleanup -j history
is executed, all notifications.Notification
entries with time
older than 365 days would be deleted.
History cleanup is skipped if it would cascade into other models (unless it's a multi-table model and it would cascade to the parent model).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_dbcleanup-0.1.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a622945568cced66dc663cde0370a1f97243f5b10d618f95f2e054ba31eb311d |
|
MD5 | a3d3f5ce9c91975c0856fa34ff5a14a2 |
|
BLAKE2b-256 | d04d3762d6f0ff6f1cad40fe409cc34030493b3f0f68ecafb19f7473c6ad8595 |