↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE AGGREGATE

CREATE AGGREGATE — 定义一个新的聚合函数

大纲

CREATE AGGREGATE name [ AS ]
    ( BASETYPE    = data_type
    [ , SFUNC1    = sfunc1
      , STYPE1    = sfunc1_return_type ]
    [ , SFUNC2    = sfunc2
      , STYPE2    = sfunc2_return_type ]
    [ , FINALFUNC = ffunc ]
    [ , INITCOND1 = initial_condition1 ]
    [ , INITCOND2 = initial_condition2 ]
    )
  

输入

name

要创建的聚合函数的名称。

data_type

此聚合函数所操作的基本数据类型。

sfunc1

会为源列的每个非 NULL 字段调用的状态转移函数。 它接受一个类型为 sfunc1_return_type的变量作为 第一个参数,并接受该字段作为 第二个参数。

sfunc1_return_type

第一个转移函数的返回类型。

sfunc2

会为源列的每个非 NULL 字段调用的状态转移函数。 它接受一个 类型为sfunc2_return_type 的变量作为唯一参数,并返回同一类型的变量。

sfunc2_return_type

第二个转移函数的返回类型。

ffunc

在遍历完所有输入字段 之后调用的最终函数。该函数必须 接受两个参数,类型分别为 sfunc1_return_type 和 sfunc2_return_type。

initial_condition1

第一个转移函数参数的初始值。

initial_condition2

第二个转移函数参数的初始值。

输出

→ CREATE

命令成功完成时返回的消息。

描述

CREATE AGGREGATE 允许用户或程序员通过定义新的聚合函数来扩展 Postgres 的功能。基本发行版中已经提供了一些针对基本类型的聚合函数,例如min(int4) 和avg(float8)。如果定义了新的类型,或者需要一个尚未提供的聚合函数,就可以使用CREATE AGGREGATE 来提供所需的功能。

一个聚合函数最多可以需要三个函数:两个 状态转移函数, sfunc1 和 sfunc2:

sfunc1( internal-state1, next-data_item ) ---> next-internal-state1
sfunc2( internal-state2 ) ---> next-internal-state2

以及一个最终计算函数, ffunc:

ffunc(internal-state1, internal-state2) ---> aggregate-value

Postgres 会创建最多两个临时变量 (这里称为 temp1 和 temp2), 用来保存用作转移函数参数的中间结果。

这些转移函数必须具有下列性质:

  • sfunc1 的 参数必须是 temp1 (类型为 sfunc1_return_type) 和 column_value (类型为 data_type)。 返回值必须是 sfunc1_return_type 类型,并将用作下一次调用 sfunc1时的第一个参数。

  • sfunc2 的 参数和返回值必须是 temp2 (类型为 sfunc2_return_type)。

  • 最终计算函数的 参数必须是 temp1 和 temp2, 而且其返回值必须是 Postgres 的基本类型(不必是 为 BASETYPE 指定的 data_type)。

  • 当且仅当两个状态转移函数都指定时, 才应指定 FINALFUNC。

聚合函数还可以需要一个或两个初始条件, 每个转移函数 一个。它们在数据库中以 text类型的字段的形式指定和存储。

注意

使用DROP AGGREGATE 删除聚合函数。

可以指定具有不同状态函数和最终函数组合的聚合函数。 例如,count聚合需要 SFUNC2 (一个递增函数)但不需要 SFUNC1 或 FINALFUNC; 而 sum聚合需要 SFUNC1(一个加法 函数)但不需要 SFUNC2 或 FINALFUNC;而 avg 聚合则需要 上述两个状态函数以及 一个 FINALFUNC(一个除法 函数)来产生它的 结果。无论如何,至少要定义一个状态函数,而且任何 SFUNC2 都必须有一个对应的 INITCOND2。

用法

请参阅PostgreSQL 程序员指南中关于聚合函数的章节 中 关于聚合函数的内容,以获取完整的使用示例。

兼容性

SQL92

CREATE AGGREGATE 是 Postgres 的语言扩展。 SQL92 中没有CREATE AGGREGATE。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。