pg_query 2.2.0 → 4.2.1
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 +25 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- 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 +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- 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_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- 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 +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- 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/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/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
@@ -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-2022, 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
|
@@ -125,6 +126,9 @@ typedef struct
|
|
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
|
-
|
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 */
|
187
234
|
|
188
|
-
|
189
|
-
|
190
|
-
uint32 main_data_bufsz; /* allocated size of the buffer */
|
191
|
-
|
192
|
-
RepOriginId record_origin;
|
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,18 +309,24 @@ struct XLogReaderState
|
|
250
309
|
|
251
310
|
/* Buffer to hold error message */
|
252
311
|
char *errormsg_buf;
|
312
|
+
bool errormsg_deferred;
|
253
313
|
|
254
314
|
/*
|
255
|
-
*
|
256
|
-
*
|
257
|
-
* location of its first contrecord that went missing.
|
315
|
+
* Flag to indicate to XLogPageReadCB that it should not block waiting for
|
316
|
+
* data.
|
258
317
|
*/
|
259
|
-
|
260
|
-
XLogRecPtr missingContrecPtr;
|
261
|
-
/* Set when XLP_FIRST_IS_OVERWRITE_CONTRECORD is found */
|
262
|
-
XLogRecPtr overwrittenRecPtr;
|
318
|
+
bool nonblocking;
|
263
319
|
};
|
264
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
|
+
|
265
330
|
/* Get a new XLogReader */
|
266
331
|
extern XLogReaderState *XLogReaderAllocate(int wal_segment_size,
|
267
332
|
const char *waldir,
|
@@ -272,20 +337,45 @@ extern XLogReaderRoutine *LocalXLogReaderRoutine(void);
|
|
272
337
|
/* Free an XLogReader */
|
273
338
|
extern void XLogReaderFree(XLogReaderState *state);
|
274
339
|
|
340
|
+
/* Optionally provide a circular decoding buffer to allow readahead. */
|
341
|
+
extern void XLogReaderSetDecodeBuffer(XLogReaderState *state,
|
342
|
+
void *buffer,
|
343
|
+
size_t size);
|
344
|
+
|
275
345
|
/* Position the XLogReader to given record */
|
276
346
|
extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr);
|
277
|
-
#ifdef FRONTEND
|
278
347
|
extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr);
|
279
|
-
|
348
|
+
|
349
|
+
/* Return values from XLogPageReadCB. */
|
350
|
+
typedef enum XLogPageReadResult
|
351
|
+
{
|
352
|
+
XLREAD_SUCCESS = 0, /* record is successfully read */
|
353
|
+
XLREAD_FAIL = -1, /* failed during reading a record */
|
354
|
+
XLREAD_WOULDBLOCK = -2 /* nonblocking mode only, no data */
|
355
|
+
} XLogPageReadResult;
|
280
356
|
|
281
357
|
/* Read the next XLog record. Returns NULL on end-of-WAL or failure */
|
282
358
|
extern struct XLogRecord *XLogReadRecord(XLogReaderState *state,
|
283
359
|
char **errormsg);
|
284
360
|
|
361
|
+
/* Consume the next record or error. */
|
362
|
+
extern DecodedXLogRecord *XLogNextRecord(XLogReaderState *state,
|
363
|
+
char **errormsg);
|
364
|
+
|
365
|
+
/* Release the previously returned record, if necessary. */
|
366
|
+
extern XLogRecPtr XLogReleasePreviousRecord(XLogReaderState *state);
|
367
|
+
|
368
|
+
/* Try to read ahead, if there is data and space. */
|
369
|
+
extern DecodedXLogRecord *XLogReadAhead(XLogReaderState *state,
|
370
|
+
bool nonblocking);
|
371
|
+
|
285
372
|
/* Validate a page */
|
286
373
|
extern bool XLogReaderValidatePageHeader(XLogReaderState *state,
|
287
374
|
XLogRecPtr recptr, char *phdr);
|
288
375
|
|
376
|
+
/* Forget error produced by XLogReaderValidatePageHeader(). */
|
377
|
+
extern void XLogReaderResetError(XLogReaderState *state);
|
378
|
+
|
289
379
|
/*
|
290
380
|
* Error information from WALRead that both backend and frontend caller can
|
291
381
|
* process. Currently only errors from pg_pread can be reported.
|
@@ -305,24 +395,36 @@ extern bool WALRead(XLogReaderState *state,
|
|
305
395
|
|
306
396
|
/* Functions for decoding an XLogRecord */
|
307
397
|
|
308
|
-
extern
|
398
|
+
extern size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len);
|
399
|
+
extern bool DecodeXLogRecord(XLogReaderState *state,
|
400
|
+
DecodedXLogRecord *decoded,
|
401
|
+
XLogRecord *record,
|
402
|
+
XLogRecPtr lsn,
|
309
403
|
char **errmsg);
|
310
404
|
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
#define
|
316
|
-
#define
|
317
|
-
#define
|
318
|
-
#define
|
319
|
-
#define
|
320
|
-
#define
|
321
|
-
|
322
|
-
#define
|
323
|
-
|
324
|
-
#define
|
325
|
-
|
405
|
+
/*
|
406
|
+
* Macros that provide access to parts of the record most recently returned by
|
407
|
+
* XLogReadRecord() or XLogNextRecord().
|
408
|
+
*/
|
409
|
+
#define XLogRecGetTotalLen(decoder) ((decoder)->record->header.xl_tot_len)
|
410
|
+
#define XLogRecGetPrev(decoder) ((decoder)->record->header.xl_prev)
|
411
|
+
#define XLogRecGetInfo(decoder) ((decoder)->record->header.xl_info)
|
412
|
+
#define XLogRecGetRmid(decoder) ((decoder)->record->header.xl_rmid)
|
413
|
+
#define XLogRecGetXid(decoder) ((decoder)->record->header.xl_xid)
|
414
|
+
#define XLogRecGetOrigin(decoder) ((decoder)->record->record_origin)
|
415
|
+
#define XLogRecGetTopXid(decoder) ((decoder)->record->toplevel_xid)
|
416
|
+
#define XLogRecGetData(decoder) ((decoder)->record->main_data)
|
417
|
+
#define XLogRecGetDataLen(decoder) ((decoder)->record->main_data_len)
|
418
|
+
#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->record->max_block_id >= 0)
|
419
|
+
#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id)
|
420
|
+
#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)])
|
421
|
+
#define XLogRecHasBlockRef(decoder, block_id) \
|
422
|
+
(((decoder)->record->max_block_id >= (block_id)) && \
|
423
|
+
((decoder)->record->blocks[block_id].in_use))
|
424
|
+
#define XLogRecHasBlockImage(decoder, block_id) \
|
425
|
+
((decoder)->record->blocks[block_id].has_image)
|
426
|
+
#define XLogRecBlockImageApply(decoder, block_id) \
|
427
|
+
((decoder)->record->blocks[block_id].apply_image)
|
326
428
|
|
327
429
|
#ifndef FRONTEND
|
328
430
|
extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record);
|
@@ -330,8 +432,12 @@ extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record);
|
|
330
432
|
|
331
433
|
extern bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page);
|
332
434
|
extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len);
|
333
|
-
extern
|
435
|
+
extern void XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id,
|
334
436
|
RelFileNode *rnode, ForkNumber *forknum,
|
335
437
|
BlockNumber *blknum);
|
438
|
+
extern bool XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id,
|
439
|
+
RelFileNode *rnode, ForkNumber *forknum,
|
440
|
+
BlockNumber *blknum,
|
441
|
+
Buffer *prefetch_buffer);
|
336
442
|
|
337
443
|
#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-2022, 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
|
@@ -114,8 +114,8 @@ typedef struct XLogRecordBlockHeader
|
|
114
114
|
* present is (BLCKSZ - <length of "hole" bytes>).
|
115
115
|
*
|
116
116
|
* 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
|
117
|
+
* page images using one of the supported algorithms, after removing the
|
118
|
+
* "hole". This can reduce the WAL volume, but at some extra cost of CPU spent
|
119
119
|
* on the compression during WAL logging. In this case, since the "hole"
|
120
120
|
* length cannot be calculated by subtracting the number of page image bytes
|
121
121
|
* from BLCKSZ, basically it needs to be stored as an extra information.
|
@@ -134,7 +134,7 @@ typedef struct XLogRecordBlockImageHeader
|
|
134
134
|
uint8 bimg_info; /* flag bits, see below */
|
135
135
|
|
136
136
|
/*
|
137
|
-
* If BKPIMAGE_HAS_HOLE and
|
137
|
+
* If BKPIMAGE_HAS_HOLE and BKPIMAGE_COMPRESSED(), an
|
138
138
|
* XLogRecordBlockCompressHeader struct follows.
|
139
139
|
*/
|
140
140
|
} XLogRecordBlockImageHeader;
|
@@ -144,9 +144,16 @@ typedef struct XLogRecordBlockImageHeader
|
|
144
144
|
|
145
145
|
/* Information stored in bimg_info */
|
146
146
|
#define BKPIMAGE_HAS_HOLE 0x01 /* page image has "hole" */
|
147
|
-
#define
|
148
|
-
|
149
|
-
|
147
|
+
#define BKPIMAGE_APPLY 0x02 /* page image should be restored
|
148
|
+
* during replay */
|
149
|
+
/* compression methods supported */
|
150
|
+
#define BKPIMAGE_COMPRESS_PGLZ 0x04
|
151
|
+
#define BKPIMAGE_COMPRESS_LZ4 0x08
|
152
|
+
#define BKPIMAGE_COMPRESS_ZSTD 0x10
|
153
|
+
|
154
|
+
#define BKPIMAGE_COMPRESSED(info) \
|
155
|
+
((info & (BKPIMAGE_COMPRESS_PGLZ | BKPIMAGE_COMPRESS_LZ4 | \
|
156
|
+
BKPIMAGE_COMPRESS_ZSTD)) != 0)
|
150
157
|
|
151
158
|
/*
|
152
159
|
* Extra header information used when page image has "hole" and
|
@@ -211,8 +218,9 @@ typedef struct XLogRecordDataHeaderLong
|
|
211
218
|
* Block IDs used to distinguish different kinds of record fragments. Block
|
212
219
|
* references are numbered from 0 to XLR_MAX_BLOCK_ID. A rmgr is free to use
|
213
220
|
* 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
|
221
|
+
* because the WAL machinery is optimized for that case). A few ID
|
222
|
+
* numbers are reserved to denote the "main" data portion of the record,
|
223
|
+
* as well as replication-supporting transaction metadata.
|
216
224
|
*
|
217
225
|
* The maximum is currently set at 32, quite arbitrarily. Most records only
|
218
226
|
* need a handful of block references, but there are a few exceptions that
|
@@ -223,5 +231,6 @@ typedef struct XLogRecordDataHeaderLong
|
|
223
231
|
#define XLR_BLOCK_ID_DATA_SHORT 255
|
224
232
|
#define XLR_BLOCK_ID_DATA_LONG 254
|
225
233
|
#define XLR_BLOCK_ID_ORIGIN 253
|
234
|
+
#define XLR_BLOCK_ID_TOPLEVEL_XID 252
|
226
235
|
|
227
236
|
#endif /* XLOGRECORD_H */
|
@@ -0,0 +1,157 @@
|
|
1
|
+
/*
|
2
|
+
* xlogrecovery.h
|
3
|
+
*
|
4
|
+
* Functions for WAL recovery and standby mode
|
5
|
+
*
|
6
|
+
* Portions Copyright (c) 1996-2022, 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 char *PromoteTriggerFile;
|
69
|
+
extern PGDLLIMPORT bool wal_receiver_create_temp_slot;
|
70
|
+
extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
|
71
|
+
extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested;
|
72
|
+
extern PGDLLIMPORT TimeLineID recoveryTargetTLI;
|
73
|
+
|
74
|
+
/* Have we already reached a consistent database state? */
|
75
|
+
extern PGDLLIMPORT bool reachedConsistency;
|
76
|
+
|
77
|
+
/* Are we currently in standby mode? */
|
78
|
+
extern PGDLLIMPORT bool StandbyMode;
|
79
|
+
|
80
|
+
extern Size XLogRecoveryShmemSize(void);
|
81
|
+
extern void XLogRecoveryShmemInit(void);
|
82
|
+
|
83
|
+
extern void InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdownPtr, bool *haveBackupLabel, bool *haveTblspcMap);
|
84
|
+
extern void PerformWalRecovery(void);
|
85
|
+
|
86
|
+
/*
|
87
|
+
* FinishWalRecovery() returns this. It contains information about the point
|
88
|
+
* where recovery ended, and why it ended.
|
89
|
+
*/
|
90
|
+
typedef struct
|
91
|
+
{
|
92
|
+
/*
|
93
|
+
* Information about the last valid or applied record, after which new WAL
|
94
|
+
* can be appended. 'lastRec' is the position where the last record
|
95
|
+
* starts, and 'endOfLog' is its end. 'lastPage' is a copy of the last
|
96
|
+
* partial page that contains endOfLog (or NULL if endOfLog is exactly at
|
97
|
+
* page boundary). 'lastPageBeginPtr' is the position where the last page
|
98
|
+
* begins.
|
99
|
+
*
|
100
|
+
* endOfLogTLI is the TLI in the filename of the XLOG segment containing
|
101
|
+
* the last applied record. It could be different from lastRecTLI, if
|
102
|
+
* there was a timeline switch in that segment, and we were reading the
|
103
|
+
* old WAL from a segment belonging to a higher timeline.
|
104
|
+
*/
|
105
|
+
XLogRecPtr lastRec; /* start of last valid or applied record */
|
106
|
+
TimeLineID lastRecTLI;
|
107
|
+
XLogRecPtr endOfLog; /* end of last valid or applied record */
|
108
|
+
TimeLineID endOfLogTLI;
|
109
|
+
|
110
|
+
XLogRecPtr lastPageBeginPtr; /* LSN of page that contains endOfLog */
|
111
|
+
char *lastPage; /* copy of the last page, up to endOfLog */
|
112
|
+
|
113
|
+
/*
|
114
|
+
* abortedRecPtr is the start pointer of a broken record at end of WAL
|
115
|
+
* when recovery completes; missingContrecPtr is the location of the first
|
116
|
+
* contrecord that went missing. See CreateOverwriteContrecordRecord for
|
117
|
+
* details.
|
118
|
+
*/
|
119
|
+
XLogRecPtr abortedRecPtr;
|
120
|
+
XLogRecPtr missingContrecPtr;
|
121
|
+
|
122
|
+
/* short human-readable string describing why recovery ended */
|
123
|
+
char *recoveryStopReason;
|
124
|
+
|
125
|
+
/*
|
126
|
+
* If standby or recovery signal file was found, these flags are set
|
127
|
+
* accordingly.
|
128
|
+
*/
|
129
|
+
bool standby_signal_file_found;
|
130
|
+
bool recovery_signal_file_found;
|
131
|
+
} EndOfWalRecoveryInfo;
|
132
|
+
|
133
|
+
extern EndOfWalRecoveryInfo *FinishWalRecovery(void);
|
134
|
+
extern void ShutdownWalRecovery(void);
|
135
|
+
extern void RemovePromoteSignalFiles(void);
|
136
|
+
|
137
|
+
extern bool HotStandbyActive(void);
|
138
|
+
extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI);
|
139
|
+
extern RecoveryPauseState GetRecoveryPauseState(void);
|
140
|
+
extern void SetRecoveryPause(bool recoveryPause);
|
141
|
+
extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream);
|
142
|
+
extern TimestampTz GetLatestXTime(void);
|
143
|
+
extern TimestampTz GetCurrentChunkReplayStartTime(void);
|
144
|
+
extern XLogRecPtr GetCurrentReplayRecPtr(TimeLineID *replayEndTLI);
|
145
|
+
|
146
|
+
extern bool PromoteIsTriggered(void);
|
147
|
+
extern bool CheckPromoteSignal(void);
|
148
|
+
extern void WakeupRecovery(void);
|
149
|
+
|
150
|
+
extern void StartupRequestWalReceiverRestart(void);
|
151
|
+
extern void XLogRequestWalReceiverReply(void);
|
152
|
+
|
153
|
+
extern void RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue);
|
154
|
+
|
155
|
+
extern void xlog_outdesc(StringInfo buf, XLogReaderState *record);
|
156
|
+
|
157
|
+
#endif /* XLOGRECOVERY_H */
|