ruby on rails - pricing - Cómo importar un volcado Heroku PG en una máquina local
pg reset heroku (4)
Sigue estos 4 sencillos pasos en tu terminal.
( Heroku Dev Center ):
Cree una copia de seguridad de su base de datos:
$ heroku pg:backups capture DATABASE_NAME
Descargue la copia de Heroku (a su máquina local) usando curl:
$ curl -o latest.dump ''heroku pg:backups public-url''
Cárgalo*:
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump
- obtenga YOUR_USERNAME y elija la base de datos deseada de su archivo
config/database.yml
. - DATABASE_NAME puede ser su base de datos de desarrollo / prueba / producción (Ej. Mydb_development)
- obtenga YOUR_USERNAME y elija la base de datos deseada de su archivo
¡Eso es!
Estoy tratando de importar mi base de datos de producción Heroku a mi máquina de desarrollo.
Mi db local es PostgreSQL.
Primero, estoy exportando el volcado de Heroku a mi máquina
curl -o latest.dump `heroku pgbackups:url`
Luego, trato de eliminar la base de datos local con rake db:drop
y luego vuelvo a crear la base de datos vacía utilizando rake db:create
.
El problema que obtengo es cuando en realidad intento importar el volcado a la base de datos
psql -d app_development -U myusername -f mydumpfile.sql
Empiezo a ver errores como este.
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
¿Alguna idea de qué está pasando esto y cómo resolverlo?
Quería evitar tener que configurar Postgres en mi máquina local (volar y recrear la base de datos es un dolor si solo buscas instrucciones rápidas). Reuní algunas instrucciones exactas para hacer esto con una base de datos local de Postgres que ejecuta Docker. Estoy agregando un enlace aquí, ya que Google me llevó a esta pregunta (y es una posible solución, aunque probablemente no sea lo que está buscando): https://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471
Utilice la gema rubydoc.info/gems/taps/0.3.24/frames . Le permite ejecutar un simple heroku db:pull
para completar una base de datos local.
Ves errores porque psql intenta interpretar las consultas SQL cuando en realidad le estás dando un volcado comprimido (eso es lo que usa heroku).
Si bien no puede leer el volcado, pg_restore -O latest.dump
le brinda un SQL válido que podría canalizar a psql pero la solución más fácil es la siguiente:
pg_restore -O -d app_development latest.dump
Notas:
- Utilice
-O
porque probablemente no use el nombre de usuario aleatorio de su db remoto de heroku postgres. - Heroku no recomienda usar grifos, pero no sé qué tan arriesgado es.