41.24. pg_proc

pg_proc 表存储关于函数(或过程)的信息。 CREATE FUNCTIONSection 31.3 包含一些字段含义的更多信息。

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

Table 41-24. pg_proc 字段

名字类型引用描述
pronamename 函数名字
pronamespaceoidpg_namespace.oid 包含该函数名字空间的 OID。
proownerint4pg_shadow.usesysid函数所有者(创建者)
prolangoidpg_langauge.oid这个函数的实现语言或调用接口
proisaggbool 函数是聚集函数
prosecdefbool 函数是一个安全定义器(也就是说,一个"setuid"函数)
proisstrictbool  如果任何调用参数是空,那么函数返回空。这时函数实际上连调用都不调用。 不是"strict"的函数必须准备处理空输入。
proretsetbool 函数返回一个集合(也就是说,指定数据类型的多个数值)
provolatilechar  provolatile 告诉我们该函数的结果是否只倚赖于它的输入参数,或者还会被外接因素影响。 对于"不可变的(immutable)"函数它是i, 这样的函数对于相同的输入总是产生相同的结果。 对于"稳定(stable)"的函数它是 s, (对于固定输入)其结果在一次扫描里不变。 对于"易变(volatile)"函数它是 v, 其结果可能在任何时候变化。(v 也用于那些有副作用的函数,因此调用它们无法得到优化。)
pronargsint2 参数数目
prorettypeoidpg_type.oid返回值的数据类型
proargtypesoidvectorpg_type.oid一个存放函数参数的数据类型的数组。
proargnamestext[]  一个呆着函数参数的名字的数组。没有名字的参数在数组里设置为空字串。 如果没有一个参数有名字,这个字段可以是空。
prosrctext  这个字段告诉函数句柄如何调用该函数。它实际上对于解释语言来说就是函数的源程序, 或者一个链接符号,一个文件名,或者是任何其他的东西,具体取决于语言/调用习惯的实现。
probinbytea  关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。
proaclaclitem[] 访问权限; 参阅 GRANTREVOKE 获取细节。

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