我正试图使用以下命令将数据库转储到本地系统中:
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)
我做错了什么?
如果您使用docker并从本地机器重定向转储文件,请不要忘记-i
。这不起作用:
docker exec <container> pg_restore -U "$USER" < ./localfile.dump;
请确保docker容器可以在-i
选项中看到标准!这应该有效:
docker exec -i <container> pg_restore -U "$USER" < ./localfile.dump;
我遇到了同样的错误。在我的情况下,我只是忽略了在命令末尾指定备份文件。
在我的案例中,我使用了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转储
$ pv ~/2256.dump |docker-compose -f docker-compose.dev.yml -f docker-compose.override.yml -T db psql "fight-round3"
使用此命令,它将完美地使用pgadmin 4 中Postgres 13中的sql文件恢复数据库文件
C:Program FilesPostgreSQL13bin>psql -U user_name db_name< D:dbfilesql_file.sql