PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.36. `pg_proc`

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

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

表 48-36. `pg_proc` 字段

名字 | 类型 | 引用 | 描述
--- | --- | --- | ---
`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`, 这是每一行返回的成本
`prorows` | `float4` |  | 估计的结果行数(如果非`proretset`则为零)
`provariadic` | `oid` | ``pg_type`.oid` | 可变数组参数的元素的数据类型，如果函数没有可变参数则为零
`protransform` | `regproc` | ``pg_proc`.oid` | 调用这个函数可以简化其他函数(参阅第 35.9.11 节)
`proisagg` | `bool` |  | 函数是聚合函数
`proiswindow` | `bool` |  | 函数是窗口函数
`prosecdef` | `bool` |  | 函数是一个安全定义器(也就是一个"setuid"函数)
`proleakproof` | `bool` |  | 该函数没有副作用。没有关于该参数的信息传递，除非通过返回值。 任何函数都有可能抛出一个错误，取决于它的参数值是不加密的。
`proisstrict` | `bool` |  | 如果任何调用参数是空，那么函数返回空。这时函数实际上连调用都不调用。 不是"strict"的函数必须准备处理空输入。
`proretset` | `bool` |  | 函数返回一个集合(也就是说，指定数据类型的多个数值)
`provolatile` | `char` |  | 告诉该函数的结果是否只依赖于它的输入参数，或者还会被外接因素影响。 对于"不可变的"(immutable)函数它是 `i`， 这样的函数对于相同的输入总是产生相同的结果。对于"稳定的"(stable) 函数它是`s`，(对于固定输入)其结果在一次扫描里不变。 对于"易变"(volatile)函数它是`v`，其结果可能在任何时候变化。 `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`参数，`t`表示`TABLE`参数。 如果所有参数都是`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获取细节。

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

上一页 | 起始页 | 下一页
`pg_pltemplate` | 上一级 | `pg_range`