pg_restore:[archiver]输入文件在postgres中的错误太短

时间:2016-04-07 07:37:28

标签: postgresql pg-restore database-dump

我正在尝试使用以下命令在本地系统中转储数据库:

pg_restore --host=localhost --port=5432 --dbname=dev_db --no-owner --no-privileges db_dump_new.backup

但我收到了错误:

pg_restore: [archiver] input file is too short (read 0, expected 5)

我做错了什么?

3 个答案:

答案 0 :(得分:4)

如果您正在使用docker并从本地计算机重定向转储文件,请不要忘记-i。这是行不通的:

docker exec <container> pg_restore -U "$USER" < ./localfile.dump;

请确保docker容器可以使用-i选项看到standard!这应该起作用:

docker exec -i <container> pg_restore -U "$USER" < ./localfile.dump;

答案 1 :(得分:1)

我遇到了同样的错误。在我的情况下,我只是忽略了在命令末尾指定备份文件。

答案 2 :(得分:0)

在我的情况下,我使用了docker

$ docker exec a5f7b094c523 pg_restore -d my_new_db < "./2256.dump"
pg_restore: [archiver] input file is too short (read 0, expected 5)

问题是“ ./2256.dump”不是二进制文件,而是纯SQL文本转储。

要检查是否正确

$ head ~/2256.dump                                                                                                    
--
-- PostgreSQL database dump
--

-- Dumped from database version 10.8 (Ubuntu 10.8-0ubuntu0.18.04.1)
-- Dumped by pg_dump version 10.8 (Ubuntu 10.8-0ubuntu0.18.04.1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;

并导入sql dump

$ pv ~/2256.dump |docker-compose -f docker-compose.dev.yml -f docker-compose.override.yml -T db psql "fight-round3"