45.32. pg_proc

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

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

Table 45-32. pg_proc Columns

名称类型引用描述
pronamename 函数名
pronamespaceoidpg_namespace.oid 包含该函数名空间的OID
proowneroidpg_authid.oid函数的所有者
prolangoidpg_language.oid这个函数的实现语言或调用接口
procostfloat4  估计执行成本(单位cpu_operator_cost);如果 proretset 这是返回每行成本
prorowsfloat4 估计的结果行数(如果不 proretset,则为零)
provariadicoidpg_type.oid可变数组参数元素的数据类型,或 如果函数没有一个可变参数,则为零
proisaggbool 函数是一个聚合函数?
proiswindowbool 函数是一个窗口函数?
prosecdefbool 函数是一个安全定义器?(也就是一个"setuid"函数)
proisstrictbool  如果任何调用参数是空,那么函数返回空。这时函数实际上连调用都不调用。 不是严格的函数必须准备处理输入的空情况。
proretsetbool 函数返回一个集合(也就是说,指定数据类型的多个数值)
provolatilechar  provolatile告诉该函数的结果是否只依赖于它的输入参数,或者还会由外部因素影响。 对于"不变"的函数,它是i,这样的函数对于相同的输入总 是产生相同的结果。对于"稳定"的函数,它是 s,(对于固定输入) 其结果在一次扫描里不变。对于"易变"函数它是v, 其结果可能在任何时候变化。v 也用于那些有副作用的函数,因此调用它们无法得到优化。
pronargsint2 输入参数的数目
pronargdefaultsint2 缺省的参数数目
prorettypeoidpg_type.oid返回值的数据类型
proargtypesoidvectorpg_type.oid 一个存放函数参数的数据类型的数组。 数组里只包括输入参数(包括INOUTVARIADIC参数),因此代表该函数的调用签名(接口)。
proallargtypesoid[]pg_type.oid 一个包含函数参数的数据类型的数组。数组里包括所有参数的 类型(包括和OUTINOUT参数);不过,如果所有参数都是IN参数, 那么这个字段就会是空。请注意数组下标是以1为起点的,而因为历史原因, proargtypes的下标起点为0 。
proargmodeschar[]  一个保存函数参数模式的数组,编码如下:i表示IN参数, o表示OUT参数,b表示INOUT参数。v表示VARIADIC参数, t表示TABLE参数,如果所有参数都是IN参数, 那么这个字段为空。请注意,下标对应的是proallargtypes的位置,而不是proargtypes
proargnamestext[]  一个保存函数参数名的数组。没有名的参数在数组里设置为空字符串。 如果没有一个参数有名,这个字段将是空。请注意,此数组的下标 对应proallargtypes而不是proargtypes
proargdefaultstext  表达式树(在nodeToString()表示) 缺省值。这是一个列表 pronargdefaults元素,对应到最后 N输入参数(即最后 Nproargtypes位置)。 如果没有任何参数有缺省值,这一字段为空。
prosrctext  这个字段告诉函数处理器如何调用该函数。它实际上对于解释语言来说 就是函数的源程序,或者一个链接符号,一个文件名,或者是任何其它的东西 ,具体取决于语言/调用习惯的实现。
probintext  关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。
proconfigtext[] 运行时配置变量的函数局部设置
proaclaclitem[]  访问权限;参阅GRANTREVOKE获取细节。

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