一个 **外部数据包装器
** (FDW
) 是 PostgreSQL 的一个 扩展
,它允许使用标准 SQL 查询和写入外部数据源。外部数据源可以是任何提供对某种数据访问的东西,包括其他数据库(PostgreSQL 和其他数据库引擎)、平面文件、具有数据 API 的网站、源代码存储库以及许多其他可能性。
PostgreSQL 提供两个作为 contrib 模块
的外部数据包装器
postgres_fdw
- 允许与其他 PostgreSQL 数据库进行读写连接file_fdw
- 允许从平面文件读取
还有大量第三方外部数据包装器可用。
实现
一个 外部数据包装器
实现为一个 扩展
,它提供 PostgreSQL 和外部数据源之间的接口。数据源本身通过创建一个包含远程数据源的连接详细信息和其他选项的 外部服务器
来定义。然后可以创建 外部表
,以 PostgreSQL 关系的形式定义远程数据。
然后,当遇到引用外部表的查询时,PostgreSQL 的 计划器
将把查询的相应部分传递给相应的外部数据包装器。
历史
外部数据包装器支持的初始实现始于 PostgreSQL 8.4,并增加了对 SQL/MED
标准某些元素的支持,但直到 PostgreSQL 9.1 才提供了用户可访问的功能。
以下列表概述了在 PostgreSQL 9.1 及更高版本中添加的重要外部数据包装器功能;有关每个 PostgreSQL 版本的完整详细信息,请参阅发行说明。
- PostgreSQL 17
FDW
可以用伪常数限定符替换连接(提交 9e9931d2)
- PostgreSQL 16
- PostgreSQL 14
- PostgreSQL 12
- PostgreSQL 11
- PostgreSQL 10
- 支持将聚合函数推送到远程服务器(提交 7012b132)
- PostgreSQL 9.6
- PostgreSQL 9.5
- PostgreSQL 9.4
- PostgreSQL 9.3
- 添加了可写 外部表 支持(初始提交 dc3eb563)
- postgres_fdw 作为 contrib 模块 添加(初始提交 d0d75c40)
- dblink 已修改为使用外部数据包装器功能(提交 8255566f)
- PostgreSQL 9.2
- 规划 API 改进,提供更多连接规划灵活性(提交 b1495393)
- 启用对 外部表 的统计信息收集(提交 263d9de6)
- 为 外部表 添加了每列选项(初始提交 9088d1b9)
RENAME
选项已添加到ALTER FOREIGN DATA WRAPPER
和ALTER SERVER
中(提交 5bcf8ede)CREATE TABLE (LIKE ...)
能够使用 外部表 定义(提交 a9f2e31c)
- PostgreSQL 9.1
- 添加了只读 外部表 支持(初始提交 0d692a0d)
- file_fdw 作为 contrib 模块 添加(提交 7c5d0ae7)
- PostgreSQL 8.4
- 初始内部实现(提交 cae565e5)
有用链接
- 创建 PostgreSQL 外部数据包装器 - 2022 年 1 月 Aaron Son / DoltHub 的博文