#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 предлагать всегда брать полные дампы в формате архива. Вы не можете фильтровать объекты для восстановления при использовании текстовых дампов.