You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL从数据库转储备份恢复单个emp表报错如何解决

报错原因分析
  • 所有pg_restore命令报错「输入文件不是有效归档」的原因:pg_dump默认输出纯SQL文本格式,只有添加-Fc/-Ft/-Fd参数导出的自定义归档、tar、目录格式文件才能用pg_restore工具恢复。你直接用PowerShell重定向符>导出的文件,无论后缀是.sql还是.dump,本质都是普通文本文件,不符合pg_restore的输入要求。
  • psql执行.sql文件报字符语法错误的原因:PowerShell的>重定向符默认使用UTF-16 LE编码(带BOM头)输出文件,而psql默认按UTF-8编码读取文件,开头的BOM头被识别为乱码字符,导致语法报错。你导出的.dump文件同样是UTF-16编码的文本文件,不是有效归档格式,因此也无法用pg_restore识别。
正确恢复方案

方案1:处理现有备份文件恢复

  1. 先转码备份文件:用记事本打开empbackup.sql,选择「另存为」,编码下拉选择「UTF-8」后保存;也可以直接在PowerShell中执行转码命令:
    Get-Content empbackup.sql -Encoding Unicode | Set-Content empbackup_utf8.sql -Encoding UTF8
  2. 用psql执行转码后的文件即可完成恢复:
    psql -h localhost -p 5432 -U postgres -d postgres -f empbackup_utf8.sql

方案2:重新导出后恢复(操作更简单,兼容性更好)

方式A:纯SQL格式导出恢复

  1. 导出时直接用pg_dump的-f参数指定输出文件,不要用PowerShell的>重定向,避免编码问题:
    pg_dump -h localhost -p 5432 -U postgres -d postgres -t emp -f empbackup.sql
  2. 直接用psql执行导出的SQL文件:
    psql -h localhost -p 5432 -U postgres -d postgres -f empbackup.sql

方式B:归档格式导出恢复

  1. 导出时指定自定义归档格式:
    pg_dump -h localhost -p 5432 -U postgres -d postgres -t emp -Fc -f empbackup.dump
  2. 用pg_restore恢复单表:
    pg_restore -h localhost -p 5432 -U postgres -d postgres -t emp empbackup.dump

注意:如果目标数据库中已经存在emp表,恢复前可以先执行DROP TABLE IF EXISTS emp CASCADE;删除旧表,避免重复创建报错;也可以在恢复命令中添加对应忽略错误/覆盖的参数。

内容的提问来源于stack exchange,提问作者jian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:45:04