2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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

52.39. pg_proc #

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

如果 prokind 表明该条目是关于一个聚合函数的,那么在 pg_aggregate 中应该有一个匹配的行。

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

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

prosupport regproc (引用 pg_proc.oid)

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

prokind char

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

prosecdef bool

函数是安全定义者(即 setuid 函数)

proleakproof bool

函数没有副作用。除了返回值外,不通过参数传递任何信息。任何可能因其参数值而抛出错误的函数都不是无害的。

proisstrict bool

如果任何调用参数为 NULL,函数返回 NULL。在这种情况下,函数实际上不会被调用。非 strict 函数必须能够处理 NULL 输入。

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)

返回值的 OID

proargtypes oidvector (引用 pg_type.oid)

函数参数数据类型 OID 向量。它只包括输入参数(包括 INOUTVARIADIC 参数),因此代表函数的调用签名。

proallargtypes oid[] (引用 pg_type.oid)

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

proargmodes char[]

函数参数模式的数组,编码为 IN 参数为 iOUT 参数为 oINOUT 参数为 bVARIADIC 参数为 vTABLE 参数为 t。如果所有参数都是 IN 参数,则此字段为 NULL。请注意,下标对应于 proallargtypes 的位置,而不是 proargtypes 的位置。

proargnames text[]

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

proargdefaults pg_node_tree

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

protrftypes oid[] (引用 pg_type.oid)

要应用转换(来自函数的 TRANSFORM 子句)的参数/结果数据类型 OID 数组。如果不存在则为 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 函数为空,它提供了包含该函数的共享库文件的名称。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。