2003年,在SQL标准中增加了一个访问远程数据的规范,称为SQL外部数据管理(SQL/MED)。自9.1版本以来,PostgreSQL开发了FDW,实现了SQL/MED的一部分特性。
在SQL/MED中,远程服务器上的表称为外部表。PostgreSQL 的外部数据包装器(Foreign Data Wrappers,FDW)使用与本地表类似的方式,通过SQL/MED来管理外部表。
图1:FDW的基本概念

安装必要的插件并进行适当的设置后, 您可以访问远程服务器上的外部表。例如, 假设有两个远程服务, 分别是 postgresql 和 mysql, 它们分别 foreign_pg_tbl表和foreign_my_tbl表。这个例子中, 您可以通过发出 SELECT 查询来访问本地服务器上的外部表, 如下所示。
localdb=# -- foreign_pg_tbl is on the remote postgresql server.
localdb-# SELECT count(*) FROM foreign_pg_tbl;
count
-------
20000
localdb=# -- foreign_my_tbl is on the remote mysql server.
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
许多FDW插件已经开发并在Postgres wiki中列出。尽管, 几乎所有插件都没有得到好的维护, 但 postgres_fdw 除外, 该插件是由 PostgreSQL 全球开发组正式开发和维护的, 作为访问远程 PostgreSQL 服务器的扩展。
概览
要使用 FDW 功能, 您需要安装相应的扩展并执行相关的命令,CREATE FOREIGN TABLE, CREATE SERVER和CREATE USER MAPPING (更加详细的描述请参考官方文档)。
执行完创建相关的命令后, 在执行查询处理的过程中,会调用插件中定义的函数以访问外部表。

(1) analyzer/analyser创建输入 SQL的查询树。
(2) 规划器 (或执行器) 连接到远程 server。
(3) 如果

本文介绍了PostgreSQL的外部数据包装器(FDW)功能,包括如何使用FDW访问远程服务器上的外部表,以及PostgreSQL如何处理多表查询、排序操作和聚合函数等内容。
最低0.47元/天 解锁文章
2104

被折叠的 条评论
为什么被折叠?



