diff --git a/src/bin/gs_guc/cluster_guc.conf b/src/bin/gs_guc/cluster_guc.conf index c09af69fe..39ac3ba83 100755 --- a/src/bin/gs_guc/cluster_guc.conf +++ b/src/bin/gs_guc/cluster_guc.conf @@ -839,6 +839,7 @@ uwal_truncate_interval|int|0,7200|NULL|NULL| uwal_async_append_switch|bool|0,0|NULL|NULL| enable_gazelle_performance_mode|bool|0,0|NULL|NULL| enable_aggr_coerce_type|bool|0,0|NULL|NULL| +enable_default_local_index|bool|0,0|NULL|NULL| [cmserver] log_dir|string|0,0|NULL|NULL| log_file_size|int|0,2047|MB|NULL| diff --git a/src/common/backend/utils/misc/guc.cpp b/src/common/backend/utils/misc/guc.cpp index 7e05d6b9b..2993f4fa8 100755 --- a/src/common/backend/utils/misc/guc.cpp +++ b/src/common/backend/utils/misc/guc.cpp @@ -2155,6 +2155,17 @@ static void InitConfigureNamesBool() NULL, NULL, NULL}, + {{"enable_default_local_index", + PGC_USERSET, + NODE_ALL, + ERROR_HANDLING_OPTIONS, + gettext_noop("Enable create index default behavior is local index"), + NULL}, + &u_sess->attr.attr_sql.enable_default_local_index, + false, + NULL, + NULL, + NULL}, #ifdef ENABLE_HTAP {{"enable_parallel_populate", PGC_USERSET, diff --git a/src/gausskernel/optimizer/commands/indexcmds.cpp b/src/gausskernel/optimizer/commands/indexcmds.cpp index 4211158a4..285d5bd35 100644 --- a/src/gausskernel/optimizer/commands/indexcmds.cpp +++ b/src/gausskernel/optimizer/commands/indexcmds.cpp @@ -536,8 +536,13 @@ void SetPartionIndexType(IndexStmt* stmt, Relation rel, bool is_alter_table) stmt->isGlobal = !CheckIdxParamsOwnPartKey(rel, stmt->indexParams); } } else if (!stmt->isPartitioned) { - /* default partition index is set to Global index */ - stmt->isGlobal = (!DEFAULT_CREATE_LOCAL_INDEX ? true : stmt->isGlobal); + /* + * default partition index is set to Global index. + * if B compatibility and enable_default_local_index is true, set Local index. + */ + if (!DEFAULT_CREATE_LOCAL_INDEX + && !(DB_IS_CMPT(B_FORMAT) && u_sess->attr.attr_sql.enable_default_local_index)) + stmt->isGlobal = true; } stmt->isPartitioned = true; #ifndef ENABLE_MULTIPLE_NODES diff --git a/src/include/knl/knl_guc/knl_session_attr_sql.h b/src/include/knl/knl_guc/knl_session_attr_sql.h index 22a81ff36..ee06242da 100644 --- a/src/include/knl/knl_guc/knl_session_attr_sql.h +++ b/src/include/knl/knl_guc/knl_session_attr_sql.h @@ -268,6 +268,7 @@ typedef struct knl_session_attr_sql { bool dolphin; bool whale; bool enable_vector_targetlist; + bool enable_default_local_index; #endif } knl_session_attr_sql;