47.36. pg_proc

pg_proc表存储关于函数(或过程)的信息。参阅CREATE FUNCTIONSection 35.3获取更多信息。

该表包含聚集函数和普通函数的数据。如果proisagg为真, 那么在pg_aggregate里应该有一个匹配行。

Table 47-36. 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 可变数组参数的元素的数据类型,如果函数没有可变参数则为零
protransform regproc pg_proc.oid 调用这个函数可以简化其他函数(参阅Section 35.9.11)
proisagg bool 函数是聚集函数
proiswindow bool 函数是窗口函数
prosecdef bool 函数是一个安全定义器(也就是一个"setuid"函数)
proleakproof bool 该函数没有副作用。没有关于该参数的信息传递,除非通过返回值。 任何函数都有可能抛出一个错误,取决于它的参数值是不加密的。
proisstrict bool 如果任何调用参数是空,那么函数返回空。这时函数实际上连调用都不调用。 不是"strict"的函数必须准备处理空输入。
proretset bool 函数返回一个集合(也就是说,指定数据类型的多个数值)
provolatile char 告诉该函数的结果是否只依赖于它的输入参数,或者还会被外接因素影响。 对于"不可变的"(immutable)函数它是 i, 这样的函数对于相同的输入总是产生相同的结果。对于"稳定的"(stable) 函数它是s,(对于固定输入)其结果在一次扫描里不变。 对于"易变"(volatile)函数它是v,其结果可能在任何时候变化。 v也用于那些有副作用的函数,因此调用它们无法得到优化。
pronargs int2 参数数目
pronargdefaults int2 有缺省值的参数的数量
prorettype oid pg_type.oid 返回值的数据类型
proargtypes oidvector pg_type.oid 一个存放函数参数的数据类型的数组。数组里只包括输入参数(包括INOUTVARIADIC参数),因此代表该函数的调用签名(接口)。
proallargtypes oid[] pg_type.oid 一个包含函数参数的数据类型的数组。数组里包括所有参数的类型(包括OUTINOUT参数);不过,如果所有参数都是IN参数, 那么这个字段就会是空。请注意数组下标是以 1 为起点的,而因为历史原因, proargtypes的下标起点为 0 。
proargmodes char[] 一个保存函数参数模式的数组,编码如下:i表示IN参数, o表示OUT参数,b表示INOUT参数, v表示VARIADIC参数,t表示TABLE参数。 如果所有参数都是IN参数,那么这个字段为空。请注意, 下标对应的是proallargtypes的位置,而不是proargtypes
proargnames text[] 一个保存函数参数的名字的数组。没有名字的参数在数组里设置为空字符串。 如果没有一个参数有名字,这个字段将是空。请注意,此数组的下标对应 proallargtypes而不是proargtypes
proargdefaults pg_node_tree 缺省值的表达式树(用nodeToString()表示)。 是和pronargdefaults参数一起列出的,对应最后_N_输入 参数(也就是,最后_N_proargtypes位置)。 如果没有有缺省的参数,那么这个字段为null。
prosrc text 这个字段告诉函数处理器如何调用该函数。它实际上对于解释语言来说就是函数的源程序, 或者一个链接符号,一个文件名,或者是任何其它的东西,具体取决于语言/调用习惯的实现。
probin text 关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。
proconfig text[] 函数的运行时配置变量的本地设置
proacl aclitem[] 访问权限;参阅GRANTREVOKE获取细节。

对于内置和动态加载得编译函数,prosrc包含函数的 C 语言名字(链接符号)。 对于所有其它当前已知的语言类型,prosrc包含该函数的源文本。 probin除了用于动态加载的 C 函数之外没有其它用途, 这个时候它给出包含给函数的共享库的文件名。