标签
PostgreSQL , postgres_fdw , 阿里云 , 内核安全限制
https://github.com/digoal/blog/blob/master/201901/20190125_01.md#%E8%83%8C%E6%99%AF 背景
阿里云rds pg内核安全上做了限制,只能访问当前实例的其他库,所以使用dblink, postgres_fdw时,虽然PG功能上是可以访问其他远程实例的,但是阿里云RDS PG限制了只能访问当前实例。
另一方面,当前实例是HA版本,并且是云化版本,所以IP,PORT都可能在发生迁移、切换后发生变化。因此为了能够让用户使用dblink, postgres_fdw访问本实例的其他跨库资源,内核上做了hack。port, host, hostaddr都不允许指定。
通过DBLINK创建视图也是一样的道理。
https://github.com/digoal/blog/blob/master/201901/20190125_01.md#%E7%94%A8%E6%B3%95%E4%B8%BE%E4%BE%8B 用法举例
1 创建postgres_fdw
create extension postgres_fdw;
2 创建外部server
drop SERVER foreign_server cascade;
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS ( dbname 'pgbi_hf'); -- 正常来说这里要指定host port,RDS PG 10 高可用版本,不需要指定
3 为当前用户匹配创建好的外部server
CREATE USER MAPPING FOR 本地数据库用户
SERVER foreign_server
OPTIONS (user 'xxx', password 'xxx');
4 创建外部表
CREATE FOREIGN TABLE xxx (
c1 varchar(40),
c2 varchar(200)
)
SERVER foreign_server
OPTIONS (schema_name 'xxx', table_name 'xxx');
5 可以将外部server上指定的schema里面的所有表,一次性映射到本地的某个指定SCHEMA里面
import foreign schema remote_schema1 from server foreign_server INTO local_schema1;
https://github.com/digoal/blog/blob/master/201901/20190125_01.md#%E5%8F%82%E8%80%83 参考
《阿里云rds PG, PPAS PostgreSQL 同实例,跨库数据传输、访问(postgres_fdw 外部表)》https://github.com/digoal/blog/blob/master/201901/20190125_01.md#%E5%85%8D%E8%B4%B9%E9%A2%86%E5%8F%96%E9%98%BF%E9%87%8C%E4%BA%91rds-postgresql%E5%AE%9E%E4%BE%8Becs%E8%99%9A%E6%8B%9F%E6%9C%BA 免费领取阿里云RDS PostgreSQL实例、ECS虚拟机
