## 53.2. `pg_aggregate`

The catalog `pg_aggregate` stores information about aggregate functions. An aggregate function is a function that operates on a set of values (typically one column from each row that matches a query condition) and returns a single value computed from all these values. Typical aggregate functions are `sum`, `count`, and `max`. Each entry in `pg_aggregate` is an extension of an entry in `pg_proc`. The `pg_proc` entry carries the aggregate's name, input and output data types, and other information that is similar to ordinary functions.

Table 53.2. `pg_aggregate` Columns

Column Type Description
`aggfnoid` `regproc` (references `pg_proc`.`oid`) `pg_proc` OID of the aggregate function
`aggkind` `char` Aggregate kind: `n` for “normal” aggregates, `o` for “ordered-set” aggregates, or `h` for “hypothetical-set” aggregates
`aggnumdirectargs` `int2` Number of direct (non-aggregated) arguments of an ordered-set or hypothetical-set aggregate, counting a variadic array as one argument. If equal to `pronargs`, the aggregate must be variadic and the variadic array describes the aggregated arguments as well as the final direct arguments. Always zero for normal aggregates.
`aggtransfn` `regproc` (references `pg_proc`.`oid`) Transition function
`aggfinalfn` `regproc` (references `pg_proc`.`oid`) Final function (zero if none)
`aggcombinefn` `regproc` (references `pg_proc`.`oid`) Combine function (zero if none)
`aggserialfn` `regproc` (references `pg_proc`.`oid`) Serialization function (zero if none)
`aggdeserialfn` `regproc` (references `pg_proc`.`oid`) Deserialization function (zero if none)
`aggmtransfn` `regproc` (references `pg_proc`.`oid`) Forward transition function for moving-aggregate mode (zero if none)
`aggminvtransfn` `regproc` (references `pg_proc`.`oid`) Inverse transition function for moving-aggregate mode (zero if none)
`aggmfinalfn` `regproc` (references `pg_proc`.`oid`) Final function for moving-aggregate mode (zero if none)
`aggfinalextra` `bool` True to pass extra dummy arguments to `aggfinalfn`
`aggmfinalextra` `bool` True to pass extra dummy arguments to `aggmfinalfn`
`aggfinalmodify` `char` Whether `aggfinalfn` modifies the transition state value: `r` if it is read-only, `s` if the `aggtransfn` cannot be applied after the `aggfinalfn`, or `w` if it writes on the value
`aggmfinalmodify` `char` Like `aggfinalmodify`, but for the `aggmfinalfn`
`aggsortop` `oid` (references `pg_operator`.`oid`) Associated sort operator (zero if none)
`aggtranstype` `oid` (references `pg_type`.`oid`) Data type of the aggregate function's internal transition (state) data
`aggtransspace` `int4` Approximate average size (in bytes) of the transition state data, or zero to use a default estimate
`aggmtranstype` `oid` (references `pg_type`.`oid`) Data type of the aggregate function's internal transition (state) data for moving-aggregate mode (zero if none)
`aggmtransspace` `int4` Approximate average size (in bytes) of the transition state data for moving-aggregate mode, or zero to use a default estimate
`agginitval` `text` The initial value of the transition state. This is a text field containing the initial value in its external string representation. If this field is null, the transition state value starts out null.
`aggminitval` `text` The initial value of the transition state for moving-aggregate mode. This is a text field containing the initial value in its external string representation. If this field is null, the transition state value starts out null.

New aggregate functions are registered with the `CREATE AGGREGATE` command. See Section 38.12 for more information about writing aggregate functions and the meaning of the transition functions, etc.