本例介绍通过psql命令将PostgreSQL数据备份文件恢复到目标RDS中。

背景信息

PostgreSQL支持逻辑备份。我们使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到RDS中,实现将PostgreSQL的数据导入到RDS中。

前提条件

已完成RDS实例数据库的准备,可参见申请/释放外网地址创建数据库和账号

准备本地数据

  1. 通过PostgreSQL客户端,连接本地PostgreSQL数据库。
  2. 执行如下命令,备份数据。
    pg_dump -U username -h hostname -p port databasename -f filename

    参数说明如下:

    • username:本地数据库用户名。
    • hostname:本地数据库主机名,如果是在本地数据库主机登录,可以使用localhost。
    • port:本地数据库端口号。
    • databasename:要备份的本地数据库名。
    • filename:要生成的备份文件名称。

    例如,数据库用户William要备份本地PostgreSQL数据库,登录PostgreSQL主机后,通过如下命令备份数据。

    pg_dump -U William -h localhost -p 3433 pg001 -f pg001.sql

正式迁移操作

说明 通过 RDS 内网恢复数据,网络更稳定,数据更安全。建议您将数据上传到云服务器 ECS 上,然后通过内网将数据恢复到目标 RDS上。如果数据文件太大,可以先压缩后再上传。本例以该方式为例进行说明。
  1. 连接ECS实例
  2. 通过PostgreSQL客户端,执行如下命令将数据导入到RDS中。
    psql -U username -h hostname -d desintationdb -p port -f dumpfilename.sql

    参数说明如下:

    • username:RDS上的PostgreSQL数据库用户名。
    • hostname:RDS上的PostgreSQL数据库地址。
    • port:RDS上的PostgreSQL数据库端口号。
    • databasename:RDS上的PostgreSQL数据库名。
    • filename:本地备份数据文件名。

    例如:

    psql -U William -h postgresql.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql

    由于RDS数据库的权限设置和本地数据库不一致,在数据导入过程当中可能会出现一些与权限相关的WARNING或ERROR,可以忽略,例如:

    WARNING:  no privileges could be revoked for "xxxxx"
    ERROR:  role "xxxxx" does not exist