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