50.10. pg_cast#

50.10. pg_cast

50.10. pg_cast

Каталог pg_cast хранит пути преобразования типов данных, как встроенные, так и определенные пользователем.

Следует отметить, что pg_cast не представляет все возможные преобразования типов, которые система умеет выполнять; только те, которые нельзя вывести из некоторого общего правила. Например, преобразование между доменом и его базовым типом не является явно представленным в pg_cast. Еще одно важное исключение состоит в том, что преобразования автоматического ввода-вывода, те, которые выполняются с использованием собственных функций ввода-вывода типа для преобразования в или из text или других строковых типов, не являются явно представленными в pg_cast.

Таблица 50.10. pg_cast Колонки

Тип столбца

Описание

oid oid

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

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

OID исходного типа данных

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

OID целевого типа данных

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

OID функции, используемой для выполнения данного преобразования. Если метод преобразования не требует функции, то значение хранится как ноль.

castcontext char

Указывает, в каких контекстах может быть вызвано приведение типов. e означает только явное приведение (с использованием синтаксиса CAST или ::). a означает неявное приведение при присваивании целевому столбцу, а также явное приведение. i означает неявное приведение в выражениях, а также в других случаях.

castmethod char

Указывает, как выполняется приведение типов. f означает, что используется функция, указанная в поле castfunc. i означает, что используются функции ввода/вывода. b означает, что типы являются бинарно совместимыми, поэтому преобразование не требуется.


Функции приведения типов, перечисленные в pg_cast, всегда должны принимать исходный тип приведения в качестве первого аргумента и возвращать тип назначения приведения в качестве результата. Функция приведения типов может иметь до трех аргументов. Второй аргумент, если присутствует, должен иметь тип integer; он получает модификатор типа, связанный с типом назначения, или -1, если такового нет. Третий аргумент, если присутствует, должен иметь тип boolean; он получает значение true, если приведение является явным приведением, и false в противном случае.

Это законно создать запись pg_cast, в которой исходный и целевой типы совпадают, если связанная функция принимает более одного аргумента. Такие записи представляют собой функции приведения длины, которые приводят значения типа к допустимым для определенного значения модификатора типа.

Когда запись pg_cast имеет разные исходный и целевой типы и функцию, которая принимает более одного аргумента, она представляет преобразование из одного типа в другой и применение модификатора длины в одном шаге. Когда такая запись недоступна, приведение к типу, который использует модификатор типа, включает два шага: первый - преобразование между типами данных, второй - применение модификатора.