pg_query 2.1.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 +104 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/extconf.rb +8 -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 +5 -1
- data/ext/pg_query/include/access/xact.h +79 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +50 -14
- 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 +148 -32
- 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 +10 -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 +45 -15
- data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
- 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 +5 -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 +21 -16
- 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 -4
- 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 +56 -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 +4 -5
- 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 +3 -1
- data/ext/pg_query/include/commands/trigger.h +27 -17
- 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 +150 -25
- 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 +31 -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 +106 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +71 -52
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +272 -80
- 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 +327 -94
- data/ext/pg_query/include/nodes/pathnodes.h +245 -67
- data/ext/pg_query/include/nodes/pg_list.h +75 -68
- data/ext/pg_query/include/nodes/plannodes.h +128 -30
- 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 -22
- 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 +4 -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 +94 -46
- 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 +1220 -422
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1237
- 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 +88 -12
- 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 +72 -43
- 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 +1422 -916
- 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 +262 -44
- data/ext/pg_query/include/replication/slot.h +23 -12
- 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 +17 -13
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +6 -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 +183 -55
- 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 +67 -4
- 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 +7 -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 +11 -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 +5 -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 +12 -1
- 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 -20
- data/ext/pg_query/include/utils/relcache.h +9 -7
- 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 +35 -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 +4318 -2307
- data/ext/pg_query/pg_query_deparse.c +1114 -381
- data/ext/pg_query/pg_query_fingerprint.c +46 -10
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
- data/ext/pg_query/pg_query_normalize.c +163 -20
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +65 -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_parse_plpgsql.c +79 -16
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_ruby.c +1 -1
- 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 +21 -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 +424 -109
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +86 -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 +33890 -31262
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +644 -441
- 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 +73 -24
- 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 +109 -15
- 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 +207 -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 +712 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
- 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 -52
- 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 +46 -20
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +6 -4
- data/lib/pg_query/fingerprint.rb +18 -3
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +87 -51
- data/lib/pg_query/pg_query_pb.rb +1109 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- metadata +29 -18
- 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/src_backend_libpq_pqcomm.c +0 -651
- 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
|
*
|
|
4
4
|
* PostgreSQL write-ahead log manager
|
|
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/xlog.h
|
|
@@ -11,14 +11,11 @@
|
|
|
11
11
|
#ifndef XLOG_H
|
|
12
12
|
#define XLOG_H
|
|
13
13
|
|
|
14
|
-
#include "access/rmgr.h"
|
|
15
14
|
#include "access/xlogdefs.h"
|
|
16
|
-
#include "access/xloginsert.h"
|
|
17
15
|
#include "access/xlogreader.h"
|
|
18
16
|
#include "datatype/timestamp.h"
|
|
19
17
|
#include "lib/stringinfo.h"
|
|
20
18
|
#include "nodes/pg_list.h"
|
|
21
|
-
#include "storage/fd.h"
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
/* Sync methods */
|
|
@@ -27,127 +24,35 @@
|
|
|
27
24
|
#define SYNC_METHOD_OPEN 2 /* for O_SYNC */
|
|
28
25
|
#define SYNC_METHOD_FSYNC_WRITETHROUGH 3
|
|
29
26
|
#define SYNC_METHOD_OPEN_DSYNC 4 /* for O_DSYNC */
|
|
30
|
-
extern int
|
|
27
|
+
extern PGDLLIMPORT int sync_method;
|
|
31
28
|
|
|
32
|
-
extern PGDLLIMPORT
|
|
33
|
-
|
|
34
|
-
/*
|
|
35
|
-
* Prior to 8.4, all activity during recovery was carried out by the startup
|
|
36
|
-
* process. This local variable continues to be used in many parts of the
|
|
37
|
-
* code to indicate actions taken by RecoveryManagers. Other processes that
|
|
38
|
-
* potentially perform work during recovery should check RecoveryInProgress().
|
|
39
|
-
* See XLogCtl notes in xlog.c.
|
|
40
|
-
*/
|
|
41
|
-
extern bool InRecovery;
|
|
42
|
-
|
|
43
|
-
/*
|
|
44
|
-
* Like InRecovery, standbyState is only valid in the startup process.
|
|
45
|
-
* In all other processes it will have the value STANDBY_DISABLED (so
|
|
46
|
-
* InHotStandby will read as false).
|
|
47
|
-
*
|
|
48
|
-
* In DISABLED state, we're performing crash recovery or hot standby was
|
|
49
|
-
* disabled in postgresql.conf.
|
|
50
|
-
*
|
|
51
|
-
* In INITIALIZED state, we've run InitRecoveryTransactionEnvironment, but
|
|
52
|
-
* we haven't yet processed a RUNNING_XACTS or shutdown-checkpoint WAL record
|
|
53
|
-
* to initialize our master-transaction tracking system.
|
|
54
|
-
*
|
|
55
|
-
* When the transaction tracking is initialized, we enter the SNAPSHOT_PENDING
|
|
56
|
-
* state. The tracked information might still be incomplete, so we can't allow
|
|
57
|
-
* connections yet, but redo functions must update the in-memory state when
|
|
58
|
-
* appropriate.
|
|
59
|
-
*
|
|
60
|
-
* In SNAPSHOT_READY mode, we have full knowledge of transactions that are
|
|
61
|
-
* (or were) running in the master at the current WAL location. Snapshots
|
|
62
|
-
* can be taken, and read-only queries can be run.
|
|
63
|
-
*/
|
|
64
|
-
typedef enum
|
|
65
|
-
{
|
|
66
|
-
STANDBY_DISABLED,
|
|
67
|
-
STANDBY_INITIALIZED,
|
|
68
|
-
STANDBY_SNAPSHOT_PENDING,
|
|
69
|
-
STANDBY_SNAPSHOT_READY
|
|
70
|
-
} HotStandbyState;
|
|
71
|
-
|
|
72
|
-
extern HotStandbyState standbyState;
|
|
73
|
-
|
|
74
|
-
#define InHotStandby (standbyState >= STANDBY_SNAPSHOT_PENDING)
|
|
75
|
-
|
|
76
|
-
/*
|
|
77
|
-
* Recovery target type.
|
|
78
|
-
* Only set during a Point in Time recovery, not when in standby mode.
|
|
79
|
-
*/
|
|
80
|
-
typedef enum
|
|
81
|
-
{
|
|
82
|
-
RECOVERY_TARGET_UNSET,
|
|
83
|
-
RECOVERY_TARGET_XID,
|
|
84
|
-
RECOVERY_TARGET_TIME,
|
|
85
|
-
RECOVERY_TARGET_NAME,
|
|
86
|
-
RECOVERY_TARGET_LSN,
|
|
87
|
-
RECOVERY_TARGET_IMMEDIATE
|
|
88
|
-
} RecoveryTargetType;
|
|
89
|
-
|
|
90
|
-
/*
|
|
91
|
-
* Recovery target TimeLine goal
|
|
92
|
-
*/
|
|
93
|
-
typedef enum
|
|
94
|
-
{
|
|
95
|
-
RECOVERY_TARGET_TIMELINE_CONTROLFILE,
|
|
96
|
-
RECOVERY_TARGET_TIMELINE_LATEST,
|
|
97
|
-
RECOVERY_TARGET_TIMELINE_NUMERIC
|
|
98
|
-
} RecoveryTargetTimeLineGoal;
|
|
99
|
-
|
|
100
|
-
extern XLogRecPtr ProcLastRecPtr;
|
|
101
|
-
extern XLogRecPtr XactLastRecEnd;
|
|
29
|
+
extern PGDLLIMPORT XLogRecPtr ProcLastRecPtr;
|
|
30
|
+
extern PGDLLIMPORT XLogRecPtr XactLastRecEnd;
|
|
102
31
|
extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd;
|
|
103
32
|
|
|
104
|
-
extern bool reachedConsistency;
|
|
105
|
-
|
|
106
33
|
/* these variables are GUC parameters related to XLOG */
|
|
107
|
-
extern int
|
|
108
|
-
extern int
|
|
109
|
-
extern int
|
|
110
|
-
extern int
|
|
111
|
-
extern int
|
|
112
|
-
extern int
|
|
113
|
-
extern int
|
|
114
|
-
extern int
|
|
115
|
-
extern char *XLogArchiveCommand;
|
|
116
|
-
extern bool EnableHotStandby;
|
|
117
|
-
extern bool fullPageWrites;
|
|
118
|
-
extern bool wal_log_hints;
|
|
119
|
-
extern
|
|
120
|
-
extern bool wal_init_zero;
|
|
121
|
-
extern bool wal_recycle;
|
|
122
|
-
extern bool *wal_consistency_checking;
|
|
123
|
-
extern char *wal_consistency_checking_string;
|
|
124
|
-
extern bool log_checkpoints;
|
|
125
|
-
extern
|
|
126
|
-
extern
|
|
127
|
-
|
|
128
|
-
extern
|
|
129
|
-
extern int recoveryTargetAction;
|
|
130
|
-
extern int recovery_min_apply_delay;
|
|
131
|
-
extern char *PrimaryConnInfo;
|
|
132
|
-
extern char *PrimarySlotName;
|
|
133
|
-
extern bool wal_receiver_create_temp_slot;
|
|
134
|
-
|
|
135
|
-
/* indirectly set via GUC system */
|
|
136
|
-
extern TransactionId recoveryTargetXid;
|
|
137
|
-
extern char *recovery_target_time_string;
|
|
138
|
-
extern const char *recoveryTargetName;
|
|
139
|
-
extern XLogRecPtr recoveryTargetLSN;
|
|
140
|
-
extern RecoveryTargetType recoveryTarget;
|
|
141
|
-
extern char *PromoteTriggerFile;
|
|
142
|
-
extern RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
|
|
143
|
-
extern TimeLineID recoveryTargetTLIRequested;
|
|
144
|
-
extern TimeLineID recoveryTargetTLI;
|
|
145
|
-
|
|
146
|
-
extern int CheckPointSegments;
|
|
147
|
-
|
|
148
|
-
/* option set locally in startup process only when signal files exist */
|
|
149
|
-
extern bool StandbyModeRequested;
|
|
150
|
-
extern bool StandbyMode;
|
|
34
|
+
extern PGDLLIMPORT int wal_segment_size;
|
|
35
|
+
extern PGDLLIMPORT int min_wal_size_mb;
|
|
36
|
+
extern PGDLLIMPORT int max_wal_size_mb;
|
|
37
|
+
extern PGDLLIMPORT int wal_keep_size_mb;
|
|
38
|
+
extern PGDLLIMPORT int max_slot_wal_keep_size_mb;
|
|
39
|
+
extern PGDLLIMPORT int XLOGbuffers;
|
|
40
|
+
extern PGDLLIMPORT int XLogArchiveTimeout;
|
|
41
|
+
extern PGDLLIMPORT int wal_retrieve_retry_interval;
|
|
42
|
+
extern PGDLLIMPORT char *XLogArchiveCommand;
|
|
43
|
+
extern PGDLLIMPORT bool EnableHotStandby;
|
|
44
|
+
extern PGDLLIMPORT bool fullPageWrites;
|
|
45
|
+
extern PGDLLIMPORT bool wal_log_hints;
|
|
46
|
+
extern PGDLLIMPORT int wal_compression;
|
|
47
|
+
extern PGDLLIMPORT bool wal_init_zero;
|
|
48
|
+
extern PGDLLIMPORT bool wal_recycle;
|
|
49
|
+
extern PGDLLIMPORT bool *wal_consistency_checking;
|
|
50
|
+
extern PGDLLIMPORT char *wal_consistency_checking_string;
|
|
51
|
+
extern PGDLLIMPORT bool log_checkpoints;
|
|
52
|
+
extern PGDLLIMPORT bool track_wal_io_timing;
|
|
53
|
+
extern PGDLLIMPORT int wal_decode_buffer_size;
|
|
54
|
+
|
|
55
|
+
extern PGDLLIMPORT int CheckPointSegments;
|
|
151
56
|
|
|
152
57
|
/* Archive modes */
|
|
153
58
|
typedef enum ArchiveMode
|
|
@@ -156,7 +61,7 @@ typedef enum ArchiveMode
|
|
|
156
61
|
ARCHIVE_MODE_ON, /* enabled while server is running normally */
|
|
157
62
|
ARCHIVE_MODE_ALWAYS /* enabled always (even during recovery) */
|
|
158
63
|
} ArchiveMode;
|
|
159
|
-
extern int
|
|
64
|
+
extern PGDLLIMPORT int XLogArchiveMode;
|
|
160
65
|
|
|
161
66
|
/* WAL levels */
|
|
162
67
|
typedef enum WalLevel
|
|
@@ -166,6 +71,15 @@ typedef enum WalLevel
|
|
|
166
71
|
WAL_LEVEL_LOGICAL
|
|
167
72
|
} WalLevel;
|
|
168
73
|
|
|
74
|
+
/* Compression algorithms for WAL */
|
|
75
|
+
typedef enum WalCompression
|
|
76
|
+
{
|
|
77
|
+
WAL_COMPRESSION_NONE = 0,
|
|
78
|
+
WAL_COMPRESSION_PGLZ,
|
|
79
|
+
WAL_COMPRESSION_LZ4,
|
|
80
|
+
WAL_COMPRESSION_ZSTD
|
|
81
|
+
} WalCompression;
|
|
82
|
+
|
|
169
83
|
/* Recovery states */
|
|
170
84
|
typedef enum RecoveryState
|
|
171
85
|
{
|
|
@@ -182,7 +96,6 @@ extern PGDLLIMPORT int wal_level;
|
|
|
182
96
|
/* Is WAL archiving enabled always (even during recovery)? */
|
|
183
97
|
#define XLogArchivingAlways() \
|
|
184
98
|
(AssertMacro(XLogArchiveMode == ARCHIVE_MODE_OFF || wal_level >= WAL_LEVEL_REPLICA), XLogArchiveMode == ARCHIVE_MODE_ALWAYS)
|
|
185
|
-
#define XLogArchiveCommandSet() (XLogArchiveCommand[0] != '\0')
|
|
186
99
|
|
|
187
100
|
/*
|
|
188
101
|
* Is WAL-logging necessary for archival or log-shipping, or can we skip
|
|
@@ -208,7 +121,7 @@ extern PGDLLIMPORT int wal_level;
|
|
|
208
121
|
#define XLogLogicalInfoActive() (wal_level >= WAL_LEVEL_LOGICAL)
|
|
209
122
|
|
|
210
123
|
#ifdef WAL_DEBUG
|
|
211
|
-
extern bool XLOG_DEBUG;
|
|
124
|
+
extern PGDLLIMPORT bool XLOG_DEBUG;
|
|
212
125
|
#endif
|
|
213
126
|
|
|
214
127
|
/*
|
|
@@ -262,7 +175,7 @@ typedef struct CheckpointStatsData
|
|
|
262
175
|
* entire sync phase. */
|
|
263
176
|
} CheckpointStatsData;
|
|
264
177
|
|
|
265
|
-
extern CheckpointStatsData CheckpointStats;
|
|
178
|
+
extern PGDLLIMPORT CheckpointStatsData CheckpointStats;
|
|
266
179
|
|
|
267
180
|
/*
|
|
268
181
|
* GetWALAvailability return codes
|
|
@@ -282,12 +195,13 @@ struct XLogRecData;
|
|
|
282
195
|
extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata,
|
|
283
196
|
XLogRecPtr fpw_lsn,
|
|
284
197
|
uint8 flags,
|
|
285
|
-
int num_fpi
|
|
198
|
+
int num_fpi,
|
|
199
|
+
bool topxid_included);
|
|
286
200
|
extern void XLogFlush(XLogRecPtr RecPtr);
|
|
287
201
|
extern bool XLogBackgroundFlush(void);
|
|
288
202
|
extern bool XLogNeedsFlush(XLogRecPtr RecPtr);
|
|
289
|
-
extern int XLogFileInit(XLogSegNo segno,
|
|
290
|
-
extern int XLogFileOpen(XLogSegNo segno);
|
|
203
|
+
extern int XLogFileInit(XLogSegNo segno, TimeLineID tli);
|
|
204
|
+
extern int XLogFileOpen(XLogSegNo segno, TimeLineID tli);
|
|
291
205
|
|
|
292
206
|
extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli);
|
|
293
207
|
extern XLogSegNo XLogGetLastRemovedSegno(void);
|
|
@@ -298,23 +212,14 @@ extern void xlog_redo(XLogReaderState *record);
|
|
|
298
212
|
extern void xlog_desc(StringInfo buf, XLogReaderState *record);
|
|
299
213
|
extern const char *xlog_identify(uint8 info);
|
|
300
214
|
|
|
301
|
-
extern void issue_xlog_fsync(int fd, XLogSegNo segno);
|
|
215
|
+
extern void issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli);
|
|
302
216
|
|
|
303
217
|
extern bool RecoveryInProgress(void);
|
|
304
218
|
extern RecoveryState GetRecoveryState(void);
|
|
305
|
-
extern bool HotStandbyActive(void);
|
|
306
|
-
extern bool HotStandbyActiveInReplay(void);
|
|
307
219
|
extern bool XLogInsertAllowed(void);
|
|
308
|
-
extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream);
|
|
309
|
-
extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI);
|
|
310
220
|
extern XLogRecPtr GetXLogInsertRecPtr(void);
|
|
311
221
|
extern XLogRecPtr GetXLogWriteRecPtr(void);
|
|
312
|
-
extern bool RecoveryIsPaused(void);
|
|
313
|
-
extern void SetRecoveryPause(bool recoveryPause);
|
|
314
|
-
extern TimestampTz GetLatestXTime(void);
|
|
315
|
-
extern TimestampTz GetCurrentChunkReplayStartTime(void);
|
|
316
222
|
|
|
317
|
-
extern void UpdateControlFile(void);
|
|
318
223
|
extern uint64 GetSystemIdentifier(void);
|
|
319
224
|
extern char *GetMockAuthenticationNonce(void);
|
|
320
225
|
extern bool DataChecksumsEnabled(void);
|
|
@@ -325,32 +230,35 @@ extern void BootStrapXLOG(void);
|
|
|
325
230
|
extern void LocalProcessControlFile(bool reset);
|
|
326
231
|
extern void StartupXLOG(void);
|
|
327
232
|
extern void ShutdownXLOG(int code, Datum arg);
|
|
328
|
-
extern void InitXLOGAccess(void);
|
|
329
233
|
extern void CreateCheckPoint(int flags);
|
|
330
234
|
extern bool CreateRestartPoint(int flags);
|
|
331
235
|
extern WALAvailability GetWALAvailability(XLogRecPtr targetLSN);
|
|
332
|
-
extern XLogRecPtr CalculateMaxmumSafeLSN(void);
|
|
333
236
|
extern void XLogPutNextOid(Oid nextOid);
|
|
334
237
|
extern XLogRecPtr XLogRestorePoint(const char *rpName);
|
|
335
238
|
extern void UpdateFullPageWrites(void);
|
|
336
239
|
extern void GetFullPageWriteInfo(XLogRecPtr *RedoRecPtr_p, bool *doPageWrites_p);
|
|
337
240
|
extern XLogRecPtr GetRedoRecPtr(void);
|
|
338
241
|
extern XLogRecPtr GetInsertRecPtr(void);
|
|
339
|
-
extern XLogRecPtr GetFlushRecPtr(
|
|
242
|
+
extern XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI);
|
|
243
|
+
extern TimeLineID GetWALInsertionTimeLine(void);
|
|
340
244
|
extern XLogRecPtr GetLastImportantRecPtr(void);
|
|
341
|
-
extern void RemovePromoteSignalFiles(void);
|
|
342
245
|
|
|
343
|
-
extern bool PromoteIsTriggered(void);
|
|
344
|
-
extern bool CheckPromoteSignal(void);
|
|
345
|
-
extern void WakeupRecovery(void);
|
|
346
246
|
extern void SetWalWriterSleeping(bool sleeping);
|
|
347
247
|
|
|
348
|
-
extern void StartupRequestWalReceiverRestart(void);
|
|
349
|
-
extern void XLogRequestWalReceiverReply(void);
|
|
350
|
-
|
|
351
248
|
extern void assign_max_wal_size(int newval, void *extra);
|
|
352
249
|
extern void assign_checkpoint_completion_target(double newval, void *extra);
|
|
353
250
|
|
|
251
|
+
/*
|
|
252
|
+
* Routines used by xlogrecovery.c to call back into xlog.c during recovery.
|
|
253
|
+
*/
|
|
254
|
+
extern void RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI);
|
|
255
|
+
extern bool XLogCheckpointNeeded(XLogSegNo new_segno);
|
|
256
|
+
extern void SwitchIntoArchiveRecovery(XLogRecPtr EndRecPtr, TimeLineID replayTLI);
|
|
257
|
+
extern void ReachedEndOfBackup(XLogRecPtr EndRecPtr, TimeLineID tli);
|
|
258
|
+
extern void SetInstallXLogFileSegmentActive(void);
|
|
259
|
+
extern bool IsInstallXLogFileSegmentActive(void);
|
|
260
|
+
extern void XLogShutdownWalRcv(void);
|
|
261
|
+
|
|
354
262
|
/*
|
|
355
263
|
* Routines to start, stop, and get status of a base backup.
|
|
356
264
|
*/
|
|
@@ -368,15 +276,13 @@ extern void assign_checkpoint_completion_target(double newval, void *extra);
|
|
|
368
276
|
typedef enum SessionBackupState
|
|
369
277
|
{
|
|
370
278
|
SESSION_BACKUP_NONE,
|
|
371
|
-
|
|
372
|
-
SESSION_BACKUP_NON_EXCLUSIVE
|
|
279
|
+
SESSION_BACKUP_RUNNING,
|
|
373
280
|
} SessionBackupState;
|
|
374
281
|
|
|
375
|
-
extern XLogRecPtr
|
|
282
|
+
extern XLogRecPtr do_pg_backup_start(const char *backupidstr, bool fast,
|
|
376
283
|
TimeLineID *starttli_p, StringInfo labelfile,
|
|
377
|
-
List **tablespaces, StringInfo tblspcmapfile
|
|
378
|
-
|
|
379
|
-
extern XLogRecPtr do_pg_stop_backup(char *labelfile, bool waitforarchive,
|
|
284
|
+
List **tablespaces, StringInfo tblspcmapfile);
|
|
285
|
+
extern XLogRecPtr do_pg_backup_stop(char *labelfile, bool waitforarchive,
|
|
380
286
|
TimeLineID *stoptli_p);
|
|
381
287
|
extern void do_pg_abort_backup(int code, Datum arg);
|
|
382
288
|
extern void register_persistent_abort_backup_handler(void);
|
|
@@ -393,6 +299,5 @@ extern SessionBackupState get_backup_status(void);
|
|
|
393
299
|
|
|
394
300
|
/* files to signal promotion to primary */
|
|
395
301
|
#define PROMOTE_SIGNAL_FILE "promote"
|
|
396
|
-
#define FALLBACK_PROMOTE_SIGNAL_FILE "fallback_promote"
|
|
397
302
|
|
|
398
303
|
#endif /* XLOG_H */
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Note: This file must be includable in both frontend and backend contexts,
|
|
12
12
|
* to allow stand-alone tools like pg_receivewal to deal with WAL files.
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
* src/include/access/xlog_internal.h
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
/*
|
|
32
32
|
* Each page of XLOG file has a header like this:
|
|
33
33
|
*/
|
|
34
|
-
#define XLOG_PAGE_MAGIC
|
|
34
|
+
#define XLOG_PAGE_MAGIC 0xD110 /* can be used as WAL version indicator */
|
|
35
35
|
|
|
36
36
|
typedef struct XLogPageHeaderData
|
|
37
37
|
{
|
|
@@ -43,11 +43,8 @@ typedef struct XLogPageHeaderData
|
|
|
43
43
|
/*
|
|
44
44
|
* When there is not enough space on current page for whole record, we
|
|
45
45
|
* continue on the next page. xlp_rem_len is the number of bytes
|
|
46
|
-
* remaining from a previous page
|
|
47
|
-
*
|
|
48
|
-
* Note that xlp_rem_len includes backup-block data; that is, it tracks
|
|
49
|
-
* xl_tot_len not xl_len in the initial header. Also note that the
|
|
50
|
-
* continuation data isn't necessarily aligned.
|
|
46
|
+
* remaining from a previous page; it tracks xl_tot_len in the initial
|
|
47
|
+
* header. Note that the continuation data isn't necessarily aligned.
|
|
51
48
|
*/
|
|
52
49
|
uint32 xlp_rem_len; /* total len of remaining data for record */
|
|
53
50
|
} XLogPageHeaderData;
|
|
@@ -79,8 +76,10 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader;
|
|
|
79
76
|
#define XLP_LONG_HEADER 0x0002
|
|
80
77
|
/* This flag indicates backup blocks starting in this page are optional */
|
|
81
78
|
#define XLP_BKP_REMOVABLE 0x0004
|
|
79
|
+
/* Replaces a missing contrecord; see CreateOverwriteContrecordRecord */
|
|
80
|
+
#define XLP_FIRST_IS_OVERWRITE_CONTRECORD 0x0008
|
|
82
81
|
/* All defined flag bits in xlp_info (used for validity checking of header) */
|
|
83
|
-
#define XLP_ALL_FLAGS
|
|
82
|
+
#define XLP_ALL_FLAGS 0x000F
|
|
84
83
|
|
|
85
84
|
#define XLogPageHeaderSize(hdr) \
|
|
86
85
|
(((hdr)->xlp_info & XLP_LONG_HEADER) ? SizeOfXLogLongPHD : SizeOfXLogShortPHD)
|
|
@@ -252,6 +251,13 @@ typedef struct xl_restore_point
|
|
|
252
251
|
char rp_name[MAXFNAMELEN];
|
|
253
252
|
} xl_restore_point;
|
|
254
253
|
|
|
254
|
+
/* Overwrite of prior contrecord */
|
|
255
|
+
typedef struct xl_overwrite_contrecord
|
|
256
|
+
{
|
|
257
|
+
XLogRecPtr overwritten_lsn;
|
|
258
|
+
TimestampTz overwrite_time;
|
|
259
|
+
} xl_overwrite_contrecord;
|
|
260
|
+
|
|
255
261
|
/* End of recovery mark, when we don't do an END_OF_RECOVERY checkpoint */
|
|
256
262
|
typedef struct xl_end_of_recovery
|
|
257
263
|
{
|
|
@@ -281,6 +287,9 @@ typedef enum
|
|
|
281
287
|
RECOVERY_TARGET_ACTION_SHUTDOWN
|
|
282
288
|
} RecoveryTargetAction;
|
|
283
289
|
|
|
290
|
+
struct LogicalDecodingContext;
|
|
291
|
+
struct XLogRecordBuffer;
|
|
292
|
+
|
|
284
293
|
/*
|
|
285
294
|
* Method table for resource managers.
|
|
286
295
|
*
|
|
@@ -295,7 +304,8 @@ typedef enum
|
|
|
295
304
|
* rm_mask takes as input a page modified by the resource manager and masks
|
|
296
305
|
* out bits that shouldn't be flagged by wal_consistency_checking.
|
|
297
306
|
*
|
|
298
|
-
* RmgrTable[] is indexed by RmgrId values (see rmgrlist.h).
|
|
307
|
+
* RmgrTable[] is indexed by RmgrId values (see rmgrlist.h). If rm_name is
|
|
308
|
+
* NULL, the corresponding RmgrTable entry is considered invalid.
|
|
299
309
|
*/
|
|
300
310
|
typedef struct RmgrData
|
|
301
311
|
{
|
|
@@ -306,9 +316,31 @@ typedef struct RmgrData
|
|
|
306
316
|
void (*rm_startup) (void);
|
|
307
317
|
void (*rm_cleanup) (void);
|
|
308
318
|
void (*rm_mask) (char *pagedata, BlockNumber blkno);
|
|
319
|
+
void (*rm_decode) (struct LogicalDecodingContext *ctx,
|
|
320
|
+
struct XLogRecordBuffer *buf);
|
|
309
321
|
} RmgrData;
|
|
310
322
|
|
|
311
|
-
extern
|
|
323
|
+
extern PGDLLIMPORT RmgrData RmgrTable[];
|
|
324
|
+
extern void RmgrStartup(void);
|
|
325
|
+
extern void RmgrCleanup(void);
|
|
326
|
+
extern void RmgrNotFound(RmgrId rmid);
|
|
327
|
+
extern void RegisterCustomRmgr(RmgrId rmid, RmgrData *rmgr);
|
|
328
|
+
|
|
329
|
+
#ifndef FRONTEND
|
|
330
|
+
static inline bool
|
|
331
|
+
RmgrIdExists(RmgrId rmid)
|
|
332
|
+
{
|
|
333
|
+
return RmgrTable[rmid].rm_name != NULL;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
static inline RmgrData
|
|
337
|
+
GetRmgr(RmgrId rmid)
|
|
338
|
+
{
|
|
339
|
+
if (unlikely(!RmgrIdExists(rmid)))
|
|
340
|
+
RmgrNotFound(rmid);
|
|
341
|
+
return RmgrTable[rmid];
|
|
342
|
+
}
|
|
343
|
+
#endif
|
|
312
344
|
|
|
313
345
|
/*
|
|
314
346
|
* Exported to support xlog switching from checkpointer
|
|
@@ -318,13 +350,17 @@ extern XLogRecPtr RequestXLogSwitch(bool mark_unimportant);
|
|
|
318
350
|
|
|
319
351
|
extern void GetOldestRestartPoint(XLogRecPtr *oldrecptr, TimeLineID *oldtli);
|
|
320
352
|
|
|
353
|
+
extern void XLogRecGetBlockRefInfo(XLogReaderState *record, bool pretty,
|
|
354
|
+
bool detailed_format, StringInfo buf,
|
|
355
|
+
uint32 *fpi_len);
|
|
356
|
+
|
|
321
357
|
/*
|
|
322
358
|
* Exported for the functions in timeline.c and xlogarchive.c. Only valid
|
|
323
359
|
* in the startup process.
|
|
324
360
|
*/
|
|
325
|
-
extern bool ArchiveRecoveryRequested;
|
|
326
|
-
extern bool InArchiveRecovery;
|
|
327
|
-
extern bool StandbyMode;
|
|
328
|
-
extern char *recoveryRestoreCommand;
|
|
361
|
+
extern PGDLLIMPORT bool ArchiveRecoveryRequested;
|
|
362
|
+
extern PGDLLIMPORT bool InArchiveRecovery;
|
|
363
|
+
extern PGDLLIMPORT bool StandbyMode;
|
|
364
|
+
extern PGDLLIMPORT char *recoveryRestoreCommand;
|
|
329
365
|
|
|
330
366
|
#endif /* XLOG_INTERNAL_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Postgres write-ahead log manager record pointer and
|
|
5
5
|
* timeline number definitions
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/access/xlogdefs.h
|
|
@@ -35,6 +35,13 @@ typedef uint64 XLogRecPtr;
|
|
|
35
35
|
*/
|
|
36
36
|
#define FirstNormalUnloggedLSN ((XLogRecPtr) 1000)
|
|
37
37
|
|
|
38
|
+
/*
|
|
39
|
+
* Handy macro for printing XLogRecPtr in conventional format, e.g.,
|
|
40
|
+
*
|
|
41
|
+
* printf("%X/%X", LSN_FORMAT_ARGS(lsn));
|
|
42
|
+
*/
|
|
43
|
+
#define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
|
|
44
|
+
|
|
38
45
|
/*
|
|
39
46
|
* XLogSegNo - physical log file sequence number.
|
|
40
47
|
*/
|
|
@@ -57,21 +64,6 @@ typedef uint32 TimeLineID;
|
|
|
57
64
|
*/
|
|
58
65
|
typedef uint16 RepOriginId;
|
|
59
66
|
|
|
60
|
-
/*
|
|
61
|
-
* Because O_DIRECT bypasses the kernel buffers, and because we never
|
|
62
|
-
* read those buffers except during crash recovery or if wal_level != minimal,
|
|
63
|
-
* it is a win to use it in all cases where we sync on each write(). We could
|
|
64
|
-
* allow O_DIRECT with fsync(), but it is unclear if fsync() could process
|
|
65
|
-
* writes not buffered in the kernel. Also, O_DIRECT is never enough to force
|
|
66
|
-
* data to the drives, it merely tries to bypass the kernel cache, so we still
|
|
67
|
-
* need O_SYNC/O_DSYNC.
|
|
68
|
-
*/
|
|
69
|
-
#ifdef O_DIRECT
|
|
70
|
-
#define PG_O_DIRECT O_DIRECT
|
|
71
|
-
#else
|
|
72
|
-
#define PG_O_DIRECT 0
|
|
73
|
-
#endif
|
|
74
|
-
|
|
75
67
|
/*
|
|
76
68
|
* This chunk of hackery attempts to determine which file sync methods
|
|
77
69
|
* are available on the current platform, and to choose an appropriate
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* xlogprefetcher.h
|
|
4
|
+
* Declarations for the recovery prefetching module.
|
|
5
|
+
*
|
|
6
|
+
* Portions Copyright (c) 2022, PostgreSQL Global Development Group
|
|
7
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
|
+
*
|
|
9
|
+
* IDENTIFICATION
|
|
10
|
+
* src/include/access/xlogprefetcher.h
|
|
11
|
+
*-------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
#ifndef XLOGPREFETCHER_H
|
|
14
|
+
#define XLOGPREFETCHER_H
|
|
15
|
+
|
|
16
|
+
#include "access/xlogdefs.h"
|
|
17
|
+
#include "access/xlogreader.h"
|
|
18
|
+
#include "access/xlogrecord.h"
|
|
19
|
+
|
|
20
|
+
/* GUCs */
|
|
21
|
+
extern PGDLLIMPORT int recovery_prefetch;
|
|
22
|
+
|
|
23
|
+
/* Possible values for recovery_prefetch */
|
|
24
|
+
typedef enum
|
|
25
|
+
{
|
|
26
|
+
RECOVERY_PREFETCH_OFF,
|
|
27
|
+
RECOVERY_PREFETCH_ON,
|
|
28
|
+
RECOVERY_PREFETCH_TRY
|
|
29
|
+
} RecoveryPrefetchValue;
|
|
30
|
+
|
|
31
|
+
struct XLogPrefetcher;
|
|
32
|
+
typedef struct XLogPrefetcher XLogPrefetcher;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
extern void XLogPrefetchReconfigure(void);
|
|
36
|
+
|
|
37
|
+
extern size_t XLogPrefetchShmemSize(void);
|
|
38
|
+
extern void XLogPrefetchShmemInit(void);
|
|
39
|
+
|
|
40
|
+
extern void XLogPrefetchResetStats(void);
|
|
41
|
+
|
|
42
|
+
extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader);
|
|
43
|
+
extern void XLogPrefetcherFree(XLogPrefetcher *prefetcher);
|
|
44
|
+
|
|
45
|
+
extern XLogReaderState *XLogPrefetcherGetReader(XLogPrefetcher *prefetcher);
|
|
46
|
+
|
|
47
|
+
extern void XLogPrefetcherBeginRead(XLogPrefetcher *prefetcher,
|
|
48
|
+
XLogRecPtr recPtr);
|
|
49
|
+
|
|
50
|
+
extern XLogRecord *XLogPrefetcherReadRecord(XLogPrefetcher *prefetcher,
|
|
51
|
+
char **errmsg);
|
|
52
|
+
|
|
53
|
+
extern void XLogPrefetcherComputeStats(XLogPrefetcher *prefetcher);
|
|
54
|
+
|
|
55
|
+
#endif
|