24e8d47c创建于 2025年5月21日历史提交
/*-------------------------------------------------------------------------
 *
 * globals.c
 *	  global variable declarations
 *
 * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  src/backend/utils/init/globals.c
 *
 * NOTES
 *	  Globals used all over the place should be declared here and not
 *	  in other modules.
 *
 *-------------------------------------------------------------------------
 */
#include "postgres.h"
#include "knl/knl_variable.h"

#include "access/xact.h"
#include "catalog/objectaccess.h"
#include "libpq/pqcomm.h"
#include "miscadmin.h"
#include "storage/backendid.h"
#include "utils/formatting.h"
#include "utils/atomic.h"
#include "replication/slot.h"

THR_LOCAL ProtocolVersion FrontendProtocol = PG_PROTOCOL_LATEST;

THR_LOCAL volatile bool InterruptPending = false;

THR_LOCAL char my_exec_path[MAXPGPATH]; /* full path to my executable */

/*
 * Hook on object accesses.  This is intended as infrastructure for security
 * and logging plugins.
 */
THR_LOCAL object_access_hook_type object_access_hook = NULL;

uint8 ce_cache_refresh_type = 0;

/*
 * standalone backend).  IsUnderPostmaster is true in postmaster child
 * processes.  Note that "child process" includes all children, not only
 * regular backends.  These should be set correctly as early as possible
 * in the execution of a process, so that error handling will do the right
 * things if an error should occur during process initialization.
 *
 * These are initialized for the bootstrap/standalone case.
 */
THR_LOCAL bool IsUnderPostmaster = false;

volatile ThreadId PostmasterPid = 0;
bool IsPostmasterEnvironment = false;
bool open_join_children = true;
bool will_shutdown = false;


/********************************************
 * 1.HARD-WIRED BINARY VERSION NUMBER
 *
 *    version num range detail for openGauss:
 *      version | start at | release at | reserve to
 *      --------+----------+------------+------------
 *       1.0.X  |  00000   |   92072    |   92086   
 *       1.1.X  |  92087   |   92298    |   92298   
 *       2.0.X  |  92298   |   92298    |   92303   
 *       2.1.X  |  92304   |   92421    |   92423   
 *       3.0.X  |  92424   |   92605    |   92655   
 *       3.1.X  |    -     |     -      |     -     
 *       5.0.X  |  92656   |   92848    |   92898   
 *       6.0.X  |  92899   |   92950    |   92999
 *       NEXT   |  93000   |     ?      |     ?
 *
 ********************************************/

const uint32 GRAND_VERSION_NUM = 93046;

/********************************************
 * 2.VERSION NUM FOR EACH FEATURE
 *   Please write indescending order.
 ********************************************/
