8.21. Псевдо-типы#
8.21. Псевдо-типы #
Типовая система Tantor SE-1C содержит ряд специальных записей, которые вместе называются псевдо-типами. Псевдо-тип не может быть использован в качестве типа данных столбца, но его можно использовать для объявления аргумента или результата функции. Каждый из доступных псевдо-типов полезен в ситуациях, когда поведение функции не соответствует простому взятию или возврату значения определенного SQL типа данных. Таблица 8.27 перечисляет существующие псевдо-типы.
Таблица 8.27. Псевдо-типы
Имя | Описание |
---|---|
any | Указывает, что функция принимает любой тип входных данных. |
anyelement | Указывает, что функция принимает любой тип данных (см. Раздел 35.2.5). |
anyarray | Указывает, что функция принимает любой тип данных массива (см. Раздел 35.2.5). |
anynonarray | Указывает, что функция принимает любой не-массивный тип данных (см. Раздел 35.2.5). |
anyenum | Указывает, что функция принимает любой перечислимый тип данных (см. Раздел 35.2.5 и Раздел 8.7). |
anyrange | Указывает, что функция принимает любой тип данных диапазона (см. Раздел 35.2.5 и Раздел 8.17). |
anymultirange | Указывает, что функция принимает любой тип данных мультидиапазона (см. Раздел 35.2.5 и Раздел 8.17). |
anycompatible | Указывает, что функция принимает любой тип данных, с автоматическим преобразованием нескольких аргументов в общий тип данных (см. Раздел 35.2.5). |
anycompatiblearray | Указывает, что функция принимает любой тип данных массива, с автоматическим преобразованием нескольких аргументов в общий тип данных (см. Раздел 35.2.5). |
anycompatiblenonarray | Указывает, что функция принимает любой немассивный тип данных, с автоматическим преобразованием нескольких аргументов в общий тип данных (см. Раздел 35.2.5). |
anycompatiblerange | Указывает, что функция принимает любой тип данных диапазона, с автоматическим преобразованием нескольких аргументов в общий тип данных (см. Раздел 35.2.5 и Раздел 8.17). |
anycompatiblemultirange | Указывает, что функция принимает любой тип данных мультидиапазона, с автоматическим преобразованием нескольких аргументов в общий тип данных (см. Раздел 35.2.5 и Раздел 8.17). |
cstring | Указывает, что функция принимает или возвращает нуль-терминированную строку на языке C. |
internal | Указывает, что функция принимает или возвращает внутренний тип данных сервера. |
language_handler | Объявляется обработчик вызова процедурного языка, возвращающий language_handler . |
fdw_handler | Объявляется обработчик обертки внешних данных, возвращающий fdw_handler . |
table_am_handler | Объявляется обработчик метода доступа к таблице, возвращающий table_am_handler . |
index_am_handler | Обработчик метода доступа к индексу объявлен для возврата index_am_handler . |
tsm_handler | Объявляется обработчик метода выборки таблицы, возвращающий tsm_handler . |
record | Определяет функцию, принимающую или возвращающую неопределенный тип строки. |
trigger | Триггерная функция объявляется с возвращаемым значением триггер. |
event_trigger | Триггерная функция события объявляется с возвращаемым типом event_trigger. |
pg_ddl_command | Определяет представление команд DDL, доступное для событийных триггеров. |
void | Указывает, что функция не возвращает значение. |
unknown | Определяет еще не разрешенный тип, например, не декорированной строковой литерал. |
Функции, написанные на C (будь то встроенные или динамически загружаемые), могут быть объявлены для принятия или возврата любого из этих псевдо-типов. Задача автора функции - обеспечить безопасное поведение функции при использовании псевдо-типа в качестве типа аргумента.
Все функции, написанные на процедурных языках, могут использовать псевдотипы только в соответствии с правилами своих языков реализации. В настоящее время большинство процедурных языков запрещают использование псевдотипа в качестве типа аргумента и разрешают только типы void
и record
в качестве типа результата (а также trigger
или event_trigger
, когда функция используется в качестве триггера или событийного триггера). Некоторые также поддерживают полиморфные функции с использованием полиморфных псевдотипов, которые показаны выше и подробно обсуждаются в разделе Раздел 35.2.5.
Псевдотип internal
используется для объявления функций, которые предназначены только для вызова внутри системы базы данных, а не для прямого вызова в запросе SQL. Если функция имеет хотя бы один аргумент типа internal
, то ее нельзя вызывать из SQL. Чтобы сохранить типовую безопасность этого ограничения, важно следовать следующему правилу кодирования: не создавайте функцию, которая объявлена возвращать internal
, если у нее нет хотя бы одного аргумента типа internal
.