51.39. pg_proc#

51.39. pg_proc

51.39. pg_proc

Каталог pg_proc хранит информацию о функциях, процедурах,агрегатных функциях и оконных функциях (вместе также известных как процедуры). См. CREATE FUNCTION , CREATE PROCEDURE и Раздел 36.3 для получения дополнительной информации.

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

Таблица 51.39. pg_proc Колонки

Тип столбца

Описание

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, это стоимость на каждую возвращаемую строку

prorows float4

Оценочное количество строк результатов (ноль, если proretset не установлено)

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

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

prosupport regproc (ссылается на pg_proc.oid)

Опорная функция планировщика для этой функции (см. Раздел 36.10), или ноль, если таковой отсутствует.

prokind char

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

prosecdef bool

Функция является определителем безопасности (т.е. функцией setuid)

proleakproof bool

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

proisstrict bool

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

proretset bool

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

provolatile char

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

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, в то время как по историческим причинам proargtypes индексируется с 0.

proargmodes char[]

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

proargnames text[]

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

proargdefaults pg_node_tree

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

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

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

prosrc text

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

probin text

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

prosqlbody pg_node_tree

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

proconfig text[]

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

proacl aclitem[]

Права доступа; см. Раздел 5.7 для получения подробной информации


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