Подтвердить что ты не робот

Как импортировать свалку 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

Любая идея, что происходит с этим и как его решить?

4b9b3361

Ответ 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):

  1. Создайте резервную копию вашей базы данных:

    $ heroku pg:backups capture DATABASE_NAME
    
  2. Загрузите копию с Heroku (на свой локальный компьютер), используя curl:

    $ 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)

Это!

Ответ 3

Используйте Taps gem. Он позволяет запускать простой heroku db:pull для заполнения локальной базы данных.

Ответ 4

Мне не хотелось настраивать Postgres на моем локальном компьютере (сдувание и воссоздание базы данных - это боль, если вы просто ищете быстрые инструкции). Я собрал некоторые точные инструкции для этого с локальной базой данных Postgres, работающей с Docker. Я добавляю ссылку здесь, поскольку Google продолжал приводить меня к этому вопросу (и это возможное решение, хотя, вероятно, не то, что вы ищете): https://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471