本文档包含以下内容:
- RDS for PostgreSQL实例连接
- RDS for PostgreSQL数据迁入
- RDS for PostgreSQL数据迁出
- RDS for PostgreSQL用户及Schema管理
- RDS for PostgreSQL功能限制
1.RDS for PostgreSQL实例连接
创建初始帐号
在完成实例购买之后,首先去登陆RDS管理控制台,创建“初始帐号”。 假设创建的账号为:myuser
命令行连接实例
在管理控制台的基本信息页面,可以找到实例的连接地址和端口,例如我们有如下实例: rds2z2tp80v3752wb455.pg.rds.aliyuncs.com:3433 有了实例连接串、端口、初始帐号、密码,就可以使用命令管理和操作实例了。
创建数据库
createdb -U myuser -h rds2z2tp80v3752wb455.pg.rds.aliyuncs.com -p 3433 pg001
连接数据库
psql -U myuser -h rds2z2tp80v3752wb455.pg.rds.aliyuncs.com -p 3433 pg001
Password for user myuser:
psql.bin (9.4.4, server 9.4.1)
Type "help" for help.
pg001=>
注意事项
建议不要使用9.4.1以下的PostgreSQL客户端psql工具连接数据库,因为版本不匹配可能会导致很多功能无法使用,连接时会出现类似以下的提示:
WARNING: psql major version 9.3, server major version 9.4.
Some psql features might not work.
2.RDS for PostgreSQL数据迁入
导出逻辑备份
通过ECS备份 pg_dump -U {user-name} -h {host-name} -p {port} {database-name} -f {file-name} 如:
pg_dump -U myuser -h localhost -p 5432 pg001 -f pg001.sql
将文件pg001.sql上传到一台可以连接目标RDS的ECS(如果文件太大可以先进行压缩)
将数据迁入RDS
登陆到你ECS服务器,通过以下命令将数据导入到RDS psql -U {user-name} -h {host-name} -d {desintation_db} -p {port} -f {dumpfilename.sql} 如:
psql -U myuser -h rds2z2tp80v3752wb455.pg.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql
注意事项
由于云上的权限配置不一至,在数据导入过程当中可能会出现一些与权限相关的WARNING或ERROR,可以忽略,如:
WARNING: no privileges could be revoked for "xxxxx"
ERROR: role "xxxxx" does not exist
3.RDS for PostgreSQL数据迁出
通过逻辑备份进行数据迁出
通过pg_dump导出逻辑备份
通过以下命令操作 pg_dump -U {user-name} -h {host-name} -p {port} {database-name} -f {file-name} 如:
pg_dump -U myuser -h rds2z2tp80v3752wb455.pg.rds.aliyuncs.com -p 3433 pg001 -f pg001.sql
将数据恢复到目标服务器
将pg001.sql放到目标服务器中,并进行以下命令操作 psql -U {user-name} -h {host-name} -d {desintation_db} -p {port} -f {dumpfilename.sql} 如:
psql -U myuser -h localhost -d pg001 -p 5432 -f pg001.sql
注意事项
由于云上的权限配置不一至,在数据导入过程当中可能会出现一些与权限相关的WARNING或ERROR,可以忽略,如:
WARNING: no privileges could be revoked for "xxxxx"
ERROR: role "xxxxx" does not exist
4.RDS for PostgreSQL用户及Schema管理
在使用RDS的过程中,由于superuser关不完全放开,因此我们建议用户在使用数据库时遵循单独建立用户并通过schema管理用户的私有空间。以下DEMO中,myuser是建立实例时创建的管理帐号,newuser是当前需要新建的帐号。
建立有登陆权限的用户
CREATE USER newuser LOGIN PASSWORD 'xxxxx';
为新用户建立schema
CREATE SCHEMA newuser;
GRANT newuser to myuser;
ALTER SCHEMA newuser OWNER TO newuser;
REVOKE newuser FROM myuser;
注意1:如果在进行ALTER SCHEMA newuser OWNER TO newuser之前没有将newuser加入到myuser角色,将会出现ERROR: must be member of role "newuser"的权限问题。 注意2:从安全角度出发,newuser这个用户在本DEMO定义为是一个普通的应用程序帐号,因此在处理完OWNER的授权后,将它移出myuser角色以提高安全性。
使用newuser登陆数据库
psql -U newuser -h rds2z2tp80v3752wb455.pg.rds.aliyuncs.com -p 3433 pg001
Password for user newuser:
psql.bin (9.4.4, server 9.4.1)
Type "help" for help.
pg001=> select * from tb001;
ERROR: permission denied for relation tb001
pg001=> create table tb002(c1 bigint);
CREATE TABLE
pg001=> insert into tb002 values (10);
INSERT 0 1
pg001=> insert into tb002 values (11);
INSERT 0 1
pg001=> insert into tb002 values (12);
INSERT 0 1
pg001=> select * from tb002;
c1
----
10
11
12
(3 rows)
pg001=> \dt
List of relations
Schema | Name | Type | Owner
---------+-------+-------+---------
newuser | tb002 | table | newuser
public | tb001 | table | myuser
(2 rows)
pg001=> \q
5.RDS for PostgreSQL功能限制
为保障实例的稳定及安全,RDS for PostgreSQL有部分使用上的约束,详情如下:
操作 | RDS使用约束 |
---|---|
修改数据库参数设置 | 暂不支持 |
数据库的root权限 | RDS无法向用户提供superuser权限 |
数据库备份 | 只支持通过pg_dump进行数据备份 |
数据迁入 | 只支持通过psql还原由pg_dump备份的数据 |
搭建数据库复制 |
系统自动搭建了基于PostgreSQL流复制的HA模式,无需用户手动搭建 PostgreSQL Standby节点对用户不可见,不能直接用于访问 |
重启RDS实例 | 必须通过RDS管理控制台或OPEN API操作重启实例 |