我在一台机器上使用 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
-Ft
pg_restore
需要记住的是,在 Postgresql 中,典型场景,备份通常由pg_dump(普通)并使用标准命令行客户端进行还原(查询语言)。
答案3
尝试将--format=c
选项传递给pg_dump
。这将允许pg_restore
恢复它。
答案4
对于 Windows 用户请尝试
type db.txt | psql --username="YOURNAME" dbname
奇迹般有效