2011-08-22 140 views
12

Según el título, necesito importar, pero las copias de seguridad de PG me dan un Postgres SQL estricto que no funciona con MySQL, también con una codificación no especificada que creo que es UTF-16. Usando db: pull toma años y errores antes de terminar. Agradecería cualquier sugerencia. Gracias.¿Cómo importar una gran base de datos de Heroku a mysql o sqlite3 local?

+0

Tengo un problema- similares cómo obtener una copia de seguridad * * sin instalar PG localmente. Es posible que desee editar su pregunta para incluir esto (como lo hizo en un comentario a continuación). –

Respuesta

23

Configure localmente PostgreSQL, use PG backups para copiar los datos de Heroku a su máquina local, luego pg_restore para importarlos en su nuevo PostgreSQL local. Luego puede copiarlo de PostgreSQL a MySQL o SQLite localmente sin tener que preocuparse por los tiempos de espera. O bien, dado que usted tendría una instalación funcional de PostgreSQL después de eso, simplemente comience a desarrollar sobre PostgreSQL para que su pila de desarrollo se adapte mejor a su pila de implementación; Desarrollar y desplegar en la misma base de datos es una buena idea.

Probablemente obtenga volcados binarios (es decir, pg_dump -Fc) de Heroku, eso explicaría por qué el volcado parece una especie de tonterías UTF-16.

Puede utilizar los pgbackups addon para exportar el volcado de la base

$ heroku addons:add pgbackups # To install the addon 
$ curl -o latest.dump `heroku pgbackups:url` # To download a dump 
+1

Hola, gracias, pero la instalación de PG para desarrollar es lo que quería evitar. Puede ser útil tener el mismo DB en dev, pero para la mayoría de los proyectos, simplemente no vale la pena, me quedaría con SQLite3. – aledalgrande

+2

Al final terminé instalando PG (o puede usar el enviado con Lion). El proceso fue: * crear un usuario PG * restaurar el volcado con pg_restore * instalar el ** ** y ** pg grifos gemas ** * iniciar el servidor grifos en Postgres: postgres 'grifos servidor: // root @ localhost/rcp_dev tapsuser tapspassword' * extrae los datos de sqlite3 (lo mismo para mysql): 'toca pull sqlite: //db/development.sqlite3 http: // usuario de taps: tapspassword @ localhost: 5000' – aledalgrande

+4

@aledalgrande: Desarrollar en PostgreSQL absolutamente vale la pena si se está implementando en Heroku. Todas las bases de datos tienen diferencias sutiles y no tan sutiles (GROUP BY, sensibilidad de caso, booleanos, disponibilidad de funciones, tipos de datos, requisitos de conversión, truncar o generar una excepción, ...) y ningún ORM puede protegerlo de todos ellos. Ahórrate algo de dolor, desarrolla y despliega en la misma pila. –

22

Heroku tiene instrucciones sobre cómo hacer esto: https://devcenter.heroku.com/articles/heroku-postgres-import-export#restore-to-local-database, que se reducen a:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump 

donde myuser es la corriente usuario y mydb es la base de datos actual.

Si está usando Postgres.app, es bastante trivial copiar su base de datos de producción localmente. Usted puede dejar de lado -U myuser menos que haya configurado de otra manera, y crear una base de datos mediante la ejecución de $ psql -h localhost y luego CREATE DATABASE your_database_name; (del Postgres.app documentation. A continuación, ejecute el comando anterior y ya está establecido.

4

Siga estos 4 pasos simples en su terminal
(Heroku Dev Center):

  1. Instalar la herramienta de copia de seguridad Heroku:

    $ heroku addons:add pgbackups 
    
  2. empezar a utilizarlo:

    $ heroku pgbackups:capture 
    
  3. Descargar el DB alejado de Heroku (a su máquina local) utilizando rizo:

    $ curl -o latest.dump 'heroku pg:backups public-url' 
    
  4. carga él *:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump 
    
    • obtener su nombre de usuario y elija el base de datos deseada de su archivo config/database.yml.
    • DATABASE_NAME puede ser su desarrollo/prueba/db producción (Ej. Mydb_development)

eso es todo!

ACTUALIZACIÓN: Se actualiza a la nueva interfaz

Cuestiones relacionadas