49.37. pg_proc

В каталоге pg_proc хранится информация о функциях (или процедурах). За дополнительными сведениями обратитесь к описанию CREATE FUNCTION и Разделу 35.3.

В этой таблице содержатся данные и агрегатных, и обычных функций. Если признак proisagg равен true, для этой функции должна быть ещё строка в pg_aggregate.

Таблица 49-37. Столбцы 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 Тип данных элементов переменного массива параметров, либо 0, если функция не принимает переменное число параметров
protransform regproc pg_proc.oid Вызовы этой функции могут быть упрощены заданной функцией (см. Подраздел 35.9.11)
proisagg bool  Функция является агрегатной
proiswindow bool  Функция является оконной
prosecdef bool  Функция определяет контекст безопасности (т. е. это функция "setuid")
proleakproof bool  Функция не имеет побочных эффектов. Никакая информация о её аргументах не выдаётся, кроме как через возвращаемое значение. Любая функция, которая может выдать ошибку, в зависимости от значений аргументов, не является герметичной.
proisstrict bool  Функция возвращает NULL, если любой из аргументов при вызове NULL. В этом случае функция фактически не будет вызываться вовсе. Функции, не являющиеся "строгими", должны быть готовы принять значения NULL.
proretset bool  Функция возвращает множество (т. е. множество значений указанного типа данных)
provolatile char  Свойство provolatile говорит, зависит ли результат функции только от её входных аргументов, либо на него влияют внешние факторы. Буквой i обозначаются постоянные функции ("immutable"), которые всегда возвращают один результат для одних и тех же аргументов. Буквой s обозначаются стабильные функции ("stable"), результаты которых (для одних и тех же аргументов) не меняются в ходе одного сканирования. Буквой v обозначаются изменчивые функции ("volatile"), результаты которых могут меняться в любое время. (Так же v следует выбирать для функций с побочными эффектами, чтобы система не оптимизировала их вызовы.)
pronargs int2  Число входных аргументов
pronargdefaults int2  Число аргументов, для которых определены значения по умолчанию
prorettype oid pg_type.oid Тип данных возвращаемого значения
proargtypes oidvector pg_type.oid Массив с типами данных аргументов функции. В нём учитываются только входные аргументы функции (включая аргументы INOUT и VARIADIC), так что он представляет сигнатуру вызова функции.
proallargtypes oid[] pg_type.oid Массив с типами данных аргументов функции. В нём учитываются все аргументы (включая аргументы OUT и INOUT); однако, если все аргументы только входные (IN), это поле будет содержать NULL. Заметьте, что индексы в нём начинаются с 1, тогда как в proargtypes по историческим причинами они начинаются с 0.
proargmodes char[]  Массив с режимами аргументов функций, закодированными как i для входных аргументов (IN), o для выходных аргументов (OUT), b для аргументов входных и выходных одновременно (INOUT), v для переменных аргументов (VARIADIC) и t для табличных аргументов (TABLE). Если все аргументы являются аргументами IN, это поле может содержать NULL. Заметьте, что индексы в этом массиве соответствуют позициям в proallargtypes, а не в proargtypes.
proargnames text[]  Массив с именами аргументов функции. Для аргументов без имени в этом массиве задаются пустые строки. Если все аргументы функции безымянные, это поле может содержать NULL. Заметьте, что индексы в этом массиве соответствуют позициям в proallargtypes, а не в proargtypes.
proargdefaults pg_node_tree  Деревья выражений (в представлении nodeToString()) для значений аргументов по умолчанию. Это список, содержащий pronargdefaults элементов, соответствующих последним N входным аргументам (т. е., последним N позициям в proargtypes). Если значение по умолчанию не имеет никакой аргумент, это поле может содержать NULL.
protrftypes oid[]  OID типов данных, к которым будут применяться трансформации.
prosrc text  Это значение говорит обработчику функции, как вызывать данную функцию. Это может быть собственно исходный код функции для интерпретируемых языков, объектный символ, имя файла или что-то другое, в зависимости от языка реализации/соглашения о вызовах.
probin text  Дополнительная информация о том, как вызывать функцию. Интерпретация этого значения так же зависит от языка.
proconfig text[]  Локальные присвоения конфигурационных переменных времени выполнения, действующие в рамках функции
proacl aclitem[]  Права доступа; за подробностями обратитесь к описанию GRANT и REVOKE

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