16

我想使用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。我需要你的帮助。谢谢!

4

4 回答 4

18

Are you actually typing in the token DATABASE in your commands, or is that a placeholder you're using for this question? From the 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.

When you do heroku config -a secure-gorge-4090, you should see an entry for HEROKU_POSTGRESQL_[SOME COLOR NAME]. Make sure you're using whatever that token is instead of DATABASE in your commands.

Since you have a username and password on your local database, you also need to do the part mentioned about PGUSER and PGPASSWORD. Here's the example from the pg:pull docs:

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

So you should do something like:

$ PGUSER=bill PGPASSWORD=bill heroku pg:push mysitedb HEROKU_POSTGRESQL_[SOME COLOR] -a secure-gorge-4090
于 2013-11-30T14:57:24.180 回答
10

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

这在heroku 支持网站上非常详细

首先安装免费的 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
于 2014-05-18T15:48:26.410 回答
3

您需要以下命令

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

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

于 2016-05-02T06:09:57.830 回答
0

我是一个懒惰的程序员,效率很高,所以这比为 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;

在此处输入图像描述

于 2021-03-30T04:15:59.300 回答