选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

第 54 章 编写外部数据包装器

所有在一个外部表上的操作都通过它的外部数据包装器来处理,外部数据包装器由一组被核心服务器调用的函数组成。外部数据包装器负责从远程数据源取得数据并把它返回给PostgreSQL执行器。如果要支持更新外部表,包装器也需要处理更新。本章将介绍如何编写一个新的外部数据包装器。

标准发行版中包含的外部数据包装器,是编写你自己的外部数据包装器时很好的参考。请查看源码树中的contrib子目录。CREATE FOREIGN DATA WRAPPER参考页中也有一些有用的细节。

注意

SQL 标准规定了一个用于编写外部数据包装器的接口。但是,PostgreSQL 没有实现该 API,因为要让 PostgreSQL 适配它需要大量工作,而且该标准 API 也没有得到广泛采用。

54.1. 外部数据包装器函数 #

FDW 作者需要实现一个处理器函数,并且可以选择实现一个验证器函数。这两个函数都必须使用 C 之类的编译型语言编写,并采用版本 1 接口。关于 C 语言调用约定和动态加载的细节,请参阅第 35.9 节

处理器函数只是返回一个结构体,其中包含供规划器、执行器和各种维护命令调用的回调函数指针。编写 FDW 的大部分工作都在于实现这些回调函数。处理器函数必须在PostgreSQL中注册为不带参数,并返回特殊的伪类型fdw_handler。这些回调函数都是普通的 C 函数,在 SQL 层既不可见也不可调用。回调函数见第 54.2 节

验证器函数负责验证 CREATEALTER 命令中指定的选项,这些命令可以针对其外部数据包装器,也可以针对使用该包装器的外部服务器、用户映射和外部表。注册验证器函数时,必须声明它接受两个参数:一个 text 数组,包含待验证的选项;以及一个 OID,表示选项所属对象的类型(使用存放该对象的系统目录的 OID,即 ForeignDataWrapperRelationIdForeignServerRelationIdUserMappingRelationIdForeignTableRelationId)。如果未提供验证器函数,创建或修改对象时就不会检查选项。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。