pg_query 2.0.3 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +165 -0
- data/README.md +67 -29
- data/Rakefile +8 -23
- data/ext/pg_query/extconf.rb +21 -3
- data/ext/pg_query/include/pg_query.h +29 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
- data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
- data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
- data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
- data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
- data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
- data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
- data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
- data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
- data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
- data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
- data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
- data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
- data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
- data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
- data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
- data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
- data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
- data/ext/pg_query/include/postgres/common/int.h +437 -0
- data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
- data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
- data/ext/pg_query/include/postgres/common/sha2.h +32 -0
- data/ext/pg_query/include/postgres/common/string.h +44 -0
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
- data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
- data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
- data/ext/pg_query/include/postgres/gram.h +1127 -0
- data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
- data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
- data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
- data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
- data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
- data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
- data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
- data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +90 -0
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
- data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/postgres/parser/parser.h +68 -0
- data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
- data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +778 -0
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
- data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
- data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
- data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
- data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
- data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
- data/ext/pg_query/include/postgres/port/simd.h +375 -0
- data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
- data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
- data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
- data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
- data/ext/pg_query/include/postgres/port/win32.h +59 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
- data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
- data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
- data/ext/pg_query/include/postgres/postgres.h +579 -0
- data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
- data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
- data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
- data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
- data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
- data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
- data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
- data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
- data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
- data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
- data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
- data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
- data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
- data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
- data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
- data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
- data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
- data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
- data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
- data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
- data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
- data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
- data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
- data/ext/pg_query/include/protobuf-c.h +7 -3
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +21026 -17002
- data/ext/pg_query/pg_query_deparse.c +1 -9896
- data/ext/pg_query/pg_query_fingerprint.c +162 -50
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
- data/ext/pg_query/pg_query_normalize.c +259 -64
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
- data/ext/pg_query/pg_query_ruby.c +6 -1
- data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
- data/ext/pg_query/pg_query_scan.c +3 -2
- data/ext/pg_query/pg_query_split.c +6 -5
- data/ext/pg_query/postgres_deparse.c +11067 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/protobuf-c.c +34 -27
- data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +99 -12
- data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
- data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
- data/ext/pg_query/src_backend_parser_parser.c +53 -8
- data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
- data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
- data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
- data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
- data/ext/pg_query/src_common_encnames.c +4 -1
- data/ext/pg_query/src_common_hashfn.c +420 -0
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +545 -498
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_stringinfo.c +4 -4
- data/ext/pg_query/src_common_wchar.c +717 -113
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
- data/ext/pg_query/src_port_pg_bitutils.c +103 -40
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +51 -29
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +7 -5
- data/lib/pg_query/fingerprint.rb +21 -9
- data/lib/pg_query/node.rb +18 -13
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +141 -50
- data/lib/pg_query/pg_query_pb.rb +175 -3031
- data/lib/pg_query/treewalker.rb +26 -2
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- data/lib/pg_query.rb +0 -1
- metadata +443 -380
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/rmgr.h +0 -35
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/catalog/genbki.h +0 -64
- data/ext/pg_query/include/catalog/indexing.h +0 -366
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/ip.h +0 -37
- data/ext/pg_query/include/common/string.h +0 -19
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1072
- data/ext/pg_query/include/nodes/value.h +0 -61
- data/ext/pg_query/include/parser/gram.h +0 -1067
- data/ext/pg_query/include/parser/kwlist.h +0 -477
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/include/parser/parser.h +0 -41
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/pgstat.h +0 -1487
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/replication/logicalproto.h +0 -110
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -19
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/pidfile.h +0 -56
- data/ext/pg_query/include/utils/ps_status.h +0 -25
- data/ext/pg_query/include/utils/regproc.h +0 -28
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
- data/ext/pg_query/src_common_string.c +0 -86
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_random.c +0 -31
- data/ext/pg_query/src_port_strnlen.c +0 -39
- data/lib/pg_query/json_field_names.rb +0 -1402
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* per-process shared memory data structures
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/proc.h
|
|
@@ -32,35 +32,49 @@
|
|
|
32
32
|
* If none of the caches have overflowed, we can assume that an XID that's not
|
|
33
33
|
* listed anywhere in the PGPROC array is not a running transaction. Else we
|
|
34
34
|
* have to look at pg_subtrans.
|
|
35
|
+
*
|
|
36
|
+
* See src/test/isolation/specs/subxid-overflow.spec if you change this.
|
|
35
37
|
*/
|
|
36
38
|
#define PGPROC_MAX_CACHED_SUBXIDS 64 /* XXX guessed-at value */
|
|
37
39
|
|
|
40
|
+
typedef struct XidCacheStatus
|
|
41
|
+
{
|
|
42
|
+
/* number of cached subxids, never more than PGPROC_MAX_CACHED_SUBXIDS */
|
|
43
|
+
uint8 count;
|
|
44
|
+
/* has PGPROC->subxids overflowed */
|
|
45
|
+
bool overflowed;
|
|
46
|
+
} XidCacheStatus;
|
|
47
|
+
|
|
38
48
|
struct XidCache
|
|
39
49
|
{
|
|
40
50
|
TransactionId xids[PGPROC_MAX_CACHED_SUBXIDS];
|
|
41
51
|
};
|
|
42
52
|
|
|
43
53
|
/*
|
|
44
|
-
* Flags for
|
|
45
|
-
*
|
|
46
|
-
* Note: If you modify these flags, you need to modify PROCARRAY_XXX flags
|
|
47
|
-
* in src/include/storage/procarray.h.
|
|
48
|
-
*
|
|
49
|
-
* PROC_RESERVED may later be assigned for use in vacuumFlags, but its value is
|
|
50
|
-
* used for PROCARRAY_SLOTS_XMIN in procarray.h, so GetOldestXmin won't be able
|
|
51
|
-
* to match and ignore processes with this flag set.
|
|
54
|
+
* Flags for PGPROC->statusFlags and PROC_HDR->statusFlags[]
|
|
52
55
|
*/
|
|
53
56
|
#define PROC_IS_AUTOVACUUM 0x01 /* is it an autovac worker? */
|
|
54
57
|
#define PROC_IN_VACUUM 0x02 /* currently running lazy vacuum */
|
|
55
|
-
#define
|
|
58
|
+
#define PROC_IN_SAFE_IC 0x04 /* currently running CREATE INDEX
|
|
59
|
+
* CONCURRENTLY or REINDEX
|
|
60
|
+
* CONCURRENTLY on non-expressional,
|
|
61
|
+
* non-partial index */
|
|
56
62
|
#define PROC_VACUUM_FOR_WRAPAROUND 0x08 /* set by autovac only */
|
|
57
63
|
#define PROC_IN_LOGICAL_DECODING 0x10 /* currently doing logical
|
|
58
64
|
* decoding outside xact */
|
|
59
|
-
#define
|
|
65
|
+
#define PROC_AFFECTS_ALL_HORIZONS 0x20 /* this proc's xmin must be
|
|
66
|
+
* included in vacuum horizons
|
|
67
|
+
* in all databases */
|
|
60
68
|
|
|
61
69
|
/* flags reset at EOXact */
|
|
62
70
|
#define PROC_VACUUM_STATE_MASK \
|
|
63
|
-
(PROC_IN_VACUUM |
|
|
71
|
+
(PROC_IN_VACUUM | PROC_IN_SAFE_IC | PROC_VACUUM_FOR_WRAPAROUND)
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* Xmin-related flags. Make sure any flags that affect how the process' Xmin
|
|
75
|
+
* value is interpreted by VACUUM are included here.
|
|
76
|
+
*/
|
|
77
|
+
#define PROC_XMIN_FLAGS (PROC_IN_VACUUM | PROC_IN_SAFE_IC)
|
|
64
78
|
|
|
65
79
|
/*
|
|
66
80
|
* We allow a small number of "weak" relation locks (AccessShareLock,
|
|
@@ -76,6 +90,48 @@ struct XidCache
|
|
|
76
90
|
*/
|
|
77
91
|
#define INVALID_PGPROCNO PG_INT32_MAX
|
|
78
92
|
|
|
93
|
+
/*
|
|
94
|
+
* Flags for PGPROC.delayChkptFlags
|
|
95
|
+
*
|
|
96
|
+
* These flags can be used to delay the start or completion of a checkpoint
|
|
97
|
+
* for short periods. A flag is in effect if the corresponding bit is set in
|
|
98
|
+
* the PGPROC of any backend.
|
|
99
|
+
*
|
|
100
|
+
* For our purposes here, a checkpoint has three phases: (1) determine the
|
|
101
|
+
* location to which the redo pointer will be moved, (2) write all the
|
|
102
|
+
* data durably to disk, and (3) WAL-log the checkpoint.
|
|
103
|
+
*
|
|
104
|
+
* Setting DELAY_CHKPT_START prevents the system from moving from phase 1
|
|
105
|
+
* to phase 2. This is useful when we are performing a WAL-logged modification
|
|
106
|
+
* of data that will be flushed to disk in phase 2. By setting this flag
|
|
107
|
+
* before writing WAL and clearing it after we've both written WAL and
|
|
108
|
+
* performed the corresponding modification, we ensure that if the WAL record
|
|
109
|
+
* is inserted prior to the new redo point, the corresponding data changes will
|
|
110
|
+
* also be flushed to disk before the checkpoint can complete. (In the
|
|
111
|
+
* extremely common case where the data being modified is in shared buffers
|
|
112
|
+
* and we acquire an exclusive content lock on the relevant buffers before
|
|
113
|
+
* writing WAL, this mechanism is not needed, because phase 2 will block
|
|
114
|
+
* until we release the content lock and then flush the modified data to
|
|
115
|
+
* disk.)
|
|
116
|
+
*
|
|
117
|
+
* Setting DELAY_CHKPT_COMPLETE prevents the system from moving from phase 2
|
|
118
|
+
* to phase 3. This is useful if we are performing a WAL-logged operation that
|
|
119
|
+
* might invalidate buffers, such as relation truncation. In this case, we need
|
|
120
|
+
* to ensure that any buffers which were invalidated and thus not flushed by
|
|
121
|
+
* the checkpoint are actually destroyed on disk. Replay can cope with a file
|
|
122
|
+
* or block that doesn't exist, but not with a block that has the wrong
|
|
123
|
+
* contents.
|
|
124
|
+
*/
|
|
125
|
+
#define DELAY_CHKPT_START (1<<0)
|
|
126
|
+
#define DELAY_CHKPT_COMPLETE (1<<1)
|
|
127
|
+
|
|
128
|
+
typedef enum
|
|
129
|
+
{
|
|
130
|
+
PROC_WAIT_STATUS_OK,
|
|
131
|
+
PROC_WAIT_STATUS_WAITING,
|
|
132
|
+
PROC_WAIT_STATUS_ERROR,
|
|
133
|
+
} ProcWaitStatus;
|
|
134
|
+
|
|
79
135
|
/*
|
|
80
136
|
* Each backend has a PGPROC struct in shared memory. There is also a list of
|
|
81
137
|
* currently-unused PGPROC structs that will be reallocated to new backends.
|
|
@@ -91,23 +147,57 @@ struct XidCache
|
|
|
91
147
|
* distinguished from a real one at need by the fact that it has pid == 0.
|
|
92
148
|
* The semaphore and lock-activity fields in a prepared-xact PGPROC are unused,
|
|
93
149
|
* but its myProcLocks[] lists are valid.
|
|
150
|
+
*
|
|
151
|
+
* We allow many fields of this struct to be accessed without locks, such as
|
|
152
|
+
* delayChkptFlags and isBackgroundWorker. However, keep in mind that writing
|
|
153
|
+
* mirrored ones (see below) requires holding ProcArrayLock or XidGenLock in
|
|
154
|
+
* at least shared mode, so that pgxactoff does not change concurrently.
|
|
155
|
+
*
|
|
156
|
+
* Mirrored fields:
|
|
157
|
+
*
|
|
158
|
+
* Some fields in PGPROC (see "mirrored in ..." comment) are mirrored into an
|
|
159
|
+
* element of more densely packed ProcGlobal arrays. These arrays are indexed
|
|
160
|
+
* by PGPROC->pgxactoff. Both copies need to be maintained coherently.
|
|
161
|
+
*
|
|
162
|
+
* NB: The pgxactoff indexed value can *never* be accessed without holding
|
|
163
|
+
* locks.
|
|
164
|
+
*
|
|
165
|
+
* See PROC_HDR for details.
|
|
94
166
|
*/
|
|
95
167
|
struct PGPROC
|
|
96
168
|
{
|
|
97
169
|
/* proc->links MUST BE FIRST IN STRUCT (see ProcSleep,ProcWakeup,etc) */
|
|
98
|
-
|
|
99
|
-
|
|
170
|
+
dlist_node links; /* list link if process is in a list */
|
|
171
|
+
dlist_head *procgloballist; /* procglobal list that owns this PGPROC */
|
|
100
172
|
|
|
101
173
|
PGSemaphore sem; /* ONE semaphore to sleep on */
|
|
102
|
-
|
|
174
|
+
ProcWaitStatus waitStatus;
|
|
103
175
|
|
|
104
176
|
Latch procLatch; /* generic latch for process */
|
|
105
177
|
|
|
178
|
+
|
|
179
|
+
TransactionId xid; /* id of top-level transaction currently being
|
|
180
|
+
* executed by this proc, if running and XID
|
|
181
|
+
* is assigned; else InvalidTransactionId.
|
|
182
|
+
* mirrored in ProcGlobal->xids[pgxactoff] */
|
|
183
|
+
|
|
184
|
+
TransactionId xmin; /* minimal running XID as it was when we were
|
|
185
|
+
* starting our xact, excluding LAZY VACUUM:
|
|
186
|
+
* vacuum must not remove tuples deleted by
|
|
187
|
+
* xid >= xmin ! */
|
|
188
|
+
|
|
106
189
|
LocalTransactionId lxid; /* local id of top-level transaction currently
|
|
107
190
|
* being executed by this proc, if running;
|
|
108
191
|
* else InvalidLocalTransactionId */
|
|
109
192
|
int pid; /* Backend's process ID; 0 if prepared xact */
|
|
110
|
-
|
|
193
|
+
|
|
194
|
+
int pgxactoff; /* offset into various ProcGlobal->arrays with
|
|
195
|
+
* data mirrored from this PGPROC */
|
|
196
|
+
|
|
197
|
+
int pgprocno; /* Number of this PGPROC in
|
|
198
|
+
* ProcGlobal->allProcs array. This is set
|
|
199
|
+
* once by InitProcGlobal().
|
|
200
|
+
* ProcGlobal->allProcs[n].pgprocno == n */
|
|
111
201
|
|
|
112
202
|
/* These fields are zero while a backend is still starting up: */
|
|
113
203
|
BackendId backendId; /* This backend's backend ID (if assigned) */
|
|
@@ -127,7 +217,7 @@ struct PGPROC
|
|
|
127
217
|
bool recoveryConflictPending;
|
|
128
218
|
|
|
129
219
|
/* Info about LWLock the process is currently waiting for, if any. */
|
|
130
|
-
|
|
220
|
+
uint8 lwWaiting; /* see LWLockWaitState */
|
|
131
221
|
uint8 lwWaitMode; /* lwlock mode being waited for */
|
|
132
222
|
proclist_node lwWaitLink; /* position in LW lock wait list */
|
|
133
223
|
|
|
@@ -141,8 +231,14 @@ struct PGPROC
|
|
|
141
231
|
LOCKMODE waitLockMode; /* type of lock we're waiting for */
|
|
142
232
|
LOCKMASK heldLocks; /* bitmask for lock types already held on this
|
|
143
233
|
* lock object by this backend */
|
|
234
|
+
pg_atomic_uint64 waitStart; /* time at which wait for lock acquisition
|
|
235
|
+
* started */
|
|
236
|
+
|
|
237
|
+
int delayChkptFlags; /* for DELAY_CHKPT_* flags */
|
|
144
238
|
|
|
145
|
-
|
|
239
|
+
uint8 statusFlags; /* this backend's status flags, see PROC_*
|
|
240
|
+
* above. mirrored in
|
|
241
|
+
* ProcGlobal->statusFlags[pgxactoff] */
|
|
146
242
|
|
|
147
243
|
/*
|
|
148
244
|
* Info to allow us to wait for synchronous replication, if needed.
|
|
@@ -152,15 +248,17 @@ struct PGPROC
|
|
|
152
248
|
*/
|
|
153
249
|
XLogRecPtr waitLSN; /* waiting for this LSN or higher */
|
|
154
250
|
int syncRepState; /* wait state for sync rep */
|
|
155
|
-
|
|
251
|
+
dlist_node syncRepLinks; /* list link if process is in syncrep queue */
|
|
156
252
|
|
|
157
253
|
/*
|
|
158
254
|
* All PROCLOCK objects for locks held or awaited by this backend are
|
|
159
255
|
* linked into one of these lists, according to the partition number of
|
|
160
256
|
* their lock.
|
|
161
257
|
*/
|
|
162
|
-
|
|
258
|
+
dlist_head myProcLocks[NUM_LOCK_PARTITIONS];
|
|
163
259
|
|
|
260
|
+
XidCacheStatus subxidStatus; /* mirrored with
|
|
261
|
+
* ProcGlobal->subxidStates[i] */
|
|
164
262
|
struct XidCache subxids; /* cache for subtransaction XIDs */
|
|
165
263
|
|
|
166
264
|
/* Support for group XID clearing. */
|
|
@@ -209,52 +307,91 @@ struct PGPROC
|
|
|
209
307
|
|
|
210
308
|
|
|
211
309
|
extern PGDLLIMPORT PGPROC *MyProc;
|
|
212
|
-
extern PGDLLIMPORT struct PGXACT *MyPgXact;
|
|
213
|
-
|
|
214
|
-
/*
|
|
215
|
-
* Prior to PostgreSQL 9.2, the fields below were stored as part of the
|
|
216
|
-
* PGPROC. However, benchmarking revealed that packing these particular
|
|
217
|
-
* members into a separate array as tightly as possible sped up GetSnapshotData
|
|
218
|
-
* considerably on systems with many CPU cores, by reducing the number of
|
|
219
|
-
* cache lines needing to be fetched. Thus, think very carefully before adding
|
|
220
|
-
* anything else here.
|
|
221
|
-
*/
|
|
222
|
-
typedef struct PGXACT
|
|
223
|
-
{
|
|
224
|
-
TransactionId xid; /* id of top-level transaction currently being
|
|
225
|
-
* executed by this proc, if running and XID
|
|
226
|
-
* is assigned; else InvalidTransactionId */
|
|
227
|
-
|
|
228
|
-
TransactionId xmin; /* minimal running XID as it was when we were
|
|
229
|
-
* starting our xact, excluding LAZY VACUUM:
|
|
230
|
-
* vacuum must not remove tuples deleted by
|
|
231
|
-
* xid >= xmin ! */
|
|
232
|
-
|
|
233
|
-
uint8 vacuumFlags; /* vacuum-related flags, see above */
|
|
234
|
-
bool overflowed;
|
|
235
|
-
|
|
236
|
-
uint8 nxids;
|
|
237
|
-
} PGXACT;
|
|
238
310
|
|
|
239
311
|
/*
|
|
240
312
|
* There is one ProcGlobal struct for the whole database cluster.
|
|
313
|
+
*
|
|
314
|
+
* Adding/Removing an entry into the procarray requires holding *both*
|
|
315
|
+
* ProcArrayLock and XidGenLock in exclusive mode (in that order). Both are
|
|
316
|
+
* needed because the dense arrays (see below) are accessed from
|
|
317
|
+
* GetNewTransactionId() and GetSnapshotData(), and we don't want to add
|
|
318
|
+
* further contention by both using the same lock. Adding/Removing a procarray
|
|
319
|
+
* entry is much less frequent.
|
|
320
|
+
*
|
|
321
|
+
* Some fields in PGPROC are mirrored into more densely packed arrays (e.g.
|
|
322
|
+
* xids), with one entry for each backend. These arrays only contain entries
|
|
323
|
+
* for PGPROCs that have been added to the shared array with ProcArrayAdd()
|
|
324
|
+
* (in contrast to PGPROC array which has unused PGPROCs interspersed).
|
|
325
|
+
*
|
|
326
|
+
* The dense arrays are indexed by PGPROC->pgxactoff. Any concurrent
|
|
327
|
+
* ProcArrayAdd() / ProcArrayRemove() can lead to pgxactoff of a procarray
|
|
328
|
+
* member to change. Therefore it is only safe to use PGPROC->pgxactoff to
|
|
329
|
+
* access the dense array while holding either ProcArrayLock or XidGenLock.
|
|
330
|
+
*
|
|
331
|
+
* As long as a PGPROC is in the procarray, the mirrored values need to be
|
|
332
|
+
* maintained in both places in a coherent manner.
|
|
333
|
+
*
|
|
334
|
+
* The denser separate arrays are beneficial for three main reasons: First, to
|
|
335
|
+
* allow for as tight loops accessing the data as possible. Second, to prevent
|
|
336
|
+
* updates of frequently changing data (e.g. xmin) from invalidating
|
|
337
|
+
* cachelines also containing less frequently changing data (e.g. xid,
|
|
338
|
+
* statusFlags). Third to condense frequently accessed data into as few
|
|
339
|
+
* cachelines as possible.
|
|
340
|
+
*
|
|
341
|
+
* There are two main reasons to have the data mirrored between these dense
|
|
342
|
+
* arrays and PGPROC. First, as explained above, a PGPROC's array entries can
|
|
343
|
+
* only be accessed with either ProcArrayLock or XidGenLock held, whereas the
|
|
344
|
+
* PGPROC entries do not require that (obviously there may still be locking
|
|
345
|
+
* requirements around the individual field, separate from the concerns
|
|
346
|
+
* here). That is particularly important for a backend to efficiently checks
|
|
347
|
+
* it own values, which it often can safely do without locking. Second, the
|
|
348
|
+
* PGPROC fields allow to avoid unnecessary accesses and modification to the
|
|
349
|
+
* dense arrays. A backend's own PGPROC is more likely to be in a local cache,
|
|
350
|
+
* whereas the cachelines for the dense array will be modified by other
|
|
351
|
+
* backends (often removing it from the cache for other cores/sockets). At
|
|
352
|
+
* commit/abort time a check of the PGPROC value can avoid accessing/dirtying
|
|
353
|
+
* the corresponding array value.
|
|
354
|
+
*
|
|
355
|
+
* Basically it makes sense to access the PGPROC variable when checking a
|
|
356
|
+
* single backend's data, especially when already looking at the PGPROC for
|
|
357
|
+
* other reasons already. It makes sense to look at the "dense" arrays if we
|
|
358
|
+
* need to look at many / most entries, because we then benefit from the
|
|
359
|
+
* reduced indirection and better cross-process cache-ability.
|
|
360
|
+
*
|
|
361
|
+
* When entering a PGPROC for 2PC transactions with ProcArrayAdd(), the data
|
|
362
|
+
* in the dense arrays is initialized from the PGPROC while it already holds
|
|
363
|
+
* ProcArrayLock.
|
|
241
364
|
*/
|
|
242
365
|
typedef struct PROC_HDR
|
|
243
366
|
{
|
|
244
367
|
/* Array of PGPROC structures (not including dummies for prepared txns) */
|
|
245
368
|
PGPROC *allProcs;
|
|
246
|
-
|
|
247
|
-
|
|
369
|
+
|
|
370
|
+
/* Array mirroring PGPROC.xid for each PGPROC currently in the procarray */
|
|
371
|
+
TransactionId *xids;
|
|
372
|
+
|
|
373
|
+
/*
|
|
374
|
+
* Array mirroring PGPROC.subxidStatus for each PGPROC currently in the
|
|
375
|
+
* procarray.
|
|
376
|
+
*/
|
|
377
|
+
XidCacheStatus *subxidStates;
|
|
378
|
+
|
|
379
|
+
/*
|
|
380
|
+
* Array mirroring PGPROC.statusFlags for each PGPROC currently in the
|
|
381
|
+
* procarray.
|
|
382
|
+
*/
|
|
383
|
+
uint8 *statusFlags;
|
|
384
|
+
|
|
248
385
|
/* Length of allProcs array */
|
|
249
386
|
uint32 allProcCount;
|
|
250
387
|
/* Head of list of free PGPROC structures */
|
|
251
|
-
|
|
388
|
+
dlist_head freeProcs;
|
|
252
389
|
/* Head of list of autovacuum's free PGPROC structures */
|
|
253
|
-
|
|
390
|
+
dlist_head autovacFreeProcs;
|
|
254
391
|
/* Head of list of bgworker free PGPROC structures */
|
|
255
|
-
|
|
392
|
+
dlist_head bgworkerFreeProcs;
|
|
256
393
|
/* Head of list of walsender free PGPROC structures */
|
|
257
|
-
|
|
394
|
+
dlist_head walsenderFreeProcs;
|
|
258
395
|
/* First pgproc waiting for group XID clear */
|
|
259
396
|
pg_atomic_uint32 procArrayGroupFirst;
|
|
260
397
|
/* First pgproc waiting for group transaction status update */
|
|
@@ -265,16 +402,13 @@ typedef struct PROC_HDR
|
|
|
265
402
|
Latch *checkpointerLatch;
|
|
266
403
|
/* Current shared estimate of appropriate spins_per_delay value */
|
|
267
404
|
int spins_per_delay;
|
|
268
|
-
/* The proc of the Startup process, since not in ProcArray */
|
|
269
|
-
PGPROC *startupProc;
|
|
270
|
-
int startupProcPid;
|
|
271
405
|
/* Buffer id of the buffer that Startup process waits for pin on, or -1 */
|
|
272
406
|
int startupBufferPinWaitBufId;
|
|
273
407
|
} PROC_HDR;
|
|
274
408
|
|
|
275
409
|
extern PGDLLIMPORT PROC_HDR *ProcGlobal;
|
|
276
410
|
|
|
277
|
-
extern PGPROC *PreparedXactProcs;
|
|
411
|
+
extern PGDLLIMPORT PGPROC *PreparedXactProcs;
|
|
278
412
|
|
|
279
413
|
/* Accessor for PGPROC given a pgprocno. */
|
|
280
414
|
#define GetPGProcByNumber(n) (&ProcGlobal->allProcs[(n)])
|
|
@@ -283,18 +417,19 @@ extern PGPROC *PreparedXactProcs;
|
|
|
283
417
|
* We set aside some extra PGPROC structures for auxiliary processes,
|
|
284
418
|
* ie things that aren't full-fledged backends but need shmem access.
|
|
285
419
|
*
|
|
286
|
-
* Background writer, checkpointer
|
|
287
|
-
* Startup process and WAL receiver also consume 2 slots, but WAL
|
|
288
|
-
* launched only after startup has exited, so we only need
|
|
420
|
+
* Background writer, checkpointer, WAL writer and archiver run during normal
|
|
421
|
+
* operation. Startup process and WAL receiver also consume 2 slots, but WAL
|
|
422
|
+
* writer is launched only after startup has exited, so we only need 5 slots.
|
|
289
423
|
*/
|
|
290
|
-
#define NUM_AUXILIARY_PROCS
|
|
424
|
+
#define NUM_AUXILIARY_PROCS 5
|
|
291
425
|
|
|
292
426
|
/* configurable options */
|
|
293
427
|
extern PGDLLIMPORT int DeadlockTimeout;
|
|
294
428
|
extern PGDLLIMPORT int StatementTimeout;
|
|
295
429
|
extern PGDLLIMPORT int LockTimeout;
|
|
296
430
|
extern PGDLLIMPORT int IdleInTransactionSessionTimeout;
|
|
297
|
-
extern
|
|
431
|
+
extern PGDLLIMPORT int IdleSessionTimeout;
|
|
432
|
+
extern PGDLLIMPORT bool log_lock_waits;
|
|
298
433
|
|
|
299
434
|
|
|
300
435
|
/*
|
|
@@ -307,23 +442,21 @@ extern void InitProcess(void);
|
|
|
307
442
|
extern void InitProcessPhase2(void);
|
|
308
443
|
extern void InitAuxiliaryProcess(void);
|
|
309
444
|
|
|
310
|
-
extern void PublishStartupProcessInformation(void);
|
|
311
445
|
extern void SetStartupBufferPinWaitBufId(int bufid);
|
|
312
446
|
extern int GetStartupBufferPinWaitBufId(void);
|
|
313
447
|
|
|
314
|
-
extern bool HaveNFreeProcs(int n);
|
|
448
|
+
extern bool HaveNFreeProcs(int n, int *nfree);
|
|
315
449
|
extern void ProcReleaseLocks(bool isCommit);
|
|
316
450
|
|
|
317
|
-
extern
|
|
318
|
-
extern
|
|
319
|
-
extern PGPROC *ProcWakeup(PGPROC *proc, int waitStatus);
|
|
451
|
+
extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable);
|
|
452
|
+
extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
|
|
320
453
|
extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock);
|
|
321
454
|
extern void CheckDeadLockAlert(void);
|
|
322
455
|
extern bool IsWaitingForLock(void);
|
|
323
456
|
extern void LockErrorCleanup(void);
|
|
324
457
|
|
|
325
458
|
extern void ProcWaitForSignal(uint32 wait_event_info);
|
|
326
|
-
extern void ProcSendSignal(int
|
|
459
|
+
extern void ProcSendSignal(int pgprocno);
|
|
327
460
|
|
|
328
461
|
extern PGPROC *AuxiliaryPidGetProc(int pid);
|
|
329
462
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* procarray.h
|
|
4
|
+
* POSTGRES process array definitions.
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
|
+
*
|
|
10
|
+
* src/include/storage/procarray.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef PROCARRAY_H
|
|
15
|
+
#define PROCARRAY_H
|
|
16
|
+
|
|
17
|
+
#include "storage/lock.h"
|
|
18
|
+
#include "storage/standby.h"
|
|
19
|
+
#include "utils/relcache.h"
|
|
20
|
+
#include "utils/snapshot.h"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
extern Size ProcArrayShmemSize(void);
|
|
24
|
+
extern void CreateSharedProcArray(void);
|
|
25
|
+
extern void ProcArrayAdd(PGPROC *proc);
|
|
26
|
+
extern void ProcArrayRemove(PGPROC *proc, TransactionId latestXid);
|
|
27
|
+
|
|
28
|
+
extern void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid);
|
|
29
|
+
extern void ProcArrayClearTransaction(PGPROC *proc);
|
|
30
|
+
|
|
31
|
+
extern void ProcArrayInitRecovery(TransactionId initializedUptoXID);
|
|
32
|
+
extern void ProcArrayApplyRecoveryInfo(RunningTransactions running);
|
|
33
|
+
extern void ProcArrayApplyXidAssignment(TransactionId topxid,
|
|
34
|
+
int nsubxids, TransactionId *subxids);
|
|
35
|
+
|
|
36
|
+
extern void RecordKnownAssignedTransactionIds(TransactionId xid);
|
|
37
|
+
extern void ExpireTreeKnownAssignedTransactionIds(TransactionId xid,
|
|
38
|
+
int nsubxids, TransactionId *subxids,
|
|
39
|
+
TransactionId max_xid);
|
|
40
|
+
extern void ExpireAllKnownAssignedTransactionIds(void);
|
|
41
|
+
extern void ExpireOldKnownAssignedTransactionIds(TransactionId xid);
|
|
42
|
+
extern void KnownAssignedTransactionIdsIdleMaintenance(void);
|
|
43
|
+
|
|
44
|
+
extern int GetMaxSnapshotXidCount(void);
|
|
45
|
+
extern int GetMaxSnapshotSubxidCount(void);
|
|
46
|
+
|
|
47
|
+
extern Snapshot GetSnapshotData(Snapshot snapshot);
|
|
48
|
+
|
|
49
|
+
extern bool ProcArrayInstallImportedXmin(TransactionId xmin,
|
|
50
|
+
VirtualTransactionId *sourcevxid);
|
|
51
|
+
extern bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc);
|
|
52
|
+
|
|
53
|
+
extern RunningTransactions GetRunningTransactionData(void);
|
|
54
|
+
|
|
55
|
+
extern bool TransactionIdIsInProgress(TransactionId xid);
|
|
56
|
+
extern bool TransactionIdIsActive(TransactionId xid);
|
|
57
|
+
extern TransactionId GetOldestNonRemovableTransactionId(Relation rel);
|
|
58
|
+
extern TransactionId GetOldestTransactionIdConsideredRunning(void);
|
|
59
|
+
extern TransactionId GetOldestActiveTransactionId(void);
|
|
60
|
+
extern TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly);
|
|
61
|
+
extern void GetReplicationHorizons(TransactionId *xmin, TransactionId *catalog_xmin);
|
|
62
|
+
|
|
63
|
+
extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type);
|
|
64
|
+
extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids,
|
|
65
|
+
int nvxids, int type);
|
|
66
|
+
|
|
67
|
+
extern PGPROC *BackendPidGetProc(int pid);
|
|
68
|
+
extern PGPROC *BackendPidGetProcWithLock(int pid);
|
|
69
|
+
extern int BackendXidGetPid(TransactionId xid);
|
|
70
|
+
extern bool IsBackendPid(int pid);
|
|
71
|
+
|
|
72
|
+
extern VirtualTransactionId *GetCurrentVirtualXIDs(TransactionId limitXmin,
|
|
73
|
+
bool excludeXmin0, bool allDbs, int excludeVacuum,
|
|
74
|
+
int *nvxids);
|
|
75
|
+
extern VirtualTransactionId *GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid);
|
|
76
|
+
extern pid_t CancelVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode);
|
|
77
|
+
extern pid_t SignalVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode,
|
|
78
|
+
bool conflictPending);
|
|
79
|
+
|
|
80
|
+
extern bool MinimumActiveBackends(int min);
|
|
81
|
+
extern int CountDBBackends(Oid databaseid);
|
|
82
|
+
extern int CountDBConnections(Oid databaseid);
|
|
83
|
+
extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending);
|
|
84
|
+
extern int CountUserBackends(Oid roleid);
|
|
85
|
+
extern bool CountOtherDBBackends(Oid databaseId,
|
|
86
|
+
int *nbackends, int *nprepared);
|
|
87
|
+
extern void TerminateOtherDBBackends(Oid databaseId);
|
|
88
|
+
|
|
89
|
+
extern void XidCacheRemoveRunningXids(TransactionId xid,
|
|
90
|
+
int nxids, const TransactionId *xids,
|
|
91
|
+
TransactionId latestXid);
|
|
92
|
+
|
|
93
|
+
extern void ProcArraySetReplicationSlotXmin(TransactionId xmin,
|
|
94
|
+
TransactionId catalog_xmin, bool already_locked);
|
|
95
|
+
|
|
96
|
+
extern void ProcArrayGetReplicationSlotXmin(TransactionId *xmin,
|
|
97
|
+
TransactionId *catalog_xmin);
|
|
98
|
+
|
|
99
|
+
#endif /* PROCARRAY_H */
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* See proclist.h for functions that operate on these types.
|
|
7
7
|
*
|
|
8
|
-
* Portions Copyright (c) 2016-
|
|
8
|
+
* Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
|
|
9
9
|
*
|
|
10
10
|
* IDENTIFICATION
|
|
11
11
|
* src/include/storage/proclist_types.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Routines for interprocess signaling
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/procsignal.h
|
|
@@ -34,12 +34,15 @@ typedef enum
|
|
|
34
34
|
PROCSIG_PARALLEL_MESSAGE, /* message from cooperating parallel backend */
|
|
35
35
|
PROCSIG_WALSND_INIT_STOPPING, /* ask walsenders to prepare for shutdown */
|
|
36
36
|
PROCSIG_BARRIER, /* global barrier interrupt */
|
|
37
|
+
PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */
|
|
38
|
+
PROCSIG_PARALLEL_APPLY_MESSAGE, /* Message from parallel apply workers */
|
|
37
39
|
|
|
38
40
|
/* Recovery conflict reasons */
|
|
39
41
|
PROCSIG_RECOVERY_CONFLICT_DATABASE,
|
|
40
42
|
PROCSIG_RECOVERY_CONFLICT_TABLESPACE,
|
|
41
43
|
PROCSIG_RECOVERY_CONFLICT_LOCK,
|
|
42
44
|
PROCSIG_RECOVERY_CONFLICT_SNAPSHOT,
|
|
45
|
+
PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT,
|
|
43
46
|
PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
|
|
44
47
|
PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
|
|
45
48
|
|
|
@@ -48,12 +51,7 @@ typedef enum
|
|
|
48
51
|
|
|
49
52
|
typedef enum
|
|
50
53
|
{
|
|
51
|
-
/*
|
|
52
|
-
* XXX. PROCSIGNAL_BARRIER_PLACEHOLDER should be replaced when the first
|
|
53
|
-
* real user of the ProcSignalBarrier mechanism is added. It's just here
|
|
54
|
-
* for now because we can't have an empty enum.
|
|
55
|
-
*/
|
|
56
|
-
PROCSIGNAL_BARRIER_PLACEHOLDER = 0
|
|
54
|
+
PROCSIGNAL_BARRIER_SMGRRELEASE /* ask smgr to close files */
|
|
57
55
|
} ProcSignalBarrierType;
|
|
58
56
|
|
|
59
57
|
/*
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* relfilelocator.h
|
|
4
|
+
* Physical access information for relations.
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
|
+
*
|
|
10
|
+
* src/include/storage/relfilelocator.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef RELFILELOCATOR_H
|
|
15
|
+
#define RELFILELOCATOR_H
|
|
16
|
+
|
|
17
|
+
#include "common/relpath.h"
|
|
18
|
+
#include "storage/backendid.h"
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* RelFileLocator must provide all that we need to know to physically access
|
|
22
|
+
* a relation, with the exception of the backend ID, which can be provided
|
|
23
|
+
* separately. Note, however, that a "physical" relation is comprised of
|
|
24
|
+
* multiple files on the filesystem, as each fork is stored as a separate
|
|
25
|
+
* file, and each fork can be divided into multiple segments. See md.c.
|
|
26
|
+
*
|
|
27
|
+
* spcOid identifies the tablespace of the relation. It corresponds to
|
|
28
|
+
* pg_tablespace.oid.
|
|
29
|
+
*
|
|
30
|
+
* dbOid identifies the database of the relation. It is zero for
|
|
31
|
+
* "shared" relations (those common to all databases of a cluster).
|
|
32
|
+
* Nonzero dbOid values correspond to pg_database.oid.
|
|
33
|
+
*
|
|
34
|
+
* relNumber identifies the specific relation. relNumber corresponds to
|
|
35
|
+
* pg_class.relfilenode (NOT pg_class.oid, because we need to be able
|
|
36
|
+
* to assign new physical files to relations in some situations).
|
|
37
|
+
* Notice that relNumber is only unique within a database in a particular
|
|
38
|
+
* tablespace.
|
|
39
|
+
*
|
|
40
|
+
* Note: spcOid must be GLOBALTABLESPACE_OID if and only if dbOid is
|
|
41
|
+
* zero. We support shared relations only in the "global" tablespace.
|
|
42
|
+
*
|
|
43
|
+
* Note: in pg_class we allow reltablespace == 0 to denote that the
|
|
44
|
+
* relation is stored in its database's "default" tablespace (as
|
|
45
|
+
* identified by pg_database.dattablespace). However this shorthand
|
|
46
|
+
* is NOT allowed in RelFileLocator structs --- the real tablespace ID
|
|
47
|
+
* must be supplied when setting spcOid.
|
|
48
|
+
*
|
|
49
|
+
* Note: in pg_class, relfilenode can be zero to denote that the relation
|
|
50
|
+
* is a "mapped" relation, whose current true filenode number is available
|
|
51
|
+
* from relmapper.c. Again, this case is NOT allowed in RelFileLocators.
|
|
52
|
+
*
|
|
53
|
+
* Note: various places use RelFileLocator in hashtable keys. Therefore,
|
|
54
|
+
* there *must not* be any unused padding bytes in this struct. That
|
|
55
|
+
* should be safe as long as all the fields are of type Oid.
|
|
56
|
+
*/
|
|
57
|
+
typedef struct RelFileLocator
|
|
58
|
+
{
|
|
59
|
+
Oid spcOid; /* tablespace */
|
|
60
|
+
Oid dbOid; /* database */
|
|
61
|
+
RelFileNumber relNumber; /* relation */
|
|
62
|
+
} RelFileLocator;
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Augmenting a relfilelocator with the backend ID provides all the information
|
|
66
|
+
* we need to locate the physical storage. The backend ID is InvalidBackendId
|
|
67
|
+
* for regular relations (those accessible to more than one backend), or the
|
|
68
|
+
* owning backend's ID for backend-local relations. Backend-local relations
|
|
69
|
+
* are always transient and removed in case of a database crash; they are
|
|
70
|
+
* never WAL-logged or fsync'd.
|
|
71
|
+
*/
|
|
72
|
+
typedef struct RelFileLocatorBackend
|
|
73
|
+
{
|
|
74
|
+
RelFileLocator locator;
|
|
75
|
+
BackendId backend;
|
|
76
|
+
} RelFileLocatorBackend;
|
|
77
|
+
|
|
78
|
+
#define RelFileLocatorBackendIsTemp(rlocator) \
|
|
79
|
+
((rlocator).backend != InvalidBackendId)
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* Note: RelFileLocatorEquals and RelFileLocatorBackendEquals compare relNumber
|
|
83
|
+
* first since that is most likely to be different in two unequal
|
|
84
|
+
* RelFileLocators. It is probably redundant to compare spcOid if the other
|
|
85
|
+
* fields are found equal, but do it anyway to be sure. Likewise for checking
|
|
86
|
+
* the backend ID in RelFileLocatorBackendEquals.
|
|
87
|
+
*/
|
|
88
|
+
#define RelFileLocatorEquals(locator1, locator2) \
|
|
89
|
+
((locator1).relNumber == (locator2).relNumber && \
|
|
90
|
+
(locator1).dbOid == (locator2).dbOid && \
|
|
91
|
+
(locator1).spcOid == (locator2).spcOid)
|
|
92
|
+
|
|
93
|
+
#define RelFileLocatorBackendEquals(locator1, locator2) \
|
|
94
|
+
((locator1).locator.relNumber == (locator2).locator.relNumber && \
|
|
95
|
+
(locator1).locator.dbOid == (locator2).locator.dbOid && \
|
|
96
|
+
(locator1).backend == (locator2).backend && \
|
|
97
|
+
(locator1).locator.spcOid == (locator2).locator.spcOid)
|
|
98
|
+
|
|
99
|
+
#endif /* RELFILELOCATOR_H */
|