50.64. pg_type#

50.64. pg_type

50.64. pg_type #

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

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

Тип столбца

Описание

oid oid

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

typname name

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

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

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

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

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

typlen int2

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

typbyval bool

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

typtype char

typtype это b для базового типа, c для составного типа (например, тип строки таблицы), d для домена, e для перечислимого типа, p для псевдотипа, r для диапазонного типа или m для множественного диапазонного типа. См. также typrelid и typbasetype.

typcategory char

typcategory - это произвольная классификация типов данных, которая используется парсером для определения, какие неявные преобразования следует предпочитать. См. Таблица 50.65.

typispreferred bool

True если тип является предпочтительной целью приведения внутри его typcategory

typisdefined bool

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

typdelim char

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

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

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

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

OID функции обработчика индексации, или ноль, если этот тип не поддерживает индексацию. Типы, которые являются массивами, имеют поле typsubscript = array_subscript_handler, но другие типы могут иметь другие функции-обработчики для реализации специализированного поведения индексации.

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

Если typelem не равно нулю, то это указывает на другую строку в pg_type, определяющую тип, получаемый при индексации. Это значение должно быть нулевым, если typsubscript равно нулю. Однако, оно может быть нулевым, когда typsubscript не равно нулю, если обработчику не требуется typelem для определения типа результата индексации. Обратите внимание, что зависимость от typelem считается означающей физическое содержание типа элемента в этом типе; поэтому изменения DDL на типе элемента могут быть ограничены наличием этого типа.

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

Если typarray не равно нулю, то это идентифицирует другую строку в pg_type, которая является массивом типа true с этим типом в качестве элемента.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

typalign char

typalign - это выравнивание, необходимое при хранении значения этого типа. Оно применяется как к хранению на диске, так и к большинству представлений значения внутри Tantor BE. При хранении нескольких значений последовательно, например, в представлении полной строки на диске, перед данными этого типа вставляется заполнение, чтобы они начинались на указанной границе. Ссылка на выравнивание - это начало первого значения в последовательности. Возможные значения:

  • c = char выравнивание, т.е. выравнивание не требуется.

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

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

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

typstorage char

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

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

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

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

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

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

typnotnull bool

typnotnull представляет собой ограничение not-null на тип. Используется только для доменов.

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

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

typtypmod int4

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

typndims int4

typndims - это количество размерностей массива для домена над массивом (то есть typbasetype является типом массива). Ноль для типов, отличных от доменов над массивами.

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

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

typdefaultbin pg_node_tree

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

typdefault text

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

typacl aclitem[]

Права доступа; см. Раздел 5.7 для получения подробной информации


Примечание

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

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

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

КодКатегория
AТипы массивов
BТипы Boolean
CСоставные типы
DТипы даты/времени
EТипы перечислений
GГеометрические типы
IТипы сетевых адресов
NЧисловые типы
PPseudo-types
RТипы диапазонов
SТипы строк
TТипы временных интервалов
UПользовательские типы
VТипы битовых строк
XТип unknown
ZТипы для внутреннего использования