pg_query 5.1.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/ext/pg_query/include/pg_query.h +4 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
- data/ext/pg_query/include/postgres/access/amapi.h +10 -3
- data/ext/pg_query/include/postgres/access/attmap.h +1 -1
- data/ext/pg_query/include/postgres/access/attnum.h +1 -1
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +2 -3
- data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
- data/ext/pg_query/include/postgres/access/detoast.h +1 -1
- data/ext/pg_query/include/postgres/access/genam.h +8 -4
- data/ext/pg_query/include/postgres/access/gin.h +1 -1
- data/ext/pg_query/include/postgres/access/htup.h +1 -1
- data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
- data/ext/pg_query/include/postgres/access/itup.h +3 -3
- data/ext/pg_query/include/postgres/access/parallel.h +1 -2
- data/ext/pg_query/include/postgres/access/printtup.h +1 -1
- data/ext/pg_query/include/postgres/access/relation.h +1 -1
- data/ext/pg_query/include/postgres/access/relscan.h +1 -1
- data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
- data/ext/pg_query/include/postgres/access/sdir.h +1 -1
- data/ext/pg_query/include/postgres/access/skey.h +1 -1
- data/ext/pg_query/include/postgres/access/slru.h +221 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
- data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
- data/ext/pg_query/include/postgres/access/table.h +1 -1
- data/ext/pg_query/include/postgres/access/tableam.h +33 -24
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
- data/ext/pg_query/include/postgres/access/transam.h +7 -7
- data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
- data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
- data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
- data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
- data/ext/pg_query/include/postgres/access/twophase.h +2 -2
- data/ext/pg_query/include/postgres/access/xact.h +5 -5
- data/ext/pg_query/include/postgres/access/xlog.h +20 -12
- data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
- data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
- data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
- data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
- data/ext/pg_query/include/postgres/c.h +31 -36
- data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
- data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
- data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
- data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
- data/ext/pg_query/include/postgres/catalog/index.h +22 -18
- data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
- data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +2 -6
- data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
- data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
- data/ext/pg_query/include/postgres/commands/event_trigger.h +5 -2
- data/ext/pg_query/include/postgres/commands/explain.h +19 -3
- data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
- data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
- data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
- data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
- data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
- data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +453 -0
- data/ext/pg_query/include/postgres/common/int.h +79 -4
- data/ext/pg_query/include/postgres/common/keywords.h +1 -1
- data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
- data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
- data/ext/pg_query/include/postgres/common/relpath.h +4 -4
- data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
- data/ext/pg_query/include/postgres/common/sha2.h +1 -1
- data/ext/pg_query/include/postgres/common/string.h +1 -1
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/datatype/timestamp.h +28 -2
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/executor/execdesc.h +1 -1
- data/ext/pg_query/include/postgres/executor/executor.h +6 -5
- data/ext/pg_query/include/postgres/executor/functions.h +2 -1
- data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
- data/ext/pg_query/include/postgres/executor/spi.h +2 -8
- data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
- data/ext/pg_query/include/postgres/fmgr.h +2 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
- data/ext/pg_query/include/postgres/funcapi.h +2 -2
- data/ext/pg_query/include/postgres/gram.h +871 -830
- data/ext/pg_query/include/postgres/gramparse.h +1 -1
- data/ext/pg_query/include/postgres/jit/jit.h +4 -3
- data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
- data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
- data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
- data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
- data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
- data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
- data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
- data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
- data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +29 -25
- data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
- data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
- data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +102 -82
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/postgres/miscadmin.h +64 -52
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
- data/ext/pg_query/include/postgres/nodes/execnodes.h +109 -25
- data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
- data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
- data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
- data/ext/pg_query/include/postgres/nodes/params.h +1 -1
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +60 -9
- data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
- data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
- data/ext/pg_query/include/postgres/nodes/primnodes.h +344 -50
- data/ext/pg_query/include/postgres/nodes/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
- data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
- data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
- data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
- data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
- data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
- data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
- data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
- data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
- data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
- data/ext/pg_query/include/postgres/parser/parser.h +3 -3
- data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
- data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
- data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/postgres/pg_config.h +34 -34
- data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
- data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
- data/ext/pg_query/include/postgres/pg_trace.h +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +13 -11
- data/ext/pg_query/include/postgres/pgtime.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
- data/ext/pg_query/include/postgres/plpgsql.h +15 -13
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
- data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
- data/ext/pg_query/include/postgres/port/atomics.h +93 -6
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
- data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +48 -1
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +1 -11
- data/ext/pg_query/include/postgres/port.h +7 -3
- data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres/postgres.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
- data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
- data/ext/pg_query/include/postgres/regex/regex.h +92 -9
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
- data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
- data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
- data/ext/pg_query/include/postgres/replication/origin.h +1 -1
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +18 -28
- data/ext/pg_query/include/postgres/replication/slot.h +41 -5
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
- data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
- data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/postgres/storage/block.h +1 -1
- data/ext/pg_query/include/postgres/storage/buf.h +1 -1
- data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
- data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
- data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
- data/ext/pg_query/include/postgres/storage/fd.h +30 -13
- data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
- data/ext/pg_query/include/postgres/storage/item.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
- data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
- data/ext/pg_query/include/postgres/storage/latch.h +4 -2
- data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
- data/ext/pg_query/include/postgres/storage/lock.h +19 -19
- data/ext/pg_query/include/postgres/storage/lockdefs.h +1 -1
- data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
- data/ext/pg_query/include/postgres/storage/off.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
- data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
- data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
- data/ext/pg_query/include/postgres/storage/proc.h +48 -23
- data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
- data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
- data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
- data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
- data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
- data/ext/pg_query/include/postgres/storage/smgr.h +41 -27
- data/ext/pg_query/include/postgres/storage/spin.h +1 -1
- data/ext/pg_query/include/postgres/storage/standby.h +13 -3
- data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/postgres/storage/sync.h +4 -4
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
- data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
- data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
- data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
- data/ext/pg_query/include/postgres/utils/acl.h +19 -7
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/postgres/utils/array.h +1 -2
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
- data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
- data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
- data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
- data/ext/pg_query/include/postgres/utils/catcache.h +5 -6
- data/ext/pg_query/include/postgres/utils/date.h +1 -1
- data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
- data/ext/pg_query/include/postgres/utils/datum.h +1 -1
- data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
- data/ext/pg_query/include/postgres/utils/elog.h +3 -8
- data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/postgres/utils/float.h +1 -1
- data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/postgres/utils/guc.h +20 -6
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
- data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
- data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +1 -1
- data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
- data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
- data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
- data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
- data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
- data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
- data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
- data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +11 -17
- data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
- data/ext/pg_query/include/postgres/utils/portal.h +9 -9
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
- data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
- data/ext/pg_query/include/postgres/utils/rel.h +14 -15
- data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
- data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
- data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
- data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
- data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
- data/ext/pg_query/include/postgres/utils/syscache.h +2 -98
- data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
- data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
- data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
- data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
- data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
- data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
- data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +4 -4
- data/ext/pg_query/include/postgres/varatt.h +1 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
- data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
- data/ext/pg_query/pg_query.pb-c.c +6598 -3739
- data/ext/pg_query/pg_query_normalize.c +42 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -1
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/postgres_deparse.c +409 -21
- data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
- data/ext/pg_query/src_backend_commands_define.c +2 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +3 -7
- data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +34490 -32135
- data/ext/pg_query/src_backend_parser_parser.c +8 -8
- data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
- data/ext/pg_query/src_backend_parser_scansup.c +2 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
- data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
- data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
- data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
- data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
- data/ext/pg_query/src_common_encnames.c +43 -44
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +511 -466
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +18 -1
- data/ext/pg_query/src_common_wchar.c +45 -108
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_port_pg_bitutils.c +173 -28
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +1 -1
- data/ext/pg_query/src_port_strerror.c +1 -3
- data/ext/pg_query/src_port_strlcpy.c +1 -1
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +26 -3
- data/lib/pg_query/treewalker.rb +38 -11
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +25 -11
- data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
- data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
- data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES buffer manager definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/bufmgr.h
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#ifndef BUFMGR_H
|
|
15
15
|
#define BUFMGR_H
|
|
16
16
|
|
|
17
|
+
#include "port/pg_iovec.h"
|
|
17
18
|
#include "storage/block.h"
|
|
18
19
|
#include "storage/buf.h"
|
|
19
20
|
#include "storage/bufpage.h"
|
|
@@ -35,7 +36,7 @@ typedef enum BufferAccessStrategyType
|
|
|
35
36
|
BAS_BULKREAD, /* Large read-only scan (hint bit updates are
|
|
36
37
|
* ok) */
|
|
37
38
|
BAS_BULKWRITE, /* Large multi-block write (e.g. COPY IN) */
|
|
38
|
-
BAS_VACUUM /* VACUUM */
|
|
39
|
+
BAS_VACUUM, /* VACUUM */
|
|
39
40
|
} BufferAccessStrategyType;
|
|
40
41
|
|
|
41
42
|
/* Possible modes for ReadBufferExtended() */
|
|
@@ -47,7 +48,7 @@ typedef enum
|
|
|
47
48
|
RBM_ZERO_AND_CLEANUP_LOCK, /* Like RBM_ZERO_AND_LOCK, but locks the page
|
|
48
49
|
* in "cleanup" mode */
|
|
49
50
|
RBM_ZERO_ON_ERROR, /* Read, but return an all-zeros page on error */
|
|
50
|
-
RBM_NORMAL_NO_LOG /* Don't log page as invalid during WAL
|
|
51
|
+
RBM_NORMAL_NO_LOG, /* Don't log page as invalid during WAL
|
|
51
52
|
* replay; otherwise same as RBM_NORMAL */
|
|
52
53
|
} ReadBufferMode;
|
|
53
54
|
|
|
@@ -106,6 +107,37 @@ typedef struct BufferManagerRelation
|
|
|
106
107
|
#define BMR_REL(p_rel) ((BufferManagerRelation){.rel = p_rel})
|
|
107
108
|
#define BMR_SMGR(p_smgr, p_relpersistence) ((BufferManagerRelation){.smgr = p_smgr, .relpersistence = p_relpersistence})
|
|
108
109
|
|
|
110
|
+
/* Zero out page if reading fails. */
|
|
111
|
+
#define READ_BUFFERS_ZERO_ON_ERROR (1 << 0)
|
|
112
|
+
/* Call smgrprefetch() if I/O necessary. */
|
|
113
|
+
#define READ_BUFFERS_ISSUE_ADVICE (1 << 1)
|
|
114
|
+
|
|
115
|
+
struct ReadBuffersOperation
|
|
116
|
+
{
|
|
117
|
+
/*
|
|
118
|
+
* The following members should be set by the caller. If only smgr is
|
|
119
|
+
* provided without rel, then smgr_persistence can be set to override the
|
|
120
|
+
* default assumption of RELPERSISTENCE_PERMANENT.
|
|
121
|
+
*/
|
|
122
|
+
Relation rel;
|
|
123
|
+
struct SMgrRelationData *smgr;
|
|
124
|
+
char smgr_persistence;
|
|
125
|
+
ForkNumber forknum;
|
|
126
|
+
BufferAccessStrategy strategy;
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* The following private members are private state for communication
|
|
130
|
+
* between StartReadBuffers() and WaitReadBuffers(), initialized only if
|
|
131
|
+
* an actual read is required, and should not be modified.
|
|
132
|
+
*/
|
|
133
|
+
Buffer *buffers;
|
|
134
|
+
BlockNumber blocknum;
|
|
135
|
+
int flags;
|
|
136
|
+
int16 nblocks;
|
|
137
|
+
int16 io_buffers_len;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
typedef struct ReadBuffersOperation ReadBuffersOperation;
|
|
109
141
|
|
|
110
142
|
/* forward declared, to avoid having to expose buf_internals.h here */
|
|
111
143
|
struct WritebackContext;
|
|
@@ -133,6 +165,10 @@ extern PGDLLIMPORT bool track_io_timing;
|
|
|
133
165
|
extern PGDLLIMPORT int effective_io_concurrency;
|
|
134
166
|
extern PGDLLIMPORT int maintenance_io_concurrency;
|
|
135
167
|
|
|
168
|
+
#define MAX_IO_COMBINE_LIMIT PG_IOV_MAX
|
|
169
|
+
#define DEFAULT_IO_COMBINE_LIMIT Min(MAX_IO_COMBINE_LIMIT, (128 * 1024) / BLCKSZ)
|
|
170
|
+
extern PGDLLIMPORT int io_combine_limit;
|
|
171
|
+
|
|
136
172
|
extern PGDLLIMPORT int checkpoint_flush_after;
|
|
137
173
|
extern PGDLLIMPORT int backend_flush_after;
|
|
138
174
|
extern PGDLLIMPORT int bgwriter_flush_after;
|
|
@@ -177,8 +213,22 @@ extern Buffer ReadBufferWithoutRelcache(RelFileLocator rlocator,
|
|
|
177
213
|
ForkNumber forkNum, BlockNumber blockNum,
|
|
178
214
|
ReadBufferMode mode, BufferAccessStrategy strategy,
|
|
179
215
|
bool permanent);
|
|
216
|
+
|
|
217
|
+
extern bool StartReadBuffer(ReadBuffersOperation *operation,
|
|
218
|
+
Buffer *buffer,
|
|
219
|
+
BlockNumber blocknum,
|
|
220
|
+
int flags);
|
|
221
|
+
extern bool StartReadBuffers(ReadBuffersOperation *operation,
|
|
222
|
+
Buffer *buffers,
|
|
223
|
+
BlockNumber blockNum,
|
|
224
|
+
int *nblocks,
|
|
225
|
+
int flags);
|
|
226
|
+
extern void WaitReadBuffers(ReadBuffersOperation *operation);
|
|
227
|
+
|
|
180
228
|
extern void ReleaseBuffer(Buffer buffer);
|
|
181
229
|
extern void UnlockReleaseBuffer(Buffer buffer);
|
|
230
|
+
extern bool BufferIsExclusiveLocked(Buffer buffer);
|
|
231
|
+
extern bool BufferIsDirty(Buffer buffer);
|
|
182
232
|
extern void MarkBufferDirty(Buffer buffer);
|
|
183
233
|
extern void IncrBufferRefCount(Buffer buffer);
|
|
184
234
|
extern void CheckBufferIsPinnedOnce(Buffer buffer);
|
|
@@ -205,7 +255,7 @@ extern Buffer ExtendBufferedRelTo(BufferManagerRelation bmr,
|
|
|
205
255
|
|
|
206
256
|
extern void InitBufferPoolAccess(void);
|
|
207
257
|
extern void AtEOXact_Buffers(bool isCommit);
|
|
208
|
-
extern
|
|
258
|
+
extern char *DebugPrintBufferRefcount(Buffer buffer);
|
|
209
259
|
extern void CheckPointBuffers(int flags);
|
|
210
260
|
extern BlockNumber BufferGetBlockNumber(Buffer buffer);
|
|
211
261
|
extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation,
|
|
@@ -246,11 +296,12 @@ extern bool ConditionalLockBufferForCleanup(Buffer buffer);
|
|
|
246
296
|
extern bool IsBufferCleanupOK(Buffer buffer);
|
|
247
297
|
extern bool HoldingBufferPinThatDelaysRecovery(void);
|
|
248
298
|
|
|
249
|
-
extern void AbortBufferIO(Buffer buffer);
|
|
250
|
-
|
|
251
299
|
extern bool BgBufferSync(struct WritebackContext *wb_context);
|
|
252
300
|
|
|
253
|
-
extern void
|
|
301
|
+
extern void LimitAdditionalPins(uint32 *additional_pins);
|
|
302
|
+
extern void LimitAdditionalLocalPins(uint32 *additional_pins);
|
|
303
|
+
|
|
304
|
+
extern bool EvictUnpinnedBuffer(Buffer buf);
|
|
254
305
|
|
|
255
306
|
/* in buf_init.c */
|
|
256
307
|
extern void InitBufferPool(void);
|
|
@@ -265,6 +316,7 @@ extern BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype);
|
|
|
265
316
|
extern BufferAccessStrategy GetAccessStrategyWithSize(BufferAccessStrategyType btype,
|
|
266
317
|
int ring_size_kb);
|
|
267
318
|
extern int GetAccessStrategyBufferCount(BufferAccessStrategy strategy);
|
|
319
|
+
extern int GetAccessStrategyPinLimit(BufferAccessStrategy strategy);
|
|
268
320
|
|
|
269
321
|
extern void FreeAccessStrategy(BufferAccessStrategy strategy);
|
|
270
322
|
|
|
@@ -347,9 +399,6 @@ BufferGetPageSize(Buffer buffer)
|
|
|
347
399
|
/*
|
|
348
400
|
* BufferGetPage
|
|
349
401
|
* Returns the page associated with a buffer.
|
|
350
|
-
*
|
|
351
|
-
* When this is called as part of a scan, there may be a need for a nearby
|
|
352
|
-
* call to TestForOldSnapshot(). See the definition of that for details.
|
|
353
402
|
*/
|
|
354
403
|
static inline Page
|
|
355
404
|
BufferGetPage(Buffer buffer)
|
|
@@ -357,37 +406,6 @@ BufferGetPage(Buffer buffer)
|
|
|
357
406
|
return (Page) BufferGetBlock(buffer);
|
|
358
407
|
}
|
|
359
408
|
|
|
360
|
-
/*
|
|
361
|
-
* Check whether the given snapshot is too old to have safely read the given
|
|
362
|
-
* page from the given table. If so, throw a "snapshot too old" error.
|
|
363
|
-
*
|
|
364
|
-
* This test generally needs to be performed after every BufferGetPage() call
|
|
365
|
-
* that is executed as part of a scan. It is not needed for calls made for
|
|
366
|
-
* modifying the page (for example, to position to the right place to insert a
|
|
367
|
-
* new index tuple or for vacuuming). It may also be omitted where calls to
|
|
368
|
-
* lower-level functions will have already performed the test.
|
|
369
|
-
*
|
|
370
|
-
* Note that a NULL snapshot argument is allowed and causes a fast return
|
|
371
|
-
* without error; this is to support call sites which can be called from
|
|
372
|
-
* either scans or index modification areas.
|
|
373
|
-
*
|
|
374
|
-
* For best performance, keep the tests that are fastest and/or most likely to
|
|
375
|
-
* exclude a page from old snapshot testing near the front.
|
|
376
|
-
*/
|
|
377
|
-
static inline void
|
|
378
|
-
TestForOldSnapshot(Snapshot snapshot, Relation relation, Page page)
|
|
379
|
-
{
|
|
380
|
-
Assert(relation != NULL);
|
|
381
|
-
|
|
382
|
-
if (old_snapshot_threshold >= 0
|
|
383
|
-
&& (snapshot) != NULL
|
|
384
|
-
&& ((snapshot)->snapshot_type == SNAPSHOT_MVCC
|
|
385
|
-
|| (snapshot)->snapshot_type == SNAPSHOT_TOAST)
|
|
386
|
-
&& !XLogRecPtrIsInvalid((snapshot)->lsn)
|
|
387
|
-
&& PageGetLSN(page) > (snapshot)->lsn)
|
|
388
|
-
TestForOldSnapshot_impl(snapshot, relation);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
409
|
#endif /* FRONTEND */
|
|
392
410
|
|
|
393
411
|
#endif /* BUFMGR_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Standard POSTGRES buffer page definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/bufpage.h
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* can be canceled prior to the fulfillment of the condition) and do not
|
|
13
13
|
* use pointers internally (so that they are safe to use within DSMs).
|
|
14
14
|
*
|
|
15
|
-
* Portions Copyright (c) 1996-
|
|
15
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
16
16
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
17
17
|
*
|
|
18
18
|
* src/include/storage/condition_variable.h
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* dsm.h
|
|
4
4
|
* manage dynamic shared memory segments
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/storage/dsm.h
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* dsm_impl.h
|
|
4
4
|
* low-level dynamic shared memory primitives
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/storage/dsm_impl.h
|
|
@@ -63,7 +63,7 @@ typedef enum
|
|
|
63
63
|
DSM_OP_CREATE,
|
|
64
64
|
DSM_OP_ATTACH,
|
|
65
65
|
DSM_OP_DETACH,
|
|
66
|
-
DSM_OP_DESTROY
|
|
66
|
+
DSM_OP_DESTROY,
|
|
67
67
|
} dsm_op;
|
|
68
68
|
|
|
69
69
|
/* Create, attach to, detach from, resize, or destroy a segment. */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Virtual file descriptor definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/fd.h
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
/*
|
|
16
16
|
* calls:
|
|
17
17
|
*
|
|
18
|
-
* File {Close, Read, Write, Size, Sync}
|
|
18
|
+
* File {Close, Read, ReadV, Write, WriteV, Size, Sync}
|
|
19
19
|
* {Path Name Open, Allocate, Free} File
|
|
20
20
|
*
|
|
21
21
|
* These are NOT JUST RENAMINGS OF THE UNIX ROUTINES.
|
|
@@ -43,15 +43,11 @@
|
|
|
43
43
|
#ifndef FD_H
|
|
44
44
|
#define FD_H
|
|
45
45
|
|
|
46
|
+
#include "port/pg_iovec.h"
|
|
47
|
+
|
|
46
48
|
#include <dirent.h>
|
|
47
49
|
#include <fcntl.h>
|
|
48
50
|
|
|
49
|
-
typedef enum RecoveryInitSyncMethod
|
|
50
|
-
{
|
|
51
|
-
RECOVERY_INIT_SYNC_METHOD_FSYNC,
|
|
52
|
-
RECOVERY_INIT_SYNC_METHOD_SYNCFS
|
|
53
|
-
} RecoveryInitSyncMethod;
|
|
54
|
-
|
|
55
51
|
typedef int File;
|
|
56
52
|
|
|
57
53
|
|
|
@@ -111,8 +107,8 @@ extern File PathNameOpenFilePerm(const char *fileName, int fileFlags, mode_t fil
|
|
|
111
107
|
extern File OpenTemporaryFile(bool interXact);
|
|
112
108
|
extern void FileClose(File file);
|
|
113
109
|
extern int FilePrefetch(File file, off_t offset, off_t amount, uint32 wait_event_info);
|
|
114
|
-
extern
|
|
115
|
-
extern
|
|
110
|
+
extern ssize_t FileReadV(File file, const struct iovec *iov, int iovcnt, off_t offset, uint32 wait_event_info);
|
|
111
|
+
extern ssize_t FileWriteV(File file, const struct iovec *iov, int iovcnt, off_t offset, uint32 wait_event_info);
|
|
116
112
|
extern int FileSync(File file, uint32 wait_event_info);
|
|
117
113
|
extern int FileZero(File file, off_t offset, off_t amount, uint32 wait_event_info);
|
|
118
114
|
extern int FileFallocate(File file, off_t offset, off_t amount, uint32 wait_event_info);
|
|
@@ -186,6 +182,7 @@ extern int pg_fsync(int fd);
|
|
|
186
182
|
extern int pg_fsync_no_writethrough(int fd);
|
|
187
183
|
extern int pg_fsync_writethrough(int fd);
|
|
188
184
|
extern int pg_fdatasync(int fd);
|
|
185
|
+
extern bool pg_file_exists(const char *name);
|
|
189
186
|
extern void pg_flush_data(int fd, off_t offset, off_t nbytes);
|
|
190
187
|
extern int pg_truncate(const char *path, off_t length);
|
|
191
188
|
extern void fsync_fname(const char *fname, bool isdir);
|
|
@@ -195,8 +192,28 @@ extern int durable_unlink(const char *fname, int elevel);
|
|
|
195
192
|
extern void SyncDataDirectory(void);
|
|
196
193
|
extern int data_sync_elevel(int elevel);
|
|
197
194
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
195
|
+
static inline ssize_t
|
|
196
|
+
FileRead(File file, void *buffer, size_t amount, off_t offset,
|
|
197
|
+
uint32 wait_event_info)
|
|
198
|
+
{
|
|
199
|
+
struct iovec iov = {
|
|
200
|
+
.iov_base = buffer,
|
|
201
|
+
.iov_len = amount
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
return FileReadV(file, &iov, 1, offset, wait_event_info);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
static inline ssize_t
|
|
208
|
+
FileWrite(File file, const void *buffer, size_t amount, off_t offset,
|
|
209
|
+
uint32 wait_event_info)
|
|
210
|
+
{
|
|
211
|
+
struct iovec iov = {
|
|
212
|
+
.iov_base = unconstify(void *, buffer),
|
|
213
|
+
.iov_len = amount
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
return FileWriteV(file, &iov, 1, offset, wait_event_info);
|
|
217
|
+
}
|
|
201
218
|
|
|
202
219
|
#endif /* FD_H */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* fileset.h
|
|
4
4
|
* Management of named temporary files.
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/storage/fileset.h
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* exit-time cleanup for either a postmaster or a backend.
|
|
9
9
|
*
|
|
10
10
|
*
|
|
11
|
-
* Portions Copyright (c) 1996-
|
|
11
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
12
12
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
13
13
|
*
|
|
14
14
|
* src/include/storage/ipc.h
|
|
@@ -79,6 +79,9 @@ extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
|
|
|
79
79
|
|
|
80
80
|
extern Size CalculateShmemSize(int *num_semaphores);
|
|
81
81
|
extern void CreateSharedMemoryAndSemaphores(void);
|
|
82
|
+
#ifdef EXEC_BACKEND
|
|
83
|
+
extern void AttachSharedMemoryStructs(void);
|
|
84
|
+
#endif
|
|
82
85
|
extern void InitializeShmemGUCs(void);
|
|
83
86
|
|
|
84
87
|
#endif /* IPC_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES disk item definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/item.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Standard POSTGRES buffer page item identifier/line pointer definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/itemid.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES disk item pointer definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/itemptr.h
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* zillions of large objects (internal, external, jaquith, inversion).
|
|
6
6
|
* Now we only support inversion.
|
|
7
7
|
*
|
|
8
|
-
* Portions Copyright (c) 1996-
|
|
8
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
9
9
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
10
10
|
*
|
|
11
11
|
* src/include/storage/large_object.h
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
* efficient than using WaitLatch or WaitLatchOrSocket.
|
|
91
91
|
*
|
|
92
92
|
*
|
|
93
|
-
* Portions Copyright (c) 1996-
|
|
93
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
94
94
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
95
95
|
*
|
|
96
96
|
* src/include/storage/latch.h
|
|
@@ -102,6 +102,8 @@
|
|
|
102
102
|
|
|
103
103
|
#include <signal.h>
|
|
104
104
|
|
|
105
|
+
#include "utils/resowner.h"
|
|
106
|
+
|
|
105
107
|
/*
|
|
106
108
|
* Latch structure should be treated as opaque and only accessed through
|
|
107
109
|
* the public functions. It is defined here to allow embedding Latches as
|
|
@@ -173,7 +175,7 @@ extern void SetLatch(Latch *latch);
|
|
|
173
175
|
extern void ResetLatch(Latch *latch);
|
|
174
176
|
extern void ShutdownLatchSupport(void);
|
|
175
177
|
|
|
176
|
-
extern WaitEventSet *CreateWaitEventSet(
|
|
178
|
+
extern WaitEventSet *CreateWaitEventSet(ResourceOwner resowner, int nevents);
|
|
177
179
|
extern void FreeWaitEventSet(WaitEventSet *set);
|
|
178
180
|
extern void FreeWaitEventSetAfterFork(WaitEventSet *set);
|
|
179
181
|
extern int AddWaitEventToSet(WaitEventSet *set, uint32 events, pgsocket fd,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES lock manager definitions.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lmgr.h
|
|
@@ -31,7 +31,7 @@ typedef enum XLTW_Oper
|
|
|
31
31
|
XLTW_InsertIndex,
|
|
32
32
|
XLTW_InsertIndexUnique,
|
|
33
33
|
XLTW_FetchUpdated,
|
|
34
|
-
XLTW_RecheckExclusionConstr
|
|
34
|
+
XLTW_RecheckExclusionConstr,
|
|
35
35
|
} XLTW_Oper;
|
|
36
36
|
|
|
37
37
|
extern void RelationInitLockInfo(Relation relation);
|
|
@@ -48,6 +48,8 @@ extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
|
|
|
48
48
|
extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
|
|
49
49
|
extern bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode,
|
|
50
50
|
bool orstronger);
|
|
51
|
+
extern bool CheckRelationOidLockedByMe(Oid relid, LOCKMODE lockmode,
|
|
52
|
+
bool orstronger);
|
|
51
53
|
extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
|
|
52
54
|
|
|
53
55
|
extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
|
|
@@ -93,12 +95,16 @@ extern void SpeculativeInsertionWait(TransactionId xid, uint32 token);
|
|
|
93
95
|
/* Lock a general object (other than a relation) of the current database */
|
|
94
96
|
extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
|
|
95
97
|
LOCKMODE lockmode);
|
|
98
|
+
extern bool ConditionalLockDatabaseObject(Oid classid, Oid objid,
|
|
99
|
+
uint16 objsubid, LOCKMODE lockmode);
|
|
96
100
|
extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
|
|
97
101
|
LOCKMODE lockmode);
|
|
98
102
|
|
|
99
103
|
/* Lock a shared-across-databases object (other than a relation) */
|
|
100
104
|
extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
|
|
101
105
|
LOCKMODE lockmode);
|
|
106
|
+
extern bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid,
|
|
107
|
+
LOCKMODE lockmode);
|
|
102
108
|
extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
|
|
103
109
|
LOCKMODE lockmode);
|
|
104
110
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES low-level lock mechanism
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lock.h
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
#endif
|
|
20
20
|
|
|
21
21
|
#include "lib/ilist.h"
|
|
22
|
-
#include "storage/backendid.h"
|
|
23
22
|
#include "storage/lockdefs.h"
|
|
24
23
|
#include "storage/lwlock.h"
|
|
24
|
+
#include "storage/procnumber.h"
|
|
25
25
|
#include "storage/shmem.h"
|
|
26
26
|
#include "utils/timestamp.h"
|
|
27
27
|
|
|
@@ -42,7 +42,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
|
42
42
|
|
|
43
43
|
/*
|
|
44
44
|
* Top-level transactions are identified by VirtualTransactionIDs comprising
|
|
45
|
-
* PGPROC fields
|
|
45
|
+
* PGPROC fields procNumber and lxid. For recovered prepared transactions, the
|
|
46
46
|
* LocalTransactionId is an ordinary XID; LOCKTAG_VIRTUALTRANSACTION never
|
|
47
47
|
* refers to that kind. These are guaranteed unique over the short term, but
|
|
48
48
|
* will be reused after a database restart or XID wraparound; hence they
|
|
@@ -50,7 +50,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
|
50
50
|
*
|
|
51
51
|
* Note that struct VirtualTransactionId can not be assumed to be atomically
|
|
52
52
|
* assignable as a whole. However, type LocalTransactionId is assumed to
|
|
53
|
-
* be atomically assignable, and the
|
|
53
|
+
* be atomically assignable, and the proc number doesn't change often enough
|
|
54
54
|
* to be a problem, so we can fetch or assign the two fields separately.
|
|
55
55
|
* We deliberately refrain from using the struct within PGPROC, to prevent
|
|
56
56
|
* coding errors from trying to use struct assignment with it; instead use
|
|
@@ -58,7 +58,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
|
|
|
58
58
|
*/
|
|
59
59
|
typedef struct
|
|
60
60
|
{
|
|
61
|
-
|
|
61
|
+
ProcNumber procNumber; /* proc number of the PGPROC */
|
|
62
62
|
LocalTransactionId localTransactionId; /* lxid from PGPROC */
|
|
63
63
|
} VirtualTransactionId;
|
|
64
64
|
|
|
@@ -67,16 +67,16 @@ typedef struct
|
|
|
67
67
|
#define VirtualTransactionIdIsValid(vxid) \
|
|
68
68
|
(LocalTransactionIdIsValid((vxid).localTransactionId))
|
|
69
69
|
#define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
|
|
70
|
-
((vxid).
|
|
70
|
+
((vxid).procNumber == INVALID_PROC_NUMBER)
|
|
71
71
|
#define VirtualTransactionIdEquals(vxid1, vxid2) \
|
|
72
|
-
((vxid1).
|
|
72
|
+
((vxid1).procNumber == (vxid2).procNumber && \
|
|
73
73
|
(vxid1).localTransactionId == (vxid2).localTransactionId)
|
|
74
74
|
#define SetInvalidVirtualTransactionId(vxid) \
|
|
75
|
-
((vxid).
|
|
75
|
+
((vxid).procNumber = INVALID_PROC_NUMBER, \
|
|
76
76
|
(vxid).localTransactionId = InvalidLocalTransactionId)
|
|
77
|
-
#define GET_VXID_FROM_PGPROC(
|
|
78
|
-
((
|
|
79
|
-
|
|
77
|
+
#define GET_VXID_FROM_PGPROC(vxid_dst, proc) \
|
|
78
|
+
((vxid_dst).procNumber = (proc).vxid.procNumber, \
|
|
79
|
+
(vxid_dst).localTransactionId = (proc).vxid.lxid)
|
|
80
80
|
|
|
81
81
|
/* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
|
|
82
82
|
#define MAX_LOCKMODES 10
|
|
@@ -145,7 +145,7 @@ typedef enum LockTagType
|
|
|
145
145
|
LOCKTAG_OBJECT, /* non-relation database object */
|
|
146
146
|
LOCKTAG_USERLOCK, /* reserved for old contrib/userlock code */
|
|
147
147
|
LOCKTAG_ADVISORY, /* advisory user locks */
|
|
148
|
-
LOCKTAG_APPLY_TRANSACTION /* transaction being applied on a logical
|
|
148
|
+
LOCKTAG_APPLY_TRANSACTION, /* transaction being applied on a logical
|
|
149
149
|
* replication subscriber */
|
|
150
150
|
} LockTagType;
|
|
151
151
|
|
|
@@ -233,7 +233,7 @@ typedef struct LOCKTAG
|
|
|
233
233
|
|
|
234
234
|
/* ID info for a virtual transaction is its VirtualTransactionId */
|
|
235
235
|
#define SET_LOCKTAG_VIRTUALTRANSACTION(locktag,vxid) \
|
|
236
|
-
((locktag).locktag_field1 = (vxid).
|
|
236
|
+
((locktag).locktag_field1 = (vxid).procNumber, \
|
|
237
237
|
(locktag).locktag_field2 = (vxid).localTransactionId, \
|
|
238
238
|
(locktag).locktag_field3 = 0, \
|
|
239
239
|
(locktag).locktag_field4 = 0, \
|
|
@@ -454,8 +454,7 @@ typedef struct LockInstanceData
|
|
|
454
454
|
LOCKTAG locktag; /* tag for locked object */
|
|
455
455
|
LOCKMASK holdMask; /* locks held by this PGPROC */
|
|
456
456
|
LOCKMODE waitLockMode; /* lock awaited by this PGPROC, if any */
|
|
457
|
-
|
|
458
|
-
LocalTransactionId lxid; /* local transaction ID of this PGPROC */
|
|
457
|
+
VirtualTransactionId vxid; /* virtual transaction ID of this PGPROC */
|
|
459
458
|
TimestampTz waitStart; /* time at which this PGPROC started waiting
|
|
460
459
|
* for lock */
|
|
461
460
|
int pid; /* pid of this PGPROC */
|
|
@@ -502,7 +501,7 @@ typedef enum
|
|
|
502
501
|
LOCKACQUIRE_NOT_AVAIL, /* lock not available, and dontWait=true */
|
|
503
502
|
LOCKACQUIRE_OK, /* lock successfully acquired */
|
|
504
503
|
LOCKACQUIRE_ALREADY_HELD, /* incremented count for lock already held */
|
|
505
|
-
LOCKACQUIRE_ALREADY_CLEAR /* incremented count for lock already clear */
|
|
504
|
+
LOCKACQUIRE_ALREADY_CLEAR, /* incremented count for lock already clear */
|
|
506
505
|
} LockAcquireResult;
|
|
507
506
|
|
|
508
507
|
/* Deadlock states identified by DeadLockCheck() */
|
|
@@ -512,7 +511,7 @@ typedef enum
|
|
|
512
511
|
DS_NO_DEADLOCK, /* no deadlock detected */
|
|
513
512
|
DS_SOFT_DEADLOCK, /* deadlock avoided by queue rearrangement */
|
|
514
513
|
DS_HARD_DEADLOCK, /* deadlock, no way out but ERROR */
|
|
515
|
-
DS_BLOCKED_BY_AUTOVACUUM /* no deadlock; queue blocked by autovacuum
|
|
514
|
+
DS_BLOCKED_BY_AUTOVACUUM, /* no deadlock; queue blocked by autovacuum
|
|
516
515
|
* worker */
|
|
517
516
|
} DeadLockState;
|
|
518
517
|
|
|
@@ -540,7 +539,7 @@ typedef enum
|
|
|
540
539
|
* used for a given lock group is determined by the group leader's pgprocno.
|
|
541
540
|
*/
|
|
542
541
|
#define LockHashPartitionLockByProc(leader_pgproc) \
|
|
543
|
-
LockHashPartitionLock((leader_pgproc)
|
|
542
|
+
LockHashPartitionLock(GetNumberFromPGProc(leader_pgproc))
|
|
544
543
|
|
|
545
544
|
/*
|
|
546
545
|
* function prototypes
|
|
@@ -568,7 +567,8 @@ extern void LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks);
|
|
|
568
567
|
extern void LockReleaseSession(LOCKMETHODID lockmethodid);
|
|
569
568
|
extern void LockReleaseCurrentOwner(LOCALLOCK **locallocks, int nlocks);
|
|
570
569
|
extern void LockReassignCurrentOwner(LOCALLOCK **locallocks, int nlocks);
|
|
571
|
-
extern bool LockHeldByMe(const LOCKTAG *locktag,
|
|
570
|
+
extern bool LockHeldByMe(const LOCKTAG *locktag,
|
|
571
|
+
LOCKMODE lockmode, bool orstronger);
|
|
572
572
|
#ifdef USE_ASSERT_CHECKING
|
|
573
573
|
extern HTAB *GetLockMethodLocalHash(void);
|
|
574
574
|
#endif
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* contains definition that have to (indirectly) be available when included by
|
|
8
8
|
* FRONTEND code.
|
|
9
9
|
*
|
|
10
|
-
* Portions Copyright (c) 1996-
|
|
10
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
11
11
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
12
12
|
*
|
|
13
13
|
* src/include/storage/lockdefs.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Lightweight lock manager
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/lwlock.h
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#endif
|
|
20
20
|
|
|
21
21
|
#include "port/atomics.h"
|
|
22
|
+
#include "storage/lwlocknames.h"
|
|
22
23
|
#include "storage/proclist_types.h"
|
|
23
24
|
|
|
24
25
|
struct PGPROC;
|
|
@@ -82,9 +83,6 @@ typedef struct NamedLWLockTranche
|
|
|
82
83
|
extern PGDLLIMPORT NamedLWLockTranche *NamedLWLockTrancheArray;
|
|
83
84
|
extern PGDLLIMPORT int NamedLWLockTrancheRequests;
|
|
84
85
|
|
|
85
|
-
/* Names for fixed lwlocks */
|
|
86
|
-
#include "storage/lwlocknames.h"
|
|
87
|
-
|
|
88
86
|
/*
|
|
89
87
|
* It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
|
|
90
88
|
* here, but we need them to figure out offsets within MainLWLockArray, and
|
|
@@ -115,7 +113,7 @@ typedef enum LWLockMode
|
|
|
115
113
|
{
|
|
116
114
|
LW_EXCLUSIVE,
|
|
117
115
|
LW_SHARED,
|
|
118
|
-
LW_WAIT_UNTIL_FREE /* A special mode used in PGPROC->lwWaitMode,
|
|
116
|
+
LW_WAIT_UNTIL_FREE, /* A special mode used in PGPROC->lwWaitMode,
|
|
119
117
|
* when waiting for lock to become free. Not
|
|
120
118
|
* to be used as LWLockAcquire argument */
|
|
121
119
|
} LWLockMode;
|
|
@@ -129,14 +127,14 @@ extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
|
|
|
129
127
|
extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode);
|
|
130
128
|
extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode);
|
|
131
129
|
extern void LWLockRelease(LWLock *lock);
|
|
132
|
-
extern void LWLockReleaseClearVar(LWLock *lock,
|
|
130
|
+
extern void LWLockReleaseClearVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
|
|
133
131
|
extern void LWLockReleaseAll(void);
|
|
134
132
|
extern bool LWLockHeldByMe(LWLock *lock);
|
|
135
133
|
extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
|
|
136
134
|
extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
|
|
137
135
|
|
|
138
|
-
extern bool LWLockWaitForVar(LWLock *lock,
|
|
139
|
-
extern void LWLockUpdateVar(LWLock *lock,
|
|
136
|
+
extern bool LWLockWaitForVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 oldval, uint64 *newval);
|
|
137
|
+
extern void LWLockUpdateVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
|
|
140
138
|
|
|
141
139
|
extern Size LWLockShmemSize(void);
|
|
142
140
|
extern void CreateLWLocks(void);
|
|
@@ -207,7 +205,17 @@ typedef enum BuiltinTrancheIds
|
|
|
207
205
|
LWTRANCHE_PGSTATS_DATA,
|
|
208
206
|
LWTRANCHE_LAUNCHER_DSA,
|
|
209
207
|
LWTRANCHE_LAUNCHER_HASH,
|
|
210
|
-
|
|
208
|
+
LWTRANCHE_DSM_REGISTRY_DSA,
|
|
209
|
+
LWTRANCHE_DSM_REGISTRY_HASH,
|
|
210
|
+
LWTRANCHE_COMMITTS_SLRU,
|
|
211
|
+
LWTRANCHE_MULTIXACTMEMBER_SLRU,
|
|
212
|
+
LWTRANCHE_MULTIXACTOFFSET_SLRU,
|
|
213
|
+
LWTRANCHE_NOTIFY_SLRU,
|
|
214
|
+
LWTRANCHE_SERIAL_SLRU,
|
|
215
|
+
LWTRANCHE_SUBTRANS_SLRU,
|
|
216
|
+
LWTRANCHE_XACT_SLRU,
|
|
217
|
+
LWTRANCHE_PARALLEL_VACUUM_DSA,
|
|
218
|
+
LWTRANCHE_FIRST_USER_DEFINED,
|
|
211
219
|
} BuiltinTrancheIds;
|
|
212
220
|
|
|
213
221
|
/*
|