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
Другие вопросы по тегам