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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* xlogreader.h
|
|
4
4
|
* Definitions for the generic XLog reading facility
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 2013-
|
|
6
|
+
* Portions Copyright (c) 2013-2023, PostgreSQL Global Development Group
|
|
7
7
|
*
|
|
8
8
|
* IDENTIFICATION
|
|
9
9
|
* src/include/access/xlogreader.h
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* XLogBeginRead() or XLogFindNextRecord(), and call XLogReadRecord()
|
|
18
18
|
* until it returns NULL.
|
|
19
19
|
*
|
|
20
|
-
* Callers supply a page_read callback if they want to
|
|
20
|
+
* Callers supply a page_read callback if they want to call
|
|
21
21
|
* XLogReadRecord or XLogFindNextRecord; it can be passed in as NULL
|
|
22
22
|
* otherwise. The WALRead function can be used as a helper to write
|
|
23
23
|
* page_read callbacks, but it is not mandatory; callers that use it,
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
#endif
|
|
40
40
|
|
|
41
41
|
#include "access/xlogrecord.h"
|
|
42
|
+
#include "storage/buf.h"
|
|
42
43
|
|
|
43
44
|
/* WALOpenSegment represents a WAL segment being read. */
|
|
44
45
|
typedef struct WALOpenSegment
|
|
@@ -121,10 +122,13 @@ typedef struct
|
|
|
121
122
|
bool in_use;
|
|
122
123
|
|
|
123
124
|
/* Identify the block this refers to */
|
|
124
|
-
|
|
125
|
+
RelFileLocator rlocator;
|
|
125
126
|
ForkNumber forknum;
|
|
126
127
|
BlockNumber blkno;
|
|
127
128
|
|
|
129
|
+
/* Prefetching workspace. */
|
|
130
|
+
Buffer prefetch_buffer;
|
|
131
|
+
|
|
128
132
|
/* copy of the fork_flags field from the XLogRecordBlockHeader */
|
|
129
133
|
uint8 flags;
|
|
130
134
|
|
|
@@ -144,6 +148,30 @@ typedef struct
|
|
|
144
148
|
uint16 data_bufsz;
|
|
145
149
|
} DecodedBkpBlock;
|
|
146
150
|
|
|
151
|
+
/*
|
|
152
|
+
* The decoded contents of a record. This occupies a contiguous region of
|
|
153
|
+
* memory, with main_data and blocks[n].data pointing to memory after the
|
|
154
|
+
* members declared here.
|
|
155
|
+
*/
|
|
156
|
+
typedef struct DecodedXLogRecord
|
|
157
|
+
{
|
|
158
|
+
/* Private member used for resource management. */
|
|
159
|
+
size_t size; /* total size of decoded record */
|
|
160
|
+
bool oversized; /* outside the regular decode buffer? */
|
|
161
|
+
struct DecodedXLogRecord *next; /* decoded record queue link */
|
|
162
|
+
|
|
163
|
+
/* Public members. */
|
|
164
|
+
XLogRecPtr lsn; /* location */
|
|
165
|
+
XLogRecPtr next_lsn; /* location of next record */
|
|
166
|
+
XLogRecord header; /* header */
|
|
167
|
+
RepOriginId record_origin;
|
|
168
|
+
TransactionId toplevel_xid; /* XID of top-level transaction */
|
|
169
|
+
char *main_data; /* record's main data portion */
|
|
170
|
+
uint32 main_data_len; /* main data portion's length */
|
|
171
|
+
int max_block_id; /* highest block_id in use (-1 if none) */
|
|
172
|
+
DecodedBkpBlock blocks[FLEXIBLE_ARRAY_MEMBER];
|
|
173
|
+
} DecodedXLogRecord;
|
|
174
|
+
|
|
147
175
|
struct XLogReaderState
|
|
148
176
|
{
|
|
149
177
|
/*
|
|
@@ -171,10 +199,23 @@ struct XLogReaderState
|
|
|
171
199
|
* Start and end point of last record read. EndRecPtr is also used as the
|
|
172
200
|
* position to read next. Calling XLogBeginRead() sets EndRecPtr to the
|
|
173
201
|
* starting position and ReadRecPtr to invalid.
|
|
202
|
+
*
|
|
203
|
+
* Start and end point of last record returned by XLogReadRecord(). These
|
|
204
|
+
* are also available as record->lsn and record->next_lsn.
|
|
174
205
|
*/
|
|
175
206
|
XLogRecPtr ReadRecPtr; /* start of last record read */
|
|
176
207
|
XLogRecPtr EndRecPtr; /* end+1 of last record read */
|
|
177
208
|
|
|
209
|
+
/*
|
|
210
|
+
* Set at the end of recovery: the start point of a partial record at the
|
|
211
|
+
* end of WAL (InvalidXLogRecPtr if there wasn't one), and the start
|
|
212
|
+
* location of its first contrecord that went missing.
|
|
213
|
+
*/
|
|
214
|
+
XLogRecPtr abortedRecPtr;
|
|
215
|
+
XLogRecPtr missingContrecPtr;
|
|
216
|
+
/* Set when XLP_FIRST_IS_OVERWRITE_CONTRECORD is found */
|
|
217
|
+
XLogRecPtr overwrittenRecPtr;
|
|
218
|
+
|
|
178
219
|
|
|
179
220
|
/* ----------------------------------------
|
|
180
221
|
* Decoded representation of current record
|
|
@@ -182,25 +223,43 @@ struct XLogReaderState
|
|
|
182
223
|
* Use XLogRecGet* functions to investigate the record; these fields
|
|
183
224
|
* should not be accessed directly.
|
|
184
225
|
* ----------------------------------------
|
|
226
|
+
* Start and end point of the last record read and decoded by
|
|
227
|
+
* XLogReadRecordInternal(). NextRecPtr is also used as the position to
|
|
228
|
+
* decode next. Calling XLogBeginRead() sets NextRecPtr and EndRecPtr to
|
|
229
|
+
* the requested starting position.
|
|
185
230
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
uint32 main_data_len; /* main data portion's length */
|
|
190
|
-
uint32 main_data_bufsz; /* allocated size of the buffer */
|
|
231
|
+
XLogRecPtr DecodeRecPtr; /* start of last record decoded */
|
|
232
|
+
XLogRecPtr NextRecPtr; /* end+1 of last record decoded */
|
|
233
|
+
XLogRecPtr PrevRecPtr; /* start of previous record decoded */
|
|
191
234
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
/* information about blocks referenced by the record. */
|
|
195
|
-
DecodedBkpBlock blocks[XLR_MAX_BLOCK_ID + 1];
|
|
196
|
-
|
|
197
|
-
int max_block_id; /* highest block_id in use (-1 if none) */
|
|
235
|
+
/* Last record returned by XLogReadRecord(). */
|
|
236
|
+
DecodedXLogRecord *record;
|
|
198
237
|
|
|
199
238
|
/* ----------------------------------------
|
|
200
239
|
* private/internal state
|
|
201
240
|
* ----------------------------------------
|
|
202
241
|
*/
|
|
203
242
|
|
|
243
|
+
/*
|
|
244
|
+
* Buffer for decoded records. This is a circular buffer, though
|
|
245
|
+
* individual records can't be split in the middle, so some space is often
|
|
246
|
+
* wasted at the end. Oversized records that don't fit in this space are
|
|
247
|
+
* allocated separately.
|
|
248
|
+
*/
|
|
249
|
+
char *decode_buffer;
|
|
250
|
+
size_t decode_buffer_size;
|
|
251
|
+
bool free_decode_buffer; /* need to free? */
|
|
252
|
+
char *decode_buffer_head; /* data is read from the head */
|
|
253
|
+
char *decode_buffer_tail; /* new data is written at the tail */
|
|
254
|
+
|
|
255
|
+
/*
|
|
256
|
+
* Queue of records that have been decoded. This is a linked list that
|
|
257
|
+
* usually consists of consecutive records in decode_buffer, but may also
|
|
258
|
+
* contain oversized records allocated with palloc().
|
|
259
|
+
*/
|
|
260
|
+
DecodedXLogRecord *decode_queue_head; /* oldest decoded record */
|
|
261
|
+
DecodedXLogRecord *decode_queue_tail; /* newest decoded record */
|
|
262
|
+
|
|
204
263
|
/*
|
|
205
264
|
* Buffer for currently read page (XLOG_BLCKSZ bytes, valid up to at least
|
|
206
265
|
* readLen bytes)
|
|
@@ -250,32 +309,72 @@ struct XLogReaderState
|
|
|
250
309
|
|
|
251
310
|
/* Buffer to hold error message */
|
|
252
311
|
char *errormsg_buf;
|
|
312
|
+
bool errormsg_deferred;
|
|
313
|
+
|
|
314
|
+
/*
|
|
315
|
+
* Flag to indicate to XLogPageReadCB that it should not block waiting for
|
|
316
|
+
* data.
|
|
317
|
+
*/
|
|
318
|
+
bool nonblocking;
|
|
253
319
|
};
|
|
254
320
|
|
|
321
|
+
/*
|
|
322
|
+
* Check if XLogNextRecord() has any more queued records or an error to return.
|
|
323
|
+
*/
|
|
324
|
+
static inline bool
|
|
325
|
+
XLogReaderHasQueuedRecordOrError(XLogReaderState *state)
|
|
326
|
+
{
|
|
327
|
+
return (state->decode_queue_head != NULL) || state->errormsg_deferred;
|
|
328
|
+
}
|
|
329
|
+
|
|
255
330
|
/* Get a new XLogReader */
|
|
256
331
|
extern XLogReaderState *XLogReaderAllocate(int wal_segment_size,
|
|
257
332
|
const char *waldir,
|
|
258
333
|
XLogReaderRoutine *routine,
|
|
259
334
|
void *private_data);
|
|
260
|
-
extern XLogReaderRoutine *LocalXLogReaderRoutine(void);
|
|
261
335
|
|
|
262
336
|
/* Free an XLogReader */
|
|
263
337
|
extern void XLogReaderFree(XLogReaderState *state);
|
|
264
338
|
|
|
339
|
+
/* Optionally provide a circular decoding buffer to allow readahead. */
|
|
340
|
+
extern void XLogReaderSetDecodeBuffer(XLogReaderState *state,
|
|
341
|
+
void *buffer,
|
|
342
|
+
size_t size);
|
|
343
|
+
|
|
265
344
|
/* Position the XLogReader to given record */
|
|
266
345
|
extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr);
|
|
267
|
-
#ifdef FRONTEND
|
|
268
346
|
extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr);
|
|
269
|
-
|
|
347
|
+
|
|
348
|
+
/* Return values from XLogPageReadCB. */
|
|
349
|
+
typedef enum XLogPageReadResult
|
|
350
|
+
{
|
|
351
|
+
XLREAD_SUCCESS = 0, /* record is successfully read */
|
|
352
|
+
XLREAD_FAIL = -1, /* failed during reading a record */
|
|
353
|
+
XLREAD_WOULDBLOCK = -2 /* nonblocking mode only, no data */
|
|
354
|
+
} XLogPageReadResult;
|
|
270
355
|
|
|
271
356
|
/* Read the next XLog record. Returns NULL on end-of-WAL or failure */
|
|
272
357
|
extern struct XLogRecord *XLogReadRecord(XLogReaderState *state,
|
|
273
358
|
char **errormsg);
|
|
274
359
|
|
|
360
|
+
/* Consume the next record or error. */
|
|
361
|
+
extern DecodedXLogRecord *XLogNextRecord(XLogReaderState *state,
|
|
362
|
+
char **errormsg);
|
|
363
|
+
|
|
364
|
+
/* Release the previously returned record, if necessary. */
|
|
365
|
+
extern XLogRecPtr XLogReleasePreviousRecord(XLogReaderState *state);
|
|
366
|
+
|
|
367
|
+
/* Try to read ahead, if there is data and space. */
|
|
368
|
+
extern DecodedXLogRecord *XLogReadAhead(XLogReaderState *state,
|
|
369
|
+
bool nonblocking);
|
|
370
|
+
|
|
275
371
|
/* Validate a page */
|
|
276
372
|
extern bool XLogReaderValidatePageHeader(XLogReaderState *state,
|
|
277
373
|
XLogRecPtr recptr, char *phdr);
|
|
278
374
|
|
|
375
|
+
/* Forget error produced by XLogReaderValidatePageHeader(). */
|
|
376
|
+
extern void XLogReaderResetError(XLogReaderState *state);
|
|
377
|
+
|
|
279
378
|
/*
|
|
280
379
|
* Error information from WALRead that both backend and frontend caller can
|
|
281
380
|
* process. Currently only errors from pg_pread can be reported.
|
|
@@ -295,24 +394,38 @@ extern bool WALRead(XLogReaderState *state,
|
|
|
295
394
|
|
|
296
395
|
/* Functions for decoding an XLogRecord */
|
|
297
396
|
|
|
298
|
-
extern
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
#define
|
|
310
|
-
#define
|
|
311
|
-
|
|
312
|
-
#define
|
|
313
|
-
|
|
314
|
-
#define
|
|
315
|
-
|
|
397
|
+
extern size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len);
|
|
398
|
+
extern bool DecodeXLogRecord(XLogReaderState *state,
|
|
399
|
+
DecodedXLogRecord *decoded,
|
|
400
|
+
XLogRecord *record,
|
|
401
|
+
XLogRecPtr lsn,
|
|
402
|
+
char **errormsg);
|
|
403
|
+
|
|
404
|
+
/*
|
|
405
|
+
* Macros that provide access to parts of the record most recently returned by
|
|
406
|
+
* XLogReadRecord() or XLogNextRecord().
|
|
407
|
+
*/
|
|
408
|
+
#define XLogRecGetTotalLen(decoder) ((decoder)->record->header.xl_tot_len)
|
|
409
|
+
#define XLogRecGetPrev(decoder) ((decoder)->record->header.xl_prev)
|
|
410
|
+
#define XLogRecGetInfo(decoder) ((decoder)->record->header.xl_info)
|
|
411
|
+
#define XLogRecGetRmid(decoder) ((decoder)->record->header.xl_rmid)
|
|
412
|
+
#define XLogRecGetXid(decoder) ((decoder)->record->header.xl_xid)
|
|
413
|
+
#define XLogRecGetOrigin(decoder) ((decoder)->record->record_origin)
|
|
414
|
+
#define XLogRecGetTopXid(decoder) ((decoder)->record->toplevel_xid)
|
|
415
|
+
#define XLogRecGetData(decoder) ((decoder)->record->main_data)
|
|
416
|
+
#define XLogRecGetDataLen(decoder) ((decoder)->record->main_data_len)
|
|
417
|
+
#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->record->max_block_id >= 0)
|
|
418
|
+
#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id)
|
|
419
|
+
#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)])
|
|
420
|
+
#define XLogRecHasBlockRef(decoder, block_id) \
|
|
421
|
+
(((decoder)->record->max_block_id >= (block_id)) && \
|
|
422
|
+
((decoder)->record->blocks[block_id].in_use))
|
|
423
|
+
#define XLogRecHasBlockImage(decoder, block_id) \
|
|
424
|
+
((decoder)->record->blocks[block_id].has_image)
|
|
425
|
+
#define XLogRecBlockImageApply(decoder, block_id) \
|
|
426
|
+
((decoder)->record->blocks[block_id].apply_image)
|
|
427
|
+
#define XLogRecHasBlockData(decoder, block_id) \
|
|
428
|
+
((decoder)->record->blocks[block_id].has_data)
|
|
316
429
|
|
|
317
430
|
#ifndef FRONTEND
|
|
318
431
|
extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record);
|
|
@@ -320,8 +433,12 @@ extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record);
|
|
|
320
433
|
|
|
321
434
|
extern bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page);
|
|
322
435
|
extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len);
|
|
323
|
-
extern
|
|
324
|
-
|
|
436
|
+
extern void XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id,
|
|
437
|
+
RelFileLocator *rlocator, ForkNumber *forknum,
|
|
325
438
|
BlockNumber *blknum);
|
|
439
|
+
extern bool XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id,
|
|
440
|
+
RelFileLocator *rlocator, ForkNumber *forknum,
|
|
441
|
+
BlockNumber *blknum,
|
|
442
|
+
Buffer *prefetch_buffer);
|
|
326
443
|
|
|
327
444
|
#endif /* XLOGREADER_H */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Definitions for the WAL record format.
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/access/xlogrecord.h
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
#include "access/xlogdefs.h"
|
|
16
16
|
#include "port/pg_crc32c.h"
|
|
17
17
|
#include "storage/block.h"
|
|
18
|
-
#include "storage/
|
|
18
|
+
#include "storage/relfilelocator.h"
|
|
19
19
|
|
|
20
20
|
/*
|
|
21
21
|
* The overall layout of an XLOG record is:
|
|
@@ -62,6 +62,17 @@ typedef struct XLogRecord
|
|
|
62
62
|
#define XLR_INFO_MASK 0x0F
|
|
63
63
|
#define XLR_RMGR_INFO_MASK 0xF0
|
|
64
64
|
|
|
65
|
+
/*
|
|
66
|
+
* XLogReader needs to allocate all the data of a WAL record in a single
|
|
67
|
+
* chunk. This means that a single XLogRecord cannot exceed MaxAllocSize
|
|
68
|
+
* in length if we ignore any allocation overhead of the XLogReader.
|
|
69
|
+
*
|
|
70
|
+
* To accommodate some overhead, this value allows for 4M of allocation
|
|
71
|
+
* overhead, that should be plenty enough for what
|
|
72
|
+
* DecodeXLogRecordRequiredSpace() expects as extra.
|
|
73
|
+
*/
|
|
74
|
+
#define XLogRecordMaxSize (1020 * 1024 * 1024)
|
|
75
|
+
|
|
65
76
|
/*
|
|
66
77
|
* If a WAL record modifies any relation files, in ways not covered by the
|
|
67
78
|
* usual block references, this flag is set. This is not used for anything
|
|
@@ -97,7 +108,7 @@ typedef struct XLogRecordBlockHeader
|
|
|
97
108
|
* image) */
|
|
98
109
|
|
|
99
110
|
/* If BKPBLOCK_HAS_IMAGE, an XLogRecordBlockImageHeader struct follows */
|
|
100
|
-
/* If BKPBLOCK_SAME_REL is not set, a
|
|
111
|
+
/* If BKPBLOCK_SAME_REL is not set, a RelFileLocator follows */
|
|
101
112
|
/* BlockNumber follows */
|
|
102
113
|
} XLogRecordBlockHeader;
|
|
103
114
|
|
|
@@ -114,8 +125,8 @@ typedef struct XLogRecordBlockHeader
|
|
|
114
125
|
* present is (BLCKSZ - <length of "hole" bytes>).
|
|
115
126
|
*
|
|
116
127
|
* Additionally, when wal_compression is enabled, we will try to compress full
|
|
117
|
-
* page images using the
|
|
118
|
-
* This can reduce the WAL volume, but at some extra cost of CPU spent
|
|
128
|
+
* page images using one of the supported algorithms, after removing the
|
|
129
|
+
* "hole". This can reduce the WAL volume, but at some extra cost of CPU spent
|
|
119
130
|
* on the compression during WAL logging. In this case, since the "hole"
|
|
120
131
|
* length cannot be calculated by subtracting the number of page image bytes
|
|
121
132
|
* from BLCKSZ, basically it needs to be stored as an extra information.
|
|
@@ -134,7 +145,7 @@ typedef struct XLogRecordBlockImageHeader
|
|
|
134
145
|
uint8 bimg_info; /* flag bits, see below */
|
|
135
146
|
|
|
136
147
|
/*
|
|
137
|
-
* If BKPIMAGE_HAS_HOLE and
|
|
148
|
+
* If BKPIMAGE_HAS_HOLE and BKPIMAGE_COMPRESSED(), an
|
|
138
149
|
* XLogRecordBlockCompressHeader struct follows.
|
|
139
150
|
*/
|
|
140
151
|
} XLogRecordBlockImageHeader;
|
|
@@ -144,9 +155,16 @@ typedef struct XLogRecordBlockImageHeader
|
|
|
144
155
|
|
|
145
156
|
/* Information stored in bimg_info */
|
|
146
157
|
#define BKPIMAGE_HAS_HOLE 0x01 /* page image has "hole" */
|
|
147
|
-
#define
|
|
148
|
-
|
|
149
|
-
|
|
158
|
+
#define BKPIMAGE_APPLY 0x02 /* page image should be restored
|
|
159
|
+
* during replay */
|
|
160
|
+
/* compression methods supported */
|
|
161
|
+
#define BKPIMAGE_COMPRESS_PGLZ 0x04
|
|
162
|
+
#define BKPIMAGE_COMPRESS_LZ4 0x08
|
|
163
|
+
#define BKPIMAGE_COMPRESS_ZSTD 0x10
|
|
164
|
+
|
|
165
|
+
#define BKPIMAGE_COMPRESSED(info) \
|
|
166
|
+
((info & (BKPIMAGE_COMPRESS_PGLZ | BKPIMAGE_COMPRESS_LZ4 | \
|
|
167
|
+
BKPIMAGE_COMPRESS_ZSTD)) != 0)
|
|
150
168
|
|
|
151
169
|
/*
|
|
152
170
|
* Extra header information used when page image has "hole" and
|
|
@@ -168,7 +186,7 @@ typedef struct XLogRecordBlockCompressHeader
|
|
|
168
186
|
(SizeOfXLogRecordBlockHeader + \
|
|
169
187
|
SizeOfXLogRecordBlockImageHeader + \
|
|
170
188
|
SizeOfXLogRecordBlockCompressHeader + \
|
|
171
|
-
sizeof(
|
|
189
|
+
sizeof(RelFileLocator) + \
|
|
172
190
|
sizeof(BlockNumber))
|
|
173
191
|
|
|
174
192
|
/*
|
|
@@ -180,7 +198,8 @@ typedef struct XLogRecordBlockCompressHeader
|
|
|
180
198
|
#define BKPBLOCK_HAS_IMAGE 0x10 /* block data is an XLogRecordBlockImage */
|
|
181
199
|
#define BKPBLOCK_HAS_DATA 0x20
|
|
182
200
|
#define BKPBLOCK_WILL_INIT 0x40 /* redo will re-init the page */
|
|
183
|
-
#define BKPBLOCK_SAME_REL 0x80 /*
|
|
201
|
+
#define BKPBLOCK_SAME_REL 0x80 /* RelFileLocator omitted, same as
|
|
202
|
+
* previous */
|
|
184
203
|
|
|
185
204
|
/*
|
|
186
205
|
* XLogRecordDataHeaderShort/Long are used for the "main data" portion of
|
|
@@ -211,8 +230,9 @@ typedef struct XLogRecordDataHeaderLong
|
|
|
211
230
|
* Block IDs used to distinguish different kinds of record fragments. Block
|
|
212
231
|
* references are numbered from 0 to XLR_MAX_BLOCK_ID. A rmgr is free to use
|
|
213
232
|
* any ID number in that range (although you should stick to small numbers,
|
|
214
|
-
* because the WAL machinery is optimized for that case). A
|
|
215
|
-
* numbers are reserved to denote the "main" data portion of the record
|
|
233
|
+
* because the WAL machinery is optimized for that case). A few ID
|
|
234
|
+
* numbers are reserved to denote the "main" data portion of the record,
|
|
235
|
+
* as well as replication-supporting transaction metadata.
|
|
216
236
|
*
|
|
217
237
|
* The maximum is currently set at 32, quite arbitrarily. Most records only
|
|
218
238
|
* need a handful of block references, but there are a few exceptions that
|
|
@@ -223,5 +243,6 @@ typedef struct XLogRecordDataHeaderLong
|
|
|
223
243
|
#define XLR_BLOCK_ID_DATA_SHORT 255
|
|
224
244
|
#define XLR_BLOCK_ID_DATA_LONG 254
|
|
225
245
|
#define XLR_BLOCK_ID_ORIGIN 253
|
|
246
|
+
#define XLR_BLOCK_ID_TOPLEVEL_XID 252
|
|
226
247
|
|
|
227
248
|
#endif /* XLOGRECORD_H */
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* xlogrecovery.h
|
|
3
|
+
*
|
|
4
|
+
* Functions for WAL recovery and standby mode
|
|
5
|
+
*
|
|
6
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
|
+
*
|
|
9
|
+
* src/include/access/xlogrecovery.h
|
|
10
|
+
*/
|
|
11
|
+
#ifndef XLOGRECOVERY_H
|
|
12
|
+
#define XLOGRECOVERY_H
|
|
13
|
+
|
|
14
|
+
#include "access/xlogreader.h"
|
|
15
|
+
#include "catalog/pg_control.h"
|
|
16
|
+
#include "lib/stringinfo.h"
|
|
17
|
+
#include "utils/timestamp.h"
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* Recovery target type.
|
|
21
|
+
* Only set during a Point in Time recovery, not when in standby mode.
|
|
22
|
+
*/
|
|
23
|
+
typedef enum
|
|
24
|
+
{
|
|
25
|
+
RECOVERY_TARGET_UNSET,
|
|
26
|
+
RECOVERY_TARGET_XID,
|
|
27
|
+
RECOVERY_TARGET_TIME,
|
|
28
|
+
RECOVERY_TARGET_NAME,
|
|
29
|
+
RECOVERY_TARGET_LSN,
|
|
30
|
+
RECOVERY_TARGET_IMMEDIATE
|
|
31
|
+
} RecoveryTargetType;
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Recovery target TimeLine goal
|
|
35
|
+
*/
|
|
36
|
+
typedef enum
|
|
37
|
+
{
|
|
38
|
+
RECOVERY_TARGET_TIMELINE_CONTROLFILE,
|
|
39
|
+
RECOVERY_TARGET_TIMELINE_LATEST,
|
|
40
|
+
RECOVERY_TARGET_TIMELINE_NUMERIC
|
|
41
|
+
} RecoveryTargetTimeLineGoal;
|
|
42
|
+
|
|
43
|
+
/* Recovery pause states */
|
|
44
|
+
typedef enum RecoveryPauseState
|
|
45
|
+
{
|
|
46
|
+
RECOVERY_NOT_PAUSED, /* pause not requested */
|
|
47
|
+
RECOVERY_PAUSE_REQUESTED, /* pause requested, but not yet paused */
|
|
48
|
+
RECOVERY_PAUSED /* recovery is paused */
|
|
49
|
+
} RecoveryPauseState;
|
|
50
|
+
|
|
51
|
+
/* User-settable GUC parameters */
|
|
52
|
+
extern PGDLLIMPORT bool recoveryTargetInclusive;
|
|
53
|
+
extern PGDLLIMPORT int recoveryTargetAction;
|
|
54
|
+
extern PGDLLIMPORT int recovery_min_apply_delay;
|
|
55
|
+
extern PGDLLIMPORT char *PrimaryConnInfo;
|
|
56
|
+
extern PGDLLIMPORT char *PrimarySlotName;
|
|
57
|
+
extern PGDLLIMPORT char *recoveryRestoreCommand;
|
|
58
|
+
extern PGDLLIMPORT char *recoveryEndCommand;
|
|
59
|
+
extern PGDLLIMPORT char *archiveCleanupCommand;
|
|
60
|
+
|
|
61
|
+
/* indirectly set via GUC system */
|
|
62
|
+
extern PGDLLIMPORT TransactionId recoveryTargetXid;
|
|
63
|
+
extern PGDLLIMPORT char *recovery_target_time_string;
|
|
64
|
+
extern PGDLLIMPORT TimestampTz recoveryTargetTime;
|
|
65
|
+
extern PGDLLIMPORT const char *recoveryTargetName;
|
|
66
|
+
extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN;
|
|
67
|
+
extern PGDLLIMPORT RecoveryTargetType recoveryTarget;
|
|
68
|
+
extern PGDLLIMPORT bool wal_receiver_create_temp_slot;
|
|
69
|
+
extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
|
|
70
|
+
extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested;
|
|
71
|
+
extern PGDLLIMPORT TimeLineID recoveryTargetTLI;
|
|
72
|
+
|
|
73
|
+
/* Have we already reached a consistent database state? */
|
|
74
|
+
extern PGDLLIMPORT bool reachedConsistency;
|
|
75
|
+
|
|
76
|
+
/* Are we currently in standby mode? */
|
|
77
|
+
extern PGDLLIMPORT bool StandbyMode;
|
|
78
|
+
|
|
79
|
+
extern Size XLogRecoveryShmemSize(void);
|
|
80
|
+
extern void XLogRecoveryShmemInit(void);
|
|
81
|
+
|
|
82
|
+
extern void InitWalRecovery(ControlFileData *ControlFile,
|
|
83
|
+
bool *wasShutdown_ptr, bool *haveBackupLabel_ptr,
|
|
84
|
+
bool *haveTblspcMap_ptr);
|
|
85
|
+
extern void PerformWalRecovery(void);
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* FinishWalRecovery() returns this. It contains information about the point
|
|
89
|
+
* where recovery ended, and why it ended.
|
|
90
|
+
*/
|
|
91
|
+
typedef struct
|
|
92
|
+
{
|
|
93
|
+
/*
|
|
94
|
+
* Information about the last valid or applied record, after which new WAL
|
|
95
|
+
* can be appended. 'lastRec' is the position where the last record
|
|
96
|
+
* starts, and 'endOfLog' is its end. 'lastPage' is a copy of the last
|
|
97
|
+
* partial page that contains endOfLog (or NULL if endOfLog is exactly at
|
|
98
|
+
* page boundary). 'lastPageBeginPtr' is the position where the last page
|
|
99
|
+
* begins.
|
|
100
|
+
*
|
|
101
|
+
* endOfLogTLI is the TLI in the filename of the XLOG segment containing
|
|
102
|
+
* the last applied record. It could be different from lastRecTLI, if
|
|
103
|
+
* there was a timeline switch in that segment, and we were reading the
|
|
104
|
+
* old WAL from a segment belonging to a higher timeline.
|
|
105
|
+
*/
|
|
106
|
+
XLogRecPtr lastRec; /* start of last valid or applied record */
|
|
107
|
+
TimeLineID lastRecTLI;
|
|
108
|
+
XLogRecPtr endOfLog; /* end of last valid or applied record */
|
|
109
|
+
TimeLineID endOfLogTLI;
|
|
110
|
+
|
|
111
|
+
XLogRecPtr lastPageBeginPtr; /* LSN of page that contains endOfLog */
|
|
112
|
+
char *lastPage; /* copy of the last page, up to endOfLog */
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* abortedRecPtr is the start pointer of a broken record at end of WAL
|
|
116
|
+
* when recovery completes; missingContrecPtr is the location of the first
|
|
117
|
+
* contrecord that went missing. See CreateOverwriteContrecordRecord for
|
|
118
|
+
* details.
|
|
119
|
+
*/
|
|
120
|
+
XLogRecPtr abortedRecPtr;
|
|
121
|
+
XLogRecPtr missingContrecPtr;
|
|
122
|
+
|
|
123
|
+
/* short human-readable string describing why recovery ended */
|
|
124
|
+
char *recoveryStopReason;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
* If standby or recovery signal file was found, these flags are set
|
|
128
|
+
* accordingly.
|
|
129
|
+
*/
|
|
130
|
+
bool standby_signal_file_found;
|
|
131
|
+
bool recovery_signal_file_found;
|
|
132
|
+
} EndOfWalRecoveryInfo;
|
|
133
|
+
|
|
134
|
+
extern EndOfWalRecoveryInfo *FinishWalRecovery(void);
|
|
135
|
+
extern void ShutdownWalRecovery(void);
|
|
136
|
+
extern void RemovePromoteSignalFiles(void);
|
|
137
|
+
|
|
138
|
+
extern bool HotStandbyActive(void);
|
|
139
|
+
extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI);
|
|
140
|
+
extern RecoveryPauseState GetRecoveryPauseState(void);
|
|
141
|
+
extern void SetRecoveryPause(bool recoveryPause);
|
|
142
|
+
extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream);
|
|
143
|
+
extern TimestampTz GetLatestXTime(void);
|
|
144
|
+
extern TimestampTz GetCurrentChunkReplayStartTime(void);
|
|
145
|
+
extern XLogRecPtr GetCurrentReplayRecPtr(TimeLineID *replayEndTLI);
|
|
146
|
+
|
|
147
|
+
extern bool PromoteIsTriggered(void);
|
|
148
|
+
extern bool CheckPromoteSignal(void);
|
|
149
|
+
extern void WakeupRecovery(void);
|
|
150
|
+
|
|
151
|
+
extern void StartupRequestWalReceiverRestart(void);
|
|
152
|
+
extern void XLogRequestWalReceiverReply(void);
|
|
153
|
+
|
|
154
|
+
extern void RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue);
|
|
155
|
+
|
|
156
|
+
extern void xlog_outdesc(StringInfo buf, XLogReaderState *record);
|
|
157
|
+
|
|
158
|
+
#endif /* XLOGRECOVERY_H */
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* archive_module.h
|
|
4
|
+
* Exports for archive modules.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2022-2023, PostgreSQL Global Development Group
|
|
7
|
+
*
|
|
8
|
+
* src/include/archive/archive_module.h
|
|
9
|
+
*
|
|
10
|
+
*-------------------------------------------------------------------------
|
|
11
|
+
*/
|
|
12
|
+
#ifndef _ARCHIVE_MODULE_H
|
|
13
|
+
#define _ARCHIVE_MODULE_H
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* The value of the archive_library GUC.
|
|
17
|
+
*/
|
|
18
|
+
extern PGDLLIMPORT char *XLogArchiveLibrary;
|
|
19
|
+
|
|
20
|
+
typedef struct ArchiveModuleState
|
|
21
|
+
{
|
|
22
|
+
/*
|
|
23
|
+
* Private data pointer for use by an archive module. This can be used to
|
|
24
|
+
* store state for the module that will be passed to each of its
|
|
25
|
+
* callbacks.
|
|
26
|
+
*/
|
|
27
|
+
void *private_data;
|
|
28
|
+
} ArchiveModuleState;
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* Archive module callbacks
|
|
32
|
+
*
|
|
33
|
+
* These callback functions should be defined by archive libraries and returned
|
|
34
|
+
* via _PG_archive_module_init(). ArchiveFileCB is the only required callback.
|
|
35
|
+
* For more information about the purpose of each callback, refer to the
|
|
36
|
+
* archive modules documentation.
|
|
37
|
+
*/
|
|
38
|
+
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
|
|
39
|
+
typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);
|
|
40
|
+
typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);
|
|
41
|
+
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);
|
|
42
|
+
|
|
43
|
+
typedef struct ArchiveModuleCallbacks
|
|
44
|
+
{
|
|
45
|
+
ArchiveStartupCB startup_cb;
|
|
46
|
+
ArchiveCheckConfiguredCB check_configured_cb;
|
|
47
|
+
ArchiveFileCB archive_file_cb;
|
|
48
|
+
ArchiveShutdownCB shutdown_cb;
|
|
49
|
+
} ArchiveModuleCallbacks;
|
|
50
|
+
|
|
51
|
+
/*
|
|
52
|
+
* Type of the shared library symbol _PG_archive_module_init that is looked
|
|
53
|
+
* up when loading an archive library.
|
|
54
|
+
*/
|
|
55
|
+
typedef const ArchiveModuleCallbacks *(*ArchiveModuleInit) (void);
|
|
56
|
+
|
|
57
|
+
extern PGDLLEXPORT const ArchiveModuleCallbacks *_PG_archive_module_init(void);
|
|
58
|
+
|
|
59
|
+
#endif /* _ARCHIVE_MODULE_H */
|