PG_PROC
PG_PROC系统表存储函数或过程的信息。
名称 |
类型 |
描述 |
---|---|---|
proname |
name |
函数名。 |
pronamespace |
oid |
此函数所在命名空间的OID。 |
proowner |
oid |
函数的所有者。 |
prolang |
oid |
实现语言或函数的调用接口。 |
procost |
real |
估计执行成本。 |
prorows |
real |
结果行估计数。 |
provariadic |
oid |
参数元素的数据类型。 |
protransform |
regproc |
此函数的简化调用方式。 |
proisagg |
boolean |
函数是否为聚集函数。 |
proiswindow |
boolean |
函数是否为窗口函数。 |
prosecdef |
boolean |
函数是否为一个安全定义器(例如,一个“setuid”函数)。 |
proleakproof |
boolean |
函数有无其他影响。如果函数没有对参数进行防泄露处理,则会抛出错误。 |
proisstrict |
boolean |
如果任意调用参数为空,函数是否返回空值。这种情况下函数实际上根本不会被调用。非“strict”的函数必须准备处理空值输入。 |
proretset |
boolean |
函数是否返回一个集合(即,指定数据类型的多个数值)。 |
provolatile |
"char" |
说明该函数的结果是只依赖于它的输入参数,或者还会被外接因素影响。
|
pronargs |
smallint |
参数个数。 |
pronargdefaults |
smallint |
有默认值的参数个数。 |
prorettype |
oid |
返回参数类型的OID。 |
proargtypes |
oidvector |
函数参数数据类型的数组。数组里只包括输入参数(包括INOUT参数),因此也表现了函数的调用特征。 |
proallargtypes |
oid[] |
函数参数数据类型的数组。数组里包括所有参数的类型(包括OUT和INOUT参数),如果所有参数都是IN参数,则这个字段就会为空。注意数组下标是以1为起点的,而因为历史原因,proargtypes的下标起点为0。 |
proargmodes |
"char"[] |
函数参数模式的数组。
如果所有参数都是IN参数,则这个字段为空。注意此数组下标对应的是proallargtypes的位置,而不是proargtypes。 |
proargnames |
text[] |
函数参数名的数组。没有名字的参数在数组里设置为空字符串。如果没有一个参数有名字,这个字段为空。注意此数组的下标对应proallargtypes而不是proargtypes。 |
proargdefaults |
pg_node_tree |
默认值的表达式树。是PRONARGDEFAULTS元素的列表。 |
prosrc |
text |
描述函数或存储过程的定义。例如,对于解释型语言来说就是函数的源程序,或者一个链接符号,一个文件名,或者函数和存储过程创建时指定的其他任何函数体内容,具体取决于语言/调用习惯的实现。 |
probin |
text |
关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。 |
proconfig |
text[] |
函数针对运行时配置变量的本地设置。 |
proacl |
aclitem[] |
访问权限。具体请参见GRANT和REVOKE。 |
prodefaultargpos |
int2vector |
函数默认值的位置,不局限于能最后几个参数才可有默认值。 |
fencedmode |
boolean |
函数的执行模式,表示函数是在fence还是not fence模式下执行。如果是fence执行模式,函数的执行会在重新fork的进程中执行。默认值是fence。 |
proshippable |
boolean |
函数是否可以下推到DN上执行,默认值是false。
|
propackage |
boolean |
该函数是否支持重载,主要针对Oracle风格的函数,默认值是false。 |
应用示例
查询指定函数的OID。例如,获取函数justify_days的OID为1295。
1 2 3 4 5 |
SELECT oid FROM pg_proc WHERE proname ='justify_days'; oid ------ 1295 (1 row) |
查询指定函数是否为聚集函数。例如,查询justify_days函数为非聚集函数。
1 2 3 4 5 |
SELECT proisagg FROM pg_proc WHERE proname ='justify_days'; proisagg ---------- f (1 row) |
查询指定函数的所有者。例如,查询获取func_add_sql函数的owner为用户u1。
1 2 3 4 5 6 7 8 9 10 11 |
SELECT proowner FROM pg_proc WHERE proname='func_add_sql'; proowner ---------- 542778 (1 row) SELECT usename FROM pg_user WHERE usesysid = '542778'; usename --------- u1 (1 row) |