Как импортировать свалку Heroku PG в локальную машину
Я пытаюсь импортировать свою базу данных Heroku производства в свою машину разработки.
Мой локальный db - PostgreSQL.
Во-первых, я экспортирую дамп из Heroku на свою машину
curl -o latest.dump `heroku pgbackups:url`
Затем я пытаюсь удалить локальный db с помощью 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
Любая идея, что происходит с этим и как его решить?
Ответы
Ответ 1
Вы видите ошибки, потому что psql пытается интерпретировать SQL-запросы, когда вы на самом деле даете ему сжатый дамп (то, что использует герою).
Пока вы не можете прочитать дамп, pg_restore -O latest.dump
дает вам правильный SQL, вы можете подключиться к psql, но простым решением является следующее:
pg_restore -O -d app_development latest.dump
Примечания:
- Используйте
-O
, потому что вы, вероятно, не используете случайное имя пользователя вашего удаленного сервера postgres db.
- Heroku не рекомендует использовать краны, но я не знаю, насколько это рискованно.
Ответ 2
Следуйте этим 4 простым шагам в вашем терминале
(Центр разработки Heroku):
-
Создайте резервную копию вашей базы данных:
$ heroku pg:backups capture DATABASE_NAME
-
Загрузите копию с Heroku (на свой локальный компьютер), используя curl:
$ 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)
Это!
Ответ 3
Используйте Taps gem. Он позволяет запускать простой heroku db:pull
для заполнения локальной базы данных.
Ответ 4
Мне не хотелось настраивать Postgres на моем локальном компьютере (сдувание и воссоздание базы данных - это боль, если вы просто ищете быстрые инструкции). Я собрал некоторые точные инструкции для этого с локальной базой данных Postgres, работающей с Docker. Я добавляю ссылку здесь, поскольку Google продолжал приводить меня к этому вопросу (и это возможное решение, хотя, вероятно, не то, что вы ищете):
https://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471