修复enable_multi_charset下walsender初始化失败的问题

This commit is contained in:
chenxiaobin19
2025-05-24 10:56:03 +08:00
parent 82ad31df82
commit 128f2e64ca
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