2012-02-05 76 views
8

我試圖將Heroku上的生產數據庫複製到我的臨時服務器上。Heroku pgbackups:恢復重建數據庫還是重新填充它?

我的登臺服務器已經在我的生產服務器之前進行遷移,創建一個額外的表。我現在想幹運行遷移以在生產數據庫上添加該表,因此想要恢復我的登臺數據庫以便這樣做。

問題是我每次把restore的升級數據庫都放到了生產的桌子上。我期待數據庫被銷燬並重新填充,但它似乎只是被重新填充。

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

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

每當我這樣做,我發現「新」表仍然存在。

pgbackups:restore實際上是恢復表結構還是簡單的數據 - 這裏發生了什麼?

回答

11

恢復是一個簡單的Postgres恢復,所以基本上是您的數據的腳本版本。

爲了做到這一點,你需要先核彈攻擊你的數據庫,然後從數據庫腳本重建它:

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

這是正確的。它目前僅在恢復備份之前刪除備份知道的關係。 – Will 2012-02-05 21:01:35

+0

輝煌,那工作的一種享受。我之前正在執行'heroku db:reset',那是我認爲簡單地截斷了表格 – 2012-02-05 21:13:46

+1

「不支持rake db:reset任務。Heroku應用程序沒有權限刪除和創建數據庫。使用heroku pg:reset命令「。 ref:http://devcenter.heroku.com/articles/rake – Magne 2012-03-12 13:28:05

4

尼爾表示,pgbackups:只恢復移動數據並沒有改變實際的數據庫結構。

完全恢復數據庫(更改應用,生產,應用,分期和migration_number以滿足您的應用程序):

首先,從你的生產當前遷移。

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

復位分期分貝(當然,備份,如果需要的話)

heroku pg:reset DATABASE_URL --confirm app-staging 

運行遷移,直到migration_number,以適應生產DB結構

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

捕獲生產應用

heroku pgbackups:capture --app app-production 

的數據推到分段應用

編輯 - 如果你正在使用Heroku的工具區,語法模式 已經從pgbackups:action_name現在改爲pg:backups action_name

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

分期分貝應匹配生產數據和結構

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

希望有所幫助。