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, для которых он дает имя файла разделяемой библиотеки, содержащей функцию.