一个**外部数据包装器
** (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)
- 为
ALTER FOREIGN DATA WRAPPER
和ALTER SERVER
添加了RENAME
选项(提交 5bcf8ede) CREATE TABLE (LIKE ...)
能够使用 外部表 定义(提交 a9f2e31c)
- PostgreSQL 9.1
- 添加了只读 外部表 支持(初始提交 0d692a0d)
- file_fdw 作为 Contrib 模块 添加(提交 7c5d0ae7)
- PostgreSQL 8.4
- 初始内部实现(提交 cae565e5)
有用链接
- 创建 Postgres 外部数据包装器 - 2022 年 1 月 Aaron Son / DoltHub 的博客文章