Utility for synchronizing parallel PostgreSQL databases on Heroku, local, and remote servers
Like my work? Tip me! https://www.paypal.me/jessamynsmith
Easily copy databases between locations, e.g.:
- Initialize a Heroku database with local data
- Update local development database with the latest data in your Heroku app
- Update one Heroku app (e.g. staging) with the data from another app (e.g. production)
You can get paragres from PyPI with:
pip install paragres
The development version can be installed with:
pip install -e git://github.com/jessamynsmith/paragres.git#egg=paragres
If you are developing locally, your version can be installed from the working directory with:
python setup.py.install
Note 1: To use paragres to access a Heroku app, you must be logged into the Heroku account that owns that app.
Note 2: By default, Heroku's new pg:backups command is used. if you want to use the old pgbackups addon, you must specify --use-pgbackups
Example 1, copying data between Heroku databases:
paragres -s <source_heroku_app_name> -d <destination_heroku_app_name>
Example 2, copying a new backup snapshot of data from a Heroku database to localhost:
paragres -s <heroku_app_name> -c -t path/to/db_settings.py
Example 3, creating a backup snapshot of a Heroku database:
paragres -c -s <heroku_app_name>
db_settings.py must contain at least the following (Django settings file format):
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': '<db_name>', 'USER': '<username>', 'PASSWORD': '<password>', 'HOST': '<host>', 'PORT': '<port>', } }
Supported transfers:
Destination | |||
---|---|---|---|
postgres | Heroku app | ||
Source | local file | X | |
postgres | X | X * | |
url | X | X | |
Heroku app | X | X |
* Can only push from a database accessible to the local user, or accessible to a user configured via PG* environment variables
Full list of optional arguments:
-h, --help show this help message and exit
--version Show program's version number
-f FILE, --file FILE PostgreSQL dump file to use as a data source
-u URL, --url URL Public URL from which to pull db file
-s SOURCE_APP, --source-app SOURCE_APP
Heroku app from which to pull db
-c, --capture Capture a new Heroku backup
-o SOURCE_SETTINGS, --source-settings SOURCE_SETTINGS
Django-style settings file with database connection information for source database
(or 'DJANGO_SETTINGS_MODULE' to use that environment variable's value)
-b SOURCE_DBNAME, --source-dbname SOURCE_DBNAME
Source database name (overrides value in source settings if both are specified)
-d DESTINATION_APP, --destination-app DESTINATION_APP
Heroku app for which to replace db
-t SETTINGS, --settings SETTINGS
Django-style settings file with database connection information for destination database
(or 'DJANGO_SETTINGS_MODULE' to use that environment variable's value)
-n DBNAME, --dbname DBNAME
Destination database name (overrides value in settings if both are specified)
-v VERBOSITY, --verbosity VERBOSITY
Verbosity level: 0=minimal output, 1=normal output
--use-pgbackups Use the deprecated pgbackups addon rather than Heroku pg:backups
Fork the project on github and git clone your fork, e.g.:
git clone https://github.com/<username>/paragres.git
Create a virtualenv and install dependencies:
mkvirtualenv paragres pip install -r requirements/package.txt -r requirements/test.txt
Run tests with coverage (should be 100%) and check code style:
coverage run -m nose coverage report -m flake8
Verify all supported Python versions:
pip install tox tox
Install your local copy:
python setup.py install