Псевдо-типы

8.17. Псевдо-типы

Система типов PostgreSQL содержит некоторое количество записей специального назначения, которые все вместе называются пвседо-типами. Псевдо-тип не может быть использован как тип данных в какой-либо колонке. Каждый из доступных псевдо-типов полезен в ситуациях, где поведение функции не укладывается в простое получение и возвращение некоего значения специфического типа SQL. Table 8-24 показывает существующие псевдо-типы.

Table 8-24. Псевдо-типы

ИмяОписание
anyПоказывает, что функция принимает любое входное значение.
anyarrayПоказывает, что функция принимает массив любого типа (см. Section 35.2.5).
anyelementПоказывает, что функция принимает любой тип данных (см. Section 35.2.5).
anyenumПоказывает, что функция принимает любой тип данных перечисления (см. Section 35.2.5 и Section 8.7).
anynonarrayПоказывает, что функция принимает любой тип данных, не являющийся массивом (см. Section 35.2.5).
cstringПоказывает, что функция принимает или возвращает строку с завершающие нулём, как в языке C.
internalПоказывает, что функция принимает или возвращает внутренний тип данных сервера.
language_handlerОписывается обработчик вызова процедурного языка для возврата типа language_handler.
fdw_handlerОпределяется внешний обработчик данных для возврата типа fdw_handler.
recordПоказывает, что функция повзращает незаданный тип строки таблицы.
triggerОписывается триггерная фунция для возврата типа trigger.
voidПоказывает, что функция не возвращает значения.
opaqueВсе устаревшие имена типов, которые обычно обслуживаются для всех вышеуказанных целей.

Функции, написанные на C (в том числе встроенные или загружаемые динамически) могут быть объявлены, чтобы принимать или возвращать люьые из вышеописанных псевдо-типов данных. Автор функции должен убедиться, что функция будет вести себя правильно, когда в качестве аргумента функции используется какой-либо псевдо-тип.

Функции, написанные на процедурных языках могут использовать псевдо-типы только так, как разрешено в этом процедурном языке. В текущих процедурных языках везде запрещено использовать псевдо-типы как тип аргумента и разрешно использование только псевдо-типов void и record как типов результата (плюс trigger, когда функция используется как триггер). Неоторые процедурные языки также поддерживают полиморфные функции, использующие типы anyarray, anyelement, anyenum и anynonarray.

Псевдо-тип internal используется для описания функций, которые задумыны только для внутренних вызовов самой СУБД и не предназначены для прямых вызовов в SQL запросах. Если функция имеет по крайней мере один аргумент типа internal, то она не может вызываться из SQL. Чтобы соответствовать этому ограничению, является важным следовать следующему правилу при написании функции: не создавайте функцию, которая объявляется как возвращающая тип internal, если она не имеет по крайней мере одного аргумента типа internal.

Back to top

(С) Виктор Вислобоков, 2008-2023