From 128f2e64caa5d938aef5318eae8bb1b2ed62dc25 Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Sat, 24 May 2025 10:56:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Denable=5Fmulti=5Fcharset?= =?UTF-8?q?=E4=B8=8Bwalsender=E5=88=9D=E5=A7=8B=E5=8C=96=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/utils/init/postinit.cpp | 1 + src/common/backend/utils/mb/mbutils.cpp | 8 ++++++++ src/include/mb/pg_wchar.h | 1 + .../input/charset_connection_test.source | 12 ++++++++++++ .../output/charset_connection_test.source | 18 ++++++++++++++++++ 5 files changed, 40 insertions(+) diff --git a/src/common/backend/utils/init/postinit.cpp b/src/common/backend/utils/init/postinit.cpp index ee1cc6921..6009ee318 100644 --- a/src/common/backend/utils/init/postinit.cpp +++ b/src/common/backend/utils/init/postinit.cpp @@ -2826,6 +2826,7 @@ void PostgresInitializer::InitSettings() /* initialize client encoding */ InitializeClientEncoding(); + InitializeCharsetEncoding(); } void PostgresInitializer::InitExtensionVariable() diff --git a/src/common/backend/utils/mb/mbutils.cpp b/src/common/backend/utils/mb/mbutils.cpp index 3c0d47510..f0eda702c 100644 --- a/src/common/backend/utils/mb/mbutils.cpp +++ b/src/common/backend/utils/mb/mbutils.cpp @@ -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); diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index e0dfce6d2..85a2ff2be 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -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); diff --git a/src/test/regress/input/charset_connection_test.source b/src/test/regress/input/charset_connection_test.source index 9b03fc480..4c2cb9b9c 100644 --- a/src/test/regress/input/charset_connection_test.source +++ b/src/test/regress/input/charset_connection_test.source @@ -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 \ No newline at end of file diff --git a/src/test/regress/output/charset_connection_test.source b/src/test/regress/output/charset_connection_test.source index eaa468f7e..6749b382d 100644 --- a/src/test/regress/output/charset_connection_test.source +++ b/src/test/regress/output/charset_connection_test.source @@ -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