const uint32 SQL_LIMIT_VERSION_NUM = 93046;
const uint32 BM25_FULL_TEXT_INDEX = 93045;
const uint32 AUTO_PARAMETERIZATION_VERSION_NUMBER = 93044;
const uint32 COMPUTED_COLUMNS_VERSION_NUMBER = 93043;
const uint32 UBTREE_PCR_VERSION_NUM = 93041;
const uint32 SWCB_OPTIMIZATION_VERSION_NUM = 93040;
const uint32 DISABLE_MOT_ENGINE = 93039;
const uint32 ANALYZE_PARTITION_VERSION_NUMBER = 93037;
const uint32 NLS_LOWER_VERSION_NUMBER = 93036;
const uint32 SUPPORT_D_FORMAT_DATABASE = 93035;
const uint32 STATISTIC_HISTORY_VERSION_NUMBER = 93033;
const uint32 RAISE_APPLICATION_ERROR = 93031;
const uint32 HASH_SAOP_VERSION_NUMBER = 93027;
const uint32 CAST_FUNC_VERSION_NUMBER = 93026;
const uint32 ASOFJOIN_VERSION_NUM = 93028;
const uint32 IGNORE_NULLS_VERSION_NUMBER = 93025;
const uint32 DATAVEC_VERSION_NUMBER = 93019;
const uint32 HTAP_VERSION_NUMBER = 93015;
const uint32 KEEP_FUNC_VERSION_NUMBER = 93014;
const uint32 PUBLIC_SYNONYM_VERSION_NUMBER = 93013;
const uint32 FETCH_ENHANCE_VERSION_NUM = 93012;
const uint32 APPLY_JOIN_VERSION_NUMBER = 93011;
const uint32 CHARBYTE_SEMANTIC_VERSION_NUMBER = 93001;
const uint32 FLUSH_LSN_FUN_VERSION_NUM = 92951;
const uint32 PUBLICATION_DDL_AT_VERSION_NUM = 92949;
const uint32 MINMAXEXPR_CMPTYPE_VERSION_NUM = 92948;
const uint32 OBJECT_TYPE_VERSION_NUM = 93005;
const uint32 MATEDATE_ERROR_PLPGSQL_DEPENDENCY = 92961;
const uint32 PARTITION_NAME_VERSION_NUM = 92947;
const uint32 AUDIT_SHA_VERSION_NUM = 92946;
const uint32 NETTIME_TRACE_VERSION_NUM = 92945;
const uint32 HBA_CONF_VERSION_NUM = 92944;
const uint32 PARALLEL_ENABLE_VERSION_NUM = 92941;
const uint32 NAN_INFINITE_TEST_EXPR = 92940;
const uint32 STRAIGHT_JOIN_VERSION_NUMBER = 92939;
const uint32 INSERT_INTO_SELECT_VERSION_NUM = 92938;
const uint32 ROTATE_UNROTATE_VERSION_NUM = 92937;
const uint32 PIPELINED_FUNCTION_VERSION_NUM = 92936;
const uint32 DISABLE_CONSTRAINT_VERSION_NUM = 92931;
const uint32 ADD_CLEAN_CASCADE_STANDBY_SLOT_MESSAGE_NUM = 92930;
const uint32 FLUSH_LSN_VERSION_NUM = 92929;
const uint32 PRIOR_EXPR_VERSION_NUM = 92928;
const uint32 PUBLICATION_DDL_VERSION_NUM = 92921;
const uint32 UPSERT_ALIAS_VERSION_NUM = 92920;
const uint32 SUPPORT_GS_DEPENDENCY_VERSION_NUM = 92916;
const uint32 SPQ_VERSION_NUM = 92915;
const uint32 GENERICXLOG_VERSION_NUM = 92943;
const uint32 PARTITION_ACCESS_EXCLUSIVE_LOCK_UPGRADE_VERSION = 92913;
const uint32 PAGE_DIST_VERSION_NUM = 92912;
const uint32 NODE_REFORM_INFO_VERSION_NUM = 92911;
const uint32 GB18030_2022_VERSION_NUM = 92908;
const uint32 PARAM_MARK_VERSION_NUM = 92907;
const uint32 TIMESCALE_DB_VERSION_NUM = 92904;
const uint32 MULTI_CHARSET_VERSION_NUM = 92903;
const uint32 NBTREE_INSERT_OPTIMIZATION_VERSION_NUM = 92902;
const uint32 NBTREE_DEDUPLICATION_VERSION_NUM = 92902;
const uint32 SRF_FUSION_VERSION_NUM = 92847;
const uint32 INDEX_HINT_VERSION_NUM = 92845;
const uint32 INNER_UNIQUE_VERSION_NUM = 92845;
const uint32 CREATE_TABLE_AS_VERSION_NUM = 92845;
const uint32 EVENT_VERSION_NUM = 92844;
const uint32 SLOW_SQL_VERSION_NUM = 92844;
const uint32 CHARACTER_SET_VERSION_NUM = 92844;
const uint32 SELECT_INTO_FILE_VERSION_NUM = 92844;
const uint32 PARTITION_ENHANCE_VERSION_NUM = 92844;
const uint32 CREATE_INDEX_IF_NOT_EXISTS_VERSION_NUM = 92843;
const uint32 B_DUMP_TRIGGER_VERSION_NUM = 92843;
const uint32 INSERT_RIGHT_REF_VERSION_NUM = 92842;
const uint32 UNION_NULL_VERSION_NUM = 92841;
const uint32 FDW_SUPPORT_JOIN_AGG_VERSION_NUM = 92839;
const uint32 SUPPORT_VIEW_AUTO_UPDATABLE = 92838;
const uint32 NEGETIVE_BOOL_VERSION_NUM = 92835;
const uint32 SELECT_INTO_VAR_VERSION_NUM = 92834;
const uint32 MAT_VIEW_RECURSIVE_VERSION_NUM = 92833;
const uint32 DOLPHIN_ENABLE_DROP_NUM = 92830;
const uint32 PG_AUTHID_PASSWORDEXT_VERSION_NUM = 92830;
const uint32 SKIP_LOCKED_VERSION_NUM = 92829;
const uint32 REPLACE_INTO_VERSION_NUM = 92828;
const uint32 STANDBY_STMTHIST_VERSION_NUM = 92827;
const uint32 PLAN_SELECT_VERSION_NUM = 92826;
const uint32 MULTI_PARTITIONS_VERSION_NUM = 92825;
const uint32 MULTI_MODIFY_VERSION_NUM = 92814;
const uint32 CSN_TIME_BARRIER_VERSION = 92801;
const uint32 SELECT_STMT_HAS_USERVAR = 92924;

