pg_restore: error: unrecognized data block type (0) while searching archive while trying to import postgres database to heroku

pg_restore: error: unrecognized data block type (0) while searching archive while trying to import postgres database to heroku

我试图将本地数据库导入 Heroku,我从这个 Whosebug 问题中得到启发 Push database to Heroku: how to use Heroku pg:push。我运行的命令是

PGUSER=postgres PGPASSWORD=mypassword heroku pg:push mydatabse_name DATABASE_URL -a myapp

我收到这个错误 pg_restore: error: unrecognized data block type (0) while searching archive:

pg_dump: last built-in OID is 16383   
pg_dump: reading extensions
pg_dump: identifying extension members
pg_dump: reading schemas
...
pg_dump: dumping contents of table "public.user"
pg_restore: creating TABLE "public.alembic_version"
...
pg_restore: processing data for table "public.alembic_version"
pg_restore: error: unrecognized data block type (0) while searching archive
 !    pg_restore errored with 1

我想知道如何解决这个问题?

我在运行执行此命令时遇到了这个问题

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\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 上的数据库 link

您应该会看到类似这样的内容,如果行数为 0,则您的数据库可能为空。

通过 PgAdmin 连接到 heroku 数据库

  • 打开你的 PgAdmin 右键单击​​服务器并创建新服务器让我们将其命名为 Heroku

  • 现在单击“连接”选项卡并填写这些信息,您可以在 hroku 应用程序的设置选项下找到它们 Config Vars reveal vars=> DATABASE_URL

数据库url的格式是这样的: postgres://user:password@host:port/database 前任: postgres://unancmnpxrgkmp:ababd6bcfed84a29549c32278204762d41b04be284a8b81750cbb6d356f8bcc7@ec2-54-209-221-231.compute-1.amazonaws.com:5432/d22q7soeu9pv6u 所以像这样填写信息

  • 主机name/address:主机即:ec2-54-209-221-231.compute-1.amazonaws.com
  • 维护数据库:数据库即:d22q7soeu9pv6u
  • 用户名:用户名即:unancmnpxrgkmp
  • 密码=>密码即:ababd6bcfed84a29549c32278204762d41b04be284a8b81750cbb6d356f8bcc7

现在点击保存,打开服务器后您应该会看到类似这样的内容。您应该向下滚动,直到在上面找到您的数据库名称 d22q7soeu9pv6u,您可以打开它并检查表格,如果没有找到它,请刷新,确保您正确创建所有内容

Yeeeees,终于 ElhamdulilAllah :D