支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: 开发版
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

51.39. pg_proc #

目录 pg_proc 存储有关函数、过程、聚合函数和窗口函数(统称为例程)的信息。有关更多信息,请参阅CREATE FUNCTIONCREATE PROCEDURE第 36.3 节

如果 prokind 指示该条目用于聚合函数,则 pg_aggregate 中应存在匹配的行。

表 51.39. 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)

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

prosupport regproc (引用 pg_proc.oid)

此函数的计划器支持函数(请参阅第 36.11 节),如果没有则为零

prokind char

对于普通函数,为 f;对于过程,为 p;对于聚合函数,为 a;对于窗口函数,为 w

prosecdef bool

函数是安全定义器(即,“setuid” 函数)

proleakproof bool

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

proisstrict bool

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

proretset bool

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

provolatile char

provolatile 指示函数的结果是否仅取决于其输入参数,或者是否受外部因素影响。对于“immutable” 函数(对于相同的输入,始终提供相同的结果),它是 i。对于“stable” 函数(其结果(对于固定输入)在扫描过程中不会更改),它是 s。对于“volatile” 函数(其结果可能随时更改),它是 v。(对于具有副作用的函数,也使用 v,这样对它们的调用就不会被优化掉。)

proparallel char

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

pronargs int2

输入参数的数量

pronargdefaults int2

具有默认值的参数数量

prorettype oid (引用 pg_type.oid)

返回值的数据类型

proargtypes oidvector (引用 pg_type.oid)

函数参数的数据类型数组。这仅包括输入参数(包括 INOUTVARIADIC 参数),因此表示函数的调用签名。

proallargtypes oid[] (引用 pg_type.oid)

函数参数的数据类型数组。这包括所有参数(包括 OUTINOUT 参数);但是,如果所有参数都是 IN 参数,则此字段将为 null。请注意,下标从 1 开始,而由于历史原因,proargtypes 的下标从 0 开始。

proargmodes char[]

函数参数的模式数组,编码为:i 表示 IN 参数,o 表示 OUT 参数,b 表示 INOUT 参数,v 表示 VARIADIC 参数,t 表示 TABLE 参数。如果所有参数都是 IN 参数,则此字段将为 null。请注意,下标对应于 proallargtypes 的位置,而不是 proargtypes 的位置。

proargnames text[]

函数参数名称的数组。没有名称的参数在数组中设置为空字符串。如果没有参数具有名称,则此字段将为 null。请注意,下标对应于 proallargtypes 的位置,而不是 proargtypes 的位置。

proargdefaults pg_node_tree

默认值的表达式树(以 nodeToString() 表示)。这是一个包含 pronargdefaults 个元素的列表,对应于最后 N输入 参数(即最后 Nproargtypes 位置)。如果没有参数具有默认值,则此字段将为 null。

protrftypes oid[] (引用 pg_type.oid)

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

prosrc text

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

probin text

有关如何调用函数的其他信息。同样,解释是特定于语言的。

prosqlbody pg_node_tree

预解析的 SQL 函数体。当函数体以 SQL 标准表示法而不是字符串文字给出时,这将用于 SQL 语言函数。在其他情况下,它为 null。

proconfig text[]

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

proacl aclitem[]

访问权限;有关详细信息,请参阅第 5.8 节


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

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表格报告文档问题。