const uint32 SQL_PATCH_VERSION_NUM = 92675;
const uint32 SWITCH_ROLE_VERSION_NUM = 92668;
const uint32 ON_UPDATE_TIMESTAMP_VERSION_NUM = 92664;
const uint32 LOGICAL_DECODE_FLATTEN_TOAST_VERSION_NUM = 92664;
const uint32 COMMENT_SUPPORT_VERSION_NUM = 92662;
const uint32 KEYWORD_IGNORE_COMPART_VERSION_NUM = 92659;
const uint32 ADVANCE_CATALOG_XMIN_VERSION_NUM = 92659;
const uint32 CREATE_FUNCTION_DEFINER_VERSION = 92658;
const uint32 PUBLICATION_INITIAL_DATA_VERSION_NAME = 92657;
const uint32 COMMENT_ROWTYPE_NEST_TABLEOF_VERSION_NUM = 92657;
const uint32 SUBSCRIPTION_BINARY_VERSION_NUM = 92656;
const uint32 INVALID_INVISIBLE_TUPLE_VERSION = 92605;
const uint32 SUPPORT_HASH_XLOG_VERSION_NUM = 92603;

const uint32 PITR_INIT_VERSION_NUM = 92599;
const uint32 DISASTER_READ_VERSION_NUM = 92592;
const uint32 ANALYZER_HOOK_VERSION_NUM = 92592;
const uint32 ENHANCED_TUPLE_LOCK_VERSION_NUM = 92583;
const uint32 PUBLICATION_VERSION_NUM = 92580;
const uint32 SUPPORT_DATA_REPAIR = 92579;
const uint32 WAIT_N_TUPLE_LOCK_VERSION_NUM = 92573;
const uint32 CREATE_INDEX_CONCURRENTLY_DIST_VERSION_NUM = 92569;
const uint32 SCAN_BATCH_MODE_VERSION_NUM = 92568;
const uint32 PARALLEL_DECODE_VERSION_NUM = 92556;
const uint32 HASUID_VERSION_NUM = 92550;
const uint32 V5R2C00_ADVANCE_CATALOG_XMIN_VERSION_NUM = 92525;
const uint32 PBESINGLEPARTITION_VERSION_NUM = 92523;
const uint32 PREDPUSH_SAME_LEVEL_VERSION_NUM = 92522;
const uint32 UPSERT_WHERE_VERSION_NUM = 92514;
const uint32 COMMENT_ROWTYPE_TABLEOF_VERSION_NUM = 92513;
const uint32 LARGE_SEQUENCE_VERSION_NUM = 92511;
const uint32 FUNC_PARAM_COL_VERSION_NUM = 92500;

