2012-02-05 10 views
8

Estoy intentando copiar mi base de datos de producción en Heroku a través de mi servidor de transferencia.Does Heroku pgbackups: restaurar reconstruir la base de datos o simplemente repoblarla?

Mi servidor de transferencia ha estado delante de mi servidor de producción con una migración que crea una tabla adicional. Ahora quiero ejecutar la migración en seco para agregar esa tabla en la base de datos de producción y, por lo tanto, me gustaría revertir la base de datos de mi escenario para poder hacerlo.

El problema es que cada vez que restore la base de datos de transición a la de producción la tabla se queda. Esperaba que la base de datos se destruyera y se volviera a llenar, pero parece que solo se está repoblando.

heroku pgbackups:url b104 --app production 
# 'http://s3.amazonaws.com/...' 

heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/...' --app staging 

Cada vez que hago esto, me parece que la tabla "más reciente" aún está disponible.

¿Realmente pgbackups:restore restaura la estructura de la tabla o simplemente datos? ¿Qué está pasando aquí?

Respuesta

11

Una restauración es una restauración simple de Postgres, por lo que básicamente es una versión con guión de sus datos.

Con el fin de hacer esto, es necesario bombardear su base de datos primero, y luego reconstruirla a partir de la secuencia de comandos de base de datos:

heroku pg:reset 
heroku pgbackups:restore blah... 
+0

Esto es correcto. En este momento, solo elimina las relaciones que conoce la copia de seguridad antes de restaurar la copia de seguridad. – Will

+0

Brillante, eso funcionó bien.Estaba haciendo 'heroku db: reset' antes y eso fue simplemente truncando las tablas –

+1

" La tarea de rake db: reset no es compatible. Las aplicaciones de Heroku no tienen permiso para soltar y crear bases de datos. Use el comando heroku pg: reset " ref: http://devcenter.heroku.com/articles/rake – Magne

4

como dijo Neil, los pgbackups: restaurar sólo mueve los datos y no cambia la estructura de db real.

para restaurar completa db (modificar aplicación-producción, aplicación, puesta en escena y migration_number para adaptarse a su aplicación):

primer lugar, obtener la migración actual de su producción.

heroku run rake db:version --app app-production 

reinicio db puesta en escena (naturalmente, una copia de seguridad si es necesario)

heroku pg:reset DATABASE_URL --confirm app-staging 

ejecutar las migraciones hasta migration_number para adaptarse a la estructura db producción

heroku run rake db:migrate VERSION=current_migration_number --app app-staging 

captura de la aplicación de producción

heroku pgbackups:capture --app app-production 

empujar los datos a la aplicación puesta en escena

EDITAR - en caso de que esté utilizando el cinturón de herramientas heroku, el patrón de sintaxis ha cambiado de pgbackups:action_name a pg:backups action_name

heroku pgbackups:restore DATABASE "heroku pgbackups:url --app app-production" --app app-staging 

el PP puesta en escena debe ahora coincide con los datos de producción y la estructura

heroku run rake db:migrate --app app-staging 

Espero que ayude.

Cuestiones relacionadas