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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* reorderbuffer.h
|
|
3
3
|
* PostgreSQL logical replay/reorder buffer management.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2012-
|
|
5
|
+
* Copyright (c) 2012-2022, PostgreSQL Global Development Group
|
|
6
6
|
*
|
|
7
7
|
* src/include/replication/reorderbuffer.h
|
|
8
8
|
*/
|
|
@@ -46,24 +46,26 @@ typedef struct ReorderBufferTupleBuf
|
|
|
46
46
|
* changes. Users of the decoding facilities will never see changes with
|
|
47
47
|
* *_INTERNAL_* actions.
|
|
48
48
|
*
|
|
49
|
-
* The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM
|
|
50
|
-
* "speculative insertions",
|
|
51
|
-
* used by INSERT .. ON CONFLICT .. UPDATE. Users of
|
|
52
|
-
* have to care about these.
|
|
49
|
+
* The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM, and INTERNAL_SPEC_ABORT
|
|
50
|
+
* changes concern "speculative insertions", their confirmation, and abort
|
|
51
|
+
* respectively. They're used by INSERT .. ON CONFLICT .. UPDATE. Users of
|
|
52
|
+
* logical decoding don't have to care about these.
|
|
53
53
|
*/
|
|
54
|
-
enum ReorderBufferChangeType
|
|
54
|
+
typedef enum ReorderBufferChangeType
|
|
55
55
|
{
|
|
56
56
|
REORDER_BUFFER_CHANGE_INSERT,
|
|
57
57
|
REORDER_BUFFER_CHANGE_UPDATE,
|
|
58
58
|
REORDER_BUFFER_CHANGE_DELETE,
|
|
59
59
|
REORDER_BUFFER_CHANGE_MESSAGE,
|
|
60
|
+
REORDER_BUFFER_CHANGE_INVALIDATION,
|
|
60
61
|
REORDER_BUFFER_CHANGE_INTERNAL_SNAPSHOT,
|
|
61
62
|
REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID,
|
|
62
63
|
REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID,
|
|
63
64
|
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT,
|
|
64
65
|
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM,
|
|
66
|
+
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
|
|
65
67
|
REORDER_BUFFER_CHANGE_TRUNCATE
|
|
66
|
-
};
|
|
68
|
+
} ReorderBufferChangeType;
|
|
67
69
|
|
|
68
70
|
/* forward declaration */
|
|
69
71
|
struct ReorderBufferTXN;
|
|
@@ -80,7 +82,7 @@ typedef struct ReorderBufferChange
|
|
|
80
82
|
XLogRecPtr lsn;
|
|
81
83
|
|
|
82
84
|
/* The type of change. */
|
|
83
|
-
|
|
85
|
+
ReorderBufferChangeType action;
|
|
84
86
|
|
|
85
87
|
/* Transaction this change belongs to. */
|
|
86
88
|
struct ReorderBufferTXN *txn;
|
|
@@ -149,6 +151,13 @@ typedef struct ReorderBufferChange
|
|
|
149
151
|
CommandId cmax;
|
|
150
152
|
CommandId combocid;
|
|
151
153
|
} tuplecid;
|
|
154
|
+
|
|
155
|
+
/* Invalidation. */
|
|
156
|
+
struct
|
|
157
|
+
{
|
|
158
|
+
uint32 ninvalidations; /* Number of messages */
|
|
159
|
+
SharedInvalidationMessage *invalidations; /* invalidation message */
|
|
160
|
+
} inval;
|
|
152
161
|
} data;
|
|
153
162
|
|
|
154
163
|
/*
|
|
@@ -162,6 +171,11 @@ typedef struct ReorderBufferChange
|
|
|
162
171
|
#define RBTXN_HAS_CATALOG_CHANGES 0x0001
|
|
163
172
|
#define RBTXN_IS_SUBXACT 0x0002
|
|
164
173
|
#define RBTXN_IS_SERIALIZED 0x0004
|
|
174
|
+
#define RBTXN_IS_SERIALIZED_CLEAR 0x0008
|
|
175
|
+
#define RBTXN_IS_STREAMED 0x0010
|
|
176
|
+
#define RBTXN_HAS_PARTIAL_CHANGE 0x0020
|
|
177
|
+
#define RBTXN_PREPARE 0x0040
|
|
178
|
+
#define RBTXN_SKIPPED_PREPARE 0x0080
|
|
165
179
|
|
|
166
180
|
/* Does the transaction have catalog changes? */
|
|
167
181
|
#define rbtxn_has_catalog_changes(txn) \
|
|
@@ -181,6 +195,44 @@ typedef struct ReorderBufferChange
|
|
|
181
195
|
((txn)->txn_flags & RBTXN_IS_SERIALIZED) != 0 \
|
|
182
196
|
)
|
|
183
197
|
|
|
198
|
+
/* Has this transaction ever been spilled to disk? */
|
|
199
|
+
#define rbtxn_is_serialized_clear(txn) \
|
|
200
|
+
( \
|
|
201
|
+
((txn)->txn_flags & RBTXN_IS_SERIALIZED_CLEAR) != 0 \
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
/* Has this transaction contains partial changes? */
|
|
205
|
+
#define rbtxn_has_partial_change(txn) \
|
|
206
|
+
( \
|
|
207
|
+
((txn)->txn_flags & RBTXN_HAS_PARTIAL_CHANGE) != 0 \
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
/*
|
|
211
|
+
* Has this transaction been streamed to downstream?
|
|
212
|
+
*
|
|
213
|
+
* (It's not possible to deduce this from nentries and nentries_mem for
|
|
214
|
+
* various reasons. For example, all changes may be in subtransactions in
|
|
215
|
+
* which case we'd have nentries==0 for the toplevel one, which would say
|
|
216
|
+
* nothing about the streaming. So we maintain this flag, but only for the
|
|
217
|
+
* toplevel transaction.)
|
|
218
|
+
*/
|
|
219
|
+
#define rbtxn_is_streamed(txn) \
|
|
220
|
+
( \
|
|
221
|
+
((txn)->txn_flags & RBTXN_IS_STREAMED) != 0 \
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
/* Has this transaction been prepared? */
|
|
225
|
+
#define rbtxn_prepared(txn) \
|
|
226
|
+
( \
|
|
227
|
+
((txn)->txn_flags & RBTXN_PREPARE) != 0 \
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
/* prepare for this transaction skipped? */
|
|
231
|
+
#define rbtxn_skip_prepared(txn) \
|
|
232
|
+
( \
|
|
233
|
+
((txn)->txn_flags & RBTXN_SKIPPED_PREPARE) != 0 \
|
|
234
|
+
)
|
|
235
|
+
|
|
184
236
|
typedef struct ReorderBufferTXN
|
|
185
237
|
{
|
|
186
238
|
/* See above */
|
|
@@ -192,6 +244,12 @@ typedef struct ReorderBufferTXN
|
|
|
192
244
|
/* Xid of top-level transaction, if known */
|
|
193
245
|
TransactionId toplevel_xid;
|
|
194
246
|
|
|
247
|
+
/*
|
|
248
|
+
* Global transaction id required for identification of prepared
|
|
249
|
+
* transactions.
|
|
250
|
+
*/
|
|
251
|
+
char *gid;
|
|
252
|
+
|
|
195
253
|
/*
|
|
196
254
|
* LSN of the first data carrying, WAL record with knowledge about this
|
|
197
255
|
* xid. This is allowed to *not* be first record adorned with this xid, if
|
|
@@ -200,10 +258,11 @@ typedef struct ReorderBufferTXN
|
|
|
200
258
|
XLogRecPtr first_lsn;
|
|
201
259
|
|
|
202
260
|
/* ----
|
|
203
|
-
* LSN of the record that lead to this xact to be committed or
|
|
261
|
+
* LSN of the record that lead to this xact to be prepared or committed or
|
|
204
262
|
* aborted. This can be a
|
|
205
263
|
* * plain commit record
|
|
206
264
|
* * plain commit record, of a parent transaction
|
|
265
|
+
* * prepared tansaction
|
|
207
266
|
* * prepared transaction commit
|
|
208
267
|
* * plain abort record
|
|
209
268
|
* * prepared transaction abort
|
|
@@ -220,6 +279,9 @@ typedef struct ReorderBufferTXN
|
|
|
220
279
|
*/
|
|
221
280
|
XLogRecPtr end_lsn;
|
|
222
281
|
|
|
282
|
+
/* Toplevel transaction for this subxact (NULL for top-level). */
|
|
283
|
+
struct ReorderBufferTXN *toptxn;
|
|
284
|
+
|
|
223
285
|
/*
|
|
224
286
|
* LSN of the last lsn at which snapshot information reside, so we can
|
|
225
287
|
* restart decoding from there and fully recover this transaction from
|
|
@@ -232,9 +294,14 @@ typedef struct ReorderBufferTXN
|
|
|
232
294
|
XLogRecPtr origin_lsn;
|
|
233
295
|
|
|
234
296
|
/*
|
|
235
|
-
* Commit time, only known when we read the actual commit
|
|
297
|
+
* Commit or Prepare time, only known when we read the actual commit or
|
|
298
|
+
* prepare record.
|
|
236
299
|
*/
|
|
237
|
-
|
|
300
|
+
union
|
|
301
|
+
{
|
|
302
|
+
TimestampTz commit_time;
|
|
303
|
+
TimestampTz prepare_time;
|
|
304
|
+
} xact_time;
|
|
238
305
|
|
|
239
306
|
/*
|
|
240
307
|
* The base snapshot is used to decode all changes until either this
|
|
@@ -245,6 +312,13 @@ typedef struct ReorderBufferTXN
|
|
|
245
312
|
XLogRecPtr base_snapshot_lsn;
|
|
246
313
|
dlist_node base_snapshot_node; /* link in txns_by_base_snapshot_lsn */
|
|
247
314
|
|
|
315
|
+
/*
|
|
316
|
+
* Snapshot/CID from the previous streaming run. Only valid for already
|
|
317
|
+
* streamed transactions (NULL/InvalidCommandId otherwise).
|
|
318
|
+
*/
|
|
319
|
+
Snapshot snapshot_now;
|
|
320
|
+
CommandId command_id;
|
|
321
|
+
|
|
248
322
|
/*
|
|
249
323
|
* How many ReorderBufferChange's do we have in this txn.
|
|
250
324
|
*
|
|
@@ -259,8 +333,8 @@ typedef struct ReorderBufferTXN
|
|
|
259
333
|
uint64 nentries_mem;
|
|
260
334
|
|
|
261
335
|
/*
|
|
262
|
-
* List of ReorderBufferChange structs, including new Snapshots
|
|
263
|
-
* CommandIds
|
|
336
|
+
* List of ReorderBufferChange structs, including new Snapshots, new
|
|
337
|
+
* CommandIds and command invalidation messages.
|
|
264
338
|
*/
|
|
265
339
|
dlist_head changes;
|
|
266
340
|
|
|
@@ -310,6 +384,17 @@ typedef struct ReorderBufferTXN
|
|
|
310
384
|
* Size of this transaction (changes currently in memory, in bytes).
|
|
311
385
|
*/
|
|
312
386
|
Size size;
|
|
387
|
+
|
|
388
|
+
/* Size of top-transaction including sub-transactions. */
|
|
389
|
+
Size total_size;
|
|
390
|
+
|
|
391
|
+
/* If we have detected concurrent abort then ignore future changes. */
|
|
392
|
+
bool concurrent_abort;
|
|
393
|
+
|
|
394
|
+
/*
|
|
395
|
+
* Private data pointer of the output plugin.
|
|
396
|
+
*/
|
|
397
|
+
void *output_plugin_private;
|
|
313
398
|
} ReorderBufferTXN;
|
|
314
399
|
|
|
315
400
|
/* so we can define the callbacks used inside struct ReorderBuffer itself */
|
|
@@ -345,6 +430,80 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
|
|
|
345
430
|
const char *prefix, Size sz,
|
|
346
431
|
const char *message);
|
|
347
432
|
|
|
433
|
+
/* begin prepare callback signature */
|
|
434
|
+
typedef void (*ReorderBufferBeginPrepareCB) (ReorderBuffer *rb,
|
|
435
|
+
ReorderBufferTXN *txn);
|
|
436
|
+
|
|
437
|
+
/* prepare callback signature */
|
|
438
|
+
typedef void (*ReorderBufferPrepareCB) (ReorderBuffer *rb,
|
|
439
|
+
ReorderBufferTXN *txn,
|
|
440
|
+
XLogRecPtr prepare_lsn);
|
|
441
|
+
|
|
442
|
+
/* commit prepared callback signature */
|
|
443
|
+
typedef void (*ReorderBufferCommitPreparedCB) (ReorderBuffer *rb,
|
|
444
|
+
ReorderBufferTXN *txn,
|
|
445
|
+
XLogRecPtr commit_lsn);
|
|
446
|
+
|
|
447
|
+
/* rollback prepared callback signature */
|
|
448
|
+
typedef void (*ReorderBufferRollbackPreparedCB) (ReorderBuffer *rb,
|
|
449
|
+
ReorderBufferTXN *txn,
|
|
450
|
+
XLogRecPtr prepare_end_lsn,
|
|
451
|
+
TimestampTz prepare_time);
|
|
452
|
+
|
|
453
|
+
/* start streaming transaction callback signature */
|
|
454
|
+
typedef void (*ReorderBufferStreamStartCB) (
|
|
455
|
+
ReorderBuffer *rb,
|
|
456
|
+
ReorderBufferTXN *txn,
|
|
457
|
+
XLogRecPtr first_lsn);
|
|
458
|
+
|
|
459
|
+
/* stop streaming transaction callback signature */
|
|
460
|
+
typedef void (*ReorderBufferStreamStopCB) (
|
|
461
|
+
ReorderBuffer *rb,
|
|
462
|
+
ReorderBufferTXN *txn,
|
|
463
|
+
XLogRecPtr last_lsn);
|
|
464
|
+
|
|
465
|
+
/* discard streamed transaction callback signature */
|
|
466
|
+
typedef void (*ReorderBufferStreamAbortCB) (
|
|
467
|
+
ReorderBuffer *rb,
|
|
468
|
+
ReorderBufferTXN *txn,
|
|
469
|
+
XLogRecPtr abort_lsn);
|
|
470
|
+
|
|
471
|
+
/* prepare streamed transaction callback signature */
|
|
472
|
+
typedef void (*ReorderBufferStreamPrepareCB) (
|
|
473
|
+
ReorderBuffer *rb,
|
|
474
|
+
ReorderBufferTXN *txn,
|
|
475
|
+
XLogRecPtr prepare_lsn);
|
|
476
|
+
|
|
477
|
+
/* commit streamed transaction callback signature */
|
|
478
|
+
typedef void (*ReorderBufferStreamCommitCB) (
|
|
479
|
+
ReorderBuffer *rb,
|
|
480
|
+
ReorderBufferTXN *txn,
|
|
481
|
+
XLogRecPtr commit_lsn);
|
|
482
|
+
|
|
483
|
+
/* stream change callback signature */
|
|
484
|
+
typedef void (*ReorderBufferStreamChangeCB) (
|
|
485
|
+
ReorderBuffer *rb,
|
|
486
|
+
ReorderBufferTXN *txn,
|
|
487
|
+
Relation relation,
|
|
488
|
+
ReorderBufferChange *change);
|
|
489
|
+
|
|
490
|
+
/* stream message callback signature */
|
|
491
|
+
typedef void (*ReorderBufferStreamMessageCB) (
|
|
492
|
+
ReorderBuffer *rb,
|
|
493
|
+
ReorderBufferTXN *txn,
|
|
494
|
+
XLogRecPtr message_lsn,
|
|
495
|
+
bool transactional,
|
|
496
|
+
const char *prefix, Size sz,
|
|
497
|
+
const char *message);
|
|
498
|
+
|
|
499
|
+
/* stream truncate callback signature */
|
|
500
|
+
typedef void (*ReorderBufferStreamTruncateCB) (
|
|
501
|
+
ReorderBuffer *rb,
|
|
502
|
+
ReorderBufferTXN *txn,
|
|
503
|
+
int nrelations,
|
|
504
|
+
Relation relations[],
|
|
505
|
+
ReorderBufferChange *change);
|
|
506
|
+
|
|
348
507
|
struct ReorderBuffer
|
|
349
508
|
{
|
|
350
509
|
/*
|
|
@@ -383,6 +542,26 @@ struct ReorderBuffer
|
|
|
383
542
|
ReorderBufferCommitCB commit;
|
|
384
543
|
ReorderBufferMessageCB message;
|
|
385
544
|
|
|
545
|
+
/*
|
|
546
|
+
* Callbacks to be called when streaming a transaction at prepare time.
|
|
547
|
+
*/
|
|
548
|
+
ReorderBufferBeginCB begin_prepare;
|
|
549
|
+
ReorderBufferPrepareCB prepare;
|
|
550
|
+
ReorderBufferCommitPreparedCB commit_prepared;
|
|
551
|
+
ReorderBufferRollbackPreparedCB rollback_prepared;
|
|
552
|
+
|
|
553
|
+
/*
|
|
554
|
+
* Callbacks to be called when streaming a transaction.
|
|
555
|
+
*/
|
|
556
|
+
ReorderBufferStreamStartCB stream_start;
|
|
557
|
+
ReorderBufferStreamStopCB stream_stop;
|
|
558
|
+
ReorderBufferStreamAbortCB stream_abort;
|
|
559
|
+
ReorderBufferStreamPrepareCB stream_prepare;
|
|
560
|
+
ReorderBufferStreamCommitCB stream_commit;
|
|
561
|
+
ReorderBufferStreamChangeCB stream_change;
|
|
562
|
+
ReorderBufferStreamMessageCB stream_message;
|
|
563
|
+
ReorderBufferStreamTruncateCB stream_truncate;
|
|
564
|
+
|
|
386
565
|
/*
|
|
387
566
|
* Pointer that will be passed untouched to the callbacks.
|
|
388
567
|
*/
|
|
@@ -413,55 +592,94 @@ struct ReorderBuffer
|
|
|
413
592
|
|
|
414
593
|
/* memory accounting */
|
|
415
594
|
Size size;
|
|
595
|
+
|
|
596
|
+
/*
|
|
597
|
+
* Statistics about transactions spilled to disk.
|
|
598
|
+
*
|
|
599
|
+
* A single transaction may be spilled repeatedly, which is why we keep
|
|
600
|
+
* two different counters. For spilling, the transaction counter includes
|
|
601
|
+
* both toplevel transactions and subtransactions.
|
|
602
|
+
*/
|
|
603
|
+
int64 spillTxns; /* number of transactions spilled to disk */
|
|
604
|
+
int64 spillCount; /* spill-to-disk invocation counter */
|
|
605
|
+
int64 spillBytes; /* amount of data spilled to disk */
|
|
606
|
+
|
|
607
|
+
/* Statistics about transactions streamed to the decoding output plugin */
|
|
608
|
+
int64 streamTxns; /* number of transactions streamed */
|
|
609
|
+
int64 streamCount; /* streaming invocation counter */
|
|
610
|
+
int64 streamBytes; /* amount of data decoded */
|
|
611
|
+
|
|
612
|
+
/*
|
|
613
|
+
* Statistics about all the transactions sent to the decoding output
|
|
614
|
+
* plugin
|
|
615
|
+
*/
|
|
616
|
+
int64 totalTxns; /* total number of transactions sent */
|
|
617
|
+
int64 totalBytes; /* total amount of data decoded */
|
|
416
618
|
};
|
|
417
619
|
|
|
418
620
|
|
|
419
|
-
ReorderBuffer *ReorderBufferAllocate(void);
|
|
420
|
-
void
|
|
621
|
+
extern ReorderBuffer *ReorderBufferAllocate(void);
|
|
622
|
+
extern void ReorderBufferFree(ReorderBuffer *);
|
|
421
623
|
|
|
422
|
-
ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
|
|
423
|
-
void
|
|
424
|
-
ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
|
|
425
|
-
void
|
|
624
|
+
extern ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
|
|
625
|
+
extern void ReorderBufferReturnTupleBuf(ReorderBuffer *, ReorderBufferTupleBuf *tuple);
|
|
626
|
+
extern ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
|
|
627
|
+
extern void ReorderBufferReturnChange(ReorderBuffer *, ReorderBufferChange *, bool);
|
|
426
628
|
|
|
427
|
-
Oid
|
|
428
|
-
void
|
|
629
|
+
extern Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
|
|
630
|
+
extern void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
|
|
429
631
|
|
|
430
|
-
void
|
|
431
|
-
|
|
632
|
+
extern void ReorderBufferQueueChange(ReorderBuffer *, TransactionId,
|
|
633
|
+
XLogRecPtr lsn, ReorderBufferChange *,
|
|
634
|
+
bool toast_insert);
|
|
635
|
+
extern void ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn,
|
|
432
636
|
bool transactional, const char *prefix,
|
|
433
637
|
Size message_size, const char *message);
|
|
434
|
-
void
|
|
638
|
+
extern void ReorderBufferCommit(ReorderBuffer *, TransactionId,
|
|
435
639
|
XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
|
|
436
640
|
TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn);
|
|
437
|
-
void
|
|
438
|
-
|
|
641
|
+
extern void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid,
|
|
642
|
+
XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
|
|
643
|
+
XLogRecPtr two_phase_at,
|
|
644
|
+
TimestampTz commit_time,
|
|
645
|
+
RepOriginId origin_id, XLogRecPtr origin_lsn,
|
|
646
|
+
char *gid, bool is_commit);
|
|
647
|
+
extern void ReorderBufferAssignChild(ReorderBuffer *, TransactionId, TransactionId, XLogRecPtr commit_lsn);
|
|
648
|
+
extern void ReorderBufferCommitChild(ReorderBuffer *, TransactionId, TransactionId,
|
|
439
649
|
XLogRecPtr commit_lsn, XLogRecPtr end_lsn);
|
|
440
|
-
void
|
|
441
|
-
void
|
|
442
|
-
void
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
void
|
|
446
|
-
void
|
|
650
|
+
extern void ReorderBufferAbort(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
|
|
651
|
+
extern void ReorderBufferAbortOld(ReorderBuffer *, TransactionId xid);
|
|
652
|
+
extern void ReorderBufferForget(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
|
|
653
|
+
extern void ReorderBufferInvalidate(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
|
|
654
|
+
|
|
655
|
+
extern void ReorderBufferSetBaseSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
|
|
656
|
+
extern void ReorderBufferAddSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
|
|
657
|
+
extern void ReorderBufferAddNewCommandId(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
|
|
447
658
|
CommandId cid);
|
|
448
|
-
void
|
|
659
|
+
extern void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
|
|
449
660
|
RelFileNode node, ItemPointerData pt,
|
|
450
661
|
CommandId cmin, CommandId cmax, CommandId combocid);
|
|
451
|
-
void
|
|
662
|
+
extern void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
|
|
452
663
|
Size nmsgs, SharedInvalidationMessage *msgs);
|
|
453
|
-
void
|
|
664
|
+
extern void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
|
|
454
665
|
SharedInvalidationMessage *invalidations);
|
|
455
|
-
void
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
bool
|
|
666
|
+
extern void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
|
|
667
|
+
|
|
668
|
+
extern void ReorderBufferXidSetCatalogChanges(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
|
|
669
|
+
extern bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *, TransactionId xid);
|
|
670
|
+
extern bool ReorderBufferXidHasBaseSnapshot(ReorderBuffer *, TransactionId xid);
|
|
459
671
|
|
|
460
|
-
|
|
461
|
-
|
|
672
|
+
extern bool ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xid,
|
|
673
|
+
XLogRecPtr prepare_lsn, XLogRecPtr end_lsn,
|
|
674
|
+
TimestampTz prepare_time,
|
|
675
|
+
RepOriginId origin_id, XLogRecPtr origin_lsn);
|
|
676
|
+
extern void ReorderBufferSkipPrepare(ReorderBuffer *rb, TransactionId xid);
|
|
677
|
+
extern void ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, char *gid);
|
|
678
|
+
extern ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *);
|
|
679
|
+
extern TransactionId ReorderBufferGetOldestXmin(ReorderBuffer *rb);
|
|
462
680
|
|
|
463
|
-
void
|
|
681
|
+
extern void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
|
|
464
682
|
|
|
465
|
-
void
|
|
683
|
+
extern void StartupReorderBuffer(void);
|
|
466
684
|
|
|
467
685
|
#endif
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* slot.h
|
|
3
3
|
* Replication slot management.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2012-
|
|
5
|
+
* Copyright (c) 2012-2022, PostgreSQL Global Development Group
|
|
6
6
|
*
|
|
7
7
|
*-------------------------------------------------------------------------
|
|
8
8
|
*/
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#include "storage/lwlock.h"
|
|
16
16
|
#include "storage/shmem.h"
|
|
17
17
|
#include "storage/spin.h"
|
|
18
|
+
#include "replication/walreceiver.h"
|
|
18
19
|
|
|
19
20
|
/*
|
|
20
21
|
* Behaviour of replication slots, upon release or crash.
|
|
@@ -36,14 +37,6 @@ typedef enum ReplicationSlotPersistency
|
|
|
36
37
|
RS_TEMPORARY
|
|
37
38
|
} ReplicationSlotPersistency;
|
|
38
39
|
|
|
39
|
-
/* For ReplicationSlotAcquire, q.v. */
|
|
40
|
-
typedef enum SlotAcquireBehavior
|
|
41
|
-
{
|
|
42
|
-
SAB_Error,
|
|
43
|
-
SAB_Block,
|
|
44
|
-
SAB_Inquire
|
|
45
|
-
} SlotAcquireBehavior;
|
|
46
|
-
|
|
47
40
|
/*
|
|
48
41
|
* On-Disk data of a replication slot, preserved across restarts.
|
|
49
42
|
*/
|
|
@@ -90,6 +83,17 @@ typedef struct ReplicationSlotPersistentData
|
|
|
90
83
|
*/
|
|
91
84
|
XLogRecPtr confirmed_flush;
|
|
92
85
|
|
|
86
|
+
/*
|
|
87
|
+
* LSN at which we enabled two_phase commit for this slot or LSN at which
|
|
88
|
+
* we found a consistent point at the time of slot creation.
|
|
89
|
+
*/
|
|
90
|
+
XLogRecPtr two_phase_at;
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
* Allow decoding of prepared transactions?
|
|
94
|
+
*/
|
|
95
|
+
bool two_phase;
|
|
96
|
+
|
|
93
97
|
/* plugin name */
|
|
94
98
|
NameData plugin;
|
|
95
99
|
} ReplicationSlotPersistentData;
|
|
@@ -191,17 +195,18 @@ extern void ReplicationSlotsShmemInit(void);
|
|
|
191
195
|
|
|
192
196
|
/* management of individual slots */
|
|
193
197
|
extern void ReplicationSlotCreate(const char *name, bool db_specific,
|
|
194
|
-
ReplicationSlotPersistency p);
|
|
198
|
+
ReplicationSlotPersistency p, bool two_phase);
|
|
195
199
|
extern void ReplicationSlotPersist(void);
|
|
196
200
|
extern void ReplicationSlotDrop(const char *name, bool nowait);
|
|
197
201
|
|
|
198
|
-
extern
|
|
202
|
+
extern void ReplicationSlotAcquire(const char *name, bool nowait);
|
|
199
203
|
extern void ReplicationSlotRelease(void);
|
|
200
204
|
extern void ReplicationSlotCleanup(void);
|
|
201
205
|
extern void ReplicationSlotSave(void);
|
|
202
206
|
extern void ReplicationSlotMarkDirty(void);
|
|
203
207
|
|
|
204
208
|
/* misc stuff */
|
|
209
|
+
extern void ReplicationSlotInitialize(void);
|
|
205
210
|
extern bool ReplicationSlotValidateName(const char *name, int elevel);
|
|
206
211
|
extern void ReplicationSlotReserveWal(void);
|
|
207
212
|
extern void ReplicationSlotsComputeRequiredXmin(bool already_locked);
|
|
@@ -209,11 +214,17 @@ extern void ReplicationSlotsComputeRequiredLSN(void);
|
|
|
209
214
|
extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void);
|
|
210
215
|
extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive);
|
|
211
216
|
extern void ReplicationSlotsDropDBSlots(Oid dboid);
|
|
212
|
-
extern
|
|
217
|
+
extern bool InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno);
|
|
218
|
+
extern ReplicationSlot *SearchNamedReplicationSlot(const char *name, bool need_lock);
|
|
219
|
+
extern int ReplicationSlotIndex(ReplicationSlot *slot);
|
|
220
|
+
extern bool ReplicationSlotName(int index, Name name);
|
|
221
|
+
extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, int szslot);
|
|
222
|
+
extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok);
|
|
213
223
|
|
|
214
224
|
extern void StartupReplicationSlots(void);
|
|
215
225
|
extern void CheckPointReplicationSlots(void);
|
|
216
226
|
|
|
217
227
|
extern void CheckSlotRequirements(void);
|
|
228
|
+
extern void CheckSlotPermissions(void);
|
|
218
229
|
|
|
219
230
|
#endif /* SLOT_H */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* syncrep.h
|
|
4
4
|
* Exports from replication/syncrep.c.
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 2010-
|
|
6
|
+
* Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group
|
|
7
7
|
*
|
|
8
8
|
* IDENTIFICATION
|
|
9
9
|
* src/include/replication/syncrep.h
|
|
@@ -72,14 +72,14 @@ typedef struct SyncRepConfigData
|
|
|
72
72
|
char member_names[FLEXIBLE_ARRAY_MEMBER];
|
|
73
73
|
} SyncRepConfigData;
|
|
74
74
|
|
|
75
|
-
extern SyncRepConfigData *SyncRepConfig;
|
|
75
|
+
extern PGDLLIMPORT SyncRepConfigData *SyncRepConfig;
|
|
76
76
|
|
|
77
77
|
/* communication variables for parsing synchronous_standby_names GUC */
|
|
78
|
-
extern SyncRepConfigData *syncrep_parse_result;
|
|
79
|
-
extern char *syncrep_parse_error_msg;
|
|
78
|
+
extern PGDLLIMPORT SyncRepConfigData *syncrep_parse_result;
|
|
79
|
+
extern PGDLLIMPORT char *syncrep_parse_error_msg;
|
|
80
80
|
|
|
81
81
|
/* user-settable parameters for synchronous replication */
|
|
82
|
-
extern char *SyncRepStandbyNames;
|
|
82
|
+
extern PGDLLIMPORT char *SyncRepStandbyNames;
|
|
83
83
|
|
|
84
84
|
/* called by user backend */
|
|
85
85
|
extern void SyncRepWaitForLSN(XLogRecPtr lsn, bool commit);
|