const uint32 COMMENT_RECORD_PARAM_VERSION_NUM = 92484;
const uint32 PRIVS_DIRECTORY_VERSION_NUM = 92460;
const uint32 SUBPARTITION_VERSION_NUM = 92436;
const uint32 DEFAULT_MAT_CTE_NUM = 92429;
const uint32 SWCB_VERSION_NUM = 92427;
const uint32 MATERIALIZED_CTE_NUM = 92424;
const uint32 TWOPHASE_FILE_VERSION = 92414;
const uint32 BACKEND_VERSION_INCLUDE_NUM = 92412;
const uint32 TDE_VERSION_NUM = 92407;
const uint32 RELMAP_4K_VERSION_NUM = 92403;

const uint32 COMMENT_PCT_TYPE_VERSION_NUM = 92396;
const uint32 COPY_TRANSFORM_VERSION_NUM = 92394;
const uint32 DECODE_ABORT_VERSION_NUM = 92386;
const uint32 CLIENT_ENCRYPTION_PROC_VERSION_NUM = 92383;
const uint32 COMMENT_PROC_VERSION_NUM = 92372;
const uint32 SEGMENT_PAGE_VERSION_NUM = 92360;
const uint32 HINT_ENHANCEMENT_VERSION_NUM = 92359;

const uint32 GENERATED_COL_VERSION_NUM = 92355;
const uint32 INPLACE_UPDATE_VERSION_NUM = 92350;
const uint32 BACKEND_VERSION_PRE_END_NUM = 92350;
const uint32 BACKEND_VERSION_PRE_INCLUDE_NUM = 92305;

const uint32 FIX_SQL_ADD_RELATION_REF_COUNT = 92291;
const uint32 ML_OPT_MODEL_VERSION_NUM = 92284;
const uint32 BACKUP_SLOT_VERSION_NUM = 92282;
const uint32 RANGE_LIST_DISTRIBUTION_VERSION_NUM = 92272;
const uint32 EXTRA_SLOT_VERSION_NUM = 92260;
const uint32 PRIVS_VERSION_NUM = 92259;
const uint32 SUPPORT_GPI_VERSION_NUM = 92257;
const uint32 STP_SUPPORT_COMMIT_ROLLBACK = 92219;
const uint32 MATVIEW_VERSION_NUM = 92213;
const uint32 FUNCNAME_PUSHDOWN_VERSION_NUM = 92202;

const uint32 FIX_PBE_CUSTOME_PLAN_BUG_VERSION_NUM = 92148;
const uint32 EXECUTE_DIRECT_ON_MULTI_VERSION_NUM = 92140;
const uint32 GTMLITE_VERSION_NUM = 92110;

const uint32 PREDPUSH_VERSION_NUM = 92096;
const uint32 SUBLINKPULLUP_VERSION_NUM = 92094;
const uint32 PARTIALPUSH_VERSION_NUM = 92087;

const uint32 CURSOR_EXPRESSION_VERSION_NUMBER = 92935;
const uint32 FLOAT_VERSION_NUMBER = 92938;

const uint32 PAGE_BASED_VERSION_NUM = 93039;
const uint32 SS_ARCHIVE_VERSION_NUM = 93040;

/* This variable indicates wheather the instance is in progress of upgrade as a whole */
uint32 volatile WorkingGrandVersionNum = GRAND_VERSION_NUM;
bool InplaceUpgradePrecommit = false;

#ifdef PGXC
bool useLocalXid = false;
#endif

/* allow to store tables in segment storage while initdb */
bool EnableInitDBSegment = false;

/*
 *     EarlyBindingTLSVariables
 *         Bind static variables to another static TLS variable's address.
 *
 *	   This is needed because of the inability of the compiler: compiler
 *	   complains if you intialize a static TLS variable as another TLS
 *	   variable's address. So we do it for compiler in the earilest stage
 *	   of thread starting once.
 */
void EarlyBindingTLSVariables(void)
{
    static THR_LOCAL bool fDone = false;

    /* This shall be done only once per thread */
    if (!fDone) {
        /* Init number formatting cache */
        Init_NUM_cache();
        /* Init transaction state */
        InitCurrentTransactionState();
    }

    fDone = true;
}