PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.39. pg_proc #

目录 pg_proc 存储关于函数、过程、聚集函数 和窗口函数(统称为例程)的信息。更多信息见 CREATE FUNCTION、CREATE PROCEDURE 和 Section 36.3。

如果 prokind 表明该条目针对聚集函数, 则在 pg_aggregate 中应当有一行与之匹配。

Table 52.39. \1 字段列说明

Column Type

Description

oid oid

Row identifier

proname name

函数的名称

pronamespace oid (references pg_namespace.oid)

包含此函数的命名空间的 OID

proowner oid (references pg_authid.oid)

函数的拥有者

prolang oid (references pg_language.oid)

此函数的实现语言或调用接口

procost float4

估计的执行代价 (以 cpu_operator_cost 为单位); 如果 proretset, 则为每返回一行的代价

prorows float4

估计的结果行数(如果 proretset 为假则为零)

provariadic oid (references pg_type.oid)

可变参数数组参数的元素的数据类型; 如果该函数没有可变参数则为零

prosupport regproc (references pg_proc.oid)

此函数的规划器支持函数(见 Section 36.11),如果没有则为零

prokind char

f 表示普通函数,p 表示过程,a 表示聚集函数, w 表示窗口函数

prosecdef bool

函数是一个安全定义者(即一个 “setuid” 函数)

proleakproof bool

该函数没有副作用。除返回值之外,不会传递关于参数的任何信息。 任何可能根据其参数值抛出错误的函数都不是防泄漏的。

proisstrict bool

如果任一调用参数为空,则函数返回空值。在这种情况下, 该函数实际上根本不会被调用。非“严格”的函数 必须准备好处理空输入。

proretset bool

函数返回一个集合(即指定数据类型的多个值)

provolatile char

provolatile 说明函数的结果 是只取决于其输入参数,还是受外部因素影响。 对于“不可变”函数,它是 i, 这类函数对相同的输入总是给出相同的结果。 对于“稳定”函数,它是 s, 这类函数的结果(对固定输入)在一次扫描内不会改变。 对于“易变”函数,它是 v, 这类函数的结果可能随时变化。 (有副作用的函数也使用 v, 这样对它们的调用就不会被优化掉。)

proparallel char

proparallel 说明该函数 是否可以安全地以并行模式运行。 对于可以不受限制地以并行模式安全运行的函数,它是 s。 对于可以以并行模式运行、但其执行被限制在并行组领导者的函数, 它是 r;并行工作者进程不能调用这些函数。 对于在并行模式下不安全的函数,它是 u; 这类函数的存在会强制使用串行执行计划。

pronargs int2

输入参数的个数

pronargdefaults int2

有默认值的参数的个数

prorettype oid (references pg_type.oid)

返回值的数据类型

proargtypes oidvector (references pg_type.oid)

函数参数的数据类型的数组。它只包括输入参数 (包括 INOUT 和 VARIADIC 参数), 因此表示该函数的调用签名。

proallargtypes oid[] (references 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 个 输入参数 (即 proargtypes 的最后 N 个位置)。 如果所有参数都没有默认值,则此字段为空。

protrftypes oid[] (references pg_type.oid)

要应用转换(来自函数的 TRANSFORM 子句)的 参数/结果数据类型的数组。如果没有则为空。

prosrc text

该字段告诉函数处理程序如何调用该函数。 对于解释型语言,它可能是函数的实际源代码; 也可能是链接符号、文件名或几乎任何其他内容, 取决于实现语言/调用约定。

probin text

有关如何调用该函数的附加信息。同样,其解释取决于具体的语言。

prosqlbody pg_node_tree

预解析的 SQL 函数体。当函数体以 SQL 标准记法给出 而不是作为字符串字面值给出时,它用于 SQL 语言的函数。 在其他情况下为空。

proconfig text[]

函数针对运行时配置变量的本地设置

proacl aclitem[]

访问特权;详见 Section 5.8


对于编译型函数(包括内建的和动态加载的), prosrc 包含该函数的 C 语言名称(链接符号)。 对于 SQL 语言的函数,如果函数体被指定为字符串字面值, 则 prosrc 包含函数的源文本; 但如果函数体以 SQL 标准风格指定, 则 prosrc 不被使用 (通常它是一个空字符串),而 prosqlbody 包含预解析的定义。 对于当前已知的所有其他语言类型, prosrc 包含函数的源文本。 probin 除动态加载的 C 函数外都为空; 对于后者,它给出包含该函数的共享库文件的名称。