目录搜索
文字
分享

45.32. pg_proc

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

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

Table 45-32. pg_proc Columns

名称 类型 引用 描述
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 可变数组参数元素的数据类型,或 如果函数没有一个可变参数,则为零
proisagg bool   函数是一个聚合函数?
proiswindow bool   函数是一个窗口函数?
prosecdef bool   函数是一个安全定义器?(也就是一个"setuid"函数)
proisstrict bool   如果任何调用参数是空,那么函数返回空。这时函数实际上连调用都不调用。 不是严格的函数必须准备处理输入的空情况。
proretset bool   函数返回一个集合(也就是说,指定数据类型的多个数值)
provolatile char   provolatile告诉该函数的结果是否只依赖于它的输入参数,或者还会由外部因素影响。 对于"不变"的函数,它是i,这样的函数对于相同的输入总 是产生相同的结果。对于"稳定"的函数,它是 s,(对于固定输入) 其结果在一次扫描里不变。对于"易变"函数它是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 text   表达式树(在nodeToString()表示) 缺省值。这是一个列表 pronargdefaults元素,对应到最后 N输入参数(即最后 Nproargtypes位置)。 如果没有任何参数有缺省值,这一字段为空。
prosrc text   这个字段告诉函数处理器如何调用该函数。它实际上对于解释语言来说 就是函数的源程序,或者一个链接符号,一个文件名,或者是任何其它的东西 ,具体取决于语言/调用习惯的实现。
probin text   关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。
proconfig text[]   运行时配置变量的函数局部设置
proacl aclitem[]   访问权限;参阅GRANT和REVOKE获取细节。

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