1#----------------------------------------------------------------------
2#
3# pg_aggregate.dat
4#    Initial contents of the pg_aggregate system catalog.
5#
6# Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
7# Portions Copyright (c) 1994, Regents of the University of California
8#
9# src/include/catalog/pg_aggregate.dat
10#
11#----------------------------------------------------------------------
12
13[
14
15# avg
16{ aggfnoid => 'avg(int8)', aggtransfn => 'int8_avg_accum',
17  aggfinalfn => 'numeric_poly_avg', aggcombinefn => 'int8_avg_combine',
18  aggserialfn => 'int8_avg_serialize', aggdeserialfn => 'int8_avg_deserialize',
19  aggmtransfn => 'int8_avg_accum', aggminvtransfn => 'int8_avg_accum_inv',
20  aggmfinalfn => 'numeric_poly_avg', aggtranstype => 'internal',
21  aggtransspace => '48', aggmtranstype => 'internal', aggmtransspace => '48' },
22{ aggfnoid => 'avg(int4)', aggtransfn => 'int4_avg_accum',
23  aggfinalfn => 'int8_avg', aggcombinefn => 'int4_avg_combine',
24  aggmtransfn => 'int4_avg_accum', aggminvtransfn => 'int4_avg_accum_inv',
25  aggmfinalfn => 'int8_avg', aggtranstype => '_int8', aggmtranstype => '_int8',
26  agginitval => '{0,0}', aggminitval => '{0,0}' },
27{ aggfnoid => 'avg(int2)', aggtransfn => 'int2_avg_accum',
28  aggfinalfn => 'int8_avg', aggcombinefn => 'int4_avg_combine',
29  aggmtransfn => 'int2_avg_accum', aggminvtransfn => 'int2_avg_accum_inv',
30  aggmfinalfn => 'int8_avg', aggtranstype => '_int8', aggmtranstype => '_int8',
31  agginitval => '{0,0}', aggminitval => '{0,0}' },
32{ aggfnoid => 'avg(numeric)', aggtransfn => 'numeric_avg_accum',
33  aggfinalfn => 'numeric_avg', aggcombinefn => 'numeric_avg_combine',
34  aggserialfn => 'numeric_avg_serialize',
35  aggdeserialfn => 'numeric_avg_deserialize',
36  aggmtransfn => 'numeric_avg_accum', aggminvtransfn => 'numeric_accum_inv',
37  aggmfinalfn => 'numeric_avg', aggtranstype => 'internal',
38  aggtransspace => '128', aggmtranstype => 'internal',
39  aggmtransspace => '128' },
40{ aggfnoid => 'avg(float4)', aggtransfn => 'float4_accum',
41  aggfinalfn => 'float8_avg', aggcombinefn => 'float8_combine',
42  aggtranstype => '_float8', agginitval => '{0,0,0}' },
43{ aggfnoid => 'avg(float8)', aggtransfn => 'float8_accum',
44  aggfinalfn => 'float8_avg', aggcombinefn => 'float8_combine',
45  aggtranstype => '_float8', agginitval => '{0,0,0}' },
46{ aggfnoid => 'avg(interval)', aggtransfn => 'interval_accum',
47  aggfinalfn => 'interval_avg', aggcombinefn => 'interval_combine',
48  aggmtransfn => 'interval_accum', aggminvtransfn => 'interval_accum_inv',
49  aggmfinalfn => 'interval_avg', aggtranstype => '_interval',
50  aggmtranstype => '_interval', agginitval => '{0 second,0 second}',
51  aggminitval => '{0 second,0 second}' },
52
53# sum
54{ aggfnoid => 'sum(int8)', aggtransfn => 'int8_avg_accum',
55  aggfinalfn => 'numeric_poly_sum', aggcombinefn => 'int8_avg_combine',
56  aggserialfn => 'int8_avg_serialize', aggdeserialfn => 'int8_avg_deserialize',
57  aggmtransfn => 'int8_avg_accum', aggminvtransfn => 'int8_avg_accum_inv',
58  aggmfinalfn => 'numeric_poly_sum', aggtranstype => 'internal',
59  aggtransspace => '48', aggmtranstype => 'internal', aggmtransspace => '48' },
60{ aggfnoid => 'sum(int4)', aggtransfn => 'int4_sum', aggcombinefn => 'int8pl',
61  aggmtransfn => 'int4_avg_accum', aggminvtransfn => 'int4_avg_accum_inv',
62  aggmfinalfn => 'int2int4_sum', aggtranstype => 'int8',
63  aggmtranstype => '_int8', aggminitval => '{0,0}' },
64{ aggfnoid => 'sum(int2)', aggtransfn => 'int2_sum', aggcombinefn => 'int8pl',
65  aggmtransfn => 'int2_avg_accum', aggminvtransfn => 'int2_avg_accum_inv',
66  aggmfinalfn => 'int2int4_sum', aggtranstype => 'int8',
67  aggmtranstype => '_int8', aggminitval => '{0,0}' },
68{ aggfnoid => 'sum(float4)', aggtransfn => 'float4pl',
69  aggcombinefn => 'float4pl', aggtranstype => 'float4' },
70{ aggfnoid => 'sum(float8)', aggtransfn => 'float8pl',
71  aggcombinefn => 'float8pl', aggtranstype => 'float8' },
72{ aggfnoid => 'sum(money)', aggtransfn => 'cash_pl', aggcombinefn => 'cash_pl',
73  aggmtransfn => 'cash_pl', aggminvtransfn => 'cash_mi',
74  aggtranstype => 'money', aggmtranstype => 'money' },
75{ aggfnoid => 'sum(interval)', aggtransfn => 'interval_pl',
76  aggcombinefn => 'interval_pl', aggmtransfn => 'interval_pl',
77  aggminvtransfn => 'interval_mi', aggtranstype => 'interval',
78  aggmtranstype => 'interval' },
79{ aggfnoid => 'sum(numeric)', aggtransfn => 'numeric_avg_accum',
80  aggfinalfn => 'numeric_sum', aggcombinefn => 'numeric_avg_combine',
81  aggserialfn => 'numeric_avg_serialize',
82  aggdeserialfn => 'numeric_avg_deserialize',
83  aggmtransfn => 'numeric_avg_accum', aggminvtransfn => 'numeric_accum_inv',
84  aggmfinalfn => 'numeric_sum', aggtranstype => 'internal',
85  aggtransspace => '128', aggmtranstype => 'internal',
86  aggmtransspace => '128' },
87
88# max
89{ aggfnoid => 'max(int8)', aggtransfn => 'int8larger',
90  aggcombinefn => 'int8larger', aggsortop => '>(int8,int8)',
91  aggtranstype => 'int8' },
92{ aggfnoid => 'max(int4)', aggtransfn => 'int4larger',
93  aggcombinefn => 'int4larger', aggsortop => '>(int4,int4)',
94  aggtranstype => 'int4' },
95{ aggfnoid => 'max(int2)', aggtransfn => 'int2larger',
96  aggcombinefn => 'int2larger', aggsortop => '>(int2,int2)',
97  aggtranstype => 'int2' },
98{ aggfnoid => 'max(oid)', aggtransfn => 'oidlarger',
99  aggcombinefn => 'oidlarger', aggsortop => '>(oid,oid)',
100  aggtranstype => 'oid' },
101{ aggfnoid => 'max(float4)', aggtransfn => 'float4larger',
102  aggcombinefn => 'float4larger', aggsortop => '>(float4,float4)',
103  aggtranstype => 'float4' },
104{ aggfnoid => 'max(float8)', aggtransfn => 'float8larger',
105  aggcombinefn => 'float8larger', aggsortop => '>(float8,float8)',
106  aggtranstype => 'float8' },
107{ aggfnoid => 'max(date)', aggtransfn => 'date_larger',
108  aggcombinefn => 'date_larger', aggsortop => '>(date,date)',
109  aggtranstype => 'date' },
110{ aggfnoid => 'max(time)', aggtransfn => 'time_larger',
111  aggcombinefn => 'time_larger', aggsortop => '>(time,time)',
112  aggtranstype => 'time' },
113{ aggfnoid => 'max(timetz)', aggtransfn => 'timetz_larger',
114  aggcombinefn => 'timetz_larger', aggsortop => '>(timetz,timetz)',
115  aggtranstype => 'timetz' },
116{ aggfnoid => 'max(money)', aggtransfn => 'cashlarger',
117  aggcombinefn => 'cashlarger', aggsortop => '>(money,money)',
118  aggtranstype => 'money' },
119{ aggfnoid => 'max(timestamp)', aggtransfn => 'timestamp_larger',
120  aggcombinefn => 'timestamp_larger', aggsortop => '>(timestamp,timestamp)',
121  aggtranstype => 'timestamp' },
122{ aggfnoid => 'max(timestamptz)', aggtransfn => 'timestamptz_larger',
123  aggcombinefn => 'timestamptz_larger',
124  aggsortop => '>(timestamptz,timestamptz)', aggtranstype => 'timestamptz' },
125{ aggfnoid => 'max(interval)', aggtransfn => 'interval_larger',
126  aggcombinefn => 'interval_larger', aggsortop => '>(interval,interval)',
127  aggtranstype => 'interval' },
128{ aggfnoid => 'max(text)', aggtransfn => 'text_larger',
129  aggcombinefn => 'text_larger', aggsortop => '>(text,text)',
130  aggtranstype => 'text' },
131{ aggfnoid => 'max(numeric)', aggtransfn => 'numeric_larger',
132  aggcombinefn => 'numeric_larger', aggsortop => '>(numeric,numeric)',
133  aggtranstype => 'numeric' },
134{ aggfnoid => 'max(anyarray)', aggtransfn => 'array_larger',
135  aggcombinefn => 'array_larger', aggsortop => '>(anyarray,anyarray)',
136  aggtranstype => 'anyarray' },
137{ aggfnoid => 'max(bpchar)', aggtransfn => 'bpchar_larger',
138  aggcombinefn => 'bpchar_larger', aggsortop => '>(bpchar,bpchar)',
139  aggtranstype => 'bpchar' },
140{ aggfnoid => 'max(tid)', aggtransfn => 'tidlarger',
141  aggcombinefn => 'tidlarger', aggsortop => '>(tid,tid)',
142  aggtranstype => 'tid' },
143{ aggfnoid => 'max(anyenum)', aggtransfn => 'enum_larger',
144  aggcombinefn => 'enum_larger', aggsortop => '>(anyenum,anyenum)',
145  aggtranstype => 'anyenum' },
146{ aggfnoid => 'max(inet)', aggtransfn => 'network_larger',
147  aggcombinefn => 'network_larger', aggsortop => '>(inet,inet)',
148  aggtranstype => 'inet' },
149{ aggfnoid => 'max(pg_lsn)', aggtransfn => 'pg_lsn_larger',
150  aggcombinefn => 'pg_lsn_larger', aggsortop => '>(pg_lsn,pg_lsn)',
151  aggtranstype => 'pg_lsn' },
152
153# min
154{ aggfnoid => 'min(int8)', aggtransfn => 'int8smaller',
155  aggcombinefn => 'int8smaller', aggsortop => '<(int8,int8)',
156  aggtranstype => 'int8' },
157{ aggfnoid => 'min(int4)', aggtransfn => 'int4smaller',
158  aggcombinefn => 'int4smaller', aggsortop => '<(int4,int4)',
159  aggtranstype => 'int4' },
160{ aggfnoid => 'min(int2)', aggtransfn => 'int2smaller',
161  aggcombinefn => 'int2smaller', aggsortop => '<(int2,int2)',
162  aggtranstype => 'int2' },
163{ aggfnoid => 'min(oid)', aggtransfn => 'oidsmaller',
164  aggcombinefn => 'oidsmaller', aggsortop => '<(oid,oid)',
165  aggtranstype => 'oid' },
166{ aggfnoid => 'min(float4)', aggtransfn => 'float4smaller',
167  aggcombinefn => 'float4smaller', aggsortop => '<(float4,float4)',
168  aggtranstype => 'float4' },
169{ aggfnoid => 'min(float8)', aggtransfn => 'float8smaller',
170  aggcombinefn => 'float8smaller', aggsortop => '<(float8,float8)',
171  aggtranstype => 'float8' },
172{ aggfnoid => 'min(date)', aggtransfn => 'date_smaller',
173  aggcombinefn => 'date_smaller', aggsortop => '<(date,date)',
174  aggtranstype => 'date' },
175{ aggfnoid => 'min(time)', aggtransfn => 'time_smaller',
176  aggcombinefn => 'time_smaller', aggsortop => '<(time,time)',
177  aggtranstype => 'time' },
178{ aggfnoid => 'min(timetz)', aggtransfn => 'timetz_smaller',
179  aggcombinefn => 'timetz_smaller', aggsortop => '<(timetz,timetz)',
180  aggtranstype => 'timetz' },
181{ aggfnoid => 'min(money)', aggtransfn => 'cashsmaller',
182  aggcombinefn => 'cashsmaller', aggsortop => '<(money,money)',
183  aggtranstype => 'money' },
184{ aggfnoid => 'min(timestamp)', aggtransfn => 'timestamp_smaller',
185  aggcombinefn => 'timestamp_smaller', aggsortop => '<(timestamp,timestamp)',
186  aggtranstype => 'timestamp' },
187{ aggfnoid => 'min(timestamptz)', aggtransfn => 'timestamptz_smaller',
188  aggcombinefn => 'timestamptz_smaller',
189  aggsortop => '<(timestamptz,timestamptz)', aggtranstype => 'timestamptz' },
190{ aggfnoid => 'min(interval)', aggtransfn => 'interval_smaller',
191  aggcombinefn => 'interval_smaller', aggsortop => '<(interval,interval)',
192  aggtranstype => 'interval' },
193{ aggfnoid => 'min(text)', aggtransfn => 'text_smaller',
194  aggcombinefn => 'text_smaller', aggsortop => '<(text,text)',
195  aggtranstype => 'text' },
196{ aggfnoid => 'min(numeric)', aggtransfn => 'numeric_smaller',
197  aggcombinefn => 'numeric_smaller', aggsortop => '<(numeric,numeric)',
198  aggtranstype => 'numeric' },
199{ aggfnoid => 'min(anyarray)', aggtransfn => 'array_smaller',
200  aggcombinefn => 'array_smaller', aggsortop => '<(anyarray,anyarray)',
201  aggtranstype => 'anyarray' },
202{ aggfnoid => 'min(bpchar)', aggtransfn => 'bpchar_smaller',
203  aggcombinefn => 'bpchar_smaller', aggsortop => '<(bpchar,bpchar)',
204  aggtranstype => 'bpchar' },
205{ aggfnoid => 'min(tid)', aggtransfn => 'tidsmaller',
206  aggcombinefn => 'tidsmaller', aggsortop => '<(tid,tid)',
207  aggtranstype => 'tid' },
208{ aggfnoid => 'min(anyenum)', aggtransfn => 'enum_smaller',
209  aggcombinefn => 'enum_smaller', aggsortop => '<(anyenum,anyenum)',
210  aggtranstype => 'anyenum' },
211{ aggfnoid => 'min(inet)', aggtransfn => 'network_smaller',
212  aggcombinefn => 'network_smaller', aggsortop => '<(inet,inet)',
213  aggtranstype => 'inet' },
214{ aggfnoid => 'min(pg_lsn)', aggtransfn => 'pg_lsn_smaller',
215  aggcombinefn => 'pg_lsn_smaller', aggsortop => '<(pg_lsn,pg_lsn)',
216  aggtranstype => 'pg_lsn' },
217
218# count
219{ aggfnoid => 'count(any)', aggtransfn => 'int8inc_any',
220  aggcombinefn => 'int8pl', aggmtransfn => 'int8inc_any',
221  aggminvtransfn => 'int8dec_any', aggtranstype => 'int8',
222  aggmtranstype => 'int8', agginitval => '0', aggminitval => '0' },
223{ aggfnoid => 'count()', aggtransfn => 'int8inc', aggcombinefn => 'int8pl',
224  aggmtransfn => 'int8inc', aggminvtransfn => 'int8dec', aggtranstype => 'int8',
225  aggmtranstype => 'int8', agginitval => '0', aggminitval => '0' },
226
227# var_pop
228{ aggfnoid => 'var_pop(int8)', aggtransfn => 'int8_accum',
229  aggfinalfn => 'numeric_var_pop', aggcombinefn => 'numeric_combine',
230  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
231  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
232  aggmfinalfn => 'numeric_var_pop', aggtranstype => 'internal',
233  aggtransspace => '128', aggmtranstype => 'internal',
234  aggmtransspace => '128' },
235{ aggfnoid => 'var_pop(int4)', aggtransfn => 'int4_accum',
236  aggfinalfn => 'numeric_poly_var_pop', aggcombinefn => 'numeric_poly_combine',
237  aggserialfn => 'numeric_poly_serialize',
238  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
239  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_pop',
240  aggtranstype => 'internal', aggtransspace => '48',
241  aggmtranstype => 'internal', aggmtransspace => '48' },
242{ aggfnoid => 'var_pop(int2)', aggtransfn => 'int2_accum',
243  aggfinalfn => 'numeric_poly_var_pop', aggcombinefn => 'numeric_poly_combine',
244  aggserialfn => 'numeric_poly_serialize',
245  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
246  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_pop',
247  aggtranstype => 'internal', aggtransspace => '48',
248  aggmtranstype => 'internal', aggmtransspace => '48' },
249{ aggfnoid => 'var_pop(float4)', aggtransfn => 'float4_accum',
250  aggfinalfn => 'float8_var_pop', aggcombinefn => 'float8_combine',
251  aggtranstype => '_float8', agginitval => '{0,0,0}' },
252{ aggfnoid => 'var_pop(float8)', aggtransfn => 'float8_accum',
253  aggfinalfn => 'float8_var_pop', aggcombinefn => 'float8_combine',
254  aggtranstype => '_float8', agginitval => '{0,0,0}' },
255{ aggfnoid => 'var_pop(numeric)', aggtransfn => 'numeric_accum',
256  aggfinalfn => 'numeric_var_pop', aggcombinefn => 'numeric_combine',
257  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
258  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
259  aggmfinalfn => 'numeric_var_pop', aggtranstype => 'internal',
260  aggtransspace => '128', aggmtranstype => 'internal',
261  aggmtransspace => '128' },
262
263# var_samp
264{ aggfnoid => 'var_samp(int8)', aggtransfn => 'int8_accum',
265  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
266  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
267  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
268  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
269  aggtransspace => '128', aggmtranstype => 'internal',
270  aggmtransspace => '128' },
271{ aggfnoid => 'var_samp(int4)', aggtransfn => 'int4_accum',
272  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
273  aggserialfn => 'numeric_poly_serialize',
274  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
275  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
276  aggtranstype => 'internal', aggtransspace => '48',
277  aggmtranstype => 'internal', aggmtransspace => '48' },
278{ aggfnoid => 'var_samp(int2)', aggtransfn => 'int2_accum',
279  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
280  aggserialfn => 'numeric_poly_serialize',
281  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
282  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
283  aggtranstype => 'internal', aggtransspace => '48',
284  aggmtranstype => 'internal', aggmtransspace => '48' },
285{ aggfnoid => 'var_samp(float4)', aggtransfn => 'float4_accum',
286  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
287  aggtranstype => '_float8', agginitval => '{0,0,0}' },
288{ aggfnoid => 'var_samp(float8)', aggtransfn => 'float8_accum',
289  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
290  aggtranstype => '_float8', agginitval => '{0,0,0}' },
291{ aggfnoid => 'var_samp(numeric)', aggtransfn => 'numeric_accum',
292  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
293  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
294  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
295  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
296  aggtransspace => '128', aggmtranstype => 'internal',
297  aggmtransspace => '128' },
298
299# variance: historical Postgres syntax for var_samp
300{ aggfnoid => 'variance(int8)', aggtransfn => 'int8_accum',
301  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
302  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
303  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
304  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
305  aggtransspace => '128', aggmtranstype => 'internal',
306  aggmtransspace => '128' },
307{ aggfnoid => 'variance(int4)', aggtransfn => 'int4_accum',
308  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
309  aggserialfn => 'numeric_poly_serialize',
310  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
311  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
312  aggtranstype => 'internal', aggtransspace => '48',
313  aggmtranstype => 'internal', aggmtransspace => '48' },
314{ aggfnoid => 'variance(int2)', aggtransfn => 'int2_accum',
315  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
316  aggserialfn => 'numeric_poly_serialize',
317  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
318  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
319  aggtranstype => 'internal', aggtransspace => '48',
320  aggmtranstype => 'internal', aggmtransspace => '48' },
321{ aggfnoid => 'variance(float4)', aggtransfn => 'float4_accum',
322  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
323  aggtranstype => '_float8', agginitval => '{0,0,0}' },
324{ aggfnoid => 'variance(float8)', aggtransfn => 'float8_accum',
325  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
326  aggtranstype => '_float8', agginitval => '{0,0,0}' },
327{ aggfnoid => 'variance(numeric)', aggtransfn => 'numeric_accum',
328  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
329  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
330  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
331  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
332  aggtransspace => '128', aggmtranstype => 'internal',
333  aggmtransspace => '128' },
334
335# stddev_pop
336{ aggfnoid => 'stddev_pop(int8)', aggtransfn => 'int8_accum',
337  aggfinalfn => 'numeric_stddev_pop', aggcombinefn => 'numeric_combine',
338  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
339  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
340  aggmfinalfn => 'numeric_stddev_pop', aggtranstype => 'internal',
341  aggtransspace => '128', aggmtranstype => 'internal',
342  aggmtransspace => '128' },
343{ aggfnoid => 'stddev_pop(int4)', aggtransfn => 'int4_accum',
344  aggfinalfn => 'numeric_poly_stddev_pop',
345  aggcombinefn => 'numeric_poly_combine',
346  aggserialfn => 'numeric_poly_serialize',
347  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
348  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_pop',
349  aggtranstype => 'internal', aggtransspace => '48',
350  aggmtranstype => 'internal', aggmtransspace => '48' },
351{ aggfnoid => 'stddev_pop(int2)', aggtransfn => 'int2_accum',
352  aggfinalfn => 'numeric_poly_stddev_pop',
353  aggcombinefn => 'numeric_poly_combine',
354  aggserialfn => 'numeric_poly_serialize',
355  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
356  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_pop',
357  aggtranstype => 'internal', aggtransspace => '48',
358  aggmtranstype => 'internal', aggmtransspace => '48' },
359{ aggfnoid => 'stddev_pop(float4)', aggtransfn => 'float4_accum',
360  aggfinalfn => 'float8_stddev_pop', aggcombinefn => 'float8_combine',
361  aggtranstype => '_float8', agginitval => '{0,0,0}' },
362{ aggfnoid => 'stddev_pop(float8)', aggtransfn => 'float8_accum',
363  aggfinalfn => 'float8_stddev_pop', aggcombinefn => 'float8_combine',
364  aggtranstype => '_float8', agginitval => '{0,0,0}' },
365{ aggfnoid => 'stddev_pop(numeric)', aggtransfn => 'numeric_accum',
366  aggfinalfn => 'numeric_stddev_pop', aggcombinefn => 'numeric_combine',
367  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
368  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
369  aggmfinalfn => 'numeric_stddev_pop', aggtranstype => 'internal',
370  aggtransspace => '128', aggmtranstype => 'internal',
371  aggmtransspace => '128' },
372
373# stddev_samp
374{ aggfnoid => 'stddev_samp(int8)', aggtransfn => 'int8_accum',
375  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
376  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
377  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
378  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
379  aggtransspace => '128', aggmtranstype => 'internal',
380  aggmtransspace => '128' },
381{ aggfnoid => 'stddev_samp(int4)', aggtransfn => 'int4_accum',
382  aggfinalfn => 'numeric_poly_stddev_samp',
383  aggcombinefn => 'numeric_poly_combine',
384  aggserialfn => 'numeric_poly_serialize',
385  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
386  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
387  aggtranstype => 'internal', aggtransspace => '48',
388  aggmtranstype => 'internal', aggmtransspace => '48' },
389{ aggfnoid => 'stddev_samp(int2)', aggtransfn => 'int2_accum',
390  aggfinalfn => 'numeric_poly_stddev_samp',
391  aggcombinefn => 'numeric_poly_combine',
392  aggserialfn => 'numeric_poly_serialize',
393  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
394  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
395  aggtranstype => 'internal', aggtransspace => '48',
396  aggmtranstype => 'internal', aggmtransspace => '48' },
397{ aggfnoid => 'stddev_samp(float4)', aggtransfn => 'float4_accum',
398  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
399  aggtranstype => '_float8', agginitval => '{0,0,0}' },
400{ aggfnoid => 'stddev_samp(float8)', aggtransfn => 'float8_accum',
401  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
402  aggtranstype => '_float8', agginitval => '{0,0,0}' },
403{ aggfnoid => 'stddev_samp(numeric)', aggtransfn => 'numeric_accum',
404  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
405  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
406  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
407  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
408  aggtransspace => '128', aggmtranstype => 'internal',
409  aggmtransspace => '128' },
410
411# stddev: historical Postgres syntax for stddev_samp
412{ aggfnoid => 'stddev(int8)', aggtransfn => 'int8_accum',
413  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
414  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
415  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
416  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
417  aggtransspace => '128', aggmtranstype => 'internal',
418  aggmtransspace => '128' },
419{ aggfnoid => 'stddev(int4)', aggtransfn => 'int4_accum',
420  aggfinalfn => 'numeric_poly_stddev_samp',
421  aggcombinefn => 'numeric_poly_combine',
422  aggserialfn => 'numeric_poly_serialize',
423  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
424  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
425  aggtranstype => 'internal', aggtransspace => '48',
426  aggmtranstype => 'internal', aggmtransspace => '48' },
427{ aggfnoid => 'stddev(int2)', aggtransfn => 'int2_accum',
428  aggfinalfn => 'numeric_poly_stddev_samp',
429  aggcombinefn => 'numeric_poly_combine',
430  aggserialfn => 'numeric_poly_serialize',
431  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
432  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
433  aggtranstype => 'internal', aggtransspace => '48',
434  aggmtranstype => 'internal', aggmtransspace => '48' },
435{ aggfnoid => 'stddev(float4)', aggtransfn => 'float4_accum',
436  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
437  aggtranstype => '_float8', agginitval => '{0,0,0}' },
438{ aggfnoid => 'stddev(float8)', aggtransfn => 'float8_accum',
439  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
440  aggtranstype => '_float8', agginitval => '{0,0,0}' },
441{ aggfnoid => 'stddev(numeric)', aggtransfn => 'numeric_accum',
442  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
443  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
444  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
445  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
446  aggtransspace => '128', aggmtranstype => 'internal',
447  aggmtransspace => '128' },
448
449# SQL2003 binary regression aggregates
450{ aggfnoid => 'regr_count', aggtransfn => 'int8inc_float8_float8',
451  aggcombinefn => 'int8pl', aggtranstype => 'int8', agginitval => '0' },
452{ aggfnoid => 'regr_sxx', aggtransfn => 'float8_regr_accum',
453  aggfinalfn => 'float8_regr_sxx', aggcombinefn => 'float8_regr_combine',
454  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
455{ aggfnoid => 'regr_syy', aggtransfn => 'float8_regr_accum',
456  aggfinalfn => 'float8_regr_syy', aggcombinefn => 'float8_regr_combine',
457  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
458{ aggfnoid => 'regr_sxy', aggtransfn => 'float8_regr_accum',
459  aggfinalfn => 'float8_regr_sxy', aggcombinefn => 'float8_regr_combine',
460  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
461{ aggfnoid => 'regr_avgx', aggtransfn => 'float8_regr_accum',
462  aggfinalfn => 'float8_regr_avgx', aggcombinefn => 'float8_regr_combine',
463  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
464{ aggfnoid => 'regr_avgy', aggtransfn => 'float8_regr_accum',
465  aggfinalfn => 'float8_regr_avgy', aggcombinefn => 'float8_regr_combine',
466  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
467{ aggfnoid => 'regr_r2', aggtransfn => 'float8_regr_accum',
468  aggfinalfn => 'float8_regr_r2', aggcombinefn => 'float8_regr_combine',
469  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
470{ aggfnoid => 'regr_slope', aggtransfn => 'float8_regr_accum',
471  aggfinalfn => 'float8_regr_slope', aggcombinefn => 'float8_regr_combine',
472  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
473{ aggfnoid => 'regr_intercept', aggtransfn => 'float8_regr_accum',
474  aggfinalfn => 'float8_regr_intercept', aggcombinefn => 'float8_regr_combine',
475  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
476{ aggfnoid => 'covar_pop', aggtransfn => 'float8_regr_accum',
477  aggfinalfn => 'float8_covar_pop', aggcombinefn => 'float8_regr_combine',
478  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
479{ aggfnoid => 'covar_samp', aggtransfn => 'float8_regr_accum',
480  aggfinalfn => 'float8_covar_samp', aggcombinefn => 'float8_regr_combine',
481  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
482{ aggfnoid => 'corr', aggtransfn => 'float8_regr_accum',
483  aggfinalfn => 'float8_corr', aggcombinefn => 'float8_regr_combine',
484  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
485
486# boolean-and and boolean-or
487{ aggfnoid => 'bool_and', aggtransfn => 'booland_statefunc',
488  aggcombinefn => 'booland_statefunc', aggmtransfn => 'bool_accum',
489  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_alltrue',
490  aggsortop => '<(bool,bool)', aggtranstype => 'bool',
491  aggmtranstype => 'internal', aggmtransspace => '16' },
492{ aggfnoid => 'bool_or', aggtransfn => 'boolor_statefunc',
493  aggcombinefn => 'boolor_statefunc', aggmtransfn => 'bool_accum',
494  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_anytrue',
495  aggsortop => '>(bool,bool)', aggtranstype => 'bool',
496  aggmtranstype => 'internal', aggmtransspace => '16' },
497{ aggfnoid => 'every', aggtransfn => 'booland_statefunc',
498  aggcombinefn => 'booland_statefunc', aggmtransfn => 'bool_accum',
499  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_alltrue',
500  aggsortop => '<(bool,bool)', aggtranstype => 'bool',
501  aggmtranstype => 'internal', aggmtransspace => '16' },
502
503# bitwise integer
504{ aggfnoid => 'bit_and(int2)', aggtransfn => 'int2and',
505  aggcombinefn => 'int2and', aggtranstype => 'int2' },
506{ aggfnoid => 'bit_or(int2)', aggtransfn => 'int2or', aggcombinefn => 'int2or',
507  aggtranstype => 'int2' },
508{ aggfnoid => 'bit_xor(int2)', aggtransfn => 'int2xor',
509  aggcombinefn => 'int2xor', aggtranstype => 'int2' },
510{ aggfnoid => 'bit_and(int4)', aggtransfn => 'int4and',
511  aggcombinefn => 'int4and', aggtranstype => 'int4' },
512{ aggfnoid => 'bit_or(int4)', aggtransfn => 'int4or', aggcombinefn => 'int4or',
513  aggtranstype => 'int4' },
514{ aggfnoid => 'bit_xor(int4)', aggtransfn => 'int4xor',
515  aggcombinefn => 'int4xor', aggtranstype => 'int4' },
516{ aggfnoid => 'bit_and(int8)', aggtransfn => 'int8and',
517  aggcombinefn => 'int8and', aggtranstype => 'int8' },
518{ aggfnoid => 'bit_or(int8)', aggtransfn => 'int8or', aggcombinefn => 'int8or',
519  aggtranstype => 'int8' },
520{ aggfnoid => 'bit_xor(int8)', aggtransfn => 'int8xor',
521  aggcombinefn => 'int8xor', aggtranstype => 'int8' },
522{ aggfnoid => 'bit_and(bit)', aggtransfn => 'bitand', aggcombinefn => 'bitand',
523  aggtranstype => 'bit' },
524{ aggfnoid => 'bit_or(bit)', aggtransfn => 'bitor', aggcombinefn => 'bitor',
525  aggtranstype => 'bit' },
526{ aggfnoid => 'bit_xor(bit)', aggtransfn => 'bitxor', aggcombinefn => 'bitxor',
527  aggtranstype => 'bit' },
528
529# xml
530{ aggfnoid => 'xmlagg', aggtransfn => 'xmlconcat2', aggtranstype => 'xml' },
531
532# array
533{ aggfnoid => 'array_agg(anynonarray)', aggtransfn => 'array_agg_transfn',
534  aggfinalfn => 'array_agg_finalfn', aggfinalextra => 't',
535  aggtranstype => 'internal' },
536{ aggfnoid => 'array_agg(anyarray)', aggtransfn => 'array_agg_array_transfn',
537  aggfinalfn => 'array_agg_array_finalfn', aggfinalextra => 't',
538  aggtranstype => 'internal' },
539
540# text
541{ aggfnoid => 'string_agg(text,text)', aggtransfn => 'string_agg_transfn',
542  aggfinalfn => 'string_agg_finalfn', aggtranstype => 'internal' },
543
544# bytea
545{ aggfnoid => 'string_agg(bytea,bytea)',
546  aggtransfn => 'bytea_string_agg_transfn',
547  aggfinalfn => 'bytea_string_agg_finalfn', aggtranstype => 'internal' },
548
549# range
550{ aggfnoid => 'range_intersect_agg(anyrange)',
551  aggtransfn => 'range_intersect_agg_transfn',
552  aggcombinefn => 'range_intersect_agg_transfn', aggtranstype => 'anyrange' },
553{ aggfnoid => 'range_intersect_agg(anymultirange)',
554  aggtransfn => 'multirange_intersect_agg_transfn',
555  aggcombinefn => 'multirange_intersect_agg_transfn',
556  aggtranstype => 'anymultirange' },
557{ aggfnoid => 'range_agg(anyrange)', aggtransfn => 'range_agg_transfn',
558  aggfinalfn => 'range_agg_finalfn', aggfinalextra => 't',
559  aggtranstype => 'internal' },
560
561# json
562{ aggfnoid => 'json_agg', aggtransfn => 'json_agg_transfn',
563  aggfinalfn => 'json_agg_finalfn', aggtranstype => 'internal' },
564{ aggfnoid => 'json_object_agg', aggtransfn => 'json_object_agg_transfn',
565  aggfinalfn => 'json_object_agg_finalfn', aggtranstype => 'internal' },
566
567# jsonb
568{ aggfnoid => 'jsonb_agg', aggtransfn => 'jsonb_agg_transfn',
569  aggfinalfn => 'jsonb_agg_finalfn', aggtranstype => 'internal' },
570{ aggfnoid => 'jsonb_object_agg', aggtransfn => 'jsonb_object_agg_transfn',
571  aggfinalfn => 'jsonb_object_agg_finalfn', aggtranstype => 'internal' },
572
573# ordered-set and hypothetical-set aggregates
574{ aggfnoid => 'percentile_disc(float8,anyelement)', aggkind => 'o',
575  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
576  aggfinalfn => 'percentile_disc_final', aggfinalextra => 't',
577  aggfinalmodify => 's', aggmfinalmodify => 's', aggtranstype => 'internal' },
578{ aggfnoid => 'percentile_cont(float8,float8)', aggkind => 'o',
579  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
580  aggfinalfn => 'percentile_cont_float8_final', aggfinalmodify => 's',
581  aggmfinalmodify => 's', aggtranstype => 'internal' },
582{ aggfnoid => 'percentile_cont(float8,interval)', aggkind => 'o',
583  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
584  aggfinalfn => 'percentile_cont_interval_final', aggfinalmodify => 's',
585  aggmfinalmodify => 's', aggtranstype => 'internal' },
586{ aggfnoid => 'percentile_disc(_float8,anyelement)', aggkind => 'o',
587  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
588  aggfinalfn => 'percentile_disc_multi_final', aggfinalextra => 't',
589  aggfinalmodify => 's', aggmfinalmodify => 's', aggtranstype => 'internal' },
590{ aggfnoid => 'percentile_cont(_float8,float8)', aggkind => 'o',
591  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
592  aggfinalfn => 'percentile_cont_float8_multi_final', aggfinalmodify => 's',
593  aggmfinalmodify => 's', aggtranstype => 'internal' },
594{ aggfnoid => 'percentile_cont(_float8,interval)', aggkind => 'o',
595  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
596  aggfinalfn => 'percentile_cont_interval_multi_final', aggfinalmodify => 's',
597  aggmfinalmodify => 's', aggtranstype => 'internal' },
598{ aggfnoid => 'mode', aggkind => 'o', aggtransfn => 'ordered_set_transition',
599  aggfinalfn => 'mode_final', aggfinalextra => 't', aggfinalmodify => 's',
600  aggmfinalmodify => 's', aggtranstype => 'internal' },
601{ aggfnoid => 'rank(any)', aggkind => 'h', aggnumdirectargs => '1',
602  aggtransfn => 'ordered_set_transition_multi', aggfinalfn => 'rank_final',
603  aggfinalextra => 't', aggfinalmodify => 'w', aggmfinalmodify => 'w',
604  aggtranstype => 'internal' },
605{ aggfnoid => 'percent_rank(any)', aggkind => 'h', aggnumdirectargs => '1',
606  aggtransfn => 'ordered_set_transition_multi',
607  aggfinalfn => 'percent_rank_final', aggfinalextra => 't',
608  aggfinalmodify => 'w', aggmfinalmodify => 'w', aggtranstype => 'internal' },
609{ aggfnoid => 'cume_dist(any)', aggkind => 'h', aggnumdirectargs => '1',
610  aggtransfn => 'ordered_set_transition_multi', aggfinalfn => 'cume_dist_final',
611  aggfinalextra => 't', aggfinalmodify => 'w', aggmfinalmodify => 'w',
612  aggtranstype => 'internal' },
613{ aggfnoid => 'dense_rank(any)', aggkind => 'h', aggnumdirectargs => '1',
614  aggtransfn => 'ordered_set_transition_multi',
615  aggfinalfn => 'dense_rank_final', aggfinalextra => 't', aggfinalmodify => 'w',
616  aggmfinalmodify => 'w', aggtranstype => 'internal' },
617
618]
619