Ошибка при использовании pg_restore для восстановления базы данных в docker compose

#postgresql #docker #docker-compose #docker-volume #pg-restore

#postgresql #docker #docker-compose #docker-volume #pg-восстановление

Вопрос:

Я выполнил следующие команды для создания файла дампа

 sudo docker-compose up -d db
sudo docker exec –i container_name pg_dump –username username database_name > desired_path/dump.sql
  

А затем я добавил файл в существующий том в docker-compose.override.yml файле

 version: '3.7'  
services:  
  db:  
    container_name: seqdb-db-container  
    volumes:  
      - ./dump.sql:path_to_volume_used_by_container  
    ports:  
      - 5432:5432  
  

Наконец я запускаю

 sudo docker exec –i container_name psql –username username database_name < path_to_dump_file
  

и я получаю следующую ошибку:

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

Я хочу использовать docker exec pg_restore без установки psql . Есть ли решение этой проблемы или я неправильно смонтировал свой том?

Ответ №1:

Из документов pgdump:

-F format
—format=format
Выбирает формат вывода. формат может быть одним из следующих:

p
простой
вывод простого текстового файла SQL-скрипта (по умолчанию).

Таким образом, формат вывода по умолчанию pg_dump — это текстовый SQL-файл (который, как представляется, вы ожидаете, потому что вы вызываете вывод dump.sql )

Теперь из документации для pg_restore

pg_restore — это утилита для восстановления базы данных PostgreSQL из архива, созданного pg_dump в одном из форматов, отличных от обычного текста.

Таким образом, ошибка, input file appears to be a text format dump. Please use psql , следует ожидать, исходя из ваших действий. pg_restore не поддерживает восстановление текстовых дампов — для восстановления тех, которые вы должны использовать psql (согласно ошибке).

Быстрое решение — запросить не обычный текстовый формат при использовании pg_dump (например --format=custom ). Однако я немного смущен вашим нежеланием использовать psql ?

Комментарии:

1. Я поддержал, будет ли irl предлагать всегда брать полные дампы в формате архива. Вы не можете фильтровать объекты для восстановления при использовании текстовых дампов.