Chapter 58.编写表采样方法

目录

PostgreSQL 的TABLESAMPLE子句实现除 SQL 标准所需的BERNOULLISYSTEM方法外,还支持自定义表采样方法。采样方法确定使用TABLESAMPLE子句时将选择表的哪些行。

在 SQL 级别,表采样方法由单个 SQL 函数表示,该函数通常以 C 语言实现,具有签名

method_name(internal) RETURNS tsm_handler

该函数的名称与TABLESAMPLE子句中出现的方法名称相同。 internal参数是一个虚拟变量(始终具有零值),仅用于防止直接从 SQL 命令调用此函数。函数的结果必须是类型为TsmRoutine的 palloc 结构,其中包含支持采样方法功能的指针。这些支持函数是普通的 C 函数,在 SQL 级别不可见或不可调用。支持功能在Section 58.1中描述。

除了函数指针之外,TsmRoutine结构还必须提供以下其他字段:

TsmRoutine结构类型在src/include/access/tsmapi.h中声明,有关其他详细信息,请参见。

当尝试编写自己的表时,标准发行版中包含的表抽样方法是很好的参考。在源树的src/backend/access/tablesample子目录中查找内置的采样方法,在contrib子目录中查找附加方法。

上一章 首页 下一章