33

我正在使用heroku,我想从我的应用程序(heroku)下载数据库,这样我就可以对其进行一些更改,我已经安装了pgbackups,但是使用heroku pgbackups:url下载一个.dump文件

如何下载 postgresql 文件或将该 .dump 转换为 postgresql 文件?

4

6 回答 6

61

如果您使用 Heroku 的 pgbackups(您可能应该使用它):

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

将其“翻译”为 postgres 数据库

$ 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

于 2013-06-13T19:05:52.807 回答
14

CLI 中有一个用于此的命令 -heroku db:pull它将为您执行此操作。db:pull可能有点慢,所以你最好使用下一个选项。

如果您使用复杂的 postgress 数据类型(hstore、数组等),那么您需要使用 pgtransfer 插件https://github.com/ddollar/heroku-pg-transfer基本上会在 Heroku 上进行备份并在本地恢复它.

更新:db:pullanddb:push已被弃用,应替换为pg:pulland - 在https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and-pg-pullpg:push阅读更多内容

于 2013-06-10T11:21:56.563 回答
5

我发现文档中建议的第一种方法pull/push更容易。无需密码或用户名。

pg:拉

pg:pull 可用于将远程数据从 Heroku Postgres 数据库拉取到本地计算机上的数据库。该命令如下所示:

$ heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi

此命令将创建一个名为“mylocaldb”的新本地数据库,然后DATABASE_URL从应用程序“sushi”的数据库中提取数据。为了防止意外的数据覆盖和丢失,本地数据库必须不存在。在继续之前,系统将提示您删除已经存在的本地数据库。

起初我有一个错误:/bin/sh: createdb: command not found; 我在this SO post之后解决了这个问题。


文档中还描述了另一种方法(我还没有尝试过)是:

要从 Heroku Postgres 数据库中导出数据,请创建一个新备份并下载它。

$ heroku pg:backups:capture

$ heroku pg:backups:download

来源:使用 PG 备份导入和导出 Heroku Postgres 数据库

于 2017-01-25T19:40:25.507 回答
2

要从 Heroku Postgres 数据库中导出数据,只需按照以下步骤操作

  1. 登录到heroku
  2. 转到APP->设置->显示配置变量
  3. 复制 DATABASE_URL
  4. pg_dump --DATABASE_URL_COPIED_IN_STEP_3 > database_dump_file

请注意,这将提供 postgresql 文件或转储文件,您可以直接从 postgres 插件界面下载。

于 2019-04-09T05:42:49.597 回答
0

这是我喜欢使用的脚本。

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
于 2019-04-09T05:04:04.003 回答
0

我认为在本地服务器上下载和复制数据库的最简单方法:

 **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

于 2016-07-29T05:49:44.467 回答