一、应用场景
由于我们公司的产品是C/S架构,客户端有大量功能需要直连数据库,而我们又不想修改标准功能,因为这样工作量太大了影响项目进度。
后经过讨论研究决定使用postgresSQL外部表的方案,即我们在应用服务器部署一个和数据库服务器版本一致的PG服务,然后客户端访问应用服务器的PG,应用服务器的PG在通过外部表的方式去访问真实的数据库服务器。
二、postgreSQL外部表的介绍
PostgreSQL 实现了 SQL/MED 规范的部分内容,允许您使用常规 SQL 查询访问驻留在 PostgreSQL 外部的数据。此类数据称为外部数据(foreign data)。外部数据是在外部数据包装器(foreign data wrapper FDW)的帮助下访问的。postgres_fdw是访问外部PostgreSQL的外部数据包装器。
上述描述来自PG官网:Foreign Data、postgres_fdw
三、操作步骤
- 首先需要安装postgres_fdw扩展,参见:CREATE EXTENSION
CREATE EXTENSION postgres_fdw
- 定义一个外部服务器,参见:CREATE SERVER
CREATE SERVER xxx FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'xxx.xxx.xxx', dbname 'xxx', port 'xxx');
- 创建一个用户映射,参见:CREATE USER MAPPING
CREATE USER MAPPING FOR postgres SERVER xxx OPTIONS (user 'xxx', password 'xxx');
--修改密码
ALTER USER MAPPING FOR postgres SERVER xxx OPTIONS (SET password 'xxx');
--此处我只用了Schema导入,外部表读者可根据文档自行尝试
IMPORT FOREIGN SCHEMA ln_dwh FROM SERVER xxx INTO ln_dwh
- 使用正常SQL查询外部数据
SELECT * FROM ln_dwh."Bundle"