将数据库推送到heroku:如何使用heroku pg:push

Posted

技术标签:

【中文标题】将数据库推送到heroku:如何使用heroku pg:push【英文标题】:Push database to heroku: how to use heroku pg:push 【发布时间】:2013-10-29 17:36:32 【问题描述】:

我想使用heroku pg:push 命令将我的本地postgresql 数据库推送到heroku。该命令如下所示:heroku pg:push mylocaldb DATABASE --app sushi,根据 heroku 文档:https://devcenter.heroku.com/articles/heroku-postgresql。

这是我的本地数据库信息:

Name: mysitedb
User: bill
Password: bill

我机器中的DATABASE_URL环境变量设置为:postgres://bill:bill@localhost/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 来重置我的数据库。之后我又试了heroku pg:push mysitedb DATABASE --app secure-gorge-4090,结果还是一样。

我试过heroku pg:push postgres://bill:bill@localhost:8000/mysitedb DATABASE --app secure-gorge-4090。输出是:

!    LOCAL_SOURCE_DATABASE is not a valid database name

我不知道如何使用此命令将我的本地数据库移动到 heroku。我需要你的帮助。谢谢!

【问题讨论】:

【参考方案1】:

您实际上是在命令中输入令牌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

【讨论】:

感谢您关注这个未解决的老问题!我刚刚在我的命令中输入了DATABASE。事实上,DATABASE 已经被设置为我的默认数据库——HEROKU-POSTGRESQL-VIOLET。所以命令heroku pg:push mysitedb DATABASE --app secure-gorge-4090heroku 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,但出现了同样的错误。 哪个错误?您提到“远程数据库不为空”错误和“LOCAL_SOURCE_DATABASE 不是有效的数据库名称”错误。 您是否在 HEROKU_POSTGRESQL_COBALT 上运行了 pg:reset? 谢谢——当我运行“heroku config:get -a secure-gorge-4090”时,我得到一个缺少参数的异常——当然我使用的是我自己的应用程序名称 @carols10cents 我得到'PGUSER' is not recognized as an internal or external command, operable program or batch file. 请帮忙【参考方案2】:

我知道这是一个古老的讨论,但我遇到了完全相同的问题。虽然不太方便,但我设法通过 pg:backups 实现了这一点。

这在heroku support site 上已经很详细了

首先安装免费的 pgbackups 插件:

heroku addons:add pgbackups

然后使用本地 pg_dump 实用程序(包含在 PostGreSQL 发行版中)备份数据库

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

然后将该转储文件放在 URL 可寻址的位置(例如 Dropbox)并运行 heroku 导入(确保它是 Windows 的双引号):

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

【讨论】:

需要注意两点:警告:heroku addons:add 已被弃用。请改用heroku addons:create。 !找不到“pgbackups”的附加服务或附加计划。【参考方案3】:

你需要以下命令

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

确保您输入了正确的 postgres 用户名和密码

【讨论】:

我得到 'PGUSER' 不是内部或外部命令、可运行程序或批处理文件。【参考方案4】:

我是一个懒惰的程序员,效率很高,所以这比为 AWS 备份支付费用要容易得多,将它们存储在 Excel 表中。 这样可以节省成本并且不使用效率不高的 PUSH: PULL。

使用 CMD 作为 ADMIN 将 Excel 数据插入 Heroku Postgres 数据库。

按照说明进行

1. OPEN CMD AS ADMIN

2. heroku pg:sql postgresql-rugged-08088 --app sample

3. CREATE TABLE SERIAL_T (  id SERIAL , SERIAL VARCHAR(50),  USE INT,    DEVICES TEXT[], PRINTED BOOLEAN,  PRIMARY KEY (id))

4. \COPY SERIAL_T (SERIAL, USE, DEVICES, PRINTED) FROM 'C:\Users\PATH\EXCEL-03-27-2021.csv' DELIMITER ','CSV HEADER;

【讨论】:

以上是关于将数据库推送到heroku:如何使用heroku pg:push的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的节点应用程序成功推送到Heroku?

如何将不同的分支推送到不同的 Heroku 应用程序?

无法推送到heroku

未能将一些参考资料推送到 git@heroku.com

无法使用 Vapor 将 swift 包推送到 Heroku

如何更新堆栈并将克隆的应用程序推送到 Heroku [重复]