2013-10-21 94 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的用户名和密码