文档首页/ 云数据库 RDS/ 用户指南/ RDS for PostgreSQL用户指南/ 大版本升级/ 通过SQL命令转储与还原升级大版本
更新时间:2024-09-25 GMT+08:00

通过SQL命令转储与还原升级大版本

操作场景

升级RDS for PostgreSQL引擎大版本,能让您享受到RDS for PostgreSQL新版本带来的功能、性能、安全的提升。但大版本升级可能存在向后不兼容的数据变更,可能导致现有业务运行不兼容。因此需要用户使用目标版本测试确保业务能够正常运行后,再执行大版本升级。

本章节中“源数据库”表示待升级的低版本RDS for PostgreSQL数据库,“目标数据库”表示待升级到的高版本RDS for PostgreSQL数据库。

RDS for PostgreSQL版本号说明

  • RDS for PostgreSQL v10及其以上版本的版本号由major.minor组成。其中,major表示大版本号,minor表示小版本号。大版本升级是指major部分增加,比如:11.x升级到12.x。
  • RDS for PostgreSQL v10之前的版本号由major.major.minor组成。其中,major.major表示大版本号,minor表示小版本号。大版本升级是指如major.major部分增加,比如:从9.5.x升级到9.6.x或者从9.x.x升级到10.x。

准备工作

  1. 查看待升级的云数据库 RDS for PostgreSQL实例信息。
    1. 在“实例管理”页面,单击待升级实例名称,进入待升级实例概览页面。
    2. 在“概览”页面中,可以查看到实例所属区域、可用区、虚拟私有云、子网、安全组。
  2. 准备弹性云服务器

    通过弹性云服务器连接云数据库RDS实例,需要创建一台弹性云服务器

    该弹性云服务器的区域、可用区、虚拟私有云、子网、安全组与待升级RDS for PostgreSQL实例相同。

  3. 2中的弹性云服务器上,安装PostgreSQL客户端。

    请参见如何安装PostgreSQL客户端

    弹性云服务器需要安装和RDS for PostgreSQL数据库服务端相同版本的数据库客户端,PostgreSQL数据库或客户端会自带pg_dumppg_restorepsql工具。

  4. 通过psql连接源数据库,在每一个数据库上执行如下sql,获取已使用列表。

    select extname from pg_extension;

  5. 根据查看的已使用列表,选择一个包含当前所有插件的目标升级版本。

    RDS for PostgreSQL各版本支持的插件,参考支持的插件列表

  6. 参考创建参数模板,创建一个兼容待升级实例参数的目标版本参数模板。
  7. 创建目标版本RDS for PostgreSQL实例。
    • 创建RDS for PostgreSQL实例,请参见购买实例
    • 目标版本RDS for PostgreSQL实例所属区域、可用区、虚拟私有云、子网、安全组与源实例相同。
  8. 2中的弹性云服务器上,通过psql连接目标数据库,确认目标实例连接正常。

操作步骤

以下操作均在已准备的弹性云服务器上执行。

  1. 使用psql连接源数据库,执行以下sql,获取数据库列表。

    postgres=# \l

  2. 使用psql连接目标数据库,执行以下sql,确认1中的所有数据库在目标数据库中是否均存在。

    postgres=# \l

    • 存在,执行3
    • 不存在,执行以下sql创建缺失的数据库,然后执行3

      postgres=# create database my_target_db;

      • 模板库template0、template1不需要迁移。
      • 默认创建的数据库postgres,一般不会存放业务数据,也不需要迁移。但是如果存放了业务数据,也需要迁移。

  3. 使用pg_dump转储源数据库,并使用pg_restore恢复到目标数据库。针对每一个业务库,重复执行3~4

    • 对于除RDS for PostgreSQL 11外的其他版本,转储命令如下:

      pg_dump -Fc -v --host=source_IP --port=source_port --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db

    • 对于RDS for PostgreSQL 11版本,转储命令如下:

      pg_dump -Fc -v --host=source_IP --port=source_port -Ndbms_lob -Ndbms_output -Ndbms_random -Nsys -Nutl_raw -Npg_catalog --username=my_user --dbname=my_source_db | pg_restore -v --no-owner --host=target_IP --port=target_port --username=my_user --dbname=my_target_db

    • pg_dump所使用的登录用户需要拥有访问该数据库所有对象的权限。
    • pg_restore所使用的登录用户需要拥有该数据库的所有操作权限。
    • 授权操作请参考grant
    • 若pg_dump命令使用-N参数,blob对象不会被导出。
    • 若pg_dump命令使用-Fc参数,则导出的文件格式为二进制格式,如果需要导出sql类型的文件请使用-Fp参数。

  4. 每迁移完一个数据库,就可以通过目标数据库测试相应业务,保证业务在目标数据库中运行正常。
  5. 请务必确保验证业务可以在目标库正常运行后,再将业务切换到目标数据库,然后删除源数据库。