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

pg_cast

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

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

СтолбецТип данныхОписание
oidoidИдентификатор строки
castsourceoid (ссылается на pg_type.oid)OID типа данных источника
casttargetoid (ссылается на pg_type.oid)OID целевого типа данных
castfuncoid (ссылается на pg_proc.oid)OID функции, которую нужно использовать для выполнения этого приведения. Ноль сохраняется, если метод приведения не требует функции
castcontextcharУказывает, в каких контекстах можно вызвать приведение. e означает только явное приведение (с использованием синтаксиса CAST или ::). a означает неявно при присвоении целевому столбцу, а также явно. i означает неявно в выражениях, а также в других случаях
castmethodcharУказывает, как выполняется приведение. f означает, что используется функция, указанная в поле castfunc. i означает, что используются функции ввода/вывода. b означает, что типы являются двоично-коерциабельными, поэтому преобразование не требуется

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

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

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