8.20. Псевдотипы
В систему типов Postgres Pro включены несколько специальных элементов, которые в совокупности называются псевдотипами. Псевдотип нельзя использовать в качестве типа данных столбца, но можно объявить функцию с аргументом или результатом такого типа. Каждый из существующих псевдотипов полезен в ситуациях, когда характер функции не позволяет просто получить или вернуть определённый тип данных SQL. Все существующие псевдотипы перечислены в Таблице 8.25.
Таблица 8.25. Псевдотипы
Имя | Описание |
---|---|
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). |
cstring | Указывает, что функция принимает или возвращает строку в стиле C. |
internal | Указывает, что функция принимает или возвращает внутренний серверный тип данных. |
language_handler | Обработчик процедурного языка объявляется как возвращающий тип language_handler . |
fdw_handler | Обработчик обёртки сторонних данных объявляется как возвращающий тип fdw_handler . |
tsm_handler | Обработчик метода выборки из таблицы объявляется как возвращающий тип tsm_handler . |
record | Указывает, что функция принимает или возвращает неопределённый тип строки. |
trigger | Триггерная функция объявляется как возвращающая тип trigger . |
event_trigger | Функция событийного триггера объявляется как возвращающая тип event_trigger . |
pg_ddl_command | Обозначает представление команд DDL, доступное событийным триггерам. |
void | Указывает, что функция не возвращает значение. |
opaque | Устаревший тип, который раньше использовался во всех вышеперечисленных случаях. |
Функции, написанные на языке C (встроенные или динамически загружаемые), могут быть объявлены с параметрами или результатами любого из этих типов. Ответственность за безопасное поведение функции с аргументами таких типов ложится на разработчика функции.
Функции, написанные на процедурных языках, могут использовать псевдотипы, только если это позволяет соответствующий язык. В настоящее время большинство процедурных языков запрещают использовать псевдотипы в качестве типа аргумента и позволяют использовать для результатов только типы void
и record
(и trigger
или event_trigger
, когда функция реализует триггер или событийный триггер). Некоторые языки также поддерживают полиморфные функции с типами anyelement
, anyarray
, anynonarray
, anyenum
и anyrange
.
Псевдотип internal
используется в объявлениях функций, предназначенных только для внутреннего использования в СУБД, но не для прямого вызова в запросах SQL. Если у функции есть как хотя бы один аргумент типа internal
, её нельзя будет вызывать из SQL. Чтобы сохранить типобезопасность при таком ограничении, следуйте важному правилу: не создавайте функцию, возвращающую результат типа internal
, если у неё нет ни одного аргумента internal
.