50.62. pg_type

В каталоге pg_type хранится информация о типах данных. Базовые типы и типы-перечисления (скалярные типы) создаются командой CREATE TYPE, а домены — командой CREATE DOMAIN. При добавлении любой таблицы в базу данных автоматически создаётся составной тип, представляющий структуру строки таблицы. Также возможно создавать составные типы с помощью команды CREATE TYPE AS.

Таблица 50.62. Столбцы pg_type

Тип столбца

Описание

oidoid

Идентификатор строки

typnamename

Имя типа данных

typnamespaceoid (ссылается на pg_namespace.oid)

OID пространства имён, содержащего этот тип

typowneroid (ссылается на pg_authid.oid)

Владелец типа

typlenint2

Для типа фиксированного размера в typlen задаётся число байт во внутреннем представлении типа. Но для типов переменной длины, typlen будет отрицательным. Значение -1 обозначает тип «varlena» (он содержит машинное слово, определяющее длину), а -2 обозначает строку в стиле C, оканчивающуюся нулём.

typbyvalbool

Поле typbyval определяет, будут ли внутренние процедуры передавать переменные этого типа по значению или по ссылке. Полю typbyval лучше присвоить false, если длина typlen не равна 1, 2 или 4 (либо 8, на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Заметьте, что typbyval может быть false, даже если размер типа позволяет передачу по значению.

typtypechar

Поле typtype принимает значение b для базового типа (base), c для составного (composite), то есть типа строки таблицы, d для домена (domain), e для перечисления (enum), p для псевдотипа (pseudo-type) или r для диапазона (range). См. также typrelid и typbasetype.

typcategorychar

В поле typcategory задаётся произвольная классификация типов данных, на основе которой анализатор запросов может определить, какие неявные приведения будут «предпочитаемыми». См. Таблицу 50.63.

typispreferredbool

True, если этот тип является предпочитаемым целевым типом в своей категории (typcategory)

typisdefinedbool

True, если тип определён, и false, если это тип-заготовка для ещё не определённого типа. Когда значение typisdefined — false, можно полагаться только на заданное имя, пространство имён и OID типа.

typdelimchar

Символ, разделяющий два значения этого типа при разборе вводимого массива. Заметьте, что этот разделитель связывается с типом данных элемента массива, а не с типом самого массива.

typrelidoid (ссылается на pg_class.oid)

Если это составной тип (см. typtype), этот столбец указывает на запись pg_class, определяющую соответствующую таблицу. (Для независимого составного типа запись в pg_class на самом деле не представляет таблицу, но она всё равно нужна для связывания с записями pg_attribute этого типа.) Для не составных типов содержит ноль.

typelemoid (ссылается на pg_type.oid)

Если значение typelem не 0, оно указывает на другую строку в pg_type. В этом случае к текущему типу можно обращаться по индексу, как к массиву, и получать значения типа typelem. «Настоящий» тип массива имеет переменную длину (typlen = -1), но для некоторых типов фиксированной длины (typlen > 0) также определяется typelem, например, для name и point. Если для типа фиксированной длины определён typelem, его внутренним представлением будет некоторое количество значений типа typelem, без других данных. Типы массивов переменной длины также содержат заголовок, определяемый подпрограммами массива.

typarrayoid (ссылается на pg_type.oid)

Если поле typarray не равно 0, оно указывает на другую запись в pg_type, описывающую «настоящий» тип массива, в которой этот тип будет элементом

typinputregproc (ссылается на pg_proc.oid)

Функция преобразования ввода (из текстового формата)

typoutputregproc (ссылается на pg_proc.oid)

Функция преобразования вывода (в текстовый формат)

typreceiveregproc (ссылается на pg_proc.oid)

Функция преобразования ввода (из двоичного формата), либо 0, если её нет

typsendregproc (ссылается на pg_proc.oid)

Функция преобразования вывода (в двоичный формат), либо 0, если её нет

typmodinregproc (ссылается на pg_proc.oid)

Функция ввода модификатора типа, либо 0, если тип не поддерживает модификаторы

typmodoutregproc (ссылается на pg_proc.oid)

Функция вывода модификатора типа, либо 0 для использования стандартного формата

typanalyzeregproc (ссылается на pg_proc.oid)

Нестандартная функция ANALYZE, либо 0 для использования стандартной функции

typalignchar

Переменная typalign определяет выравнивание, требуемое при хранении значения этого типа. Эта величина применяется при хранении на диске, а также для большинства представлений значений внутри Postgres Pro. Когда последовательно хранятся несколько значений, как например в представлении полной строки на диске, дополнительные байты добавляются перед значением этого типа, чтобы оно начиналось с указанной границы. Заданное выравнивание определяет смещение первого элемента последовательности. Возможные значения:

  • c = выравнивание по символам (char), то есть выравнивание не требуется.

  • s = выравнивание по коротким словам (short), 2 байта для большинства машин.

  • i = выравнивание по целым (int), 4 байта для большинства машин.

  • d = выравнивание по двойным словам (double), 8 байт для большинства машин, но не для всех.

typstoragechar

Значение typstorage для типов varlena (типов с typlen = -1) говорит, готов ли тип для помещения в TOAST, и какова стратегия по умолчанию для хранения атрибутов этого типа. Возможные значения:

  • p (plain, простое): Значение всегда должно храниться простым образом (этот вариант используется для всех типов постоянной длины).

  • e (external, внешнее): Значения могут храниться во вторичном отношении «TOAST» (если оно есть, см. pg_class.reltoastrelid).

  • m (main, основное): Значения могут сжиматься и храниться внутри кортежа.

  • x (extended, расширенное): Значения могут сжиматься и/или перемещаться во вторичное хранилище.

Для типов, которые могут быть помещены в TOAST, обычно применяется стратегия x. Заметьте, что значения m тоже могут быть помещены во вторичное хранилище, но только в качестве последней меры (в первую очередь в него помещаются значения e и x).

typnotnullbool

Поле typnotnull представляет ограничение «не NULL» для типа. Применяется только для доменов.

typbasetypeoid (ссылается на pg_type.oid)

Если это домен (см. typtype), то typbasetype указывает на тип, на котором он основан. Ноль, если это не домен.

typtypmodint4

Домены используют typtypmod для записи модификатора (typmod), применяемого к их базовому типу (-1, если базовый тип не использует typmod). Если тип не является доменом, принимает значение -1.

typndimsint4

Значение typndims задаёт число размерностей массива для домена, определённого поверх массива (то есть когда typbasetype — тип массива). Для типов, отличных от доменов поверх типов массивов, принимает значение 0.

typcollationoid (ссылается на pg_collation.oid)

Значение typcollation задаёт правило сортировки для типа. Если тип не является сортируемым, оно будет нулевым. У базового типа, поддерживающего правила сортировки, в этом поле будет ненулевое значение, обычно DEFAULT_COLLATION_OID. Домен на базе сортируемого типа может иметь другой OID правила сортировки, если оно было изменено для домена.

typdefaultbinpg_node_tree

Если поле typdefaultbin не NULL, в нём содержится представление выражения по умолчанию для этого типа (совместимое с nodeToString(). Это поле используется только для доменов.

typdefaulttext

Поле typdefault содержит NULL, если с типом не связано значение по умолчанию. Если typdefaultbin не NULL, typdefault должно содержать понятную человеку версию выражения значения по умолчанию, записанного в typdefaultbin. Если typdefaultbin содержит NULL, а typdefault нет, то в typdefault находится внешнее представление значения по умолчанию, которое можно передать функции преобразования ввода и получить константу.

typaclaclitem[]

Права доступа; за подробностями обратитесь к Разделу 5.7.


Примечание

Для типов фиксированного размера, используемых в системных таблицах, важно, чтобы размер и выравнивание, определённые в pg_type, согласовывались с тем, как компилятор располагает этот столбец в структуре, представляющей строку таблицы.

В Таблице 50.63 перечисляются определённые в системе значения typcategory. Если этот список будет дополняться в будущем, в него будут добавляться тоже буквы ASCII в верхнем регистре. Все другие символы ASCII зарезервированы для категорий, определяемых пользователями.

Таблица 50.63. Коды typcategory

КодКатегория
AТипы массивов
BЛогические типы
CСоставные типы
DТипы даты/времени
EТипы-перечисления
GГеометрические типы
IТипы, описывающие сетевые адреса
NЧисловые типы
PПсевдотипы
RДиапазонные типы
SСтроковые типы
TИнтервальные типы
UПользовательские типы
VТипы битовых строк
XНеизвестный тип (unknown)

close