django-pgclone
makes it easy to dump and restore Postgres databases.
Here are some key features:
- Streaming dumps and restores to configurable storage backends like S3. Instances with limited memory aren't a problem for large databases.
- A restoration process that works behind the scenes, swapping in the restored database when finished.
- Configurable hooks into the dump and restore process, for example, migrating a restored database before it is swapped.
- Reversible restores, making it possible to quickly revert to the initial restore or the previous database.
- Re-usable configurations for instrumenting different types of dumps and restores.
To dump a database, do:
python manage.py pgclone dump
To list database dump keys, do:
python manage.py pgclone ls
To restore a datase, do:
python manage.py pgclone restore <dump_key>
Database dumps are relative to the storage location, which defaults to the local file system. Dump keys are in the format of <instance>/<database>/<config>/<timestamp>.dump
.
When listing, use an optional prefix. Restoring supports the same interface, using the latest key that matches the prefix.
View the django-pgclone docs here to learn more about:
- The basics and an overview of how it works.
- The core command docs.
- Configuring an S3 storage backend.
- Running management command hooks during dumping or restoring.
- Creating restores that can be quickly reverted.
- Re-using command parameters for different flows.
- All settings.
- Additional details on using AWS RDS databases.
django-pgclone
is compatible with Python 3.9 - 3.13, Django 4.2 - 5.1, Psycopg 2 - 3, and Postgres 13 - 17.
Install django-pgclone
with:
pip3 install django-pgclone
After this, add pgclone
to the INSTALLED_APPS
setting of your Django project.
Note Install the AWS CLI to enable the S3 storage backend. Use pip install awscli
or follow the installation guide here.
For information on setting up django-pgclone
for development and contributing changes, view CONTRIBUTING.md.
- @wesleykendall (Wes Kendall)
- @ethanpobrien (Ethan O'Brien)