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