50.55. pg_type
В каталоге pg_type
хранится информация о типах данных. Базовые типы и типы-перечисления (скалярные типы) создаются командой CREATE TYPE, а домены — командой CREATE DOMAIN. При добавлении любой таблицы в базу данных автоматически создаётся составной тип, представляющий структуру строки таблицы. Также возможно создавать составные типы с помощью команды CREATE TYPE AS
.
Таблица 50.55. Столбцы pg_type
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки (скрытый атрибут; должен выбираться явно) | |
typname | name | Имя типа данных | |
typnamespace | oid |
| OID пространства имён, содержащего этот тип |
typowner | oid |
| Владелец типа |
typlen | int2 | Для типа фиксированного размера в typlen задаётся число байт во внутреннем представлении типа. Но для типов переменной длины, typlen будет отрицательным. Значение -1 обозначает тип «varlena» (он содержит машинное слово, определяющее длину), а -2 обозначает строку в стиле C, оканчивающуюся нулём. | |
typbyval | bool | Поле typbyval определяет, будут ли внутренние процедуры передавать переменные этого типа по значению или по ссылке. Полю typbyval лучше присвоить false, если длина typlen не равна 1, 2 или 4 (либо 8, на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Заметьте, что typbyval может быть false, даже если размер типа позволяет передачу по значению. | |
typtype | char | Поле typtype принимает значение b для базового типа (base), c для составного (composite), то есть типа строки таблицы, d для домена (domain), e для перечисления (enum), p для псевдотипа (pseudo-type) или r для диапазона (range). См. также typrelid и typbasetype . | |
typcategory | char | В поле typcategory задаётся произвольная классификация типов данных, на основе которой анализатор запросов может определить, какие неявные приведения будут «предпочитаемыми». См. Таблицу 50.56. | |
typispreferred | bool | True, если этот тип является предпочитаемым целевым типом в своей категории (typcategory ) | |
typisdefined | bool | True, если тип определён, и false, если это тип-заготовка для ещё не определённого типа. Когда значение typisdefined — false, можно полагаться только на заданное имя, пространство имён и OID типа. | |
typdelim | char | Символ, разделяющий два значения этого типа при разборе вводимого массива. Заметьте, что этот разделитель связывается с типом данных элемента массива, а не с типом самого массива. | |
typrelid | oid |
| Если это составной тип (см. typtype ), этот столбец указывает на запись pg_class , определяющую соответствующую таблицу. (Для независимого составного типа запись в pg_class на самом деле не представляет таблицу, но она всё равно нужна для связывания с записями pg_attribute этого типа.) Для не составных типов содержит ноль. |
typelem | oid |
| Если значение typelem не 0, оно указывает на другую строку в pg_type . В этом случае к текущему типу можно обращаться по индексу, как к массиву, и получать значения типа typelem . «Настоящий» тип массива имеет переменную длину (typlen = -1), но для некоторых типов фиксированной длины (typlen > 0) также определяется typelem , например, для name и point . Если для типа фиксированной длины определён typelem , его внутренним представлением будет некоторое количество значений типа typelem , без других данных. Типы массивов переменной длины также содержат заголовок, определяемый подпрограммами массива. |
typarray | oid |
| Если поле typarray не равно 0, оно указывает на другую запись в pg_type , описывающую «настоящий» тип массива, в которой этот тип будет элементом |
typinput | regproc |
| Функция преобразования ввода (из текстового формата) |
typoutput | regproc |
| Функция преобразования вывода (в текстовый формат) |
typreceive | regproc |
| Функция преобразования ввода (из двоичного формата), либо 0, если её нет |
typsend | regproc |
| Функция преобразования вывода (в двоичный формат), либо 0, если её нет |
typmodin | regproc |
| Функция ввода модификатора типа, либо 0, если тип не поддерживает модификаторы |
typmodout | regproc |
| Функция вывода модификатора типа, либо 0 для использования стандартного формата |
typanalyze | regproc |
| Нестандартная функция ANALYZE , либо 0 для использования стандартной функции |
typalign | char | Переменная Возможные значения:
ПримечаниеДля типов, используемых в системных таблицах, важно, чтобы размер и выравнивание, определённые в | |
typstorage | char | Значение
Заметьте, что столбцы | |
typnotnull | bool | Поле | |
typbasetype | oid |
| Если это домен (см. |
typtypmod | int4 | Домены используют | |
typndims | int4 | Значение | |
typcollation | oid |
| Значение |
typdefaultbin | pg_node_tree | Если поле | |
typdefault | text | Поле | |
typacl | aclitem[] | Права доступа; за подробностями обратитесь к описанию GRANT и REVOKE |
В Таблице 50.56 перечисляются определённые в системе значения typcategory
. Если этот список будет дополняться в будущем, в него будут добавляться тоже буквы ASCII в верхнем регистре. Все другие символы ASCII зарезервированы для категорий, определяемых пользователями.
Таблица 50.56. Коды typcategory
Код | Категория |
---|---|
A | Типы массивов |
B | Логические типы |
C | Составные типы |
D | Типы даты/времени |
E | Типы-перечисления |
G | Геометрические типы |
I | Типы, описывающие сетевые адреса |
N | Числовые типы |
P | Псевдотипы |
R | Диапазонные типы |
S | Строковые типы |
T | Интервальные типы |
U | Пользовательские типы |
V | Типы битовых строк |
X | Неизвестный тип (unknown ) |