From e15b1dd08b6ee6a50a9e23faabbf1bd3854d9361 Mon Sep 17 00:00:00 2001 From: humengyao Date: Thu, 5 Sep 2024 19:51:34 -0700 Subject: [PATCH] =?UTF-8?q?5805=20=E4=BF=AE=E6=94=B9gms=5Fstats=E9=AB=98?= =?UTF-8?q?=E7=BA=A7=E5=8C=85cha=E6=94=B6=E9=9B=86=E4=B8=80=E5=8D=83?= =?UTF-8?q?=E5=BC=A0=E8=A1=A8=E6=8A=A5=E9=94=99bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/gms_stats/expected/gms_stats.out | 2 +- contrib/gms_stats/gms_stats.cpp | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/contrib/gms_stats/expected/gms_stats.out b/contrib/gms_stats/expected/gms_stats.out index 24df6425b..0453fdeb3 100644 --- a/contrib/gms_stats/expected/gms_stats.out +++ b/contrib/gms_stats/expected/gms_stats.out @@ -17,7 +17,7 @@ end; / NOTICE: PL/SQL procedure successfully completed. CONTEXT: SQL statement "CALL gms_stats.gather_schema_stats('gms_stats_test')" -PL/pgSQL function inline_code_block line 3 at PERFORM +PL/pgSQL function inline_code_block line 2 at PERFORM select schemaname, tablename, attname, avg_width, most_common_vals, most_common_freqs from pg_stats where schemaname='gms_stats_test' order by tablename, attname; schemaname | tablename | attname | avg_width | most_common_vals | most_common_freqs ----------------+-----------------+---------+-----------+------------------+------------------- diff --git a/contrib/gms_stats/gms_stats.cpp b/contrib/gms_stats/gms_stats.cpp index fef7cd591..ba589aff8 100644 --- a/contrib/gms_stats/gms_stats.cpp +++ b/contrib/gms_stats/gms_stats.cpp @@ -48,8 +48,9 @@ static List* GetRelationsInSchema(char *namespc) ScanKeyData skey[1]; SysScanDesc sysscan; HeapTuple tuple; - char* relname; + char* relname = NULL; List* tbl_relnames = NIL; + int len; Oid nspid; nspid = get_namespace_oid(namespc, true); @@ -62,7 +63,10 @@ static List* GetRelationsInSchema(char *namespc) while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) { Form_pg_class reltup = (Form_pg_class)GETSTRUCT(tuple); if (reltup->relkind == RELKIND_RELATION || reltup->relkind == RELKIND_MATVIEW) { - relname = reltup->relname.data; + len = strlen(reltup->relname.data); + relname = (char *) palloc(len + 1); + errno_t rc = strcpy_s(relname, len + 1, reltup->relname.data); + securec_check(rc, "\0", "\0"); tbl_relnames = lappend(tbl_relnames, relname); } } @@ -90,6 +94,7 @@ static void analyze_tables(char *namespc, List *relnames_list) stmt = (VacuumStmt*)parsetree; } vacuum(stmt, InvalidOid, true, NULL, true); + pfree_ext(relnames); list_free(parsetree_list); resetStringInfo(execute_sql); }