49.54. pg_type
В каталоге pg_type хранится информация о типах данных. Базовые типы и типы-перечисления (скалярные типы) создаются командой CREATE TYPE, а домены — командой CREATE DOMAIN. При добавлении любой таблицы в базу данных автоматически создаётся составной тип, представляющий структуру строки таблицы. Также возможно создавать составные типы с помощью команды CREATE TYPE AS.
Таблица 49.54. Столбцы 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задаётся произвольная классификация типов данных, на основе которой анализатор запросов может определить, какие неявные приведения будут «предпочитаемыми». См. Таблицу 49.55. | |
| 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 | 
В Таблице 49.55 перечисляются определённые в системе значения typcategory. Если этот список будет дополняться в будущем, в него будут добавляться тоже буквы ASCII в верхнем регистре. Все другие символы ASCII зарезервированы для категорий, определяемых пользователями.
Таблица 49.55. Коды typcategory
| Код | Категория | 
|---|---|
| A | Типы массивов | 
| B | Логические типы | 
| C | Составные типы | 
| D | Типы даты/времени | 
| E | Типы-перечисления | 
| G | Геометрические типы | 
| I | Типы, описывающие сетевые адреса | 
| N | Числовые типы | 
| P | Псевдотипы | 
| R | Диапазонные типы | 
| S | Строковые типы | 
| T | Интервальные типы | 
| U | Пользовательские типы | 
| V | Типы битовых строк | 
| X | Неизвестный тип ( unknown) |