【问题标题】:How can I download db from heroku?如何从heroku下载db?
【发布时间】:2013-06-06 00:45:20
【问题描述】:

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

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

【问题讨论】:

    标签: postgresql heroku mysqldump heroku-postgres


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      如果您使用 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

      【讨论】:

      • pgbackups 不再存在,现在似乎是 pg:backups。而且没有 pg:backups:url。
      • 前两个命令显然是逐字记录的,但在第三个命令中,我必须将 myuser 替换为我的 Postgres 用户名,并将 mydb 替换为我想要将数据转录到其中的数据库的名称。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        pg:拉动

        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
        

        来源:Importing and Exporting Heroku Postgres Databases with PG Backups

        【讨论】:

          【解决方案5】:

          这是我喜欢使用的脚本。

          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
          

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              猜你喜欢
              • 2014-02-23
              • 1970-01-01
              • 2015-08-23
              • 2015-06-03
              • 2021-06-27
              • 2012-11-28
              • 1970-01-01
              • 1970-01-01
              • 2014-07-31
              相关资源
              最近更新 更多