九游平台/ 云数据库 rds/ 用户指南/ rds for postgresql用户指南/ 数据库迁移/ 使用psql命令迁移rds for postgresql数据
更新时间:2025-02-12 gmt 08:00

使用psql命令迁移rds for postgresql数据-九游平台

迁移准备

postgresql支持逻辑备份。您可使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到rds中,实现将postgresql的数据导入到云数据库rds中。

云数据库rds九游平台的服务支持开启公网访问功能,通过弹性公网ip进行访问。您也可通过弹性云服务器的内网访问云数据库rds

准备工作

  1. 准备弹性云服务器或可公网访问云数据库rds
    • 通过弹性云服务器连接云数据库rds实例,需要创建一台弹性云服务器
    • 通过公网地址连接云数据库rds实例,需具备以下条件。
      1. 先对云数据库rds实例绑定公网地址,如何绑定公网地址,请参见绑定弹性公网ip
      2. 保证本地设备可以访问云数据库rds绑定的公网地址。
  2. 1中的弹性云服务器或可访问云数据库rds的设备上,安装postgresql客户端。

    如何安装postgresql客户端,请参见步骤2:测试连通性并安装postgresql客户端

    弹性云服务器或可访问云数据库rds的设备上需要安装和rds for postgresql数据库服务端相同版本的数据库客户端,postgresql数据库或客户端会自带pg_dump和psql工具。

导出数据

要将已有的postgresql数据库迁移到云数据库rds,需要先对它进行导出。

  • 相应导出工具需要与数据库引擎版本匹配。
  • 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
  • 导出或导入数据时,请谨慎,避免因操作不当导致实例或业务异常。
  1. 登录已准备的弹性云服务器,或可访问云数据库rds的设备。
  2. 使用pg_dump将源数据库导出至sql文件。

    pg_dump--username=--host= --port= --format=plain --file=

    • db_user为数据库用户。
    • db_address为数据库地址。
    • db_port为数据库端口。
    • backup_file为要导出的文件名称。
    • db_name为要迁移的数据库名称。

    根据命令提示输入数据库密码。

    导出的sql文件为insert语句时可以更容易地编辑和手动修改,但是导入数据的速度可能会比使用copy语句慢一些,建议根据实际情况选择导出合适的语句格式。

    更多使用,请参见。

    示例如下:

    • 示例一:导出源数据库至sql文件(copy语句)。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db

      password for user root:

    • 示例二:导出源数据库至sql文件(insert语句)。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --inserts --file=backup.sql my_db

      password for user root:

    • 示例三:导出源数据库中所有表结构至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --schema-only --file=backup.sql my_db

      password for user root:

    • 示例四:导出源数据库中所有表数据至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --data-only --file=backup.sql my_db

      password for user root:

    命令执行完会生成“backup.sql”文件,如下:

    [rds@localhost ~]$ ll backup.sql
    -rw-r-----. 1 rds rds 2714 sep 21 08:23 backup.sql
  3. 使用pg_dump将源数据库中的表导出至sql文件。

    pg_dump --username= --host= --port= --format=plain --file= --table=

    • db_user为数据库用户。
    • db_address为数据库地址。
    • db_port为数据库端口。
    • backup_file为要导出的文件名称。
    • db_name为要迁移的数据库名称。
    • table_name为要迁移的数据库中指定表名称。

    根据命令提示输入数据库密码。

    示例如下:

    • 示例一:导出源数据库中指定的单表至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test

      password for user root:

    • 示例二:导出源数据库中指定的多表至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test1 --table=test2

      password for user root:

    • 示例三:导出源数据库中以ts_开头的所有表至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=ts_*

      password for user root:

    • 示例四:导出源数据库中除ts_开头之外的所有表至sql文件。

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db -t=ts_*

      password for user root:

    命令执行完会生成“backup.sql”文件,如下:

    [rds@localhost ~]$ ll backup.sql
    -rw-r-----. 1 rds rds 2714 sep 21 08:23 backup.sql

导入数据

  1. 登录已准备的弹性云服务器,或可访问云数据库rds的设备。
  2. 确保导入的目标数据库已存在。

    如果不存在,执行以下命令创建数据库:

    # psql --host=--port=<db_port>--username=root--dbname=postgres-c "create database;"
    • rds_address为rds实例的ip地址。
    • db_port为当前数据库实例的端口。
    • db_name为要导入的数据库名称。
  3. 将导出的文件导入到云数据库rds

    # psql --host= --port=<db_port>--username=root--dbname=--file=/backup.sql

    • rds_address为云数据库rds实例的ip地址。
    • db_port为当前数据库实例的端口。
    • db_name为要导入的目标数据库名称,请确保该数据库已存在。
    • backup_dir为“backup.sql”所在目录。

    根据命令提示输入云数据库rds实例的密码。

    示例如下:

    # psql --host=172.16.66.198 --port=5432 --username=root --dbname=my_db --file=backup.sql

    password for user root:

  4. 查看迁移结果,如下。

    my_db=> \l my_db

    示例中,名为my_db的数据库已经被导入了:

    my_db=> \l my_db
    list of databases
    name  | owner | encoding | collate     | ctype       | access privileges
    ------ ------- ---------- ------------- ------------- -----------
    my_db | root  | utf8     | en_us.utf-8 | en_us.utf-8 | 
    (1 row)

相关文档

网站地图