
# PG_PROC
PG_PROC系统表存储函数或过程的信息。
表1PG_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"       | 说明该函数的结果是只依赖于它的输入参数，或者还会被外接因素影响。 - i表示"不可变的"（immutable）函数，对于相同的输入总是输出相同的结果。  - s表示"稳定的"（stable）函数，对于固定输入其结果在一次扫描里不变。  - v表示"易变"（volatile）函数，其结果可能在任何时候都变化。                                  |
| pronargs         | smallint     | 参数个数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| pronargdefaults  | smallint     | 有默认值的参数个数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| prorettype       | oid          | 返回参数类型的OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| proargtypes      | oidvector    | 函数参数的数据类型的数组。数组里只包括输入参数（包括INOUT参数），因此也表现了函数的调用特征。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| proallargtypes   | oid\[\]      | 函数参数的数据类型的数组。数组里包括所有参数的类型（包括OUT和INOUT参数），如果所有参数都是IN参数，则这个字段就会为空。注意数组下标是以1为起点的，而因为历史原因，proargtypes的下标起点为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| proargmodes      | "char"\[\]   | 函数参数模式的数组。 - i表示IN参数。  - o表示OUT参数。  - b表示INOUT参数。  - v表示VARIADIC参数。  - t表示TABLE参数。   如果所有参数都是IN参数，则这个字段为空。注意此数组下标对应的是proallargtypes的位置，而不是proargtypes。 |
| proargnames      | text\[\]     | 函数参数的名字的数组。没有名字的参数在数组里设置为空字符串。如果没有一个参数有名字，这个字段为空。注意此数组的下标对应proallargtypes而不是proargtypes。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| proargdefaults   | pg_node_tree | 默认值的表达式树。是PRONARGDEFAULTS元素的列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| prosrc           | text         | 描述函数或存储过程的定义。例如，对于解释型语言来说就是函数的源程序，或者一个链接符号，一个文件名，或者函数和存储过程创建时指定的其他任何函数体内容，具体取决于语言/调用习惯的实现。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| probin           | text         | 关于如何调用该函数的附加信息。同样，其含义也是和语言相关的。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| proconfig        | text\[\]     | 函数针对运行时配置变量的本地设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| proacl           | aclitem\[\]  | 访问权限。具体请参见《数据仓库服务SQL语法参考》中"GRANT"和"REVOKE"章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| prodefaultargpos | int2vector   | 当函数参数较多时，函数具有默认值的入参的位置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| fencedmode       | boolean      | 函数的执行模式，表示函数是在fence还是not fence模式下执行。如果是fence执行模式，函数的执行会在重新fork的进程中执行。默认值是fence。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| proshippable     | boolean      | 函数是否可以下推到DN上执行，默认值是false。 - 对于IMMUTABLE类型的函数，函数始终可以下推到DN上执行。  - 对于STABLE/VOLATILE类型的函数，仅当函数的属性是SHIPPABLE的时候，函数可以下推到DN执行。                                                                                                                                                                                                                                                                                                                    |
| propackage       | boolean      | 该函数是否支持重载，主要针对Oracle风格的函数，默认值是false。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
#### 应用示例
查询指定函数的OID。例如，获取函数justify_days的OID为1295。
```
SELECT oid FROM pg_proc where proname ='justify_days';
 oid
------
 1295
(1 row)
```
查询指定函数是否为聚集函数。例如，查询justify_days函数为非聚集函数。
```
SELECT proisagg FROM pg_proc where proname ='justify_days';
 proisagg
----------
 f
(1 row)
```
