如何修复使用tar文件迁移PostgreSQL时出现的psql语法错误?
问题根因
你通过pg_dump导出的tar格式备份属于PostgreSQL自定义归档格式,不是纯SQL文本,无法使用psql命令直接导入。psql只能解析纯SQL语句,你直接传入tar归档文件时,会首先识别到归档文件内的二进制元数据(比如报错中提到的toc.dat就是归档的内容目录文件),直接触发语法错误,后续的建表、授权等语句都无法正常执行,进而抛出一堆关系不存在、语法不合法的报错。
正确导入操作
- 首先确认目标库已创建,未创建的话先执行命令创建:
createdb newdb - 使用PostgreSQL配套的归档恢复工具
pg_restore导入tar格式备份:
pg_restore -d newdb newdb.tar
- 可根据场景添加常用参数调整导入行为:
-c:导入前先删除目标库中已存在的同名对象,避免对象冲突-U <用户名>:指定连接数据库的用户名-h <主机地址> -p <端口>:远程连接数据库时指定对应连接参数
- 如果后续希望使用
psql导入备份,导出时不需要指定-F t参数,直接导出为纯SQL格式即可:
# 导出纯SQL格式备份 pg_dump -f newdb.sql 源库名 # 用psql导入SQL备份 psql newdb < newdb.sql
内容的提问来源于stack exchange,提问作者Louis Castilllo
相关产品推荐
相关产品推荐

