作者
digoal
日期
2019-10-23
标签
PostgreSQL , dblink , postgres_fdw , vpc , ecs , mysql , oracle
背景
阿里云RDS PG 11 云盘版开放相同vpc的实例间的dblink, postgres_fdw功能。相同vpc内如果有自建的pg实例,也可以被访问,如果要访问vpc外部的其他实例,通过相同vpc内ecs的端口跳转也能实现。
阿里云RDS PG 11 云盘版购买入口:
https://rds-buy.aliyun.com/rdsBuy?spm=5176.7920951.1393245.1.41c64ce1pOvLll&aly_as=JoVfjAtF#/create/rds?initData=%7B%22data%22:%7B%22rds_dbtype%22:%22PostgreSQL%22%7D%7D
支持距离
rds pg 11 (postgres_fdw , dblink) 可以访问如下:
1、same vpc ecs/rds pg
2、same vpc ecs(端口转发) -> other vpc/network pg
3、same vpc ecs(自建pg+oracle_fdw,mysql_fdw) -> other vpc/network oracle|mysql
rds pg 11 (将支持oracle_fdw, mysql_fdw) 可以访问如下:
1、same vpc ecs(oracle, mysql)/rds mysql
2、same vpc ecs(端口转发) -> other vpc/network mysql|oracle
通过同vpc内ecs的端口转发功能,可以访问ecs可以访问的任意目标。(只要ecs能访问的,rds pg就可以通过这个端口代理去访问)
端口转发见本文参考部分。
例子
dblink例子
```
postgres=> select dblink_connect('a', 'host=同一vpc下的另一rds的内网域名 port=同一vpc下的另一rds的内网监听端口 user=远程数据库用户名 password=密码 dbname=库名');
dblink_connect
OK
(1 row)
postgres=> select version();
version
PostgreSQL 11.5
(1 row)
postgres=> SELECT * FROM dblink('a', 'SELECT version()') as t(ver text);
ver
PostgreSQL 10.10
(1 row)
```
postgres_fdw例子
新建一个数据库
```
postgres=> create database db1;
CREATE DATABASE
postgres=> \c db1
```
新建postgres_fdw插件
db1=> create extension postgres_fdw;
CREATE EXTENSION
新建远程数据库server
```
db1=> CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '同一vpc下的另一rds的内网域名 port=同一vpc下的另一rds的内网监听端口', port '同一vpc下的另一rds的内网监听端口', dbname '库名');
CREATE SERVER
db1=> CREATE USER MAPPING FOR digoal
SERVER foreign_server
OPTIONS (user '远程数据库用户', password '密码');
CREATE USER MAPPING
```
导入外部表
```
db1=> import foreign schema public from server foreign_server into ft;
IMPORT FOREIGN SCHEMA
db1=> \det ft.*
List of foreign tables
Schema | Table | Server
--------+--------------------+----------------
ft | customer1 | foreign_server
ft | district1 | foreign_server
ft | ha_health_check | foreign_server
ft | history1 | foreign_server
ft | item1 | foreign_server
ft | new_orders1 | foreign_server
ft | order_line1 | foreign_server
ft | orders1 | foreign_server
ft | pg_stat_statements | foreign_server
ft | stock1 | foreign_server
ft | warehouse1 | foreign_server
(11 rows)
```
参考
https://www.postgresql.org/docs/12/postgres-fdw.html
https://www.postgresql.org/docs/12/dblink.html
PostgreSQL 许愿链接
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.