Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 8. Типы данных | Fast Forward | Next |
Система типов 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.