# pg_aggregate The pg_aggregate table 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 1. `pg_catalog.pg_aggregate` | column | type | references | description | | :--------------- | :------ | :-------------- | :----------------------------------------------------------- | |`aggfnoid` | regproc | pg_proc.oid | 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` | smallint | |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 | pg_proc.oid | Transition function OID |`aggfinalfn` | regproc | pg_proc.oid |Final function OID (zero if none) |`aggcombinefn` | regproc | pg_proc.oid |Combine function OID (zero if none) |`aggserialfn` | regproc | pg_proc.oid |OID of the serialization function to convert transtype to `bytea` (zero if none) |`aggdeserialfn` | regproc | pg_proc.oid |OID of the deserialization function to convert `bytea` to transtype (zero if none) |`aggmtransfn` | regproc | pg_proc.oid |Forward transition function OID for moving-aggregate mode (zero if none) |`aggminvtransfn` | regproc | pg_proc.oid | Inverse transition function OID for moving-aggregate mode (zero if none) |`aggmfinalfn` | regproc | pg_proc.oid |Final function OID 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 | |Indicates whether `aggfinalfn` modifies the transition state |`aggmfinalmodify` | char | |Indicates whether `aggmfinalfn` modifies the transition state |`aggsortop` | oid | pg_operator.oid | Associated sort operator OID (zero if none) |`aggtranstype` | oid | pg_type.oid |Data type of the aggregate function's internal transition (state) data |`aggtransspace` | integer | |Approximate average size (in bytes) of the transition state data, or zero to use a default estimate |`aggmtranstype` | oid | pg_type.oid |Data type of the aggregate function's internal transition (state) data for moving-aggregate mode (zero if none) |`aggmtransspace` | integer | |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. |`aggrepsafeexec` | bool | |True to specify that the aggregate can be safely executed on replicated slices. An order-agnostic aggregate would be considered safe in this context.