背景

阿里云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就可以通过这个端口代理去访问)

端口转发见本文参考部分。

例子

  1. postgres=> select dblink_connect('a', 'host=同一vpc下的另一rds的内网域名 port=同一vpc下的另一rds的内网监听端口 user=远程数据库用户名 password=密码 dbname=库名');
  2. dblink_connect
  3. ----------------
  4. OK
  5. (1 row)
  6. postgres=> select version();
  7. version
  8. -----------------
  9. PostgreSQL 11.5
  10. (1 row)
  11. postgres=> SELECT * FROM dblink('a', 'SELECT version()') as t(ver text);
  12. ver
  13. ------------------
  14. PostgreSQL 10.10
  15. (1 row)

postgres_fdw例子

新建一个数据库

  1. postgres=> create database db1;
  2. CREATE DATABASE
  3. postgres=> \c db1

新建postgres_fdw插件

  1. db1=> create extension postgres_fdw;
  2. CREATE EXTENSION

新建远程数据库server

  1. db1=> CREATE SERVER foreign_server
  2. FOREIGN DATA WRAPPER postgres_fdw
  3. OPTIONS (host '同一vpc下的另一rds的内网域名 port=同一vpc下的另一rds的内网监听端口', port '同一vpc下的另一rds的内网监听端口', dbname '库名');
  4. CREATE SERVER
  5. db1=> CREATE USER MAPPING FOR digoal
  6. SERVER foreign_server
  7. OPTIONS (user '远程数据库用户', password '密码');
  8. CREATE USER MAPPING

导入外部表

  1. db1=> import foreign schema public from server foreign_server into ft;
  2. IMPORT FOREIGN SCHEMA
  3. db1=> \det ft.*
  4. List of foreign tables
  5. Schema | Table | Server
  6. --------+--------------------+----------------
  7. ft | customer1 | foreign_server
  8. ft | district1 | foreign_server
  9. ft | ha_health_check | foreign_server
  10. ft | history1 | foreign_server
  11. ft | item1 | foreign_server
  12. ft | new_orders1 | foreign_server
  13. ft | order_line1 | foreign_server
  14. ft | orders1 | foreign_server
  15. ft | pg_stat_statements | foreign_server
  16. ft | stock1 | foreign_server
  17. ft | warehouse1 | foreign_server
  18. (11 rows)

参考

https://www.postgresql.org/docs/12/postgres-fdw.html

https://www.postgresql.org/docs/12/dblink.html

《使用 ssh -R 建立反向/远程TCP端口转发代理》

《使用 ssh -R 建立反向/远程TCP端口转发代理》

《一个端口代理软件 - inlab balance》