2013-10-21 120 views
10

我想使用heroku pg:push命令將我的本地postgresql數據庫推送到heroku。該命令如下所示:heroku pg:push mylocaldb DATABASE --app sushi根據heroku文檔:https://devcenter.heroku.com/articles/heroku-postgresql將數據庫推送到heroku:如何使用heroku pg:push

這裏是我的本地數據庫信息:

Name: mysitedb 
User: bill 
Password: bill 

在我的機器的DATABASE_URL環境變量設置爲:postgres://bill:[email protected]/mysitedb

我的應用名稱是secure-gorge-4090。我試過heroku pg:push mysitedb DATABASE --app secure-gorge-4090。輸出是:

! Remote database is not empty. 
! Please create a new database, or use `heroku pg:reset` 

我很驚訝,我已經把什麼到我的數據庫。但我仍然運行heroku pg:reset DATABASE來重置我的DATABASE。之後,我再次嘗試heroku pg:push mysitedb DATABASE --app secure-gorge-4090,但輸出仍然相同。

我試過heroku pg:push postgres://bill:[email protected]:8000/mysitedb DATABASE --app secure-gorge-4090。輸出是:

! LOCAL_SOURCE_DATABASE is not a valid database name 

我不知道如何使用此命令將我的本地數據庫移動到heroku。我需要你的幫助。謝謝!

回答

12

您是否在命令中實際輸入令牌DATABASE,還是您正在使用此問題的佔位符?從docs you linked to

Like pull but in reverse, pg:push will push data from a local database into 
a remote Heroku Postgres database. The command looks like this: 

$ heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi 

This command will take the local database 「mylocaldb」 and push it to the 
database at DATABASE_URL on the app 「sushi」. In order to prevent accidental 
data overwrites and loss, the remote database must be empty. You will be 
prompted to pg:reset an already a remote database that is not empty. 

Usage of the PGUSER and PGPASSWORD for your local database is also supported 
for pg:push, just like for the pg:pull commands. 

當你做heroku config -a secure-gorge-4090,你應該看到HEROKU_POSTGRESQL_[SOME COLOR NAME]條目。確保你在命令中使用的是任何令牌,而不是DATABASE

由於您在本地數據庫中有用戶名和密碼,因此您還需要執行關於PGUSERPGPASSWORD的部分。下面是來自pg:pull文檔的例子:

$ PGUSER=postgres PGPASSWORD=password heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi 

所以,你應該這樣做:

$ PGUSER=bill PGPASSWORD=bill heroku pg:push mysitedb HEROKU_POSTGRESQL_[SOME COLOR] -a secure-gorge-4090 
+0

感謝您關注這個尚未解決的問題!我只是在我的命令中輸入了'DATABASE'。事實上,'DATABASE'已經被設置爲我的默認數據庫 - 'HEROKU-POSTGRESQL-VIOLET'。所以命令'heroku pg:push mysitedb DATABASE --app secure-gorge-4090'和'heroku pg:push mysitedb HEROKU-POSTGRESQL-VIOLET --app secure-gorge-4090'應該具有相同的效果。遵照你的建議,我創建了一個名爲'HEROKU_POSTGRESQL_COBALT'的新數據庫,並嘗試了'PGUSER = bill PGPASSWORD = bill heroku pg:push mysitedb HEROKU_POSTGRESQL_COBALT --app secure-gorge-4090',但是同樣的錯誤發生了。 –

+0

哪個錯誤?您提到「遠程數據庫不爲空」錯誤並且「LOCAL_SOURCE_DATABASE不是有效的數據庫名稱」錯誤。 – carols10cents

+0

「遠程數據庫不空」錯誤。 –

6

我知道這是一個古老的討論,但我有完全相同的問題。儘管它不太方便,但我通過pg:backups來設法實現了這一點。

這是通過安裝免費pgbackups插件的詳細相當漂亮的heroku support site

開始:

heroku addons:add pgbackups 

然後備份使用本地pg_dump的實用程序數據庫(包括在PostgreSQL的發行版)

pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dmp 

然後把這個轉儲文件放在URL地址(例如適用於Windows的Dropbox),然後運行Heroku的進口(確保它的雙引號):

heroku pg:backups:restore 'https://dropbox.com/dYAKjgzSTNVp4jzE/mydb.dmp' DATABASE_URL 
+1

只有這樣,我發現那些作品。謝謝 – longJOURNEY

+1

需要注意的兩件事:警告:'heroku addons:add'已被棄用。請使用'heroku addons:create'代替。 !無法找到附加服務或「pgbackups」的附加計劃。 – jasonleonhard

0

你需要下面的命令

PGUSER=root PGPWD=root heroku pg:push (local database name) DATABASE_URL --app heroku (app name) 

確保您已輸入正確的Postgres的用戶名和密碼