Глава 58. Написание метода выборки таблицы#
Глава 58. Написание метода выборки таблицы
Оглавление
Реализация Tantor SE для оператора TABLESAMPLE
поддерживает пользовательские методы выборки из таблицы, в дополнение к
методам BERNOULLI
и SYSTEM
, которые требуются
стандартом SQL. Метод выборки определяет, какие строки таблицы будут выбраны при использовании оператора TABLESAMPLE
.
На уровне SQL, метод выборки таблицы представлен одной SQL функцией, обычно реализованной на языке C, имеющей сигнатуру
method_name(internal) RETURNS tsm_handler
Имя функции совпадает с именем метода, появляющимся в предложении
TABLESAMPLE
. Аргумент internal
является фиктивным
(всегда имеющим значение ноль), который просто предотвращает вызов этой функции
непосредственно из SQL-команды.
Результатом функции должна быть структура типа TsmRoutine
, выделенная с помощью palloc, которая содержит указатели на функции поддержки для
метода выборки. Эти функции поддержки являются обычными функциями на языке C и
не видимы и не вызываемы на уровне SQL. Функции поддержки описаны в Раздел 58.1.
В дополнение к указателям на функции, структура TsmRoutine
должна содержать следующие дополнительные поля:
List *parameterTypes
Это список OID, содержащий OID типа данных параметра(ов), которые будут приниматься в качестве аргументов в
TABLESAMPLE
при использовании данного метода выборки. Например, для встроенных методов этот список содержит один элемент со значениемFLOAT4OID
, который представляет процент выборки. Пользовательские методы выборки могут иметь больше или другие параметры.bool repeatable_across_queries
Если
true
, метод выборки может предоставлять идентичные выборки при последовательных запросах, если каждый раз предоставляются одни и те же параметры и начальное значениеREPEATABLE
, и содержимое таблицы не изменилось. Когда это значениеfalse
, предложениеREPEATABLE
не принимается для использования с методом выборки.bool repeatable_across_scans
Если
true
, метод выборки может предоставлять идентичные выборки при последующих сканированиях в рамках одного запроса (при условии неизменных параметров, начального значения и снимка). Когда этоfalse
, планировщик не будет выбирать планы, которые требуют сканирования выборочной таблицы более одного раза, так как это может привести к несогласованному выводу запроса.
Тип структуры TsmRoutine
объявлен
в src/include/access/tsmapi.h
, см. для получения дополнительной
информации.
Все методы выборки таблиц, включенные в стандартный дистрибутив, являются хорошими
ссылками при попытке написать свои собственные. Изучите
подкаталог src/backend/access/tablesample
исходного
дерева для получения сведений о встроенных методах выборки и подкаталог contrib
- для дополнительных методов.