首页 > 解决方案 > 在 docker compose 中使用 pg_restore 恢复数据库时出错

问题描述

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

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。是否有解决方案,或者我是否错误地安装了我的卷?

标签: postgresqldockerdocker-composedocker-volumepg-restore

解决方案


pgdump 文档

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

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

因此,默认输出格式pg_dump是纯文本 SQL 文件(它看起来是您所期望的,因为您调用了 output dump.sql

现在来自pg_restore 的文档

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

因此input file appears to be a text format dump. Please use psql,应该根据您的操作预期错误。pg_restore不支持恢复纯文本转储 - 恢复您应该使用的转储psql(根据错误)。

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


推荐阅读