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

问题描述 投票:0回答:6

我想使用

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

heroku database-migration heroku-postgres
6个回答
20
投票

您实际上是在命令中输入了标记

DATABASE
,还是您在该问题中使用的占位符?从您链接到的文档

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

由于您在本地数据库中有用户名和密码,因此您还需要执行有关

PGUSER
PGPASSWORD
提到的部分。这是
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

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

3
投票

您需要以下命令

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

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


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;


0
投票

对我来说没有任何问题的工作是

pg_dump -f database_output_name --no-owner --no-acl -U user_name name_of_your_local_database
  • database_output_name
    输出文件的名称,您可以将其重命名为任何备份、数据库...等
  • user_name
    :postgres sql user_name 主要是postgres
  • name_of_your_local_database
    :是您的数据库名称:mydb 或您提供的任何名称,如果您忘记了,可以在 PgAdmin 中查看
  • pg_dump
    我已将其导出到全局路径,这就是我这样使用它的原因,您可以使用绝对路径调用它的其他方式,即:
    C:\"Program Files"\PostgreSQL\14\bin\pg_dump

生成的我们的输入文件应该看起来像这样

--
-- PostgreSQL database dump
--

-- Dumped from database version 14.1
-- Dumped by pg_dump version 14.1

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: alembic_version; Type: TABLE; Schema: public; Owner: -
--

CREATE TABLE public.alembic_version (
    version_num character varying(32) NOT NULL
);

...

现在运行此命令在heroku上创建数据库

heroku pg:psql --app heroku_app_name < database_output_name

如果您想重置数据库,可以运行此命令

heroku pg:reset -a heroku_app_name

现在您可以通过单击 postgres 链接来检查 heroku 上的数据库 请检查此答案以获取更多详细信息:pg_restore:错误:在尝试将 postgres 数据库导入到heroku时搜索存档时无法识别的数据块类型(0)


0
投票

对于任何可能面临无法将本地 postgreSQL 推送到 heroku (WINDOWS) 问题的人,请听我说完

  1. 使用 GUI 或 CLI 在 Heroku 上创建插件
  2. 以管理员身份打开 CMD
  3. 首先,
    dump
    架构仅使用
    pg_dump -s -f <DB_OUTPUT_NAME_ONLY_SCHEMA> --no-owner --no-acl -U <USERNAME> <LOCAL_DB_NAME>
  4. 第二,使用
    heroku pg:psql --app <APP_NAME> < <DB_OUTPUT_NAME_ONLY_SCHEMA>
  5. 恢复 Heroku 上的数据库
  6. 第三,
    dump
    仅数据使用
    pg_dump -a -f <DB_OUTPUT_NAME_ONLY_DATA> --no-owner --no-acl -U <USERNAME> <LOCAL_DB_NAME>
  7. 第四,使用
    heroku pg:psql --app <APP_NAME> < <DB_OUTPUT_NAME_ONLY_DATA>
  8. 恢复heroku上的数据
© www.soinside.com 2019 - 2024. All rights reserved.