PostgreSQL使用psql恢复dump备份文件提示template1不存在如何处理
PostgreSQL 恢复全量dump备份报错解决方法
报错核心原因
本次报错存在两个独立诱因:
- 本地PostgreSQL实例的系统模板库
template1被误删除,导致恢复流程无法调用默认模板库 - 导出备份的PostgreSQL版本高于当前恢复使用的版本:PostgreSQL 14及以上版本新增了
LOCALE数据库创建参数,13及更早版本无法识别该参数,会触发语法报错
解决步骤
1. 重建template1系统模板库
使用template0(只读基础模板库,不会被用户操作修改)作为数据源重建template1:
- 以超级用户身份连接template0库
psql -U postgres -d template0
- 在打开的SQL命令行中依次执行以下语句:
-- 解除template1的模板属性(如果有残留数据的话) UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; -- 清理残留的template1库 DROP DATABASE IF EXISTS template1; -- 用template0重建template1,可根据实际需求调整编码和区域规则 CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.UTF-8' LC_CTYPE = 'zh_CN.UTF-8' IS_TEMPLATE = TRUE; -- 恢复template1的系统模板属性 UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; -- 退出命令行 \q
2. 修复dump文件的版本兼容问题
用文本编辑器打开dumpall.sql文件,全局搜索所有包含LOCALE = 的行,删除整段LOCALE = 'xxx'的参数配置即可。
注意:仅删除
LOCALE相关配置,保留该行其他ENCODING、TEMPLATE等参数不要修改
3. 重新执行恢复操作
修改完成后再次执行恢复命令即可正常导入:
psql -U postgres -f dumpall.sql
内容的提问来源于stack exchange,提问作者Nima Bahrami
相关产品推荐
相关产品推荐

