您可以将逻辑备份文件中的数据恢复到RDS PostgreSQL实例或本地PostgreSQL数据库中。

背景信息

对于少量的数据,您可以使用逻辑备份进行快速恢复,例如恢复某个表的数据。对于大量的数据,建议您使用全量物理备份恢复数据到新实例上,然后通过数据传输服务DTS迁移回现有实例

前提条件

逻辑备份PostgreSQL数据

注意事项

  • 恢复数据时连接的数据库建议不要用默认数据库postgres。
  • 恢复指定表数据时不会尝试还原指定表可能依赖的数据库对象,因此无法保证将指定表还原到干净的数据库时一定会成功。

恢复数据库

  1. 登录已备份数据的ECS实例或本地主机,使用如下命令恢复数据。
    pg_restore -h '<hostname>' -U <username> -p <port> -d <dbname> <dumpdir>
    参数 说明
    hostname RDS PostgreSQL实例连接地址。
    说明
    username RDS PostgreSQL实例高权限账号名称。
    port RDS PostgreSQL实例端口。
    dbname 待恢复数据的数据库名称。
    dumpdir 备份文件路径及名称。

    示例

    pg_restore -h 'pgm-bpxxxxx.pg.rds.aliyuncs.com' -U test123 -p 3433 -d testdb2 /tmp/testdb.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。
    说明 请忽略内嵌插件plpgsql的报警。
    使用逻辑备份文件恢复数据_恢复_RDS PostgreSQL 数据库_云数据库 RDS 版 阿里云技术文档 第1张

恢复指定表数据

  1. 登录已备份数据的ECS实例或本地主机,使用如下命令恢复指定表的数据。
    pg_restore -h '<hostname>' -U <username> -p <port> -d <dbname> -t <table> -c <dumpdir>
    参数 说明
    hostname RDS PostgreSQL实例连接地址。
    说明
    username RDS PostgreSQL实例高权限账号名称。
    port RDS PostgreSQL实例端口。
    dbname 待恢复数据的数据库名称。
    table 待恢复的表名。
    -c -c表示在恢复时,会先删除数据库对象再恢复。更多选项的详细说明请参见pg_restore
    dumpdir 备份文件路径及名称。

    示例

    pg_restore -h 'pgm-bpxxxxx.pg.rds.aliyuncs.com' -U test123 -p 3433 -d testdb2 -t products -c /tmp/testdb.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。
    使用逻辑备份文件恢复数据_恢复_RDS PostgreSQL 数据库_云数据库 RDS 版 阿里云技术文档 第2张

恢复数据库模式(不恢复数据)

  1. 登录已备份数据的ECS实例或本地主机,使用如下命令恢复数据库模式。
    pg_restore -h '<hostname>' -U <username> -p <port> -d <dbname> -s <dumpdir>
    参数 说明
    hostname RDS PostgreSQL实例连接地址。
    说明
    username RDS PostgreSQL实例高权限账号名称。
    port RDS PostgreSQL实例端口。
    dbname 待恢复模式的数据库名称。
    table 待恢复的表名。
    -s -s表示仅恢复模式,不恢复数据。更多选项的详细说明请参见pg_restore
    dumpdir 备份文件路径及名称。

    示例

    pg_restore -h 'pgm-bpxxxxx.pg.rds.aliyuncs.com' -U test123 -p 3433 -d testdb4 -s /tmp/testdb2.dump
  2. 命令行提示Password:时,输入PostgreSQL实例高权限账号对应的密码,然后按回车键确认。
    说明 请忽略内嵌插件plpgsql的报警。
    使用逻辑备份文件恢复数据_恢复_RDS PostgreSQL 数据库_云数据库 RDS 版 阿里云技术文档 第3张