Перейти к основному содержимому

pg_type

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

СтолбецТип данныхОписание
oidoidИдентификатор строки
typnamenameИмя типа данных имя
typnamespaceoid (ссылается на pg_namespace.oid)OID пространства имен, содержащего этот тип
typowneroid (ссылается на pg_authid.oid)Владелец типа
typlenint2Для типа с фиксированным размером typlen — это количество байтов во внутреннем представлении типа. Но для типа с переменной длиной typlen - отрицательный. -1 указывает на тип "varlena" (имеющий слово длины), -2 указывает на строку C с нулевым концом
typbyvalbooltypbyval определяет, передают ли внутренние процедуры значение этого типа по значению или по ссылке. typbyval лучше быть false, если typlen не 1, 2 или 4 (или 8 на машинах, где Datum составляет 8 байт). Типы с переменной длиной всегда передаются по ссылке. Обратите внимание, что typbyval может быть false, даже если длина позволяет передавать значение по ссылке
typtypechartyptype — это b для базового типа, c для составного типа (e.g., тип строки таблицы), d для домена, e для типа enum, p для псевдотипа, r для типа диапазона или m для типа с несколькими диапазонами. См. также typrelid и typbasetype
typcategorychartypcategory — это произвольная классификация типов данных, которая используется анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. Таблицу 53.65
typispreferredboolTrue, если тип является предпочтительной целью приведения в его категории типов
typisdefinedboolTrue, если тип определен, false, если это запись-заполнитель для типа, который еще не определен. Когда typisdefined false, можно полагаться только на имя типа, пространство имен и OID
typdelimcharХарактер, разделяющий два значения этого типа при анализе входных данных массива. Обратите внимание, что разделитель связан с типом данных элемента массива, а не с типом данных массива
typrelidoid (ссылается на pg_class).oid)Если это составной тип (см. typtype), то этот столбец указывает на запись pg_class, которая определяет соответствующую таблицу. (Для отдельного составного типа запись pg_class на самом деле не представляет таблицу, но в любом случае она необходима для того, чтобы записи атрибута pg_class типа связывали to.) ноль для некомпозиционных типов
typsubscriptregproc (ссылается на OID функции обработчика подписки pg_proc.oid),или ноль, если этот тип не поддерживает подписку. Типы, которые являются «истинными» типами массивов, имеют typsubscript = array_subscript_handler, но другие типы могут иметь другие функции обработчика для реализации специализированного поведения подписки
typelemoid (ссылается на pg_type.oid),Если typelem не равен нулю, то он идентифицирует другую строку в pg_type, определяя тип, полученный с помощью субскриптинга. Она должна быть равна нулю, если тип субскрипта равен нулю. Однако она может быть равна нулю, если тип субскрипта не равен нулю, если обработчику не нужен типлем для определения типа результата субскрипта. Обратите внимание, что зависимость от типалема считается подразумевающей физическое содержание типа элемента в этом типе; поэтому изменения DDL типа элемента могут быть ограничены наличием этого типа
typarrayoid (ссылается на pg_type.oid)Если typarray не равен нулю, то он идентифицирует другую строку в pg_type, которая является «истинным» типом массива, имеющим этот тип в качестве элемента
typinputregproc (ссылается на pg_proc.oid)Функция преобразования ввода (текстовый формат)
typoutputregproc (ссылается на pg_proc.oid)Функция преобразования выходного текста (текстовый формат)
typreceiveregproc (ссылается на функцию преобразования ввода pg_proc.oid)(бинарный формат) или ноль, если нет
typsendregproc (ссылается на функцию преобразования выходного текста pg_proc.oid)(бинарный формат) или ноль, если нет
typmodinregproc (ссылается на функцию ввода модификатора типа pg_proc.oid)или ноль, если тип не поддерживает модификаторы
typmodoutregproc (ссылается на функцию выхода модификатора pg_proc.oid) или ноль, чтобы использовать стандартный формат
typanalyzeregproc (ссылается на функцию pg_proc.oid)Нестандартная функция ANALYZE или ноль, чтобы использовать стандартную функцию
typalignchartypalign — это выравнивание, необходимое при хранении значения этого типа. Он применим к хранению на диске, а также к большинству представлений значения внутри PostgreSQL. Когда несколько значений хранятся последовательно, например, в представлении полной строки на диске, заполнение вставляется перед датой этого типа, так что оно начинается на указанной границе. Ссылка на выравнивание — это начало первого значения в последовательности. Возможные значения: c = выравнивание char, i.e., отсутствие выравнивания needed.s = короткое выравнивание (2 байта на большинстве машин). i = выравнивание int (4 байта на большинстве машин).d = двойное выравнивание (8 байтов на многих машинах, но далеко не на всех)
typstoragechartypstorage сообщает для типов varlena (с typlen = -1), готов ли тип к тостам и какой должна быть стратегия по умолчанию для атрибутов этого типа. Возможные значения: p (обычные): значения всегда должны храниться в обычном виде (типы, не использующие varlena, всегда используют это значение). e (внешний): значения могут быть сохранены во вторичном отношении «TOAST» (если отношение имеет одно, см. pg_class.reltoastrelid). m (основной): значения могут быть сжаты и сохранены встроенно. x (расширенный): значения могут быть сжаты и/или перемещены во вторичное отношение. x является обычным выбором для типов, пригодных для тоста. Обратите внимание, что значения m также могут быть перенесены во вторичное хранилище, но только в крайнем случае (значения e и x перемещаются первыми)
typnotnullbooltypnotnull представляет собой ограничение типа без нуля. Используется только для доменов
typbasetypeoid (ссылается на pg_type.oid)Если это домен (см. typtype), то typbasetype идентифицирует тип, на котором основан этот. Ноль, если этот тип не является доменом
typtypmodint4Домены используют typtypmod для записи typmod, который будет применяться к их базовому типу (-1, если базовый тип не использует typmod). -1, если этот тип не является доменом
typndimsint4typndims — число размеров массива для домена над массивом (то есть typbasetype - тип массива). Ноль для типов, отличных от доменов над типами массивов
typcollationoid (ссылается на pg_collation.oid)typcollation указывает порядок сортировки типа. Если тип не поддерживает порядок сортировки, это будет ноль. Базовый тип, который поддерживает порядок сортировки, будет иметь здесь ненулевое значение, обычно DEFAULT_COLLATION_OID. Домен, который поддерживает порядок сортировки, может иметь OID порядка сортировки, отличный от его базового типа, если он был указан для домена
typdefaultbinpg_node_treeЕсли typdefaultbin не является нулевым, это представление nodeToString() выражения по умолчанию для типа. Это используется только для доменов
typdefaulttexttypdefault равен нулю, если тип не имеет соответствующего значения по умолчанию. Если typdefaultbin не равен нулю, typdefault должен содержать читаемую человеком версию выражения по умолчанию, представленного typdefaultbin. Если typdefaultbin равен нулю, а typdefault не равен нулю, то typdefault является внешним представлением значения по умолчанию типа, которое может быть передано во входной преобразователь типа для создания константы
typaclaclitem[]Права доступа

Примечание

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

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

КодКатегория
АТипы массивов
BБулевы типы
CСоставные типы
DТипы даты/времени
ЕТипы инома
GГеометрические типы
IТипы сетевых адресов
NЧисловые типы
PПсевдотипы
RТипы диапазонов
SТипы строк
TТипы временных интервалов
UПользовательские типы
VТипы битовых строк
Хнеизвестный тип
ZТипы внутреннего использования