上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第4章 外部数据包装器
外部数据包装器(Foreign Data Wrapper ,FDW)相当实用且有趣,图4.1是FDW涉及的基本概念。
图4.1 FDW的基本概念
2003年,SQL标准中添加了一个访问远程数据的规范,称为SQL外部数据管理。PostgreSQL的9.1版本开发出了FDW,实现了一部分SQL/MED中的特性。
在SQL/MED中,远程服务器上的表被称为外部表。PostgreSQL的外部数据包装器使用与本地表类似的方式,通过SQL/MED来管理外部表。
安装完必要的扩展并配置妥当后,就可以访问远程服务器上的外部表了。例如假设有两个远程服务器分别命名为 postgresql 和 mysql,它们上面分别有 foreign_pg_tbl 和foreign_my_tbl两张表。在本例中,可以在本地服务器上执行SELECT查询以访问外部表,如下所示。
localdb=# -- foreign_pg_tbl 在远程postgresql服务器上 localdb-# SELECT count(*) FROM foreign_pg_tbl; count ------- 20000 localdb=# -- foreign_my_tbl 在远程mysql服务器上 localdb-# SELECT count(*) FROM foreign_my_tbl; count ------- 10000
此外,还可以在本地连接来自不同服务器中的外部表。
localdb=# SELECT count(*) FROM foreign_pg_tbl AS p, foreign_my_tbl AS m WHERE p.id = m.id; count ------- 10000
Postgres wiki中列出了很多现有的FDW扩展,但只有postgres_fdw 与file_fdw是由官方PostgreSQL全球开发组维护的。postgres_fdw可用于访问远程PostgreSQL服务器。
以下部分将详细介绍PostgreSQL的FDW。第4.1节是概述,第4.2节介绍了postgres_fdw扩展的工作方式。
Citus
Citus 是由citusdata.com 开发的开源PostgreSQL扩展,它能创建用于并行化查询的分布式PostgreSQL服务器集群。Citus是PostgreSQL生态中机制上最为复杂且商业上最成功的扩展之一,它也是一种FDW。