pg_restore: во входном файле [архиватор] слишком короткая ошибка в postgres
Я пытаюсь сбросить базу данных в моей локальной системе с помощью команды:
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)
Что я делаю неправильно?
4 ответа
Если вы используете докер и перенаправляете файл дампа с локального компьютера, не забудьте -i
. Это не сработает:
docker exec <container> pg_restore -U "$USER" < ./localfile.dump;
Убедитесь, что докер-контейнер может видеть стандарт в -i
вариант! Это должно работать:
docker exec -i <container> pg_restore -U "$USER" < ./localfile.dump;
Я столкнулся с той же ошибкой. В моем случае я просто пренебрег указанием файла резервной копии в конце команды.
В моем случае я использовал докер
$ 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 fo
$ pv ~/2256.dump |docker-compose -f docker-compose.dev.yml -f docker-compose.override.yml -T db psql "fight-round3"
Используйте эту команду, она отлично подойдет для восстановления файла db с помощью файла sql в Postgres 13 в pgadmin 4
C:\Program Files\PostgreSQL\13\bin>psql -U user_name db_name< D:\dbfile\sql_file.sql