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

PostgreSQL 16使用pg_restore无报错但未创建数据库求助

PostgreSQL 16 pg_restore -C 未创建数据库问题排查方案

问题描述

环境:Windows 11 Pro + PostgreSQL 16
执行恢复命令:pg_restore -C -d postgres -v -h localhost -p 5432 -U postgres "C:\[file_path]\filename.dmp"
现象:无报错信息,但目标数据库未被创建,已查阅官方文档及相关社区帖子仍未解决。

排查与解决步骤

  • 确认备份文件格式:pg_restore的-C(自动创建数据库)选项仅对自定义格式(pg_dump -Fc生成)或目录格式备份生效。如果是SQL文本格式备份,直接用psql执行即可,无需使用pg_restore。
  • 导出完整执行日志:虽然命令加了-v参数,但可通过重定向输出到文件,查看隐藏的警告或执行细节:
    pg_restore -C -d postgres -v -h localhost -p 5432 -U postgres "C:\[file_path]\filename.dmp" > restore_log.txt 2>&1
    
    打开restore_log.txt,检查是否存在CREATE DATABASE语句被跳过的记录。
  • 验证用户权限:确保postgres用户拥有创建数据库的权限,登录psql执行:
    SELECT rolcreatedb FROM pg_roles WHERE rolname = 'postgres';
    
    返回t表示有权限;若返回f,执行以下语句赋予权限:
    ALTER ROLE postgres CREATEDB;
    
  • 检查备份内容:用pg_restore -l列出备份文件中的所有对象,确认是否包含CREATE DATABASE语句:
    pg_restore -l "C:\[file_path]\filename.dmp" > backup_list.txt
    
    打开文件搜索CREATE DATABASE,如果不存在,说明备份时未添加-C参数,需重新用pg_dump -C生成包含数据库创建语句的备份。
  • 手动创建数据库后恢复:如果备份本身不包含创建数据库的逻辑,可先手动创建目标数据库,再执行恢复:
    # 手动创建数据库
    createdb -h localhost -p 5432 -U postgres target_db
    # 恢复到指定数据库
    pg_restore -d target_db -v -h localhost -p 5432 -U postgres "C:\[file_path]\filename.dmp"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:33:17