迁移RDS PostgreSQL数据到本地PostgreSQL

阿里云数据库PostgreSQL版支持通过逻辑备份文件将云上数据迁移到本地数据库。

前提条件

  • 本地已安装PostgreSQL,且数据库大版本与RDS PostgreSQL相同。

    说明

    本文所使用的备份工具pg_dump是PostgreSQL的自带工具,在本地安装PostgreSQL的同时会自动安装。

  • 本地数据库中已创建数据库且数据库中无数据,用于恢复数据。

  • 本地数据库已创建superuser用户。

操作步骤

  1. 在本地命令行窗口执行如下命令,备份数据。

    pg_dump -U <username> -h <hostname> -p <port> <databasename> -f <filename> --exclude-table=public.ha_health_check

    参数说明如下:

    参数

    说明

    username

    云数据库高权限账号名。如何创建高权限账号,请参见创建账号

    hostname

    云数据库主机名。

    port

    云数据库端口号。

    databasename

    要备份的数据库名。

    filename

    要生成的备份文件名称。

    --exclude-table=public.ha_health_check

    用于跳过高可用检查表。

    示例

    pg_dump -U testuser -h xxxx.pg.rds.aliyuncs.com -p 5432 testdb -f bkfile.sql --exclude-table=public.ha_health_check
  2. 执行如下命令将数据恢复到本地数据库。

    psql -U <username> -h <hostname> -d <databasename> -p <port> -f <filename.sql>

    参数说明如下:

    参数

    说明

    username

    本地数据库superuser用户名。

    hostname

    本地数据库地址,配置为localhost。

    port

    本地数据库端口号。

    databasename

    目的数据库名。

    filename

    备份文件名称。

    示例

    psql -U testuser -h localhost -d testdb -p 5432 -f bkfile.sql

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

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

常见问题

  • Q:恢复时报错ERROR: role "pg_rds_superuser" does not existWARNING: no privileges could be revoked for "xxxxx"如何处理?

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