本章介绍RDS PPAS实例进行逻辑备份和恢复的步骤。

前提条件

已在本地主机或ECS安装EnterpriseDB。

操作步骤

  1. 在RDS实例上将所有用户权限赋予一个用户(用于数据导出)。
    例如:如果导出时使用的用户为A,而数据库中还有B和C两个用户,则需要执行下面的命令,把B和C的权限赋予A。
    --以用户B登录,然后执行:
     grant B to A;
     --再以用户C登录,然后执行:
     grant C to A;

    这样,A就有了访问所有B和C的数据表的权限。

  2. 在pg_dump所在目录(默认为/usr/pgsql-10/bin/),执行下面的命令进行备份。
    ./pg_dump -h <host> -p <port> -U <user> -f dump.sql <dbname>
  3. 如果需要恢复,可以在psql所在目录(默认为/usr/pgsql-10/bin/)执行如下命令。
    ./psql  -h <host> -p <port> -U <user> -d postgres -c "drop database <dbname>"
     ./psql  -h <host> -p <port> -U <user> -d postgres -c "create database <dbname>"
     ./psql  -h <host> -p <port> -U <user> -f dump.sql -d <dbname>

常见问题

  1. 从PPAS导出遇到如下权限错误。
    ERROR:  permission denied for relation product_component_version
     LOCK TABLE sys.product_component_version IN ACCESS SHARE MODE

    解决方案:这是由于用户使用PostgreSQL的pg_dump程序导出PPAS造成的。使用PPAS的二进制即可。PPAS的下载方法见上面的步骤。

  2. 从PPAS导出遇到如下权限错误。
    ERROR:  permission denied for relation xxxxx

    解决方案:这是由于导出时使用的账号没有访问其他用户数据的权限导致。解决方法为(如果用户可以接受),将其他用户的权限都授权给一个用户,再用这个用户导出,即执行如下命令。

    GRANT ROLE <other roles>,<other roles> to <user for pg_dump>
  3. 使用pg_dump时遇到如下问题。
    pgdump -U xxx -h yyy -p3433 <dbname> -f my.sql
     pg_dump: 命令行参数太多(第一个是'-f')

    解决方案:在windows平台执行pg_dump时,必须把<dbname>放在所有其他参数后面。

  4. 使用pg_dump时报参数错误。

    解决方案:可能是参数指定不正确,如pg_dump -Uxxx -h yyy,这种方式是不允许的,-U后面要有空格(其他参数类似)。