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

pg_proc

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

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

СтолбецТип данныхОписание
oidoidИдентификатор строки
pronamenameИмя функции
pronamespaceoid (ссылается на pg_namespace.oid)OID пространства имен, содержащего эту функцию
proowneroid (ссылается на pg_authid.oid)Владелец функции
prolangoid (ссылается на pg_language.oid)Язык реализации или интерфейс вызова этой функции
procostfloat4Оценочная стоимость выполнения (в единицах cpu_operator_cost); если proretset, это стоимость за возвращаемую строку
прострокиfloat4Расчетное количество строк результата (ноль, если не проретсет)
Провардиадныйoid (ссылается на pg_type.oid)Тип элементов переменного массива, или ноль, если функция не имеет переменного параметра
prosupportregproc (ссылается на на функцию поддержки pg_proc.oid) для этой функции или ноль, если нет)
prokindcharf для нормальной функции, p для процедуры, a для агрегатной функции или w для оконной функции
prosecdefboolФункция является определяющим элементом безопасности (i.e., функция «setuid»)
proleakproofboolФункция не имеет побочных эффектов. Никакая информация об аргументах не передается, кроме как через возвращаемое значение. Любая функция, которая может вызвать ошибку в зависимости от значений ее аргументов, не является герметичной
proisstrictboolФункция возвращает NULL, если любой аргумент вызова равен NULL. В этом случае функция вообще не вызывается. Функции, которые не являются «строгими», должны быть готовы обрабатывать нулевые входы
proretsetboolФункция возвращает набор (т.e., несколько значений указанного типа данных)
provolatilecharprovolatile показывает, зависит ли результат функции только от входных аргументов или на него влияют внешние факторы. Это i для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных. Это s для «стабильных» функций, результаты которых (для фиксированных входных данных) не меняются в ходе сканирования. Это v для «нестабильных» функций, результаты которых могут измениться в любое время. (Используйте v также для функций с побочными эффектами, чтобы вызовы к ним не получали оптимизации away.)
proparallelcharproparallel показывает, можно ли безопасно запускать функцию в параллельном режиме. Это s для функций, которые можно безопасно запускать в параллельном режиме без ограничений. Это r для функций, которые можно запускать в параллельном режиме, но их выполнение ограничено лидером параллельной группы; параллельные рабочие процессы не могут вызвать эти функции. Это u для функций, которые небезопасны в параллельном режиме; наличие такой функции заставляет выполнять план последовательного выполнения
pronargsint2Количество входных аргументов
pronargdefaultsint2Количество аргументов, имеющих значения по умолчанию
prorettypeoid (ссылается на pg_type.oid)Тип данных возвращаемого значения
proargtypesoidvector (ссылается на на массив типов данных аргументов функции pg_type.oid).Он включает только входные аргументы (включая аргументы INOUT и VARIADIC) и, таким образом, представляет собой сигнатуру вызова функции
proallargtypesoid[] (ссылается на на массив типов данных аргументов функции pg_type.oid).Это включает все аргументы (включая аргументы OUT и INOUT); однако, если все аргументы являются аргументами IN, это поле будет нулевым. Обратите внимание, что передача по субтитрам основана на 1, тогда как по историческим причинам передача по субскриптам происходит из 0
proargmodeschar[]Массив режимов аргументов функции, закодированных как i для аргументов IN, o для аргументов OUT, b для аргументов INOUT, v для аргументов VARIADIC, t для аргументов TABLE. Если все аргументы являются аргументами IN, это поле будет нулевым. Обратите внимание, что подзаголовки соответствуют позициям проалларгтипов, а не проаргтипов
proargnamestext[]Массив имен аргументов функции. Аргументы без имени устанавливаются как пустые строки в массиве. Если ни один из аргументов не имеет имени, это поле будет нулевым. Обратите внимание, что сноски соответствуют позициям проалларгтипов, а не проаргтипов
proargdefaultspg_node_treeДля значений по умолчанию proargdefaults использует деревья выражений pg_node_tree (в представлении nodeToString()). Это список элементов pronargdefaults, соответствующих последним N входным аргументам (i.e., последним N позициям proargtypes). Если ни один из аргументов не имеет значений по умолчанию, это поле будет нулевым
protrftypesoid[] (ссылается на pg_type.oid)Массив типов данных аргумента/результата, для которых нужно применить преобразования (из предложения TRANSFORM функции). Нулевые, если их нет
prosrctextЭто говорит обработчику функции, как вызвать функцию. Это может быть фактический исходный код функции для интерпретируемых языков, символ ссылки, имя файла или что-то еще, в зависимости от языка реализации и соглашения о вызове
пробныйtextДополнительная информация о том, как вызвать функцию. Опять же, интерпретация зависит от языка
prosqlbodypg_node_treeПредварительно проанализированное тело функции SQL. Это используется для функций на языке SQL, когда тело задается в нотации стандарта SQL, а не в виде строкового литерала. В остальных случаях оно равно нулю
proconfigtext[] Локальные настройки функции для переменных конфигурации во время выполнения

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