暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Fd导出的文件,如何用pg restore来整库恢复呢?

原创 手机用户3390 2025-04-24
319

1. 准备工作

  • 备份文件:确保导出的文件是通过 pg_dump -Fc 生成的(例如 backup.dump)。

  • 权限:恢复用户需具有 CREATEDB 权限(若需要重建数据库)。

  • 依赖项:如果备份中不包含角色、表空间等全局对象,需手动预先创建。


2. 恢复整库到新数据库

场景:将备份恢复到 新数据库(例如 new_db),并自动创建该库。

bash

复制

下载

pg_restore \
  --host=localhost \
  --port=5432 \
  --username=postgres \
  --dbname=postgres \     # 在默认数据库下执行恢复操作
  --create \              # 自动创建目标数据库
  --clean \               # 清理旧对象(如果存在)
  --verbose \             # 显示恢复过程
  backup.dump

关键参数说明

  • --create:根据备份中的元数据创建新数据库(数据库名需与备份时一致)。

  • --clean:恢复前删除已有对象(避免冲突)。

  • --dbname=postgres:指定连接到默认数据库执行恢复(因为目标库可能尚未存在)。


3. 恢复整库到现有数据库

场景:覆盖或追加到 已有数据库(例如 existing_db)。

bash

复制

下载

pg_restore \
  --host=localhost \
  --port=5432 \
  --username=postgres \
  --dbname=existing_db \  # 目标数据库名
  --jobs=4 \              # 并行恢复(加快速度)
  --verbose \
  backup.dump

关键参数说明

  • --jobs=N:启用并行恢复(线程数建议与 CPU 核心数匹配)。

  • 注意:若备份与原库有冲突(如重复表),需添加 --clean 先删除旧对象。


4. 处理全局对象(角色、表空间等)

默认情况下,pg_dump 不会备份全局对象(如角色、表空间)。若需恢复这些对象:

步骤 1:单独备份全局对象

bash

复制

下载

pg_dumpall \
  --globals-only \
  --file=globals.sql \
  --username=postgres

步骤 2:先恢复全局对象

bash

复制

下载

psql -U postgres -f globals.sql

步骤 3:再恢复数据库

bash

复制

下载

pg_restore --dbname=existing_db --create --clean backup.dump

5. 常见问题与解决方案

Q1:恢复时报错“数据库已存在”

  • 原因:未使用 --create 或目标库已存在。

  • 解决

    bash

    复制

    下载
    # 手动删除旧库
    psql -U postgres -c "DROP DATABASE IF EXISTS old_db;"
    # 再执行恢复
    pg_restore --dbname=postgres --create backup.dump

Q2:权限不足导致恢复失败

  • 原因:恢复用户缺少 CREATEDB 或对象操作权限。

  • 解决

    sql

    复制

    下载
    -- 赋予权限(以超级用户执行)
    ALTER USER your_user WITH CREATEDB;

Q3:表空间路径不存在

  • 原因:备份中的表空间路径与恢复环境不一致。

  • 解决

    bash

    复制

    下载
    # 恢复前创建表空间目录
    mkdir -p /custom/tablespace/path
    chown postgres:postgres /custom/tablespace/path

6. 完整恢复流程示例

bash

复制

下载

# 1. 恢复全局对象(角色、表空间)
psql -U postgres -f globals.sql

# 2. 创建目标数据库(若未使用 --create)
psql -U postgres -c "CREATE DATABASE new_db;"

# 3. 并行恢复数据
pg_restore \
  --dbname=new_db \
  --jobs=4 \
  --verbose \
  backup.dump

总结

  • 推荐命令

    bash

    复制

    下载
    pg_restore --dbname=postgres --create --clean --verbose backup.dump
  • 关键点

    • 使用 --create 自动建库。

    • 并行恢复(--jobs=N)显著提升速度。

    • 确保全局对象(如角色)预先恢复。

通过以上步骤,可以高效、安全地完成 PostgreSQL 整库恢复。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论