输入文件显示为文本格式转储。请使用 psql

我用

pg_dump db_production > postgres_db.dump

然后使用 scp 将其复制到 localhost。

现在,当我导入本地数据库时,它会出现一个错误

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

通过使用命令行

pg_restore -d db_development postgres_db.dump
213579 次浏览

根据 pg_dump文档:

例子

返回文章页面

$ pg_dump mydb > db.sql

返回文章页面

$ psql -d newdb -f db.sql

将数据库转储到自定义格式的归档文件中:

$ pg_dump -Fc mydb > db.dump

将数据库转储到目录格式存档中:

$ pg_dump -Fd mydb -f dumpdir

要将存档文件重新加载到名为 newdb 的(新创建的)数据库中:

$ pg_restore -d newdb db.dump

根据 pg_restore文档:

例子

假设我们已经将名为 mydb 的数据库转储到自定义格式的转储文件中:

$ pg_dump -Fc mydb > db.dump

删除数据库并从转储中重新创建它:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

上面的答案对我来说不起作用,这个起作用了:

psql db_development < postgres_db.dump

如果使用 pg _ dump 和 -Fp 以纯文本格式进行备份,请使用以下命令:

cat db.txt | psql dbname

将所有数据复制到名为 dbname 的数据库

对于我来说,当我尝试从远程主机恢复我使用

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

工作正常。如果不远程只是按照命令工作。

psql -d database < db.dump

如果你有一个完整的数据库转储:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

但是,如果您有单独保存的模式,那么就不会起作用。然后需要禁用数据插入触发器,类似于 pg_restore --disable-triggers。然后你可以这样做:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

顺便说一句,我认为这是 Postgres 非常不幸的缺点。在 pg_dump中创建转储的默认方法与 pg_restore不兼容。不过,有了一些额外的钥匙,就可以了。卧槽?

为了使用与 pg_restore兼容的 pg_dump创建备份,在创建转储时必须使用 --format=custom/-Fc

来自文件:

输出一个自定义格式的归档文件,该归档文件适合输入到 pg _ return 中。

因此,您的 pg_dump命令可能类似于:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

还有你的 pg_restore指令:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

对我来说,就像这样。

C:\Program Files\PostgreSQL\12\bin> psql -U postgres -p 5432  -d dummy -f C:\Users\Downloads\d2cm_test.sql

在创建备份时,可能需要在其他网络中还原备份或创建远程还原。

我们需要使用 --format=custom[ -Fc]创建一个备份文件,以便使用 pg_restore恢复它。我们可以使用连接字符串 postgresql://<user>:<pass>@localhost:5432/<dbname>并用您的信息替换 <user><pass><dbname>

pg_dump -v -Fc \
postgresql://<user>:<pass>@localhost:5432/<dbname> \
> db-20211122-163508.sql

要还原,我们将使用 --clean[ -c]和 --create[ -C]调用它,以便在还原之前删除数据库。用您的信息替换 <user><host><port><dbname>

pg_restore -vcC \
-U <user> \
-h <host> \
-p <port> \
-d <dbname> \
< db-20211122-163508.sql

如果你用这种方式备份,我认为这将更容易导入数据库。

Pg _ dump-h (远程 db 地址)-a —— column-insert-U postgres (database name) > (file name) . sql

进口方面,

< p > psql < br/> - f (文件名) . sql < br/> —— host (远程数据库地址) < br/> 端口5432 < br/> ——用户名 postgres < br/> —— password (your password) < br/> —— dbname (要导入的数据库)

< strong > 如果还原.SQL 文件。 在 pgAdmin 中创建一个新数据库。 转到终端并导航文件夹/目录。找到 sql 文件。然后在终端中写入以下命令。译注: < p > 句法: 超名用户 postgres psql newDatabasename < inputfile.sql

例如:

sudo -u postgres psql newDb < restoreDb.sql

我用 DBeaver 备份 db 时也出现了同样的错误。如果有人在 Windows 上使用 DBeaver 界面而不是命令行,请确保在备份和还原设置期间选择的格式为 沥青< img src = “ https://i.stack.imgur.com/VfwpY.jpg”alt = “ enter image description here”/> < img src = “ https://i.stack.imgur.com/VfwpY.jpg”alt = “在这里输入图像描述”/>

提供一个简单的一行答案,为我工作,也将为您的大多数情况下工作

Psql-U username-d database _ name < dump _ file. sql

如果上面给出了与角色相关的错误,那么用 postgres 替换用户名。

Psql-U postgres-d database _ name < dump _ file. sql

psql -U <username> -d <database-name> -h <host-name> -f <backup.sql>

这就是解决办法,

Pg _ return-U username-p 5432-h 10.10.10.1-d database _ name < dump _ file

我也一直在努力解决这个问题。下面是我所使用的 dump 和 return 命令的组合:

pg_dump -Ft -C -h database_host -U username database > DATA.dump

恢复

pg_restore -x --no-owner -d database DATA.dump

如果希望在数据库中保留 一样访问权限(ACL) ,请删除 X标志。为此,数据库中必须具有相同的角色和用户。

https://www.postgresql.org/docs/15/app-pgdump.html

https://www.postgresql.org/docs/15/app-pgrestore.html