Тип Digital Q.DataBase система типов содержит ряд элементов специального назначения, которые в совокупности называются псевдотипы. Псевдотип не может быть использован в качестве типа данных столбца, но может применяться для объявления типа аргумента или результата функции. Каждый из доступных псевдотипов полезен в ситуациях, когда поведение функции не сводится к простому приему или возврату значения определенного SQL типа данных. Таблица 2.5.27 содержит перечень существующих псевдотипов.
Таблица 2.5.27. Псевдотипы
| Имя | Описание |
|---|---|
любой | Указывает на то, что функция принимает любой входной тип данных. |
anyelement | Указывает на то, что функция принимает любой тип данных (см. Раздел 5.1.2.5). |
anyarray | Указывает на то, что функция принимает любой тип данных «массив» (см. Раздел 5.1.2.5). |
anynonarray | Указывает на то, что функция принимает любой тип данных, отличный от массива (см. Раздел 5.1.2.5). |
anyenum | Указывает на то, что функция принимает любой перечислимый тип данных (см. Раздел 5.1.2.5 и Раздел 2.5.7). |
anyrange | Указывает на то, что функция принимает любой диапазонный тип данных (см. Раздел 5.1.2.5 и Раздел 2.5.17). |
anymultirange | Указывает на то, что функция принимает любой мультидиапазонный тип данных (см. Раздел 5.1.2.5 и Раздел 2.5.17). |
anycompatible | Указывает на то, что функция принимает любой тип данных, с автоматическим приведением нескольких аргументов к общему типу данных (см. Раздел 5.1.2.5). |
anycompatiblearray | Указывает на то, что функция принимает любой тип данных «массив», с автоматическим приведением нескольких аргументов к общему типу данных (см. Раздел 5.1.2.5). |
anycompatiblenonarray | Указывает на то, что функция принимает любой тип данных, отличный от массива, с автоматическим приведением нескольких аргументов к общему типу данных (см. Раздел 5.1.2.5). |
anycompatiblerange | Указывает на то, что функция принимает любой диапазонный тип данных, с автоматическим приведением нескольких аргументов к общему типу данных (см. Раздел 5.1.2.5 и Раздел 2.5.17). |
anycompatiblemultirange | Указывает на то, что функция принимает любой мультидиапазонный тип данных, с автоматическим приведением нескольких аргументов к общему типу данных (см. Раздел 5.1.2.5 и Раздел 2.5.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 | Указывает, что обработчик метода выборки данных (tablesample) возвращает тип tsm_handler. |
record | Идентификация функции, принимающей или возвращающей неопределенный тип строки. |
trigger | Указывает, что триггерная функция возвращает тип trigger. |
event_trigger | Указывает, что функция триггера событий возвращает тип event_trigger. |
pg_ddl_command | Идентификация представления DDL-команд, доступного для триггеров событий. |
void | Признак того, что функция не возвращает значения. |
unknown | Идентификация еще не разрешенного типа, например, для нетипизированного строкового литерала. |
Функции, написанные на языке C (как встроенные, так и динамически загружаемые), могут быть объявлены как принимающие или возвращающие любые из этих псевдотипов. Обеспечение безопасной работы функции при использовании псевдотипа в качестве типа аргумента является обязанностью автора функции.
Использование псевдотипов в функциях на процедурных языках допускается только в пределах, определенных соответствующими языками реализации. В настоящее время большинство процедурных языков запрещают использование псевдотипа в качестве типа аргумента и допускают его использование только void и record в качестве типа результата (а также в случаях,
trigger или event_trigger когда функция используется в качестве триггера или триггера событий). Некоторые из них также поддерживают полиморфные функции, использующие полиморфные псевдотипы, которые приведены выше и подробно описаны в Раздел 5.1.2.5.
Тип internal псевдотип используется для объявления функций,
которые предназначены только для внутреннего вызова средствами системы базы
данных, а не для прямого вызова в SQL
запросе. Если функция имеет хотя бы один internalаргумент соответствующего типа,
то её нельзя вызвать из SQL. Для обеспечения типобезопасности данного ограничения важно соблюдать следующее правило разработки: не создавайте функции, объявленные с возвращаемым типом internal если у них нет хотя бы одного
internal аргумента.