pg_query 2.2.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
|
@@ -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
|
*/
|
|
@@ -51,20 +51,21 @@ typedef struct ReorderBufferTupleBuf
|
|
|
51
51
|
* respectively. They're used by INSERT .. ON CONFLICT .. UPDATE. Users of
|
|
52
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,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
};
|
|
66
|
+
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
|
|
67
|
+
REORDER_BUFFER_CHANGE_TRUNCATE
|
|
68
|
+
} ReorderBufferChangeType;
|
|
68
69
|
|
|
69
70
|
/* forward declaration */
|
|
70
71
|
struct ReorderBufferTXN;
|
|
@@ -81,7 +82,7 @@ typedef struct ReorderBufferChange
|
|
|
81
82
|
XLogRecPtr lsn;
|
|
82
83
|
|
|
83
84
|
/* The type of change. */
|
|
84
|
-
|
|
85
|
+
ReorderBufferChangeType action;
|
|
85
86
|
|
|
86
87
|
/* Transaction this change belongs to. */
|
|
87
88
|
struct ReorderBufferTXN *txn;
|
|
@@ -150,6 +151,13 @@ typedef struct ReorderBufferChange
|
|
|
150
151
|
CommandId cmax;
|
|
151
152
|
CommandId combocid;
|
|
152
153
|
} tuplecid;
|
|
154
|
+
|
|
155
|
+
/* Invalidation. */
|
|
156
|
+
struct
|
|
157
|
+
{
|
|
158
|
+
uint32 ninvalidations; /* Number of messages */
|
|
159
|
+
SharedInvalidationMessage *invalidations; /* invalidation message */
|
|
160
|
+
} inval;
|
|
153
161
|
} data;
|
|
154
162
|
|
|
155
163
|
/*
|
|
@@ -163,6 +171,11 @@ typedef struct ReorderBufferChange
|
|
|
163
171
|
#define RBTXN_HAS_CATALOG_CHANGES 0x0001
|
|
164
172
|
#define RBTXN_IS_SUBXACT 0x0002
|
|
165
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
|
|
166
179
|
|
|
167
180
|
/* Does the transaction have catalog changes? */
|
|
168
181
|
#define rbtxn_has_catalog_changes(txn) \
|
|
@@ -182,6 +195,44 @@ typedef struct ReorderBufferChange
|
|
|
182
195
|
((txn)->txn_flags & RBTXN_IS_SERIALIZED) != 0 \
|
|
183
196
|
)
|
|
184
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
|
+
|
|
185
236
|
typedef struct ReorderBufferTXN
|
|
186
237
|
{
|
|
187
238
|
/* See above */
|
|
@@ -193,6 +244,12 @@ typedef struct ReorderBufferTXN
|
|
|
193
244
|
/* Xid of top-level transaction, if known */
|
|
194
245
|
TransactionId toplevel_xid;
|
|
195
246
|
|
|
247
|
+
/*
|
|
248
|
+
* Global transaction id required for identification of prepared
|
|
249
|
+
* transactions.
|
|
250
|
+
*/
|
|
251
|
+
char *gid;
|
|
252
|
+
|
|
196
253
|
/*
|
|
197
254
|
* LSN of the first data carrying, WAL record with knowledge about this
|
|
198
255
|
* xid. This is allowed to *not* be first record adorned with this xid, if
|
|
@@ -201,10 +258,11 @@ typedef struct ReorderBufferTXN
|
|
|
201
258
|
XLogRecPtr first_lsn;
|
|
202
259
|
|
|
203
260
|
/* ----
|
|
204
|
-
* 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
|
|
205
262
|
* aborted. This can be a
|
|
206
263
|
* * plain commit record
|
|
207
264
|
* * plain commit record, of a parent transaction
|
|
265
|
+
* * prepared tansaction
|
|
208
266
|
* * prepared transaction commit
|
|
209
267
|
* * plain abort record
|
|
210
268
|
* * prepared transaction abort
|
|
@@ -221,6 +279,9 @@ typedef struct ReorderBufferTXN
|
|
|
221
279
|
*/
|
|
222
280
|
XLogRecPtr end_lsn;
|
|
223
281
|
|
|
282
|
+
/* Toplevel transaction for this subxact (NULL for top-level). */
|
|
283
|
+
struct ReorderBufferTXN *toptxn;
|
|
284
|
+
|
|
224
285
|
/*
|
|
225
286
|
* LSN of the last lsn at which snapshot information reside, so we can
|
|
226
287
|
* restart decoding from there and fully recover this transaction from
|
|
@@ -233,9 +294,14 @@ typedef struct ReorderBufferTXN
|
|
|
233
294
|
XLogRecPtr origin_lsn;
|
|
234
295
|
|
|
235
296
|
/*
|
|
236
|
-
* 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.
|
|
237
299
|
*/
|
|
238
|
-
|
|
300
|
+
union
|
|
301
|
+
{
|
|
302
|
+
TimestampTz commit_time;
|
|
303
|
+
TimestampTz prepare_time;
|
|
304
|
+
} xact_time;
|
|
239
305
|
|
|
240
306
|
/*
|
|
241
307
|
* The base snapshot is used to decode all changes until either this
|
|
@@ -246,6 +312,13 @@ typedef struct ReorderBufferTXN
|
|
|
246
312
|
XLogRecPtr base_snapshot_lsn;
|
|
247
313
|
dlist_node base_snapshot_node; /* link in txns_by_base_snapshot_lsn */
|
|
248
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
|
+
|
|
249
322
|
/*
|
|
250
323
|
* How many ReorderBufferChange's do we have in this txn.
|
|
251
324
|
*
|
|
@@ -260,8 +333,8 @@ typedef struct ReorderBufferTXN
|
|
|
260
333
|
uint64 nentries_mem;
|
|
261
334
|
|
|
262
335
|
/*
|
|
263
|
-
* List of ReorderBufferChange structs, including new Snapshots
|
|
264
|
-
* CommandIds
|
|
336
|
+
* List of ReorderBufferChange structs, including new Snapshots, new
|
|
337
|
+
* CommandIds and command invalidation messages.
|
|
265
338
|
*/
|
|
266
339
|
dlist_head changes;
|
|
267
340
|
|
|
@@ -311,6 +384,17 @@ typedef struct ReorderBufferTXN
|
|
|
311
384
|
* Size of this transaction (changes currently in memory, in bytes).
|
|
312
385
|
*/
|
|
313
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;
|
|
314
398
|
} ReorderBufferTXN;
|
|
315
399
|
|
|
316
400
|
/* so we can define the callbacks used inside struct ReorderBuffer itself */
|
|
@@ -346,6 +430,80 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
|
|
|
346
430
|
const char *prefix, Size sz,
|
|
347
431
|
const char *message);
|
|
348
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
|
+
|
|
349
507
|
struct ReorderBuffer
|
|
350
508
|
{
|
|
351
509
|
/*
|
|
@@ -384,6 +542,26 @@ struct ReorderBuffer
|
|
|
384
542
|
ReorderBufferCommitCB commit;
|
|
385
543
|
ReorderBufferMessageCB message;
|
|
386
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
|
+
|
|
387
565
|
/*
|
|
388
566
|
* Pointer that will be passed untouched to the callbacks.
|
|
389
567
|
*/
|
|
@@ -414,55 +592,94 @@ struct ReorderBuffer
|
|
|
414
592
|
|
|
415
593
|
/* memory accounting */
|
|
416
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 */
|
|
417
618
|
};
|
|
418
619
|
|
|
419
620
|
|
|
420
|
-
ReorderBuffer *ReorderBufferAllocate(void);
|
|
421
|
-
void
|
|
621
|
+
extern ReorderBuffer *ReorderBufferAllocate(void);
|
|
622
|
+
extern void ReorderBufferFree(ReorderBuffer *);
|
|
422
623
|
|
|
423
|
-
ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
|
|
424
|
-
void
|
|
425
|
-
ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
|
|
426
|
-
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);
|
|
427
628
|
|
|
428
|
-
Oid
|
|
429
|
-
void
|
|
629
|
+
extern Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
|
|
630
|
+
extern void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
|
|
430
631
|
|
|
431
|
-
void
|
|
432
|
-
|
|
632
|
+
extern void ReorderBufferQueueChange(ReorderBuffer *, TransactionId,
|
|
633
|
+
XLogRecPtr lsn, ReorderBufferChange *,
|
|
634
|
+
bool toast_insert);
|
|
635
|
+
extern void ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn,
|
|
433
636
|
bool transactional, const char *prefix,
|
|
434
637
|
Size message_size, const char *message);
|
|
435
|
-
void
|
|
638
|
+
extern void ReorderBufferCommit(ReorderBuffer *, TransactionId,
|
|
436
639
|
XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
|
|
437
640
|
TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn);
|
|
438
|
-
void
|
|
439
|
-
|
|
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,
|
|
440
649
|
XLogRecPtr commit_lsn, XLogRecPtr end_lsn);
|
|
441
|
-
void
|
|
442
|
-
void
|
|
443
|
-
void
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
void
|
|
447
|
-
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,
|
|
448
658
|
CommandId cid);
|
|
449
|
-
void
|
|
659
|
+
extern void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
|
|
450
660
|
RelFileNode node, ItemPointerData pt,
|
|
451
661
|
CommandId cmin, CommandId cmax, CommandId combocid);
|
|
452
|
-
void
|
|
662
|
+
extern void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
|
|
453
663
|
Size nmsgs, SharedInvalidationMessage *msgs);
|
|
454
|
-
void
|
|
664
|
+
extern void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
|
|
455
665
|
SharedInvalidationMessage *invalidations);
|
|
456
|
-
void
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
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);
|
|
460
671
|
|
|
461
|
-
|
|
462
|
-
|
|
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);
|
|
463
680
|
|
|
464
|
-
void
|
|
681
|
+
extern void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
|
|
465
682
|
|
|
466
|
-
void
|
|
683
|
+
extern void StartupReorderBuffer(void);
|
|
467
684
|
|
|
468
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);
|
|
@@ -210,10 +215,16 @@ extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void);
|
|
|
210
215
|
extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive);
|
|
211
216
|
extern void ReplicationSlotsDropDBSlots(Oid dboid);
|
|
212
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);
|