Postgresql 中文操作指南

53.39. pg_proc #

目录 pg_proc 存储有关函数、过程、聚合函数和窗口函数(统称为例程)的信息。有关详细信息,请参见 CREATE FUNCTIONCREATE PROCEDURESection 38.3

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

Table 53.39. pg_proc Columns

Column Type

Description

oid oid

Row identifier

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 )用于此函数的计划器支持函数(请参见 Section 38.11 ),如果没有,则为零

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

prosecdef bool 函数是一个安全定义程序(即,“setuid”函数)

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

proisstrict bool 如果任何调用参数为空,则函数返回 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 )函数参数数据类型的一个数组。这仅包括输入参数(包括 INOUTVARIADIC 参数),因此表示函数的调用签名。

proallargtypes oid[] (引用 pg_type . oid )函数参数数据类型的一个数组。这包括所有参数(包括 OUTINOUT 参数);但是,如果所有参数都是 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 input 参数(即,最后的 N proargtypes 个位置)。如果没有任何参数具有默认值,则此字段将为空。

protrftypes oid[] (引用 pg_type . oid )要对其应用变换(从函数的 TRANSFORM 子句)的参数/结果数据类型的一个数组。如果没有任何参数,则为 null。

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

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

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

proconfig text[] 函数的运行时配置变量的本地设置

proacl aclitem[] 访问权限;有关详细信息,请访问 Section 5.7

对于编译函数,无论是内置的还是动态加载的,prosrc 都包含函数的 C 语言名称(链接符号)。对于 SQL 语言函数,prosrc 包含函数的源文本(如果源文本被指定为字符串文本);但如果函数主体被指定为 SQL 标准格式,那么 prosrc 未被使用(通常是一个空字符串)并且 prosqlbody 包含预解析的定义。对于所有其他当前已知的语言类型,prosrc 都包含函数的源文本。probin 对于动态加载的 C 函数除外,一律为 null,而对于动态加载的 C 函数,probin 给出了包含函数的共享库文件名称。