From 4ea70b1e87acc4c35cce976602a8dd1b8bd0d91b Mon Sep 17 00:00:00 2001 From: Zongtian Hou Date: Mon, 18 Jul 2022 10:02:43 +0800 Subject: [PATCH] fix deparse parsetree error when subquery in insert into cmd is nested in debug5 log level --- src/common/backend/utils/adt/ruleutils.cpp | 3 ++- src/test/regress/input/test_debug5.source | 6 ++++++ src/test/regress/output/test_debug5.source | 7 +++++++ src/test/regress/parallel_schedule0 | 3 +++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/test/regress/input/test_debug5.source create mode 100644 src/test/regress/output/test_debug5.source diff --git a/src/common/backend/utils/adt/ruleutils.cpp b/src/common/backend/utils/adt/ruleutils.cpp index 39f3327e6..197e0b30a 100644 --- a/src/common/backend/utils/adt/ruleutils.cpp +++ b/src/common/backend/utils/adt/ruleutils.cpp @@ -6951,7 +6951,8 @@ static void get_insert_query_def(Query* query, deparse_context* context) */ foreach (l, query->rtable) { rte = (RangeTblEntry*)lfirst(l); - if (rte->rtekind == RTE_SUBQUERY) { + if (rte->rtekind == RTE_SUBQUERY && !(rte->pulled_from_subquery)) { + /* subquery rte pulled up from nested subquery is ignored here */ is_fqs_inselect = true; if (select_rte != NULL) { ereport(ERROR, (errcode(ERRCODE_RESTRICT_VIOLATION), errmsg("too many subquery RTEs in INSERT"))); diff --git a/src/test/regress/input/test_debug5.source b/src/test/regress/input/test_debug5.source new file mode 100644 index 000000000..1c40a61c9 --- /dev/null +++ b/src/test/regress/input/test_debug5.source @@ -0,0 +1,6 @@ +drop table if exists brinindex_t1; +set log_min_messages to debug5; +create table brinindex_t1(c1 numrange,c2 int,c3 text); +insert into brinindex_t1 select format('[%s,%s]',b*1000,b*1000+3.1415926)::numrange,a,a || 'brinindextest' from (select a,random() as b from generate_series(1,10000) as a); +drop table brinindex_t1; +reset log_min_messages; diff --git a/src/test/regress/output/test_debug5.source b/src/test/regress/output/test_debug5.source new file mode 100644 index 000000000..bcdecbba8 --- /dev/null +++ b/src/test/regress/output/test_debug5.source @@ -0,0 +1,7 @@ +drop table if exists brinindex_t1; +NOTICE: table "brinindex_t1" does not exist, skipping +set log_min_messages to debug5; +create table brinindex_t1(c1 numrange,c2 int,c3 text); +insert into brinindex_t1 select format('[%s,%s]',b*1000,b*1000+3.1415926)::numrange,a,a || 'brinindextest' from (select a,random() as b from generate_series(1,10000) as a); +drop table brinindex_t1; +reset log_min_messages; diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index 626a21aeb..73a74e9ea 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -1007,3 +1007,6 @@ test: aioptimizer test: aioptimizer_small test: pgfincore test: rename_table + +# debug instrument +test: test_debug5