web-dev-qa-db-ja.com

Herokuからdbをダウンロードするにはどうすればよいですか?

私はherokuを使用していて、私のアプリ(heroku)からデータベースをダウンロードして、変更を加えることができます。pgbackupsをインストールしましたが、heroku pgbackups:urlは.dumpファイルをダウンロードします

Postgresqlファイルをダウンロードしたり、その.dumpをpostgresqlファイルに変換したりするにはどうすればよいですか?

27
Sascuash

Herokuのpgbackups(おそらく使用しているはずです)を使用している場合:

$ heroku pg:backups capture
$ curl -o latest.dump `heroku pg:backups public-url`

それをpostgres dbに「翻訳」してください

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

https://devcenter.heroku.com/articles/heroku-postgres-import-export を参照してください

48
AlexQueue

CLIにはこのためのコマンドがあります-heroku db:pullはこれを実行します。 db:pullは少し気が遅いので、次のオプションを使用する方がよい場合があります。

複雑なpostgressデータ型(hstore、配列など)を使用している場合は、pgtransferプラグイン https://github.com/ddollar/heroku-pg-transfer を使用する必要があります。これにより、基本的にバックアップが実行されますHerokuで、ローカルに復元します。

更新:db:pulldb:Pushは非推奨になりました。pg:pullpg:Pushに置き換える必要があります-詳細は https://devcenter.heroku.com/をご覧ください) Articles/heroku-postgresql#pg-Push-and-pg-pull

14
John Beynon

ドキュメントのプル/プッシュ で提案されている最初の方法がさらに簡単であることがわかりました。パスワードやユーザー名は必要ありません。

pg:pull

pg:pullを使用して、Heroku Postgresデータベースからローカルマシンのデータベースにリモートデータをプルできます。コマンドは次のようになります。

$ heroku pg:pull HEROKU_POSTGRESQL_Magenta mylocaldb --app sushi

このコマンドは、「mylocaldb」という名前の新しいローカルデータベースを作成し、アプリ「sushi」からDATABASE_URLのデータベースからデータをプルします。偶発的なデータの上書きと損失を防ぐために、ローカルデータベースが存在していてはなりません。続行する前に、既存のローカルデータベースを削除するように求められます。

最初にエラーが発生しました:/bin/sh: createdb: command not found;私はこれを次のように解決しました this SO post


ドキュメントにも記載されている代替策は(私はまだ試していません):

Heroku Postgresデータベースからデータをエクスポートするには、新しいバックアップを作成してダウンロードします。

$ heroku pg:backups:capture

$ heroku pg:backups:download

ソース: PGバックアップを使用したHeroku Postgresデータベースのインポートとエクスポート

3
J0ANMM

Heroku Postgresデータベースからデータをエクスポートするには、以下の手順に従ってください

  1. Herokuにログイン
  2. APP-> settings-> reveal config変数に移動します
  3. DATABASE_URLをコピー
  4. 実行pg_dump --DATABASE_URL_COPIED_IN_STEP_3 > database_dump_file

これによりpostgresqlファイルが提供されるか、ダンプファイルの場合はpostgresアドオンインターフェイスから直接ダウンロードできます。

0
svikramjeet

これは私が使いたいスクリプトです。

namespace :heroku do

  desc "Import most recent database dump"
  task :import_from_prod => :environment do
    puts 'heroku run pg:backups capture --app APPNAME'
    restore_backup 'APPNAME'
  end

  def path_to_heroku
    ['/usr/local/heroku/bin/heroku', '/usr/local/bin/heroku'].detect {|path| File.exists?(path)}
  end

  def heroku(command, site)
    `GEM_HOME='' BUNDLE_GEMFILE='' GEM_PATH='' RUBYOPT='' #{path_to_heroku} #{command} -a #{site}`
  end

  def restore_backup(site = 'APPNAME')
    dump_file = "#{Rails.root}/tmp/postgres.dump"
    unless File.exists?(dump_file)
      pgbackups_url = heroku('pg:backups public-url -q', site).chomp
      puts "curl -o #{dump_file} #{pgbackups_url}"
      system "curl -o #{dump_file} '#{pgbackups_url}'"
    end
    database_config = YAML.load(File.open("#{Rails.root}/config/database.yml")).with_indifferent_access
    dev_db = database_config[Rails.env]
    system "pg_restore -d #{dev_db[:database]} -c #{dump_file}".gsub(/\s+/,' ')
    puts
    puts "'rm #{dump_file}' to redownload postgres dump."
    puts "Done!"
  end
end
0
MZaragoza

ローカルサーバーにデータベースをダウンロードして複製する最も簡単な方法は次のとおりです。

 **PGUSER**=LOCAL_USER_NAME PGPASSWORD=LOCAL_PASSWORD heroku pg:pull --app APP_NAME HEROKU_POSTGRESQL_DB_NAME LOCAL_DB_NAME

詳細については、このドキュメントを参照してください: https://devcenter.heroku.com/articles/heroku-postgresql#pg-Push-and-pg-pull

0
niraj