如何将Heroku PG转储导入本地计算机
我正在尝试将我的生产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#?ؚ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
知道发生了什么,以及如何解决它?
您看到错误,因为当您实际给他一个压缩转储时,psql会尝试解释SQL查询(这就是heroku使用的)。
虽然你无法读取转储,但pg_restore -O latest.dump
为你提供了有效的SQL,你可以管道到psql,但简单的解决方案是以下一个:
pg_restore -O -d app_development latest.dump
备注:
- 使用
-O
因为您可能不使用远程heroku postgres db的随机用户名。 - Heroku 不建议使用水龙头,但我不知道它有多么危险。
在终端中执行以下4个简单步骤
( Heroku开发中心 ):
-
创建数据库的备份副本:
$ heroku pg:backups capture DATABASE_NAME
-
使用curl从Heroku(到您的本地机器)下载副本:
$ 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并从
config/database.yml
文件中选择所需的数据库。 - DATABASE_NAME可以是您的开发/测试/生产数据库(例如,mydb_development)
- 获取YOUR_USERNAME并从
而已!
使用Taps gem。 它允许您运行一个简单的heroku db:pull
来填充本地数据库。
我想避免在我的本地机器上设置Postgres(如果你只是寻找快速说明,吹走并重新创建数据库会很痛苦)。 我在运行Docker的本地Postgres数据库中整理了一些确切的说明。 我在这里添加一个链接,因为谷歌一直带我到这个问题(这是一个可能的解决方案,虽然可能不是你想要的): https : //gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471
- 使用%Wildcards的Rails SQL查询在SQLite中工作但在PostgreSQL中不起作用?
- Rails 4迁移:has_and_belongs_to_many表名
- 如何使用ActiveRecord访问Postgres列的默认值?
- Rails schema.rb不包含新的自定义Postgres函数
- 根据用户历史自定义交易应用程序的主页和电子邮件:如何在Rails / postgreSQL上以正确的方式执行此操作?
- 如何将数据从ASCII(ISO / IEC 8859-1)导入到我的Rails / PGSQL数据库?
- ActiveRecord:如何找到所有孩子符合条件的父母?
- 在Heroku上,“PGError:致命:由于管理员命令终止连接”的原因是什么?
- 如何在vagranted虚拟机上访问postgresql?