postgresql:pg_restore: [archiver] input file does not appear to be a valid archive

本文解决使用ps_restore恢复数据库时遇到的inputfiledoesnotappeartobeavalidarchive错误。介绍了正确的备份及恢复方法,包括如何使用pg_dump生成正确格式的备份文件,并通过psql命令进行恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ps_restore恢复备份数据库出错:pg_restore: [archiver] input file does not appear to be a valid archive

使用
pg_dump -Fp -t mytable > mytable_back


g_dump  -t mytable > mytable_back

备份出来的为脚本(纯文本)文件,不能直接使用pg_restore进行恢复

需要使用命令psql \i

user>psql -U username -d mydb
username=# \i mytable_back


pg_dump和pg_restore的时候使用 格式为 custom(-F c )或tar格式(-F t)即可进行恢复


### 关于 `pg_restore` 出现输入文件无效归档错误的原因 当使用 `pg_restore` 恢复数据库时,如果遇到“输入文件无效归档”错误,通常是因为尝试用 `pg_restore` 命令处理的是由 `pg_dump` 生成的标准 SQL 脚本文件而非归档格式文件。`pg_restore` 工具仅支持处理通过 `-Fc`, `-Ft` 或其他归档模式生成的备份文件[^4]。 #### 解决方法 1. **确认备份文件格式** 如果备份文件是由 `pg_dump` 使用标准 SQL 输出模式(即未指定 `-Fc` 或 `-Ft` 参数)生成,则应直接执行该 SQL 文件而不是使用 `pg_restore`。可以通过以下命令加载数据: ```bash psql -h localhost -U postgres -d target_database -f backup_file.sql ``` 2. **重新生成归档格式备份文件** 若需要使用 `pg_restore` 恢复数据,请确保原始备份是以归档格式生成的。以下是生成不同归档格式备份文件的方法: #### Custom 归档格式 (`-Fc`) ```bash pg_dump -Fc -h localhost -U postgres -d source_database > backup_custom.dump ``` #### Tar 归档格式 (`-Ft`) ```bash pg_dump -Ft -h localhost -U postgres -d source_database > backup_tar.dump ``` 3. **验证备份文件有效性** 在恢复之前,建议先检查备份文件的有效性。对于 custom 格式的备份文件,可以运行以下命令查看其元信息: ```bash pg_restore --list backup_custom.dump ``` 对于 tar 格式的备份文件,可以直接解压并观察结构: ```bash tar -tvf backup_tar.dump ``` --- ### 如何正确使用 `pg_dump` 和 `pg_restore` 备份与恢复 PostgreSQL 数据库 (Custom/Tar 格式) #### 1. 使用 `pg_dump` 创建备份文件 根据需求选择不同的归档格式。以下是两种常见格式的具体实现方式: ##### (1)Custom 格式 (-Fc) ```bash pg_dump -Fc -h localhost -U postgres -d source_database > backup_custom.dump ``` 此命令会生成一个压缩的 binary 文件,适合用于后续通过 `pg_restore` 恢复。 ##### (2)Tar 格式 (-Ft) ```bash pg_dump -Ft -h localhost -U postgres -d source_database > backup_tar.dump ``` 此命令生成的备份文件更适合分发或存储大容量数据集。 #### 2. 使用 `pg_restore` 恢复备份文件 恢复过程取决于所选的归档格式以及目标环境配置。 ##### (1)恢复至现有数据库 假设目标数据库已存在,可直接导入数据而不创建新数据库实例: ```bash pg_restore -h localhost -U postgres -d target_database -v backup_custom.dump ``` ##### (2)恢复并创建新数据库 若目标数据库不存在,可通过 `-C` 参数让 `pg_restore` 自动创建数据库: ```bash pg_restore -C -h localhost -U postgres -d postgres -v backup_custom.dump ``` ##### (3)跨服务器迁移 在实际生产环境中,可能涉及将备份文件从源服务器传输到目标服务器后再进行恢复。具体流程如下: 1. 在源服务器上导出数据库: ```bash pg_dump -Fc -h localhost -U postgres -d source_database > dump_source.db ``` 2. 将备份文件复制到目标服务器(例如使用 SCP): ```bash scp dump_source.db user@target_server:/path/to/target/ ``` 3. 在目标服务器上恢复数据: ```bash pg_restore -C -h localhost -U postgres -d postgres -v /path/to/target/dump_source.db ``` --- ### 注意事项 - 确保备份和恢复过程中使用的用户名具有足够的权限访问相应数据库。 - 如果备份文件较大,推荐使用压缩工具进一步优化存储空间。 - 当前用户无权操作 PostgreSQL 的情况下,需显式指定主机地址 (`-h`) 和用户名 (`-U`)。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值