使用pg_restore在Docker中还原数据库时出错

问题描述

我运行了以下命令来创建转储文件

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。有解决方案吗?还是我的卷安装不正确?

解决方法

来自pgdump docs

-F格式
--format = format
选择输出格式。格式可以是以下之一:

p
普通
输出纯文本SQL脚本文件(默认)。

因此pg_dump的默认输出格式是纯文本SQL文件(由于您将输出称为dump.sql而出现在您期望的位置)

现在从docs for pg_restore

pg_restore是一种实用程序,用于从pg_dump创建的非明文格式之一的存档中恢复PostgreSQL数据库。

因此,应根据您的操作来预测错误input file appears to be a text format dump. Please use psqlpg_restore不支持还原纯文本转储-还原那些应该使用psql(根据错误)。

快速解决方案是在使用pg_dump(例如--format=custom)时请求非纯文本格式。但是,您不愿使用psql对我有些困惑?