【问题标题】:How to import a Heroku PG dump into local machine如何将 Heroku PG 转储导入本地机器
【发布时间】:2012-06-06 20:00:26
【问题描述】:

我正在尝试将我的生产 Heroku 数据库导入我的开发机器。

我的本​​地数据库是 PostgreSQL。

首先,我将转储从 Heroku 导出到我的机器

curl -o latest.dump `heroku pgbackups:url`

然后,我尝试使用rake db:drop 删除本地数据库,然后使用rake db:create 再次创建空数据库。

我遇到的问题是实际尝试将转储导入数据库时​​

psql -d app_development -U myusername -f mydumpfile.sql

我开始看到这样的错误

psql:latest.dump:24: ERROR:  syntax error at or near "PGDMP"
LINE 1: PGDMP
        ^
psql:latest.dump:28: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1
        ^
psql:latest.dump:36: ERROR:  syntax error at or near ""
LINE 1:     id integer NOT NULL,
        ^
psql:latest.dump:40: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1
        ^
psql:latest.dump:45: ERROR:  syntax error at or near ""
LINE 1:     id integer NOT NULL,
        ^
psql:latest.dump:49: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1

... 

psql:latest.dump:1601: invalid command \S4???(?̭?A?|c?e0<00K?A?}FϚ?????A(??~?t?I?????G(?    K???l??k"?H?ȁ?ͲS?,N*?[(@??a5J??j}
psql:latest.dump:1602: invalid command \??k???|??w???h?
psql:latest.dump:1603: invalid command \=??????o?h?
psql:latest.dump:1609: invalid command \????^.?????????E???/-???+??>#?ؚE?.2)Ȯ&????    g????"7},_??]?:?f?Tr|o???)?p????h?KO?08[Rqu???|3?cW?ڮ?ahbm??H?H8??$???2?a?-أ
psql:latest.dump:1613: invalid command \D!qVS???L??*??׬R??I!???
psql:latest.dump:1614: invalid command \??-?}Q
psql:latest.dump:12565: ERROR:  invalid byte sequence for encoding "UTF8": 0xb0

知道发生了什么以及如何解决它吗?

【问题讨论】:

  • 您不使用 Taps 是否有特定原因rubydoc.info/gems/taps/0.3.24/frames?它允许您运行一个简单的heroku db:pull 来填充本地数据库。我不确定这是否会解决你的问题,但它更方便:)
  • 其实你是对的。安装了水龙头 gem,现在它可以完美运行了。出于某种原因,即使我使用的是 postgresql,taps gem 仍然需要在 gem 文件上声明 taps 和 sqlite3。想试试你的答案吗?
  • 完成了。关于 gem 要求,是的,即使您使用的是 PG,也需要声明这些要求有点烦人。 ://

标签: ruby-on-rails postgresql


【解决方案1】:

使用Taps gem。它允许您运行一个简单的heroku db:pull 来填充本地数据库。

【讨论】:

    【解决方案2】:

    您看到错误是因为 psql 在您实际给他 compressed dump(这就是 heroku 使用的)时尝试解释 SQL 查询。

    虽然您无法读取转储文件,但pg_restore -O latest.dump 为您提供了可以通过管道传输到 psql 的有效 SQL,但简单的解决方案如下:

    pg_restore -O -d app_development latest.dump
    

    注意事项:

    • 使用-O,因为您可能不使用远程heroku postgres db 的随机用户名。
    • Heroku doesn't recommend to use taps 但我不知道它的风险有多大。

    【讨论】:

    【解决方案3】:

    在您的终端中执行以下 4 个简单步骤
    (Heroku Dev Center):

    1. 创建数据库的备份副本:

      $ heroku pg:backups capture DATABASE_NAME
      
    2. 使用 curl 从 Heroku 下载副本(到您的本地计算机):

      $ curl -o latest.dump `heroku pg:backups public-url`
      
    3. 加载它*:

      $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump
      
      • 获取 YOUR_USERNAME 并从您的 config/database.yml 文件中选择所需的数据库。
      • DATABASE_NAME 可以是您的开发/测试/生产数据库(例如 mydb_development)

    就是这样!

    【讨论】:

    • 新界面是:heroku pgbackups:capture,然后是curl -o latest.dump `heroku pg:backups public-url`
    • 警告:heroku addons:add 已被弃用。请改用heroku addons:create。请更新您的帖子!
    • @arniotaki,您能否添加对更改的引用?
    • 谢谢! pg_restore 工作得非常好。 Heroku 还允许您单击一个按钮并下载数据库转储。我就是这样做的,将它重命名为“latest.dump”,一个 dit 似乎已经顺利进行了。
    • 如果您不确定要为 USERNAME 输入什么内容,请尝试使用“postgres”或您的计算机登录名(在我的 Mac 上对我有用)。
    【解决方案4】:

    我想避免在我的本地计算机上设置 Postgres(如果您只是在寻找快速说明,那么吹走并重新创建数据库会很痛苦)。我整理了一些使用运行 Docker 的本地 Postgres 数据库执行此操作的确切说明。我在这里添加了一个链接,因为谷歌一直把我带到这个问题上(这是一个可能的解决方案,虽然可能不是你想要的): https://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471

    【讨论】:

      【解决方案5】:

      Heroku 导出数据库的 .dump 扩展文件以导入任何关系数据库,并具有自己的规范和条件。 将其导入本地 postgres 数据库时,首先将文件 latest.dump 下载到本地计算机,然后运行

      pg_restore -h localhost -p 5432 -U postgres_username -d db_name -v latest.dump
      

      并重新启动 rails 服务器。

      【讨论】:

        【解决方案6】:

        2021 年末更新迄今为止投票最高的答案(效果很好):

        $ rails db:drop db:create db:migrate

        $ heroku pg:backups 捕获 DATABASE_URL

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

        $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump

        • 在本地机器上获取 YOUR_USERNAME

        • DATABASE_NAME 可以是您的 config/database.yml 文件中的开发/测试/生产数据库(例如 rails_react_bootstrap_development)。

        • DATABASE_URL 不是您需要设置的变量或示例代码。这是一个有效的 heroku 选项

        【讨论】:

          猜你喜欢
          • 2015-05-24
          • 2022-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-12
          • 2016-01-04
          • 2017-11-22
          • 2022-08-16
          相关资源
          最近更新 更多