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

dwthyt8l  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(125)

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

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

5cnsuln7

5cnsuln71#

您是否在命令中实际输入了标记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

o7jaxewo

o7jaxewo2#

我知道这是一个古老的讨论,但我有完全相同的问题。虽然它不是很方便,我设法通过pg:备份代替。
这在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

bbmckpt7

bbmckpt73#

您需要以下命令

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

字符串
请输入正确的用户名和密码

lyfkaqu1

lyfkaqu14#

我是一个懒惰的程序员和效率,所以这是更容易,而不是支付AWS备份存储在Excel工作表。这保存成本,而不是使用PUSH:PUSH,这是没有效率的。
使用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;

字符串


的数据

3yhwsihp

3yhwsihp5#

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

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

经过验证ourput文件应该如下所示

--
-- 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:error:unrecognized data block type(0)while searching archive while trying to import postgres database to heroku

rlcwz9us

rlcwz9us6#

对于那些可能面临无法将本地PostgreSQL推送到heroku(WINDOWS)的问题的人,请听我说完
1.使用GUI或CLI在Heroku上创建插件
1.以管理员身份打开CMD
1.首先,dump SCHEMA仅使用pg_dump -s -f <DB_OUTPUT_NAME_ONLY_SCHEMA> --no-owner --no-acl -U <USERNAME> <LOCAL_DB_NAME>
1.其次,使用heroku pg:psql --app <APP_NAME> < <DB_OUTPUT_NAME_ONLY_SCHEMA>在heroku上恢复数据库
1.第三,dump仅限数据使用pg_dump -a -f <DB_OUTPUT_NAME_ONLY_DATA> --no-owner --no-acl -U <USERNAME> <LOCAL_DB_NAME>
1.第四,使用heroku pg:psql --app <APP_NAME> < <DB_OUTPUT_NAME_ONLY_DATA>恢复heroku上的数据

相关问题