开发者社区> 问答> 正文

使用 psql 命令迁移 PostgreSQL 数据


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

背景信息


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

前提条件


已完成 RDS 实例数据库的准备,可参见 设置连接模式创建数据库和账号

准备本地数据


  1. 通过 PostgreSQL 客户端,连接本地 PostgreSQL 数据库。

  2. 执行如下命令,备份数据。[backcolor=transparent]pg_dump [backcolor=transparent]-[backcolor=transparent]U username [backcolor=transparent]-[backcolor=transparent]h hostname [backcolor=transparent]-[backcolor=transparent]p port databasename [backcolor=transparent]-[backcolor=transparent]f filename

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

例如,数据库用户 William 要备份本地 PostgreSQL 数据库,登录 PostgreSQL 主机后,通过如下命令备份数据。
  1. [backcolor=transparent]pg_dump [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]William[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]h localhost [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]3433[backcolor=transparent] pg001 [backcolor=transparent]-[backcolor=transparent]f pg001[backcolor=transparent].[backcolor=transparent]sql


正式迁移操作


[backcolor=transparent]说明: 通过 RDS 内网恢复数据,网络更稳定,数据更安全。建议您通过将数据上传到云服务器 ECS 上,然后通过内网将数据恢复到目标 RDS上。如果数据文件太大,可以先压缩后再上传。本例以该方式为例进行说明。

  1. 登录云服务器 ECS。

  2. 通过 PostgreSQL 客户端,执行如下命令将数据导入到 RDS 中。[backcolor=transparent]psql [backcolor=transparent]-[backcolor=transparent]U username [backcolor=transparent]-[backcolor=transparent]h hostname [backcolor=transparent]-[backcolor=transparent]d desintationdb [backcolor=transparent]-[backcolor=transparent]p port [backcolor=transparent]-[backcolor=transparent]f dumpfilename[backcolor=transparent].[backcolor=transparent]sql

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

如:
  1. [backcolor=transparent]psql [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]William[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]h postgresql[backcolor=transparent].[backcolor=transparent]rds[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com [backcolor=transparent]-[backcolor=transparent]d pg001 [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]3433[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]f pg001[backcolor=transparent].[backcolor=transparent]sql

由于 RDS 数据库的权限设置和本地数据库不一致,在数据导入过程当中可能会出现一些与权限相关的 WARNING 或 ERROR,可以忽略,如:
  1. [backcolor=transparent]WARNING[backcolor=transparent]:[backcolor=transparent]  [backcolor=transparent]no[backcolor=transparent] privileges could be revoked [backcolor=transparent]for[backcolor=transparent] [backcolor=transparent]"xxxxx"
  2. [backcolor=transparent]ERROR[backcolor=transparent]:[backcolor=transparent]  role [backcolor=transparent]"xxxxx"[backcolor=transparent] does [backcolor=transparent]not[backcolor=transparent] exist

展开
收起
云栖大讲堂 2017-10-18 14:06:54 1657 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像