merge cherry-pick-mr-7765-1751264780967-auto into 6.0.0

【回合6.0.0】修复enable_multi_charset下walsender初始化失败的问题

Created-by: chenxiaobin19
Commit-by: chenxiaobin19
Merged-by: opengauss_bot
Description: 【标题】(请简要描述下实现的内容)
【回合6.0.0】修复enable_multi_charset下walsender初始化失败的问题
【实现内容】:
见:https://gitcode.com/opengauss/openGauss-server/pull/7765
【根因分析】:

【实现方案】:

【关联需求或issue】:

【开发自验报告】:
1. 请附上自验结果(内容或者截图)
2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
3. 是否涉及资料修改,如是,在docs仓库补充资料
4. 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
5. 是否考虑在线扩容等扩展场景
6. 是否考虑异常场景/并发场景/前向兼容/性能场景
7. 是否对其他模块产生影响
8. 是否需要回合补丁版本(5.0、6.0),涉及(**结果错误|coredump|性能劣化|内存泄露|集群异常**)相关修复请排查回合补丁分支

【其他说明】:

See merge request: opengauss/openGauss-server!8006
This commit is contained in:
opengauss_bot
2025-06-30 19:13:29 +08:00
5 changed files with 40 additions and 0 deletions

View File

@ -2826,6 +2826,7 @@ void PostgresInitializer::InitSettings()
/* initialize client encoding */
InitializeClientEncoding();
InitializeCharsetEncoding();
}
void PostgresInitializer::InitExtensionVariable()

View File

@ -241,6 +241,14 @@ void InitializeClientEncoding(void)
pg_enc2name_tbl[u_sess->mb_cxt.pending_client_encoding].name,
GetDatabaseEncodingName())));
}
}
void InitializeCharsetEncoding(void)
{
if (!u_sess->mb_cxt.backend_startup_complete) {
return;
}
u_sess->mb_cxt.character_set_connection = &pg_enc2name_tbl[GetDatabaseEncoding()];
if (ENABLE_MULTI_CHARSET) {
u_sess->mb_cxt.collation_connection = get_default_collation_by_charset(GetDatabaseEncoding(), false);

View File

@ -463,6 +463,7 @@ extern mbcharacter_incrementer pg_database_encoding_character_incrementer(void);
extern int PrepareClientEncoding(int encoding);
extern int SetClientEncoding(int encoding);
extern void InitializeClientEncoding(void);
extern void InitializeCharsetEncoding(void);
extern int pg_get_client_encoding(void);
extern const char* pg_get_client_encoding_name(void);

View File

@ -177,4 +177,16 @@ select * from t1;
create database latin1_db dbcompatibility 'b' encoding 'latin1' lc_ctype = 'C' lc_collate = 'C';
\c latin1_db
select '高斯aa' = '高斯AA';
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "b_format_behavior_compat_options='enable_multi_charset'" >/dev/null 2>&1
select pg_sleep(1);
\! mkdir @abs_srcdir@/tmp_check/charset_connection_test_backup/
\! @abs_bindir@/gs_basebackup -hlocalhost -p@portstring@ -D @abs_srcdir@/tmp_check/charset_connection_test_backup/ 2>&1 |grep successfully
\! rm -rf @abs_srcdir@/tmp_check/charset_connection_test_backup/
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "b_format_behavior_compat_options=''" >/dev/null 2>&1
select pg_sleep(1);
\c regression

View File

@ -587,4 +587,22 @@ select '高斯aa' = '高斯AA';
f
(1 row)
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "b_format_behavior_compat_options='enable_multi_charset'" >/dev/null 2>&1
select pg_sleep(1);
pg_sleep
----------
(1 row)
\! mkdir @abs_srcdir@/tmp_check/charset_connection_test_backup/
\! @abs_bindir@/gs_basebackup -hlocalhost -p@portstring@ -D @abs_srcdir@/tmp_check/charset_connection_test_backup/ 2>&1 |grep successfully
--?.*gs_basebackup: base backup successfully
\! rm -rf @abs_srcdir@/tmp_check/charset_connection_test_backup/
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1 -c "b_format_behavior_compat_options=''" >/dev/null 2>&1
select pg_sleep(1);
pg_sleep
----------
(1 row)
\c regression