This guide explains the following:
- Postgres - Local - backup / restore
- Postgres - Heroku - backup / restore
- Mongo - Local - backup / restore
- Mongo - Heroku - backup / restore
- Accessing production databases
- Mongo / Postgres GUI options
IMPORTANT NOTE: This document is currently in beta, but should give you a good starting point for backing up data, restoring data, and accessing production databases.
Remember you need to have your local postgres server (the elephant icon on mac) running for any of these commands to work.
This will create a file named db.sql
which will contain all of the data of the local postgres database named APP_DATABASE_NAME
change these names to match your app as needed.
This is useful for sending to your teammates if you're collaborating or just to have a backup incase you break something.
pg_dump -s -c APP_DATABASE_NAME > db.sql
The -s
flag is for schema only. If you want your development data included just remove that flag.
The -c
flag tells it to drop old data before creating new data. This is just incase you've done this more than once and are overwritting existing data.
This will create a database named APP_DATABASE_NAME
using the data in db.sql
. It will DESTROY the database if it already exists.
psql -d APP_DATABASE_NAME < db.sql
This will throw some errors if the dump was created by someone else. It is ok to ignore these errors.
For the restore process to work you need to have an empty database. The easiest way to achieve this is to just drop and re-create the database.
Make sure there is nothing actively connected to the database (pgCommander, rails, node, etc) when you do this or it won't work.
Delete the database
dropdb APP_DATABASE_NAME
Create a new empty database
createdb APP_DATABASE_NAME
If you already have a .sql
file you want to upload to heroku you can use this command.
heroku pg:psql < db.sql
Heroku also has commands that will allow you to transfer your local database to heroku or vise-versa without needing to create a .sql
file.
Uploads the local database named APP_DATABASE_NAME
to heroku using the heroku config
value for DATABASE_URL
.
heroku pg:push APP_DATABASE_NAME DATABASE_URL
This will download the database using the heroku config
value for DATABASE_URL
and store it in the database named APP_DATABASE_NAME
.
heroku pg:pull DATABASE_URL APP_DATABASE_NAME
Before you can push a database to heroku you must clear the old database (if one exists).
heroku pg:reset DATABASE_URL
Remember you need to have mongod
running to do any database manipulation.
This will create a folder called dump
and backup the contents of the mongo database APP_DATABASE_NAME
in that folder.
mongodump -h 127.0.0.1 -d APP_DATABASE_NAME -o dump/
This will create a mongo database named APP_DATABASE_NAME
by using the dump named APP_DATABASE_NAME
in the dump directory.
mongorestore -h 127.0.0.1 -d APP_DATABASE_NAME dump/APP_DATABASE_NAME
-h
set host to local host.-d
target database name (database to create)dump/APP_DATABASE_NAME
source dump file to import (listed as last parameter)
mongorestore -h xyz.mongolab.com:12345 -d remote_db_name -u username -p password dump/mylocal_db_name/
you can get the details for mongorestore from the mongo connection uri by running heroku config
to get the mongo connection uri. It will be in the followin format.
MONGOLAB_URI: mongodb://username:password@server:port/remote_db_name
# which will look kinda like this:
MONGOLAB_URI: mongodb://heroku_abcdefg:[email protected]:12345/heroku-13411
Your local database is only for local testing. Your production database is hosted by heroku so if we want to see what is going on in the database we need to connect to it. To get the database connection details run heroku config
and copy the database connection string (starts with "postgres://"). With that url in your clipboard load PG Commander and click "New Favorite" and it will automatically populate the connection fields.
If you aren't using PG Commander you'll have to manually enter the parts of the connection string. The format is as follows:
postgres:// USER_NAME : PASSWORD @ SERVER_URL : PORT_NUMBER / DATABASE_NAME
It'll look kinda like this (heroku passwords tend to contain a hyphen):
postgres://xxxxxx:[email protected]:5432/abcdefghijklmnop
Postgres GUIs
The steps for mongo are the same except the url will start with mongodb://
and you'll be setting it up in your mongo gui instead of PG Commander.
You'll need to click "create" to create a new connection and manually enter the connection details from heroku config
which will be in the following format.
MONGOLAB_URI: mongodb://username:password@server:port/remote_db_name
# which will look kinda like this:
MONGOLAB_URI: mongodb://heroku_abcdefg:[email protected]:12345/heroku-13411
Mongo GUIs: