pg_proc#

В каталоге pg_proc хранится информация о функциях, процедурах, агрегатных функциях и функциях window (в совокупности также называемых рутинами).

Если prokind указывает на то, что запись относится к агрегатной функции, то должна быть соответствующая строка в pg_aggregate.

Столбец

Тип данных

Описание

oid

oid

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

proname

name

Имя функции

pronamespace

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

OID пространства имен, содержащего эту функцию

proowner

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

Владелец функции

prolang

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

Язык реализации или интерфейс вызова этой функции

procost

float4

Оценочная стоимость выполнения (в единицах cpu_operator_cost); если proretset, это стоимость за возвращаемую строку

простроки

float4

Расчетное количество строк результата (ноль, если не проретсет)

Провардиадный

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

Тип элементов переменного массива, или ноль, если функция не имеет переменного параметра

prosupport

regproc (ссылается на на функцию поддержки pg_proc.oid) для этой функции или ноль, если нет)

prokind

char

f для нормальной функции, p для процедуры, a для агрегатной функции или w для оконной функции

prosecdef

bool

Функция является определяющим элементом безопасности (i.e., функция «setuid»)

proleakproof

bool

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

proisstrict

bool

Функция возвращает NULL, если любой аргумент вызова равен NULL. В этом случае функция вообще не вызывается. Функции, которые не являются «строгими», должны быть готовы обрабатывать нулевые входы

proretset

bool

Функция возвращает набор (т.e., несколько значений указанного типа данных)

provolatile

char

provolatile показывает, зависит ли результат функции только от входных аргументов или на него влияют внешние факторы. Это i для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных. Это s для «стабильных» функций, результаты которых (для фиксированных входных данных) не меняются в ходе сканирования. Это v для «нестабильных» функций, результаты которых могут измениться в любое время. (Используйте v также для функций с побочными эффектами, чтобы вызовы к ним не получали оптимизации away.)

proparallel

char

proparallel показывает, можно ли безопасно запускать функцию в параллельном режиме. Это s для функций, которые можно безопасно запускать в параллельном режиме без ограничений. Это r для функций, которые можно запускать в параллельном режиме, но их выполнение ограничено лидером параллельной группы; параллельные рабочие процессы не могут вызвать эти функции. Это u для функций, которые небезопасны в параллельном режиме; наличие такой функции заставляет выполнять план последовательного выполнения

pronargs

int2

Количество входных аргументов

pronargdefaults

int2

Количество аргументов, имеющих значения по умолчанию

prorettype

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

Тип данных возвращаемого значения

proargtypes

oidvector (ссылается на на массив типов данных аргументов функции pg_type.oid).

Он включает только входные аргументы (включая аргументы INOUT и VARIADIC) и, таким образом, представляет собой сигнатуру вызова функции

proallargtypes

oid[] (ссылается на на массив типов данных аргументов функции pg_type.oid).

Это включает все аргументы (включая аргументы OUT и INOUT); однако, если все аргументы являются аргументами IN, это поле будет нулевым. Обратите внимание, что передача по субтитрам основана на 1, тогда как по историческим причинам передача по субскриптам происходит из 0

proargmodes

char[]

Массив режимов аргументов функции, закодированных как i для аргументов IN, o для аргументов OUT, b для аргументов INOUT, v для аргументов VARIADIC, t для аргументов TABLE. Если все аргументы являются аргументами IN, это поле будет нулевым. Обратите внимание, что подзаголовки соответствуют позициям проалларгтипов, а не проаргтипов

proargnames

text[]

Массив имен аргументов функции. Аргументы без имени устанавливаются как пустые строки в массиве. Если ни один из аргументов не имеет имени, это поле будет нулевым. Обратите внимание, что сноски соответствуют позициям проалларгтипов, а не проаргтипов

proargdefaults

pg_node_tree

Для значений по умолчанию proargdefaults использует деревья выражений pg_node_tree (в представлении nodeToString()). Это список элементов pronargdefaults, соответствующих последним N входным аргументам (i.e., последним N позициям proargtypes). Если ни один из аргументов не имеет значений по умолчанию, это поле будет нулевым

protrftypes

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

Массив типов данных аргумента/результата, для которых нужно применить преобразования (из предложения TRANSFORM функции). Нулевые, если их нет

prosrc

text

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

пробный

text

Дополнительная информация о том, как вызвать функцию. Опять же, интерпретация зависит от языка

prosqlbody

pg_node_tree

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

proconfig

text[] Локальные настройки функции для переменных конфигурации во время выполнения

Для скомпилированных функций, как встроенных, так и динамически загружаемых, prosrc содержит имя функции на языке C (символ ссылки). Для функций на SQL-языке prosrc содержит исходный текст функции, если он указан как строковый литерал; если же тело функции указано в стиле SQL-стандарта, prosrc не используется (обычно это пустая строка), а prosqlbody содержит предварительно разобранное определение. Для всех остальных известных в настоящее время типов языка prosrc содержит исходный текст функции. probin — null, за исключением динамически загружаемых функций C, для которых он дает имя файла разделяемой библиотеки, содержащей функцию.