pg_dump 和 pg_restore:输入文件似乎不是有效的档案

pg_dump 和 pg_restore:输入文件似乎不是有效的档案

我在一台机器上使用 pg_dump 并将结果文件复制到另一台机器,然后尝试恢复它。我相信架构是一样的。但是,我得到:

pg_restore:[archiver] 输入文件似乎不是有效的档案

我已完成以下操作:

pg_dump -a -f db.txt dbname

和:

pg_restore -a -d dbname db.txt

可能出了什么问题?

答案1

您正在以纯 SQL 格式转储,该格式旨在提供给psql。 无法识别它pg_restore

cat db.txt | psql dbname

应该可以

答案2

pg_dump默认情况下会创建重建数据所需的 sql 命令。要恢复数据,只需调用psql(而不是pg_restore)并将文件作为输入。pg_restore仅适用于二进制(非默认,不常用且不推荐)格式pg_dump。阅读文档

更新:要使用的pg_dump二进制格式( )是可以的,并且提供了一些额外的灵活性。但它们不太标准(非 SQL),不太适合从某些工具(例如 php 前端)导入或使用文本编辑器进行操作,并且不太容易移植到其他版本甚至其他数据库。对于备份,我会坚持使用默认的纯文本格式。对于其他场景,二进制 + pg_restore 选项可能同样或更合适。-Fc -Ftpg_restore

需要记住的是,在 Postgresql 中,典型场景,备份通常由pg_dump(普通)并使用标准命令行客户端进行还原(查询语言)。

答案3

尝试将--format=c选项传递给pg_dump。这将允许pg_restore恢复它。

答案4

对于 Windows 用户请尝试

type db.txt | psql --username="YOURNAME" dbname

奇迹般有效

相关内容