Skip to content

Instantly share code, notes, and snippets.

@stevelacey
Created March 27, 2014 16:10
Show Gist options
  • Select an option

  • Save stevelacey/9811196 to your computer and use it in GitHub Desktop.

Select an option

Save stevelacey/9811196 to your computer and use it in GitHub Desktop.
Capistrano 3 tasks for pushing/pulling a Postgres db
set :user, "my-ssh-user"
set :db, YAML::load(IO.read("config/database.yml")) # assumes rails
namespace :db do
desc "Push database"
task :push do
run_locally do
db = fetch(:db)
env = fetch(:rails_env)
server = fetch(:server)
user = fetch(:user)
execute "
pg_dump
--host localhost
--username #{db["development"]["username"]}
--create
--format c
#{db["development"]["database"]}
|
ssh -C #{user}@#{server} '
PGPASSWORD=#{db[env]["password"]}
pg_restore
--host localhost
--username #{db[env]["username"]}
--dbname #{db[env]["database"]}
'
"
.gsub(/\n/, '')
.squeeze(' ')
end
end
desc "Pull database"
task :pull do
run_locally do
db = fetch(:db)
env = fetch(:rails_env)
server = fetch(:server)
user = fetch(:user)
execute "
ssh -C #{user}@#{server} '
PGPASSWORD=#{db[env]["password"]}
pg_dump
--host localhost
--username #{db[env]["username"]}
--create
--format c
#{db[env]["database"]}
'
|
pg_restore
--username #{db["development"]["username"]}
--dbname #{db["development"]["database"]}
--clean
"
.gsub(/\n/, '')
.squeeze(' ')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment