Table of Contents
TRUNCATE 的 FDW 例程EXPLAIN 的 FDW 例程ANALYZE 的 FDW 例程IMPORT FOREIGN SCHEMA的 FDW 例程所有在一个外部表上的操作都通过它的外部数据包装器来处理,外部数据包装器由一组被核心服务器调用的函数组成。外部数据包装器负责从远程数据源取得数据并把它返回给PostgreSQL执行器。如果要支持更新外部表,包装器也需要处理更新。本章将介绍如何编写一个新的外部数据包装器。
标准发行版中包含的外部数据包装器,是编写你自己的外部数据包装器时很好的参考。请查看源码树中的contrib子目录。CREATE FOREIGN DATA WRAPPER参考页中也有一些有用的细节。
SQL 标准规定了一个用于编写外部数据包装器的接口。但是,PostgreSQL 没有实现该 API,因为要让 PostgreSQL 适配它需要大量工作,而且该标准 API 也没有得到广泛采用。
FDW 作者需要实现一个处理器函数,并且可以选择实现一个验证器函数。这两个函数都必须使用 C 之类的编译型语言编写,并采用版本 1 接口。关于 C 语言调用约定和动态加载的细节,请参阅Section 36.10。
处理器函数只是返回一个结构体,其中包含供规划器、执行器和各种维护命令调用的回调函数指针。编写 FDW 的大部分工作都在于实现这些回调函数。处理器函数必须在PostgreSQL中注册为不带参数,并返回特殊的伪类型fdw_handler。这些回调函数都是普通的 C 函数,在 SQL 层既不可见也不可调用。回调函数见Section 55.2。
验证函数负责验证在CREATE和ALTER命令中为该外部数据包装器给定的选项, 以及使用该包装器的外部服务器、用户映射和外部表上的选项。 验证函数必须注册为接受两个参数,一个包含要验证的选项的文本数组, 另一个表示这些选项所关联对象类型的 OID。后者对应于该对象将存储于其中的系统目录 OID 之一:
AttributeRelationId
ForeignDataWrapperRelationId
ForeignServerRelationId
ForeignTableRelationId
UserMappingRelationId
如果没有提供验证函数,则在创建或修改对象时不会检查选项。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。