pg_proc
pg_proc¶
pg_proc
系统目录表存储关于函数(或过程)的信息,包括所有的内建函数以及由CREATE FUNCTION
定义的函数。
该表也包含了聚集和窗口函数以及普通函数的数据。
如果proisagg
为真,在pg_aggregate
中应该有一个相匹配的行。
对于内置和动态加载的已编译函数,prosrc
包含函数的C语言名称(链接符号)。
对于所有其他当前已知的语言类型,prosrc
包含函数的源文本。
除了动态加载的C函数之外,probin
是未使用的,它为此提供了包含该函数的共享库文件的名称。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
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 为true ,这是返回每行的代价 |
|
prorows |
float4 | 估计的结果行数(如果不是proretset 则为零) |
|
provariadic |
oid | pg_type.oid | 可变数组参数的元素的数据类型,如果函数没有可变参数则为0 |
prosecdef |
boolean | 函数是一个安全性定义器(例如,一个"setuid"函数) | |
proleakproof |
boolean | 该功能没有副作用。 除了通过返回值之外,不会传达有关参数的信息。 任何可能根据其参数的值抛出错误的函数都不是防漏的。 | |
proisstrict |
boolean | 当任意调用参数为空时,函数是否会返回空值。 在那种情况下函数实际上根本不会被调用。 非“strict”函数必须准备好处理空值输入。 | |
proretset |
boolean | 函数是否返回一个集合(即,指定数据类型的多个值) | |
provolatile |
char | 说明函数的结果是仅依赖于它的输入参数,还是会被外部因素影响。 值i 表示“不变的”函数,它对于相同的输入总是输出相同的结果。 值s 表示“稳定的”函数,它的结果(对于固定输入)在一次扫描内不会变化。 值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 参数,这个属性将为空。 注意下标是从1开始,然而由于历史原因proargtypes 的下标是从0开始。 |
proargmodes |
char[] | 函数参数的模式的数组:i 表示IN 参数,o 表示OUT 参数,b 表示INOUT 参数,v 表示VARIADIC 参数。 如果所有的参数都是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[] | GRANT /REVOKE 给出的函数访问权限 |
|
proexeclocation |
char | 函数在调用时执行的位置:m - 仅限coordinator,a - 任何段实例,s - 所有段实例。 |
|
prosupport |
regproc | pg_proc.oid | 对于该函数可选的计划器支持函数 |
prokind |
char | f 表示普通函数,p 表示过程,a 表示聚集函数,w 表示窗口函数。 |
|
proparallel |
char | 说明该函数在并行模式下是否能安全地运行。对于能在并行模式下不受限制安全运行的函数,这列是s 。对于可以在并行模式下运行但是只限于由并行分组的领导者执行的函数,这列是r 。对于在并行模式中不安全的函数,这列是u ,这种函数的存在会强制一个顺序执行计划。 |
|
protrftypes |
oid[] | 要在其上应用转换的数据类型的OID。 |
Table 1. pg_catalog.pg_proc