↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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

52.39. pg_proc #

目录 pg_proc 存放有关函数、过程、聚合函数以及窗口函数(统称为例程)的信息。更多信息请参考 CREATE FUNCTION、CREATE 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 为假,该值为 0)

provariadic oid(引用 pg_type.oid)

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

prosupport regproc(引用 pg_proc.oid)

该函数的规划器支持函数(参见第 36.11 节),如果没有则为零

prokind char

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

prosecdef bool

函数是否为安全定义者函数(即“setuid”函数)

proleakproof bool

该函数没有副作用。除返回值外,不会泄露任何关于参数的信息。任何可能因参数值而报错的函数都不是 leakproof。

proisstrict bool

任一调用实参为 NULL 时,函数返回 NULL。在这种情况下,实际上根本不会调用该函数。非“严格”函数必须能够处理 NULL 输入。

proretset bool

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

provolatile char

provolatile 表示函数的结果是否仅依赖输入实参,还是也受外部因素影响。i 表示“不变的”函数,相同输入总是产生相同结果。s 表示“稳定的”函数,对于固定输入,其结果在一次扫描内不变。v 表示“易失的”函数,其结果随时可能变化。(有副作用的函数也应使用 v,以免对它们的调用在优化时被消除。)

proparallel char

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

pronargs int2

输入参数的个数

pronargdefaults int2

具有默认值的参数个数

prorettype oid(引用 pg_type.oid)

返回值的数据类型

proargtypes oidvector(引用 pg_type.oid)

一个函数参数的数据类型的数组。这只包括输入参数(含 INOUT 和 VARIADIC 参数),因此也表现了函数的调用签名。

proallargtypes oid[](引用 pg_type.oid)

一个函数参数的数据类型的数组。这包括所有参数(含 OUT 和 INOUT 参数)。但是,如果所有参数都是 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 个输入参数(即最后 N 个 proargtypes 位置)。如果没有参数具有默认值,则此字段为 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 为 NULL,但动态加载的 C 函数除外:此时它给出包含该函数的共享库文件名。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.