PostgreSQL指南:内幕探索
上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。