pg_query 2.0.3 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -1,1487 +0,0 @@
1
- /* ----------
2
- * pgstat.h
3
- *
4
- * Definitions for the PostgreSQL statistics collector daemon.
5
- *
6
- * Copyright (c) 2001-2020, PostgreSQL Global Development Group
7
- *
8
- * src/include/pgstat.h
9
- * ----------
10
- */
11
- #ifndef PGSTAT_H
12
- #define PGSTAT_H
13
-
14
- #include "datatype/timestamp.h"
15
- #include "libpq/pqcomm.h"
16
- #include "miscadmin.h"
17
- #include "port/atomics.h"
18
- #include "portability/instr_time.h"
19
- #include "postmaster/pgarch.h"
20
- #include "storage/proc.h"
21
- #include "utils/hsearch.h"
22
- #include "utils/relcache.h"
23
-
24
-
25
- /* ----------
26
- * Paths for the statistics files (relative to installation's $PGDATA).
27
- * ----------
28
- */
29
- #define PGSTAT_STAT_PERMANENT_DIRECTORY "pg_stat"
30
- #define PGSTAT_STAT_PERMANENT_FILENAME "pg_stat/global.stat"
31
- #define PGSTAT_STAT_PERMANENT_TMPFILE "pg_stat/global.tmp"
32
-
33
- /* Default directory to store temporary statistics data in */
34
- #define PG_STAT_TMP_DIR "pg_stat_tmp"
35
-
36
- /* Values for track_functions GUC variable --- order is significant! */
37
- typedef enum TrackFunctionsLevel
38
- {
39
- TRACK_FUNC_OFF,
40
- TRACK_FUNC_PL,
41
- TRACK_FUNC_ALL
42
- } TrackFunctionsLevel;
43
-
44
- /* ----------
45
- * The types of backend -> collector messages
46
- * ----------
47
- */
48
- typedef enum StatMsgType
49
- {
50
- PGSTAT_MTYPE_DUMMY,
51
- PGSTAT_MTYPE_INQUIRY,
52
- PGSTAT_MTYPE_TABSTAT,
53
- PGSTAT_MTYPE_TABPURGE,
54
- PGSTAT_MTYPE_DROPDB,
55
- PGSTAT_MTYPE_RESETCOUNTER,
56
- PGSTAT_MTYPE_RESETSHAREDCOUNTER,
57
- PGSTAT_MTYPE_RESETSINGLECOUNTER,
58
- PGSTAT_MTYPE_RESETSLRUCOUNTER,
59
- PGSTAT_MTYPE_AUTOVAC_START,
60
- PGSTAT_MTYPE_VACUUM,
61
- PGSTAT_MTYPE_ANALYZE,
62
- PGSTAT_MTYPE_ARCHIVER,
63
- PGSTAT_MTYPE_BGWRITER,
64
- PGSTAT_MTYPE_SLRU,
65
- PGSTAT_MTYPE_FUNCSTAT,
66
- PGSTAT_MTYPE_FUNCPURGE,
67
- PGSTAT_MTYPE_RECOVERYCONFLICT,
68
- PGSTAT_MTYPE_TEMPFILE,
69
- PGSTAT_MTYPE_DEADLOCK,
70
- PGSTAT_MTYPE_CHECKSUMFAILURE
71
- } StatMsgType;
72
-
73
- /* ----------
74
- * The data type used for counters.
75
- * ----------
76
- */
77
- typedef int64 PgStat_Counter;
78
-
79
- /* ----------
80
- * PgStat_TableCounts The actual per-table counts kept by a backend
81
- *
82
- * This struct should contain only actual event counters, because we memcmp
83
- * it against zeroes to detect whether there are any counts to transmit.
84
- * It is a component of PgStat_TableStatus (within-backend state) and
85
- * PgStat_TableEntry (the transmitted message format).
86
- *
87
- * Note: for a table, tuples_returned is the number of tuples successfully
88
- * fetched by heap_getnext, while tuples_fetched is the number of tuples
89
- * successfully fetched by heap_fetch under the control of bitmap indexscans.
90
- * For an index, tuples_returned is the number of index entries returned by
91
- * the index AM, while tuples_fetched is the number of tuples successfully
92
- * fetched by heap_fetch under the control of simple indexscans for this index.
93
- *
94
- * tuples_inserted/updated/deleted/hot_updated count attempted actions,
95
- * regardless of whether the transaction committed. delta_live_tuples,
96
- * delta_dead_tuples, and changed_tuples are set depending on commit or abort.
97
- * Note that delta_live_tuples and delta_dead_tuples can be negative!
98
- * ----------
99
- */
100
- typedef struct PgStat_TableCounts
101
- {
102
- PgStat_Counter t_numscans;
103
-
104
- PgStat_Counter t_tuples_returned;
105
- PgStat_Counter t_tuples_fetched;
106
-
107
- PgStat_Counter t_tuples_inserted;
108
- PgStat_Counter t_tuples_updated;
109
- PgStat_Counter t_tuples_deleted;
110
- PgStat_Counter t_tuples_hot_updated;
111
- bool t_truncated;
112
-
113
- PgStat_Counter t_delta_live_tuples;
114
- PgStat_Counter t_delta_dead_tuples;
115
- PgStat_Counter t_changed_tuples;
116
-
117
- PgStat_Counter t_blocks_fetched;
118
- PgStat_Counter t_blocks_hit;
119
- } PgStat_TableCounts;
120
-
121
- /* Possible targets for resetting cluster-wide shared values */
122
- typedef enum PgStat_Shared_Reset_Target
123
- {
124
- RESET_ARCHIVER,
125
- RESET_BGWRITER
126
- } PgStat_Shared_Reset_Target;
127
-
128
- /* Possible object types for resetting single counters */
129
- typedef enum PgStat_Single_Reset_Type
130
- {
131
- RESET_TABLE,
132
- RESET_FUNCTION
133
- } PgStat_Single_Reset_Type;
134
-
135
- /* ------------------------------------------------------------
136
- * Structures kept in backend local memory while accumulating counts
137
- * ------------------------------------------------------------
138
- */
139
-
140
-
141
- /* ----------
142
- * PgStat_TableStatus Per-table status within a backend
143
- *
144
- * Many of the event counters are nontransactional, ie, we count events
145
- * in committed and aborted transactions alike. For these, we just count
146
- * directly in the PgStat_TableStatus. However, delta_live_tuples,
147
- * delta_dead_tuples, and changed_tuples must be derived from event counts
148
- * with awareness of whether the transaction or subtransaction committed or
149
- * aborted. Hence, we also keep a stack of per-(sub)transaction status
150
- * records for every table modified in the current transaction. At commit
151
- * or abort, we propagate tuples_inserted/updated/deleted up to the
152
- * parent subtransaction level, or out to the parent PgStat_TableStatus,
153
- * as appropriate.
154
- * ----------
155
- */
156
- typedef struct PgStat_TableStatus
157
- {
158
- Oid t_id; /* table's OID */
159
- bool t_shared; /* is it a shared catalog? */
160
- struct PgStat_TableXactStatus *trans; /* lowest subxact's counts */
161
- PgStat_TableCounts t_counts; /* event counts to be sent */
162
- } PgStat_TableStatus;
163
-
164
- /* ----------
165
- * PgStat_TableXactStatus Per-table, per-subtransaction status
166
- * ----------
167
- */
168
- typedef struct PgStat_TableXactStatus
169
- {
170
- PgStat_Counter tuples_inserted; /* tuples inserted in (sub)xact */
171
- PgStat_Counter tuples_updated; /* tuples updated in (sub)xact */
172
- PgStat_Counter tuples_deleted; /* tuples deleted in (sub)xact */
173
- bool truncated; /* relation truncated in this (sub)xact */
174
- PgStat_Counter inserted_pre_trunc; /* tuples inserted prior to truncate */
175
- PgStat_Counter updated_pre_trunc; /* tuples updated prior to truncate */
176
- PgStat_Counter deleted_pre_trunc; /* tuples deleted prior to truncate */
177
- int nest_level; /* subtransaction nest level */
178
- /* links to other structs for same relation: */
179
- struct PgStat_TableXactStatus *upper; /* next higher subxact if any */
180
- PgStat_TableStatus *parent; /* per-table status */
181
- /* structs of same subxact level are linked here: */
182
- struct PgStat_TableXactStatus *next; /* next of same subxact */
183
- } PgStat_TableXactStatus;
184
-
185
-
186
- /* ------------------------------------------------------------
187
- * Message formats follow
188
- * ------------------------------------------------------------
189
- */
190
-
191
-
192
- /* ----------
193
- * PgStat_MsgHdr The common message header
194
- * ----------
195
- */
196
- typedef struct PgStat_MsgHdr
197
- {
198
- StatMsgType m_type;
199
- int m_size;
200
- } PgStat_MsgHdr;
201
-
202
- /* ----------
203
- * Space available in a message. This will keep the UDP packets below 1K,
204
- * which should fit unfragmented into the MTU of the loopback interface.
205
- * (Larger values of PGSTAT_MAX_MSG_SIZE would work for that on most
206
- * platforms, but we're being conservative here.)
207
- * ----------
208
- */
209
- #define PGSTAT_MAX_MSG_SIZE 1000
210
- #define PGSTAT_MSG_PAYLOAD (PGSTAT_MAX_MSG_SIZE - sizeof(PgStat_MsgHdr))
211
-
212
-
213
- /* ----------
214
- * PgStat_MsgDummy A dummy message, ignored by the collector
215
- * ----------
216
- */
217
- typedef struct PgStat_MsgDummy
218
- {
219
- PgStat_MsgHdr m_hdr;
220
- } PgStat_MsgDummy;
221
-
222
-
223
- /* ----------
224
- * PgStat_MsgInquiry Sent by a backend to ask the collector
225
- * to write the stats file(s).
226
- *
227
- * Ordinarily, an inquiry message prompts writing of the global stats file,
228
- * the stats file for shared catalogs, and the stats file for the specified
229
- * database. If databaseid is InvalidOid, only the first two are written.
230
- *
231
- * New file(s) will be written only if the existing file has a timestamp
232
- * older than the specified cutoff_time; this prevents duplicated effort
233
- * when multiple requests arrive at nearly the same time, assuming that
234
- * backends send requests with cutoff_times a little bit in the past.
235
- *
236
- * clock_time should be the requestor's current local time; the collector
237
- * uses this to check for the system clock going backward, but it has no
238
- * effect unless that occurs. We assume clock_time >= cutoff_time, though.
239
- * ----------
240
- */
241
-
242
- typedef struct PgStat_MsgInquiry
243
- {
244
- PgStat_MsgHdr m_hdr;
245
- TimestampTz clock_time; /* observed local clock time */
246
- TimestampTz cutoff_time; /* minimum acceptable file timestamp */
247
- Oid databaseid; /* requested DB (InvalidOid => shared only) */
248
- } PgStat_MsgInquiry;
249
-
250
-
251
- /* ----------
252
- * PgStat_TableEntry Per-table info in a MsgTabstat
253
- * ----------
254
- */
255
- typedef struct PgStat_TableEntry
256
- {
257
- Oid t_id;
258
- PgStat_TableCounts t_counts;
259
- } PgStat_TableEntry;
260
-
261
- /* ----------
262
- * PgStat_MsgTabstat Sent by the backend to report table
263
- * and buffer access statistics.
264
- * ----------
265
- */
266
- #define PGSTAT_NUM_TABENTRIES \
267
- ((PGSTAT_MSG_PAYLOAD - sizeof(Oid) - 3 * sizeof(int) - 2 * sizeof(PgStat_Counter)) \
268
- / sizeof(PgStat_TableEntry))
269
-
270
- typedef struct PgStat_MsgTabstat
271
- {
272
- PgStat_MsgHdr m_hdr;
273
- Oid m_databaseid;
274
- int m_nentries;
275
- int m_xact_commit;
276
- int m_xact_rollback;
277
- PgStat_Counter m_block_read_time; /* times in microseconds */
278
- PgStat_Counter m_block_write_time;
279
- PgStat_TableEntry m_entry[PGSTAT_NUM_TABENTRIES];
280
- } PgStat_MsgTabstat;
281
-
282
-
283
- /* ----------
284
- * PgStat_MsgTabpurge Sent by the backend to tell the collector
285
- * about dead tables.
286
- * ----------
287
- */
288
- #define PGSTAT_NUM_TABPURGE \
289
- ((PGSTAT_MSG_PAYLOAD - sizeof(Oid) - sizeof(int)) \
290
- / sizeof(Oid))
291
-
292
- typedef struct PgStat_MsgTabpurge
293
- {
294
- PgStat_MsgHdr m_hdr;
295
- Oid m_databaseid;
296
- int m_nentries;
297
- Oid m_tableid[PGSTAT_NUM_TABPURGE];
298
- } PgStat_MsgTabpurge;
299
-
300
-
301
- /* ----------
302
- * PgStat_MsgDropdb Sent by the backend to tell the collector
303
- * about a dropped database
304
- * ----------
305
- */
306
- typedef struct PgStat_MsgDropdb
307
- {
308
- PgStat_MsgHdr m_hdr;
309
- Oid m_databaseid;
310
- } PgStat_MsgDropdb;
311
-
312
-
313
- /* ----------
314
- * PgStat_MsgResetcounter Sent by the backend to tell the collector
315
- * to reset counters
316
- * ----------
317
- */
318
- typedef struct PgStat_MsgResetcounter
319
- {
320
- PgStat_MsgHdr m_hdr;
321
- Oid m_databaseid;
322
- } PgStat_MsgResetcounter;
323
-
324
- /* ----------
325
- * PgStat_MsgResetsharedcounter Sent by the backend to tell the collector
326
- * to reset a shared counter
327
- * ----------
328
- */
329
- typedef struct PgStat_MsgResetsharedcounter
330
- {
331
- PgStat_MsgHdr m_hdr;
332
- PgStat_Shared_Reset_Target m_resettarget;
333
- } PgStat_MsgResetsharedcounter;
334
-
335
- /* ----------
336
- * PgStat_MsgResetsinglecounter Sent by the backend to tell the collector
337
- * to reset a single counter
338
- * ----------
339
- */
340
- typedef struct PgStat_MsgResetsinglecounter
341
- {
342
- PgStat_MsgHdr m_hdr;
343
- Oid m_databaseid;
344
- PgStat_Single_Reset_Type m_resettype;
345
- Oid m_objectid;
346
- } PgStat_MsgResetsinglecounter;
347
-
348
- /* ----------
349
- * PgStat_MsgResetslrucounter Sent by the backend to tell the collector
350
- * to reset a SLRU counter
351
- * ----------
352
- */
353
- typedef struct PgStat_MsgResetslrucounter
354
- {
355
- PgStat_MsgHdr m_hdr;
356
- int m_index;
357
- } PgStat_MsgResetslrucounter;
358
-
359
- /* ----------
360
- * PgStat_MsgAutovacStart Sent by the autovacuum daemon to signal
361
- * that a database is going to be processed
362
- * ----------
363
- */
364
- typedef struct PgStat_MsgAutovacStart
365
- {
366
- PgStat_MsgHdr m_hdr;
367
- Oid m_databaseid;
368
- TimestampTz m_start_time;
369
- } PgStat_MsgAutovacStart;
370
-
371
-
372
- /* ----------
373
- * PgStat_MsgVacuum Sent by the backend or autovacuum daemon
374
- * after VACUUM
375
- * ----------
376
- */
377
- typedef struct PgStat_MsgVacuum
378
- {
379
- PgStat_MsgHdr m_hdr;
380
- Oid m_databaseid;
381
- Oid m_tableoid;
382
- bool m_autovacuum;
383
- TimestampTz m_vacuumtime;
384
- PgStat_Counter m_live_tuples;
385
- PgStat_Counter m_dead_tuples;
386
- } PgStat_MsgVacuum;
387
-
388
-
389
- /* ----------
390
- * PgStat_MsgAnalyze Sent by the backend or autovacuum daemon
391
- * after ANALYZE
392
- * ----------
393
- */
394
- typedef struct PgStat_MsgAnalyze
395
- {
396
- PgStat_MsgHdr m_hdr;
397
- Oid m_databaseid;
398
- Oid m_tableoid;
399
- bool m_autovacuum;
400
- bool m_resetcounter;
401
- TimestampTz m_analyzetime;
402
- PgStat_Counter m_live_tuples;
403
- PgStat_Counter m_dead_tuples;
404
- } PgStat_MsgAnalyze;
405
-
406
-
407
- /* ----------
408
- * PgStat_MsgArchiver Sent by the archiver to update statistics.
409
- * ----------
410
- */
411
- typedef struct PgStat_MsgArchiver
412
- {
413
- PgStat_MsgHdr m_hdr;
414
- bool m_failed; /* Failed attempt */
415
- char m_xlog[MAX_XFN_CHARS + 1];
416
- TimestampTz m_timestamp;
417
- } PgStat_MsgArchiver;
418
-
419
- /* ----------
420
- * PgStat_MsgBgWriter Sent by the bgwriter to update statistics.
421
- * ----------
422
- */
423
- typedef struct PgStat_MsgBgWriter
424
- {
425
- PgStat_MsgHdr m_hdr;
426
-
427
- PgStat_Counter m_timed_checkpoints;
428
- PgStat_Counter m_requested_checkpoints;
429
- PgStat_Counter m_buf_written_checkpoints;
430
- PgStat_Counter m_buf_written_clean;
431
- PgStat_Counter m_maxwritten_clean;
432
- PgStat_Counter m_buf_written_backend;
433
- PgStat_Counter m_buf_fsync_backend;
434
- PgStat_Counter m_buf_alloc;
435
- PgStat_Counter m_checkpoint_write_time; /* times in milliseconds */
436
- PgStat_Counter m_checkpoint_sync_time;
437
- } PgStat_MsgBgWriter;
438
-
439
- /* ----------
440
- * PgStat_MsgSLRU Sent by a backend to update SLRU statistics.
441
- * ----------
442
- */
443
- typedef struct PgStat_MsgSLRU
444
- {
445
- PgStat_MsgHdr m_hdr;
446
- PgStat_Counter m_index;
447
- PgStat_Counter m_blocks_zeroed;
448
- PgStat_Counter m_blocks_hit;
449
- PgStat_Counter m_blocks_read;
450
- PgStat_Counter m_blocks_written;
451
- PgStat_Counter m_blocks_exists;
452
- PgStat_Counter m_flush;
453
- PgStat_Counter m_truncate;
454
- } PgStat_MsgSLRU;
455
-
456
- /* ----------
457
- * PgStat_MsgRecoveryConflict Sent by the backend upon recovery conflict
458
- * ----------
459
- */
460
- typedef struct PgStat_MsgRecoveryConflict
461
- {
462
- PgStat_MsgHdr m_hdr;
463
-
464
- Oid m_databaseid;
465
- int m_reason;
466
- } PgStat_MsgRecoveryConflict;
467
-
468
- /* ----------
469
- * PgStat_MsgTempFile Sent by the backend upon creating a temp file
470
- * ----------
471
- */
472
- typedef struct PgStat_MsgTempFile
473
- {
474
- PgStat_MsgHdr m_hdr;
475
-
476
- Oid m_databaseid;
477
- size_t m_filesize;
478
- } PgStat_MsgTempFile;
479
-
480
- /* ----------
481
- * PgStat_FunctionCounts The actual per-function counts kept by a backend
482
- *
483
- * This struct should contain only actual event counters, because we memcmp
484
- * it against zeroes to detect whether there are any counts to transmit.
485
- *
486
- * Note that the time counters are in instr_time format here. We convert to
487
- * microseconds in PgStat_Counter format when transmitting to the collector.
488
- * ----------
489
- */
490
- typedef struct PgStat_FunctionCounts
491
- {
492
- PgStat_Counter f_numcalls;
493
- instr_time f_total_time;
494
- instr_time f_self_time;
495
- } PgStat_FunctionCounts;
496
-
497
- /* ----------
498
- * PgStat_BackendFunctionEntry Entry in backend's per-function hash table
499
- * ----------
500
- */
501
- typedef struct PgStat_BackendFunctionEntry
502
- {
503
- Oid f_id;
504
- PgStat_FunctionCounts f_counts;
505
- } PgStat_BackendFunctionEntry;
506
-
507
- /* ----------
508
- * PgStat_FunctionEntry Per-function info in a MsgFuncstat
509
- * ----------
510
- */
511
- typedef struct PgStat_FunctionEntry
512
- {
513
- Oid f_id;
514
- PgStat_Counter f_numcalls;
515
- PgStat_Counter f_total_time; /* times in microseconds */
516
- PgStat_Counter f_self_time;
517
- } PgStat_FunctionEntry;
518
-
519
- /* ----------
520
- * PgStat_MsgFuncstat Sent by the backend to report function
521
- * usage statistics.
522
- * ----------
523
- */
524
- #define PGSTAT_NUM_FUNCENTRIES \
525
- ((PGSTAT_MSG_PAYLOAD - sizeof(Oid) - sizeof(int)) \
526
- / sizeof(PgStat_FunctionEntry))
527
-
528
- typedef struct PgStat_MsgFuncstat
529
- {
530
- PgStat_MsgHdr m_hdr;
531
- Oid m_databaseid;
532
- int m_nentries;
533
- PgStat_FunctionEntry m_entry[PGSTAT_NUM_FUNCENTRIES];
534
- } PgStat_MsgFuncstat;
535
-
536
- /* ----------
537
- * PgStat_MsgFuncpurge Sent by the backend to tell the collector
538
- * about dead functions.
539
- * ----------
540
- */
541
- #define PGSTAT_NUM_FUNCPURGE \
542
- ((PGSTAT_MSG_PAYLOAD - sizeof(Oid) - sizeof(int)) \
543
- / sizeof(Oid))
544
-
545
- typedef struct PgStat_MsgFuncpurge
546
- {
547
- PgStat_MsgHdr m_hdr;
548
- Oid m_databaseid;
549
- int m_nentries;
550
- Oid m_functionid[PGSTAT_NUM_FUNCPURGE];
551
- } PgStat_MsgFuncpurge;
552
-
553
- /* ----------
554
- * PgStat_MsgDeadlock Sent by the backend to tell the collector
555
- * about a deadlock that occurred.
556
- * ----------
557
- */
558
- typedef struct PgStat_MsgDeadlock
559
- {
560
- PgStat_MsgHdr m_hdr;
561
- Oid m_databaseid;
562
- } PgStat_MsgDeadlock;
563
-
564
- /* ----------
565
- * PgStat_MsgChecksumFailure Sent by the backend to tell the collector
566
- * about checksum failures noticed.
567
- * ----------
568
- */
569
- typedef struct PgStat_MsgChecksumFailure
570
- {
571
- PgStat_MsgHdr m_hdr;
572
- Oid m_databaseid;
573
- int m_failurecount;
574
- TimestampTz m_failure_time;
575
- } PgStat_MsgChecksumFailure;
576
-
577
-
578
- /* ----------
579
- * PgStat_Msg Union over all possible messages.
580
- * ----------
581
- */
582
- typedef union PgStat_Msg
583
- {
584
- PgStat_MsgHdr msg_hdr;
585
- PgStat_MsgDummy msg_dummy;
586
- PgStat_MsgInquiry msg_inquiry;
587
- PgStat_MsgTabstat msg_tabstat;
588
- PgStat_MsgTabpurge msg_tabpurge;
589
- PgStat_MsgDropdb msg_dropdb;
590
- PgStat_MsgResetcounter msg_resetcounter;
591
- PgStat_MsgResetsharedcounter msg_resetsharedcounter;
592
- PgStat_MsgResetsinglecounter msg_resetsinglecounter;
593
- PgStat_MsgResetslrucounter msg_resetslrucounter;
594
- PgStat_MsgAutovacStart msg_autovacuum_start;
595
- PgStat_MsgVacuum msg_vacuum;
596
- PgStat_MsgAnalyze msg_analyze;
597
- PgStat_MsgArchiver msg_archiver;
598
- PgStat_MsgBgWriter msg_bgwriter;
599
- PgStat_MsgSLRU msg_slru;
600
- PgStat_MsgFuncstat msg_funcstat;
601
- PgStat_MsgFuncpurge msg_funcpurge;
602
- PgStat_MsgRecoveryConflict msg_recoveryconflict;
603
- PgStat_MsgDeadlock msg_deadlock;
604
- PgStat_MsgTempFile msg_tempfile;
605
- PgStat_MsgChecksumFailure msg_checksumfailure;
606
- } PgStat_Msg;
607
-
608
-
609
- /* ------------------------------------------------------------
610
- * Statistic collector data structures follow
611
- *
612
- * PGSTAT_FILE_FORMAT_ID should be changed whenever any of these
613
- * data structures change.
614
- * ------------------------------------------------------------
615
- */
616
-
617
- #define PGSTAT_FILE_FORMAT_ID 0x01A5BC9D
618
-
619
- /* ----------
620
- * PgStat_StatDBEntry The collector's data per database
621
- * ----------
622
- */
623
- typedef struct PgStat_StatDBEntry
624
- {
625
- Oid databaseid;
626
- PgStat_Counter n_xact_commit;
627
- PgStat_Counter n_xact_rollback;
628
- PgStat_Counter n_blocks_fetched;
629
- PgStat_Counter n_blocks_hit;
630
- PgStat_Counter n_tuples_returned;
631
- PgStat_Counter n_tuples_fetched;
632
- PgStat_Counter n_tuples_inserted;
633
- PgStat_Counter n_tuples_updated;
634
- PgStat_Counter n_tuples_deleted;
635
- TimestampTz last_autovac_time;
636
- PgStat_Counter n_conflict_tablespace;
637
- PgStat_Counter n_conflict_lock;
638
- PgStat_Counter n_conflict_snapshot;
639
- PgStat_Counter n_conflict_bufferpin;
640
- PgStat_Counter n_conflict_startup_deadlock;
641
- PgStat_Counter n_temp_files;
642
- PgStat_Counter n_temp_bytes;
643
- PgStat_Counter n_deadlocks;
644
- PgStat_Counter n_checksum_failures;
645
- TimestampTz last_checksum_failure;
646
- PgStat_Counter n_block_read_time; /* times in microseconds */
647
- PgStat_Counter n_block_write_time;
648
-
649
- TimestampTz stat_reset_timestamp;
650
- TimestampTz stats_timestamp; /* time of db stats file update */
651
-
652
- /*
653
- * tables and functions must be last in the struct, because we don't write
654
- * the pointers out to the stats file.
655
- */
656
- HTAB *tables;
657
- HTAB *functions;
658
- } PgStat_StatDBEntry;
659
-
660
-
661
- /* ----------
662
- * PgStat_StatTabEntry The collector's data per table (or index)
663
- * ----------
664
- */
665
- typedef struct PgStat_StatTabEntry
666
- {
667
- Oid tableid;
668
-
669
- PgStat_Counter numscans;
670
-
671
- PgStat_Counter tuples_returned;
672
- PgStat_Counter tuples_fetched;
673
-
674
- PgStat_Counter tuples_inserted;
675
- PgStat_Counter tuples_updated;
676
- PgStat_Counter tuples_deleted;
677
- PgStat_Counter tuples_hot_updated;
678
-
679
- PgStat_Counter n_live_tuples;
680
- PgStat_Counter n_dead_tuples;
681
- PgStat_Counter changes_since_analyze;
682
- PgStat_Counter inserts_since_vacuum;
683
-
684
- PgStat_Counter blocks_fetched;
685
- PgStat_Counter blocks_hit;
686
-
687
- TimestampTz vacuum_timestamp; /* user initiated vacuum */
688
- PgStat_Counter vacuum_count;
689
- TimestampTz autovac_vacuum_timestamp; /* autovacuum initiated */
690
- PgStat_Counter autovac_vacuum_count;
691
- TimestampTz analyze_timestamp; /* user initiated */
692
- PgStat_Counter analyze_count;
693
- TimestampTz autovac_analyze_timestamp; /* autovacuum initiated */
694
- PgStat_Counter autovac_analyze_count;
695
- } PgStat_StatTabEntry;
696
-
697
-
698
- /* ----------
699
- * PgStat_StatFuncEntry The collector's data per function
700
- * ----------
701
- */
702
- typedef struct PgStat_StatFuncEntry
703
- {
704
- Oid functionid;
705
-
706
- PgStat_Counter f_numcalls;
707
-
708
- PgStat_Counter f_total_time; /* times in microseconds */
709
- PgStat_Counter f_self_time;
710
- } PgStat_StatFuncEntry;
711
-
712
-
713
- /*
714
- * Archiver statistics kept in the stats collector
715
- */
716
- typedef struct PgStat_ArchiverStats
717
- {
718
- PgStat_Counter archived_count; /* archival successes */
719
- char last_archived_wal[MAX_XFN_CHARS + 1]; /* last WAL file
720
- * archived */
721
- TimestampTz last_archived_timestamp; /* last archival success time */
722
- PgStat_Counter failed_count; /* failed archival attempts */
723
- char last_failed_wal[MAX_XFN_CHARS + 1]; /* WAL file involved in
724
- * last failure */
725
- TimestampTz last_failed_timestamp; /* last archival failure time */
726
- TimestampTz stat_reset_timestamp;
727
- } PgStat_ArchiverStats;
728
-
729
- /*
730
- * Global statistics kept in the stats collector
731
- */
732
- typedef struct PgStat_GlobalStats
733
- {
734
- TimestampTz stats_timestamp; /* time of stats file update */
735
- PgStat_Counter timed_checkpoints;
736
- PgStat_Counter requested_checkpoints;
737
- PgStat_Counter checkpoint_write_time; /* times in milliseconds */
738
- PgStat_Counter checkpoint_sync_time;
739
- PgStat_Counter buf_written_checkpoints;
740
- PgStat_Counter buf_written_clean;
741
- PgStat_Counter maxwritten_clean;
742
- PgStat_Counter buf_written_backend;
743
- PgStat_Counter buf_fsync_backend;
744
- PgStat_Counter buf_alloc;
745
- TimestampTz stat_reset_timestamp;
746
- } PgStat_GlobalStats;
747
-
748
- /*
749
- * SLRU statistics kept in the stats collector
750
- */
751
- typedef struct PgStat_SLRUStats
752
- {
753
- PgStat_Counter blocks_zeroed;
754
- PgStat_Counter blocks_hit;
755
- PgStat_Counter blocks_read;
756
- PgStat_Counter blocks_written;
757
- PgStat_Counter blocks_exists;
758
- PgStat_Counter flush;
759
- PgStat_Counter truncate;
760
- TimestampTz stat_reset_timestamp;
761
- } PgStat_SLRUStats;
762
-
763
-
764
- /* ----------
765
- * Backend states
766
- * ----------
767
- */
768
- typedef enum BackendState
769
- {
770
- STATE_UNDEFINED,
771
- STATE_IDLE,
772
- STATE_RUNNING,
773
- STATE_IDLEINTRANSACTION,
774
- STATE_FASTPATH,
775
- STATE_IDLEINTRANSACTION_ABORTED,
776
- STATE_DISABLED
777
- } BackendState;
778
-
779
-
780
- /* ----------
781
- * Wait Classes
782
- * ----------
783
- */
784
- #define PG_WAIT_LWLOCK 0x01000000U
785
- #define PG_WAIT_LOCK 0x03000000U
786
- #define PG_WAIT_BUFFER_PIN 0x04000000U
787
- #define PG_WAIT_ACTIVITY 0x05000000U
788
- #define PG_WAIT_CLIENT 0x06000000U
789
- #define PG_WAIT_EXTENSION 0x07000000U
790
- #define PG_WAIT_IPC 0x08000000U
791
- #define PG_WAIT_TIMEOUT 0x09000000U
792
- #define PG_WAIT_IO 0x0A000000U
793
-
794
- /* ----------
795
- * Wait Events - Activity
796
- *
797
- * Use this category when a process is waiting because it has no work to do,
798
- * unless the "Client" or "Timeout" category describes the situation better.
799
- * Typically, this should only be used for background processes.
800
- * ----------
801
- */
802
- typedef enum
803
- {
804
- WAIT_EVENT_ARCHIVER_MAIN = PG_WAIT_ACTIVITY,
805
- WAIT_EVENT_AUTOVACUUM_MAIN,
806
- WAIT_EVENT_BGWRITER_HIBERNATE,
807
- WAIT_EVENT_BGWRITER_MAIN,
808
- WAIT_EVENT_CHECKPOINTER_MAIN,
809
- WAIT_EVENT_LOGICAL_APPLY_MAIN,
810
- WAIT_EVENT_LOGICAL_LAUNCHER_MAIN,
811
- WAIT_EVENT_PGSTAT_MAIN,
812
- WAIT_EVENT_RECOVERY_WAL_STREAM,
813
- WAIT_EVENT_SYSLOGGER_MAIN,
814
- WAIT_EVENT_WAL_RECEIVER_MAIN,
815
- WAIT_EVENT_WAL_SENDER_MAIN,
816
- WAIT_EVENT_WAL_WRITER_MAIN
817
- } WaitEventActivity;
818
-
819
- /* ----------
820
- * Wait Events - Client
821
- *
822
- * Use this category when a process is waiting to send data to or receive data
823
- * from the frontend process to which it is connected. This is never used for
824
- * a background process, which has no client connection.
825
- * ----------
826
- */
827
- typedef enum
828
- {
829
- WAIT_EVENT_CLIENT_READ = PG_WAIT_CLIENT,
830
- WAIT_EVENT_CLIENT_WRITE,
831
- WAIT_EVENT_GSS_OPEN_SERVER,
832
- WAIT_EVENT_LIBPQWALRECEIVER_CONNECT,
833
- WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE,
834
- WAIT_EVENT_SSL_OPEN_SERVER,
835
- WAIT_EVENT_WAL_RECEIVER_WAIT_START,
836
- WAIT_EVENT_WAL_SENDER_WAIT_WAL,
837
- WAIT_EVENT_WAL_SENDER_WRITE_DATA,
838
- } WaitEventClient;
839
-
840
- /* ----------
841
- * Wait Events - IPC
842
- *
843
- * Use this category when a process cannot complete the work it is doing because
844
- * it is waiting for a notification from another process.
845
- * ----------
846
- */
847
- typedef enum
848
- {
849
- WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE = PG_WAIT_IPC,
850
- WAIT_EVENT_BGWORKER_SHUTDOWN,
851
- WAIT_EVENT_BGWORKER_STARTUP,
852
- WAIT_EVENT_BTREE_PAGE,
853
- WAIT_EVENT_CHECKPOINT_DONE,
854
- WAIT_EVENT_CHECKPOINT_START,
855
- WAIT_EVENT_EXECUTE_GATHER,
856
- WAIT_EVENT_HASH_BATCH_ALLOCATE,
857
- WAIT_EVENT_HASH_BATCH_ELECT,
858
- WAIT_EVENT_HASH_BATCH_LOAD,
859
- WAIT_EVENT_HASH_BUILD_ALLOCATE,
860
- WAIT_EVENT_HASH_BUILD_ELECT,
861
- WAIT_EVENT_HASH_BUILD_HASH_INNER,
862
- WAIT_EVENT_HASH_BUILD_HASH_OUTER,
863
- WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE,
864
- WAIT_EVENT_HASH_GROW_BATCHES_DECIDE,
865
- WAIT_EVENT_HASH_GROW_BATCHES_ELECT,
866
- WAIT_EVENT_HASH_GROW_BATCHES_FINISH,
867
- WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION,
868
- WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE,
869
- WAIT_EVENT_HASH_GROW_BUCKETS_ELECT,
870
- WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT,
871
- WAIT_EVENT_LOGICAL_SYNC_DATA,
872
- WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE,
873
- WAIT_EVENT_MQ_INTERNAL,
874
- WAIT_EVENT_MQ_PUT_MESSAGE,
875
- WAIT_EVENT_MQ_RECEIVE,
876
- WAIT_EVENT_MQ_SEND,
877
- WAIT_EVENT_PARALLEL_BITMAP_SCAN,
878
- WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN,
879
- WAIT_EVENT_PARALLEL_FINISH,
880
- WAIT_EVENT_PROCARRAY_GROUP_UPDATE,
881
- WAIT_EVENT_PROC_SIGNAL_BARRIER,
882
- WAIT_EVENT_PROMOTE,
883
- WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT,
884
- WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE,
885
- WAIT_EVENT_RECOVERY_PAUSE,
886
- WAIT_EVENT_REPLICATION_ORIGIN_DROP,
887
- WAIT_EVENT_REPLICATION_SLOT_DROP,
888
- WAIT_EVENT_SAFE_SNAPSHOT,
889
- WAIT_EVENT_SYNC_REP,
890
- WAIT_EVENT_XACT_GROUP_UPDATE
891
- } WaitEventIPC;
892
-
893
- /* ----------
894
- * Wait Events - Timeout
895
- *
896
- * Use this category when a process is waiting for a timeout to expire.
897
- * ----------
898
- */
899
- typedef enum
900
- {
901
- WAIT_EVENT_BASE_BACKUP_THROTTLE = PG_WAIT_TIMEOUT,
902
- WAIT_EVENT_PG_SLEEP,
903
- WAIT_EVENT_RECOVERY_APPLY_DELAY,
904
- WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL,
905
- WAIT_EVENT_VACUUM_DELAY
906
- } WaitEventTimeout;
907
-
908
- /* ----------
909
- * Wait Events - IO
910
- *
911
- * Use this category when a process is waiting for a IO.
912
- * ----------
913
- */
914
- typedef enum
915
- {
916
- WAIT_EVENT_BUFFILE_READ = PG_WAIT_IO,
917
- WAIT_EVENT_BUFFILE_WRITE,
918
- WAIT_EVENT_CONTROL_FILE_READ,
919
- WAIT_EVENT_CONTROL_FILE_SYNC,
920
- WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE,
921
- WAIT_EVENT_CONTROL_FILE_WRITE,
922
- WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE,
923
- WAIT_EVENT_COPY_FILE_READ,
924
- WAIT_EVENT_COPY_FILE_WRITE,
925
- WAIT_EVENT_DATA_FILE_EXTEND,
926
- WAIT_EVENT_DATA_FILE_FLUSH,
927
- WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC,
928
- WAIT_EVENT_DATA_FILE_PREFETCH,
929
- WAIT_EVENT_DATA_FILE_READ,
930
- WAIT_EVENT_DATA_FILE_SYNC,
931
- WAIT_EVENT_DATA_FILE_TRUNCATE,
932
- WAIT_EVENT_DATA_FILE_WRITE,
933
- WAIT_EVENT_DSM_FILL_ZERO_WRITE,
934
- WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ,
935
- WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC,
936
- WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE,
937
- WAIT_EVENT_LOCK_FILE_CREATE_READ,
938
- WAIT_EVENT_LOCK_FILE_CREATE_SYNC,
939
- WAIT_EVENT_LOCK_FILE_CREATE_WRITE,
940
- WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ,
941
- WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC,
942
- WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC,
943
- WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE,
944
- WAIT_EVENT_LOGICAL_REWRITE_SYNC,
945
- WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE,
946
- WAIT_EVENT_LOGICAL_REWRITE_WRITE,
947
- WAIT_EVENT_RELATION_MAP_READ,
948
- WAIT_EVENT_RELATION_MAP_SYNC,
949
- WAIT_EVENT_RELATION_MAP_WRITE,
950
- WAIT_EVENT_REORDER_BUFFER_READ,
951
- WAIT_EVENT_REORDER_BUFFER_WRITE,
952
- WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ,
953
- WAIT_EVENT_REPLICATION_SLOT_READ,
954
- WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC,
955
- WAIT_EVENT_REPLICATION_SLOT_SYNC,
956
- WAIT_EVENT_REPLICATION_SLOT_WRITE,
957
- WAIT_EVENT_SLRU_FLUSH_SYNC,
958
- WAIT_EVENT_SLRU_READ,
959
- WAIT_EVENT_SLRU_SYNC,
960
- WAIT_EVENT_SLRU_WRITE,
961
- WAIT_EVENT_SNAPBUILD_READ,
962
- WAIT_EVENT_SNAPBUILD_SYNC,
963
- WAIT_EVENT_SNAPBUILD_WRITE,
964
- WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC,
965
- WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE,
966
- WAIT_EVENT_TIMELINE_HISTORY_READ,
967
- WAIT_EVENT_TIMELINE_HISTORY_SYNC,
968
- WAIT_EVENT_TIMELINE_HISTORY_WRITE,
969
- WAIT_EVENT_TWOPHASE_FILE_READ,
970
- WAIT_EVENT_TWOPHASE_FILE_SYNC,
971
- WAIT_EVENT_TWOPHASE_FILE_WRITE,
972
- WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ,
973
- WAIT_EVENT_WAL_BOOTSTRAP_SYNC,
974
- WAIT_EVENT_WAL_BOOTSTRAP_WRITE,
975
- WAIT_EVENT_WAL_COPY_READ,
976
- WAIT_EVENT_WAL_COPY_SYNC,
977
- WAIT_EVENT_WAL_COPY_WRITE,
978
- WAIT_EVENT_WAL_INIT_SYNC,
979
- WAIT_EVENT_WAL_INIT_WRITE,
980
- WAIT_EVENT_WAL_READ,
981
- WAIT_EVENT_WAL_SYNC,
982
- WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN,
983
- WAIT_EVENT_WAL_WRITE
984
- } WaitEventIO;
985
-
986
- /* ----------
987
- * Command type for progress reporting purposes
988
- * ----------
989
- */
990
- typedef enum ProgressCommandType
991
- {
992
- PROGRESS_COMMAND_INVALID,
993
- PROGRESS_COMMAND_VACUUM,
994
- PROGRESS_COMMAND_ANALYZE,
995
- PROGRESS_COMMAND_CLUSTER,
996
- PROGRESS_COMMAND_CREATE_INDEX,
997
- PROGRESS_COMMAND_BASEBACKUP
998
- } ProgressCommandType;
999
-
1000
- #define PGSTAT_NUM_PROGRESS_PARAM 20
1001
-
1002
- /* ----------
1003
- * Shared-memory data structures
1004
- * ----------
1005
- */
1006
-
1007
-
1008
- /*
1009
- * PgBackendSSLStatus
1010
- *
1011
- * For each backend, we keep the SSL status in a separate struct, that
1012
- * is only filled in if SSL is enabled.
1013
- *
1014
- * All char arrays must be null-terminated.
1015
- */
1016
- typedef struct PgBackendSSLStatus
1017
- {
1018
- /* Information about SSL connection */
1019
- int ssl_bits;
1020
- bool ssl_compression;
1021
- char ssl_version[NAMEDATALEN];
1022
- char ssl_cipher[NAMEDATALEN];
1023
- char ssl_client_dn[NAMEDATALEN];
1024
-
1025
- /*
1026
- * serial number is max "20 octets" per RFC 5280, so this size should be
1027
- * fine
1028
- */
1029
- char ssl_client_serial[NAMEDATALEN];
1030
-
1031
- char ssl_issuer_dn[NAMEDATALEN];
1032
- } PgBackendSSLStatus;
1033
-
1034
- /*
1035
- * PgBackendGSSStatus
1036
- *
1037
- * For each backend, we keep the GSS status in a separate struct, that
1038
- * is only filled in if GSS is enabled.
1039
- *
1040
- * All char arrays must be null-terminated.
1041
- */
1042
- typedef struct PgBackendGSSStatus
1043
- {
1044
- /* Information about GSSAPI connection */
1045
- char gss_princ[NAMEDATALEN]; /* GSSAPI Principal used to auth */
1046
- bool gss_auth; /* If GSSAPI authentication was used */
1047
- bool gss_enc; /* If encryption is being used */
1048
-
1049
- } PgBackendGSSStatus;
1050
-
1051
-
1052
- /* ----------
1053
- * PgBackendStatus
1054
- *
1055
- * Each live backend maintains a PgBackendStatus struct in shared memory
1056
- * showing its current activity. (The structs are allocated according to
1057
- * BackendId, but that is not critical.) Note that the collector process
1058
- * has no involvement in, or even access to, these structs.
1059
- *
1060
- * Each auxiliary process also maintains a PgBackendStatus struct in shared
1061
- * memory.
1062
- * ----------
1063
- */
1064
- typedef struct PgBackendStatus
1065
- {
1066
- /*
1067
- * To avoid locking overhead, we use the following protocol: a backend
1068
- * increments st_changecount before modifying its entry, and again after
1069
- * finishing a modification. A would-be reader should note the value of
1070
- * st_changecount, copy the entry into private memory, then check
1071
- * st_changecount again. If the value hasn't changed, and if it's even,
1072
- * the copy is valid; otherwise start over. This makes updates cheap
1073
- * while reads are potentially expensive, but that's the tradeoff we want.
1074
- *
1075
- * The above protocol needs memory barriers to ensure that the apparent
1076
- * order of execution is as it desires. Otherwise, for example, the CPU
1077
- * might rearrange the code so that st_changecount is incremented twice
1078
- * before the modification on a machine with weak memory ordering. Hence,
1079
- * use the macros defined below for manipulating st_changecount, rather
1080
- * than touching it directly.
1081
- */
1082
- int st_changecount;
1083
-
1084
- /* The entry is valid iff st_procpid > 0, unused if st_procpid == 0 */
1085
- int st_procpid;
1086
-
1087
- /* Type of backends */
1088
- BackendType st_backendType;
1089
-
1090
- /* Times when current backend, transaction, and activity started */
1091
- TimestampTz st_proc_start_timestamp;
1092
- TimestampTz st_xact_start_timestamp;
1093
- TimestampTz st_activity_start_timestamp;
1094
- TimestampTz st_state_start_timestamp;
1095
-
1096
- /* Database OID, owning user's OID, connection client address */
1097
- Oid st_databaseid;
1098
- Oid st_userid;
1099
- SockAddr st_clientaddr;
1100
- char *st_clienthostname; /* MUST be null-terminated */
1101
-
1102
- /* Information about SSL connection */
1103
- bool st_ssl;
1104
- PgBackendSSLStatus *st_sslstatus;
1105
-
1106
- /* Information about GSSAPI connection */
1107
- bool st_gss;
1108
- PgBackendGSSStatus *st_gssstatus;
1109
-
1110
- /* current state */
1111
- BackendState st_state;
1112
-
1113
- /* application name; MUST be null-terminated */
1114
- char *st_appname;
1115
-
1116
- /*
1117
- * Current command string; MUST be null-terminated. Note that this string
1118
- * possibly is truncated in the middle of a multi-byte character. As
1119
- * activity strings are stored more frequently than read, that allows to
1120
- * move the cost of correct truncation to the display side. Use
1121
- * pgstat_clip_activity() to truncate correctly.
1122
- */
1123
- char *st_activity_raw;
1124
-
1125
- /*
1126
- * Command progress reporting. Any command which wishes can advertise
1127
- * that it is running by setting st_progress_command,
1128
- * st_progress_command_target, and st_progress_param[].
1129
- * st_progress_command_target should be the OID of the relation which the
1130
- * command targets (we assume there's just one, as this is meant for
1131
- * utility commands), but the meaning of each element in the
1132
- * st_progress_param array is command-specific.
1133
- */
1134
- ProgressCommandType st_progress_command;
1135
- Oid st_progress_command_target;
1136
- int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];
1137
- } PgBackendStatus;
1138
-
1139
- /*
1140
- * Macros to load and store st_changecount with appropriate memory barriers.
1141
- *
1142
- * Use PGSTAT_BEGIN_WRITE_ACTIVITY() before, and PGSTAT_END_WRITE_ACTIVITY()
1143
- * after, modifying the current process's PgBackendStatus data. Note that,
1144
- * since there is no mechanism for cleaning up st_changecount after an error,
1145
- * THESE MACROS FORM A CRITICAL SECTION. Any error between them will be
1146
- * promoted to PANIC, causing a database restart to clean up shared memory!
1147
- * Hence, keep the critical section as short and straight-line as possible.
1148
- * Aside from being safer, that minimizes the window in which readers will
1149
- * have to loop.
1150
- *
1151
- * Reader logic should follow this sketch:
1152
- *
1153
- * for (;;)
1154
- * {
1155
- * int before_ct, after_ct;
1156
- *
1157
- * pgstat_begin_read_activity(beentry, before_ct);
1158
- * ... copy beentry data to local memory ...
1159
- * pgstat_end_read_activity(beentry, after_ct);
1160
- * if (pgstat_read_activity_complete(before_ct, after_ct))
1161
- * break;
1162
- * CHECK_FOR_INTERRUPTS();
1163
- * }
1164
- *
1165
- * For extra safety, we generally use volatile beentry pointers, although
1166
- * the memory barriers should theoretically be sufficient.
1167
- */
1168
- #define PGSTAT_BEGIN_WRITE_ACTIVITY(beentry) \
1169
- do { \
1170
- START_CRIT_SECTION(); \
1171
- (beentry)->st_changecount++; \
1172
- pg_write_barrier(); \
1173
- } while (0)
1174
-
1175
- #define PGSTAT_END_WRITE_ACTIVITY(beentry) \
1176
- do { \
1177
- pg_write_barrier(); \
1178
- (beentry)->st_changecount++; \
1179
- Assert(((beentry)->st_changecount & 1) == 0); \
1180
- END_CRIT_SECTION(); \
1181
- } while (0)
1182
-
1183
- #define pgstat_begin_read_activity(beentry, before_changecount) \
1184
- do { \
1185
- (before_changecount) = (beentry)->st_changecount; \
1186
- pg_read_barrier(); \
1187
- } while (0)
1188
-
1189
- #define pgstat_end_read_activity(beentry, after_changecount) \
1190
- do { \
1191
- pg_read_barrier(); \
1192
- (after_changecount) = (beentry)->st_changecount; \
1193
- } while (0)
1194
-
1195
- #define pgstat_read_activity_complete(before_changecount, after_changecount) \
1196
- ((before_changecount) == (after_changecount) && \
1197
- ((before_changecount) & 1) == 0)
1198
-
1199
-
1200
- /* ----------
1201
- * LocalPgBackendStatus
1202
- *
1203
- * When we build the backend status array, we use LocalPgBackendStatus to be
1204
- * able to add new values to the struct when needed without adding new fields
1205
- * to the shared memory. It contains the backend status as a first member.
1206
- * ----------
1207
- */
1208
- typedef struct LocalPgBackendStatus
1209
- {
1210
- /*
1211
- * Local version of the backend status entry.
1212
- */
1213
- PgBackendStatus backendStatus;
1214
-
1215
- /*
1216
- * The xid of the current transaction if available, InvalidTransactionId
1217
- * if not.
1218
- */
1219
- TransactionId backend_xid;
1220
-
1221
- /*
1222
- * The xmin of the current session if available, InvalidTransactionId if
1223
- * not.
1224
- */
1225
- TransactionId backend_xmin;
1226
- } LocalPgBackendStatus;
1227
-
1228
- /*
1229
- * Working state needed to accumulate per-function-call timing statistics.
1230
- */
1231
- typedef struct PgStat_FunctionCallUsage
1232
- {
1233
- /* Link to function's hashtable entry (must still be there at exit!) */
1234
- /* NULL means we are not tracking the current function call */
1235
- PgStat_FunctionCounts *fs;
1236
- /* Total time previously charged to function, as of function start */
1237
- instr_time save_f_total_time;
1238
- /* Backend-wide total time as of function start */
1239
- instr_time save_total;
1240
- /* system clock as of function start */
1241
- instr_time f_start;
1242
- } PgStat_FunctionCallUsage;
1243
-
1244
-
1245
- /* ----------
1246
- * GUC parameters
1247
- * ----------
1248
- */
1249
- extern PGDLLIMPORT bool pgstat_track_activities;
1250
- extern PGDLLIMPORT bool pgstat_track_counts;
1251
- extern PGDLLIMPORT int pgstat_track_functions;
1252
- extern PGDLLIMPORT int pgstat_track_activity_query_size;
1253
- extern char *pgstat_stat_directory;
1254
- extern char *pgstat_stat_tmpname;
1255
- extern char *pgstat_stat_filename;
1256
-
1257
- /*
1258
- * BgWriter statistics counters are updated directly by bgwriter and bufmgr
1259
- */
1260
- extern PgStat_MsgBgWriter BgWriterStats;
1261
-
1262
- /*
1263
- * Updated by pgstat_count_buffer_*_time macros
1264
- */
1265
- extern PgStat_Counter pgStatBlockReadTime;
1266
- extern PgStat_Counter pgStatBlockWriteTime;
1267
-
1268
- /* ----------
1269
- * Functions called from postmaster
1270
- * ----------
1271
- */
1272
- extern Size BackendStatusShmemSize(void);
1273
- extern void CreateSharedBackendStatus(void);
1274
-
1275
- extern void pgstat_init(void);
1276
- extern int pgstat_start(void);
1277
- extern void pgstat_reset_all(void);
1278
- extern void allow_immediate_pgstat_restart(void);
1279
-
1280
- #ifdef EXEC_BACKEND
1281
- extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn();
1282
- #endif
1283
-
1284
-
1285
- /* ----------
1286
- * Functions called from backends
1287
- * ----------
1288
- */
1289
- extern void pgstat_ping(void);
1290
-
1291
- extern void pgstat_report_stat(bool force);
1292
- extern void pgstat_vacuum_stat(void);
1293
- extern void pgstat_drop_database(Oid databaseid);
1294
-
1295
- extern void pgstat_clear_snapshot(void);
1296
- extern void pgstat_reset_counters(void);
1297
- extern void pgstat_reset_shared_counters(const char *);
1298
- extern void pgstat_reset_single_counter(Oid objectid, PgStat_Single_Reset_Type type);
1299
- extern void pgstat_reset_slru_counter(const char *);
1300
-
1301
- extern void pgstat_report_autovac(Oid dboid);
1302
- extern void pgstat_report_vacuum(Oid tableoid, bool shared,
1303
- PgStat_Counter livetuples, PgStat_Counter deadtuples);
1304
- extern void pgstat_report_analyze(Relation rel,
1305
- PgStat_Counter livetuples, PgStat_Counter deadtuples,
1306
- bool resetcounter);
1307
-
1308
- extern void pgstat_report_recovery_conflict(int reason);
1309
- extern void pgstat_report_deadlock(void);
1310
- extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount);
1311
- extern void pgstat_report_checksum_failure(void);
1312
-
1313
- extern void pgstat_initialize(void);
1314
- extern void pgstat_bestart(void);
1315
-
1316
- extern void pgstat_report_activity(BackendState state, const char *cmd_str);
1317
- extern void pgstat_report_tempfile(size_t filesize);
1318
- extern void pgstat_report_appname(const char *appname);
1319
- extern void pgstat_report_xact_timestamp(TimestampTz tstamp);
1320
- extern const char *pgstat_get_wait_event(uint32 wait_event_info);
1321
- extern const char *pgstat_get_wait_event_type(uint32 wait_event_info);
1322
- extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser);
1323
- extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer,
1324
- int buflen);
1325
-
1326
- extern void pgstat_progress_start_command(ProgressCommandType cmdtype,
1327
- Oid relid);
1328
- extern void pgstat_progress_update_param(int index, int64 val);
1329
- extern void pgstat_progress_update_multi_param(int nparam, const int *index,
1330
- const int64 *val);
1331
- extern void pgstat_progress_end_command(void);
1332
-
1333
- extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id);
1334
- extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id);
1335
-
1336
- extern void pgstat_initstats(Relation rel);
1337
-
1338
- extern char *pgstat_clip_activity(const char *raw_activity);
1339
-
1340
- /* ----------
1341
- * pgstat_report_wait_start() -
1342
- *
1343
- * Called from places where server process needs to wait. This is called
1344
- * to report wait event information. The wait information is stored
1345
- * as 4-bytes where first byte represents the wait event class (type of
1346
- * wait, for different types of wait, refer WaitClass) and the next
1347
- * 3-bytes represent the actual wait event. Currently 2-bytes are used
1348
- * for wait event which is sufficient for current usage, 1-byte is
1349
- * reserved for future usage.
1350
- *
1351
- * NB: this *must* be able to survive being called before MyProc has been
1352
- * initialized.
1353
- * ----------
1354
- */
1355
- static inline void
1356
- pgstat_report_wait_start(uint32 wait_event_info)
1357
- {
1358
- volatile PGPROC *proc = MyProc;
1359
-
1360
- if (!pgstat_track_activities || !proc)
1361
- return;
1362
-
1363
- /*
1364
- * Since this is a four-byte field which is always read and written as
1365
- * four-bytes, updates are atomic.
1366
- */
1367
- proc->wait_event_info = wait_event_info;
1368
- }
1369
-
1370
- /* ----------
1371
- * pgstat_report_wait_end() -
1372
- *
1373
- * Called to report end of a wait.
1374
- *
1375
- * NB: this *must* be able to survive being called before MyProc has been
1376
- * initialized.
1377
- * ----------
1378
- */
1379
- static inline void
1380
- pgstat_report_wait_end(void)
1381
- {
1382
- volatile PGPROC *proc = MyProc;
1383
-
1384
- if (!pgstat_track_activities || !proc)
1385
- return;
1386
-
1387
- /*
1388
- * Since this is a four-byte field which is always read and written as
1389
- * four-bytes, updates are atomic.
1390
- */
1391
- proc->wait_event_info = 0;
1392
- }
1393
-
1394
- /* nontransactional event counts are simple enough to inline */
1395
-
1396
- #define pgstat_count_heap_scan(rel) \
1397
- do { \
1398
- if ((rel)->pgstat_info != NULL) \
1399
- (rel)->pgstat_info->t_counts.t_numscans++; \
1400
- } while (0)
1401
- #define pgstat_count_heap_getnext(rel) \
1402
- do { \
1403
- if ((rel)->pgstat_info != NULL) \
1404
- (rel)->pgstat_info->t_counts.t_tuples_returned++; \
1405
- } while (0)
1406
- #define pgstat_count_heap_fetch(rel) \
1407
- do { \
1408
- if ((rel)->pgstat_info != NULL) \
1409
- (rel)->pgstat_info->t_counts.t_tuples_fetched++; \
1410
- } while (0)
1411
- #define pgstat_count_index_scan(rel) \
1412
- do { \
1413
- if ((rel)->pgstat_info != NULL) \
1414
- (rel)->pgstat_info->t_counts.t_numscans++; \
1415
- } while (0)
1416
- #define pgstat_count_index_tuples(rel, n) \
1417
- do { \
1418
- if ((rel)->pgstat_info != NULL) \
1419
- (rel)->pgstat_info->t_counts.t_tuples_returned += (n); \
1420
- } while (0)
1421
- #define pgstat_count_buffer_read(rel) \
1422
- do { \
1423
- if ((rel)->pgstat_info != NULL) \
1424
- (rel)->pgstat_info->t_counts.t_blocks_fetched++; \
1425
- } while (0)
1426
- #define pgstat_count_buffer_hit(rel) \
1427
- do { \
1428
- if ((rel)->pgstat_info != NULL) \
1429
- (rel)->pgstat_info->t_counts.t_blocks_hit++; \
1430
- } while (0)
1431
- #define pgstat_count_buffer_read_time(n) \
1432
- (pgStatBlockReadTime += (n))
1433
- #define pgstat_count_buffer_write_time(n) \
1434
- (pgStatBlockWriteTime += (n))
1435
-
1436
- extern void pgstat_count_heap_insert(Relation rel, PgStat_Counter n);
1437
- extern void pgstat_count_heap_update(Relation rel, bool hot);
1438
- extern void pgstat_count_heap_delete(Relation rel);
1439
- extern void pgstat_count_truncate(Relation rel);
1440
- extern void pgstat_update_heap_dead_tuples(Relation rel, int delta);
1441
-
1442
- struct FunctionCallInfoBaseData;
1443
- extern void pgstat_init_function_usage(struct FunctionCallInfoBaseData *fcinfo,
1444
- PgStat_FunctionCallUsage *fcu);
1445
- extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu,
1446
- bool finalize);
1447
-
1448
- extern void AtEOXact_PgStat(bool isCommit, bool parallel);
1449
- extern void AtEOSubXact_PgStat(bool isCommit, int nestDepth);
1450
-
1451
- extern void AtPrepare_PgStat(void);
1452
- extern void PostPrepare_PgStat(void);
1453
-
1454
- extern void pgstat_twophase_postcommit(TransactionId xid, uint16 info,
1455
- void *recdata, uint32 len);
1456
- extern void pgstat_twophase_postabort(TransactionId xid, uint16 info,
1457
- void *recdata, uint32 len);
1458
-
1459
- extern void pgstat_send_archiver(const char *xlog, bool failed);
1460
- extern void pgstat_send_bgwriter(void);
1461
-
1462
- /* ----------
1463
- * Support functions for the SQL-callable functions to
1464
- * generate the pgstat* views.
1465
- * ----------
1466
- */
1467
- extern PgStat_StatDBEntry *pgstat_fetch_stat_dbentry(Oid dbid);
1468
- extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry(Oid relid);
1469
- extern PgBackendStatus *pgstat_fetch_stat_beentry(int beid);
1470
- extern LocalPgBackendStatus *pgstat_fetch_stat_local_beentry(int beid);
1471
- extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid);
1472
- extern int pgstat_fetch_stat_numbackends(void);
1473
- extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void);
1474
- extern PgStat_GlobalStats *pgstat_fetch_global(void);
1475
- extern PgStat_SLRUStats *pgstat_fetch_slru(void);
1476
-
1477
- extern void pgstat_count_slru_page_zeroed(int slru_idx);
1478
- extern void pgstat_count_slru_page_hit(int slru_idx);
1479
- extern void pgstat_count_slru_page_read(int slru_idx);
1480
- extern void pgstat_count_slru_page_written(int slru_idx);
1481
- extern void pgstat_count_slru_page_exists(int slru_idx);
1482
- extern void pgstat_count_slru_flush(int slru_idx);
1483
- extern void pgstat_count_slru_truncate(int slru_idx);
1484
- extern const char *pgstat_slru_name(int slru_idx);
1485
- extern int pgstat_slru_index(const char *name);
1486
-
1487
- #endif /* PGSTAT_H */