pg_aggregate.dat 36 KB

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