PG_PROC
PG_PROC系统表存储函数或过程的信息。
| 
       名称  | 
     
       类型  | 
     
       描述  | 
    
|---|---|---|
| 
       oid  | 
     
       oid  | 
     
       行标识符(隐含字段,必须明确选择)。  | 
    
| 
       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  | 
     
      
  | 
    
| 
       proretset  | 
     
       boolean  | 
     
       函数返回值是否为一个集合(也就是说,指定数据类型的多个数值)。 
  | 
    
| 
       provolatile  | 
     
       "char"  | 
     
       
       该函数的结果是否只依赖于它的输入参数,或者还会被外界因素影响。
        
  | 
    
| 
       pronargs  | 
     
       smallint  | 
     
       参数数目。  | 
    
| 
       pronargdefaults  | 
     
       smallint  | 
     
       有默认值的参数数目。  | 
    
| 
       prorettype  | 
     
       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[]  | 
     |
| 
       prodefaultargpos  | 
     
       int2vector  | 
     
       函数具有默认值的入参的位置。  | 
    
| 
       fencedmode  | 
     
       boolean  | 
     
       函数的执行模式,表示函数是在fence还是not fence模式下执行。 
  | 
    
| 
       proshippable  | 
     
       boolean  | 
     
       
       表示该函数是否可以下推到DN上执行,默认值是false。
        
  | 
    
| 
       propackage  | 
     
       boolean  | 
     
       表示该函数是否支持重载,默认值是false。 
  | 
    
| 
       prokind  | 
     
       "char"  | 
     
       表示该对象为函数还是存储过程。 
  | 
    
| 
       proargsrc  | 
     
       text  | 
     
       描述兼容ORA语法定义的函数或存储过程的参数输入字符串,包括参数注释。默认值为NULL。  | 
    
| 
       proargtypesext  | 
     
       oidvector_extend  | 
     
       当函数参数较多时,用来存放函数参数的数据类型的数组。数组里只包括输入参数(包括INOUT参数),代表该函数的调用签名(接口)。  | 
    
| 
       prodefaultargposext  | 
     
       int2vector_extend  | 
     
       当函数参数较多时,函数具有默认值的入参的位置。  | 
    
| 
       allargtypes  | 
     
       oidvector  | 
     
       用来存放存储过程参数的数据类型的数组,包含存储过程所有参数(入参、出参、INOUT参数)。  | 
    
| 
       allargtypesext  | 
     
       oidvector_extend  | 
     
       当函数参数较多(大于666个)时,用来存放存储过程参数的数据类型的数组,包含所有参数(入参、出参、INOUT参数)。  | 
    
 
  新建函数时,会向pg_proc表中插入数据,更新索引。当出入参个数很多时,索引的长度可能会超过页面的三分之一,进而可能会产生“Index row size xxx exceeds maximum xxx for index "pg_proc_proname_all_args_nsp_index"”的报错,此为预期情况。您可以通过减少参数个数,避免该报错的产生。