This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new 4d220433dab Revert "ORCA: Support create plan in singlenode mode"
4d220433dab is described below
commit 4d220433dab9ee5aa447f0094a4af52c1bd351e0
Author: Jianghua Yang <[email protected]>
AuthorDate: Mon Sep 22 22:13:43 2025 +0800
Revert "ORCA: Support create plan in singlenode mode"
This reverts commit 36c1e7a92c23ebd3cbdf670f3fd1ab0089c60dab.
---
.github/workflows/build-cloudberry.yml | 6 +-
src/backend/gpopt/config/CConfigParamMapping.cpp | 8 +-
.../gpopt/translate/CTranslatorQueryToDXL.cpp | 47 ---------
src/backend/gpopt/translate/CTranslatorUtils.cpp | 1 -
src/backend/gpopt/utils/COptTasks.cpp | 7 +-
.../include/naucrates/traceflags/traceflags.h | 3 -
src/backend/optimizer/plan/planner.c | 2 +-
src/backend/utils/misc/guc_gp.c | 11 ++
.../gpopt/translate/CTranslatorQueryToDXL.h | 2 -
src/include/utils/guc.h | 1 +
src/include/utils/unsync_guc_name.h | 1 +
.../singlenode_isolation2/expected/lockmodes.out | 116 ++++++++++-----------
src/test/singlenode_regress/expected/explain.out | 1 -
.../singlenode_regress/expected/rowsecurity.out | 38 ++++---
src/test/singlenode_regress/expected/select.out | 13 ++-
15 files changed, 103 insertions(+), 154 deletions(-)
diff --git a/.github/workflows/build-cloudberry.yml
b/.github/workflows/build-cloudberry.yml
index 76dc06ced80..fecd44a9637 100644
--- a/.github/workflows/build-cloudberry.yml
+++ b/.github/workflows/build-cloudberry.yml
@@ -273,8 +273,7 @@ jobs:
"make_configs":["src/test/isolation:installcheck-singlenode",
"src/test/singlenode_regress:installcheck-singlenode",
"src/test/singlenode_isolation2:installcheck-singlenode"],
- "num_primary_mirror_pairs":0,
- "pg_settings":{"optimizer":"off"}
+ "num_primary_mirror_pairs":0
},
{"test":"ic-resgroup-v2",
"make_configs":["src/test/isolation2:installcheck-resgroup-v2"],
@@ -319,6 +318,9 @@ jobs:
},
{"test":"ic-parallel-retrieve-cursor",
"make_configs":["src/test/isolation2:installcheck-parallel-retrieve-cursor"]
+ },
+ {"test":"ic-cbdb-parallel",
+ "make_configs":["src/test/regress:installcheck-cbdb-parallel"]
}
]
}'
diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp
b/src/backend/gpopt/config/CConfigParamMapping.cpp
index 2968a31829d..603855c50ec 100644
--- a/src/backend/gpopt/config/CConfigParamMapping.cpp
+++ b/src/backend/gpopt/config/CConfigParamMapping.cpp
@@ -15,7 +15,7 @@
extern "C" {
#include "postgres.h"
-#include "cdb/cdbvars.h"
+
#include "utils/guc.h"
}
@@ -386,12 +386,6 @@ CConfigParamMapping::PackConfigParamInBitset(
}
}
- if (IS_SINGLENODE()) {
- traceflag_bitset->ExchangeSet(EopttraceSingleNodeMode);
- } else {
- traceflag_bitset->ExchangeClear(EopttraceSingleNodeMode);
- }
-
if (!optimizer_enable_nljoin)
{
CBitSet *nl_join_bitset = CXform::PbsNLJoinXforms(mp);
diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
index 34b045b6807..20cc6557c28 100644
--- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
@@ -210,9 +210,6 @@ CTranslatorQueryToDXL::CTranslatorQueryToDXL(
}
}
- // check if query has insert/update/delete when is_master_only is true.
- CheckUnsupportedDDLInSingleMode(m_mp, query);
-
// check if the query has any unsupported node types
CheckUnsupportedNodeTypes(query);
@@ -283,50 +280,6 @@ CTranslatorQueryToDXL::~CTranslatorQueryToDXL()
}
}
-//---------------------------------------------------------------------------
-// @function:
-// CTranslatorQueryToDXL::CheckUnsupportedNodeTypes
-//
-// @doc:
-// Check for unsupported node types, and throws an exception when
found
-//
-//---------------------------------------------------------------------------
-void
-CTranslatorQueryToDXL::CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query
*query)
-{
- static const SUnsupportedFeature unsupported_features[] = {
- {T_SubLink, GPOS_WSZ_LIT("Sublink")},
- {T_SubqueryScan, GPOS_WSZ_LIT("Subscan")},
- };
-
- List *unsupported_list = NIL;
- for (ULONG ul = 0; ul < GPOS_ARRAY_SIZE(unsupported_features); ul++)
- {
- unsupported_list = gpdb::LAppendInt(unsupported_list,
-
unsupported_features[ul].node_tag);
- }
-
- INT unsupported_node = gpdb::FindNodes((Node *) query,
unsupported_list);
- gpdb::GPDBFree(unsupported_list);
-
- if (GPOS_FTRACE(EopttraceSingleNodeMode) ||
GPOS_FTRACE(EopttraceDisableMotions)) {
- if (query->commandType == CMD_INSERT || query->commandType ==
CMD_UPDATE ||
- query->commandType == CMD_DELETE) {
- GPOS_RAISE(gpdxl::ExmaDXL,
gpdxl::ExmiQuery2DXLUnsupportedFeature,
- GPOS_WSZ_LIT("Single-mode not support
insert/update/delete"));
- }
-
- if (0 <= unsupported_node) {
- CWStringDynamic error_message(mp);
- error_message.AppendFormat(GPOS_WSZ_LIT("Single-mode
not support %s"),
-
unsupported_features[unsupported_node].m_feature_name);
-
- GPOS_RAISE(gpdxl::ExmaDXL,
gpdxl::ExmiQuery2DXLUnsupportedFeature,
- error_message.GetBuffer());
- }
- }
-}
-
//---------------------------------------------------------------------------
// @function:
// CTranslatorQueryToDXL::CheckUnsupportedNodeTypes
diff --git a/src/backend/gpopt/translate/CTranslatorUtils.cpp
b/src/backend/gpopt/translate/CTranslatorUtils.cpp
index 356f2668919..0887c72725c 100644
--- a/src/backend/gpopt/translate/CTranslatorUtils.cpp
+++ b/src/backend/gpopt/translate/CTranslatorUtils.cpp
@@ -150,7 +150,6 @@ CTranslatorUtils::GetTableDescr(CMemoryPool *mp,
CMDAccessor *md_accessor,
}
else if (IMDRelation::ErelstorageForeign !=
rel->RetrieveRelStorageType() &&
!optimizer_enable_master_only_queries &&
- !GPOS_FTRACE(EopttraceSingleNodeMode) &&
(IMDRelation::EreldistrMasterOnly ==
distribution_policy))
{
// fall back to the planner for queries on master-only table if
they are disabled with Orca. This is due to
diff --git a/src/backend/gpopt/utils/COptTasks.cpp
b/src/backend/gpopt/utils/COptTasks.cpp
index afdbcc4665c..dd0e61116d8 100644
--- a/src/backend/gpopt/utils/COptTasks.cpp
+++ b/src/backend/gpopt/utils/COptTasks.cpp
@@ -953,9 +953,10 @@ COptTasks::OptimizeTask(void *ptr)
query_to_dxl_translator->GetCTEs();
GPOS_ASSERT(nullptr != query_output_dxlnode_array);
- BOOL is_master_only =
GPOS_FTRACE(EopttraceDisableMotions) ||
- GPOS_FTRACE(EopttraceSingleNodeMode) ||
-
!query_to_dxl_translator->HasDistributedTables();
+ BOOL is_master_only =
+ !optimizer_enable_motions ||
+ (!optimizer_enable_motions_masteronly_queries &&
+
!query_to_dxl_translator->HasDistributedTables());
// See NoteDistributionPolicyOpclasses() in
src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
BOOL use_legacy_opfamilies =
(query_to_dxl_translator->GetDistributionHashOpsKind() ==
diff --git
a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h
b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h
index 0693a374fbf..2e489f214e5 100644
--- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h
+++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h
@@ -83,9 +83,6 @@ enum EOptTraceFlag
// print debug info of CTE
EopttraceDebugCTE = 101020,
- // Is singlenode
- EopttraceSingleNodeMode = 101021,
-
///////////////////////////////////////////////////////
////////////////// transformations flags //////////////
///////////////////////////////////////////////////////
diff --git a/src/backend/optimizer/plan/planner.c
b/src/backend/optimizer/plan/planner.c
index 5abd5ca8709..da5acb23ebf 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -384,7 +384,7 @@ standard_planner(Query *parse, const char *query_string,
int cursorOptions,
* PARALLEL RETRIEVE CURSOR is not supported by ORCA yet.
*/
if (optimizer &&
- IS_QD_OR_SINGLENODE() &&
+ GP_ROLE_DISPATCH == Gp_role &&
IS_QUERY_DISPATCHER() &&
(cursorOptions & CURSOR_OPT_SKIP_FOREIGN_PARTITIONS) == 0 &&
(cursorOptions & CURSOR_OPT_PARALLEL_RETRIEVE) == 0)
diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c
index 3cfbfeb12aa..18d33966de2 100644
--- a/src/backend/utils/misc/guc_gp.c
+++ b/src/backend/utils/misc/guc_gp.c
@@ -324,6 +324,7 @@ char *optimizer_search_strategy_path = NULL;
/* GUCs to tell Optimizer to enable a physical operator */
bool optimizer_enable_nljoin;
bool optimizer_enable_indexjoin;
+bool optimizer_enable_motions_masteronly_queries;
bool optimizer_enable_motions;
bool optimizer_enable_motion_broadcast;
bool optimizer_enable_motion_gather;
@@ -2180,6 +2181,16 @@ struct config_bool ConfigureNamesBool_gp[] =
true,
NULL, NULL, NULL
},
+ {
+ {"optimizer_enable_motions_masteronly_queries", PGC_USERSET,
DEVELOPER_OPTIONS,
+ gettext_noop("Enable plans with Motion operators in the
optimizer for queries with no distributed tables."),
+ NULL,
+ GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
+ },
+ &optimizer_enable_motions_masteronly_queries,
+ false,
+ NULL, NULL, NULL
+ },
{
{"optimizer_enable_motions", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Enable plans with Motion operators in the
optimizer."),
diff --git a/src/include/gpopt/translate/CTranslatorQueryToDXL.h
b/src/include/gpopt/translate/CTranslatorQueryToDXL.h
index 392af626d29..c74892e5df2 100644
--- a/src/include/gpopt/translate/CTranslatorQueryToDXL.h
+++ b/src/include/gpopt/translate/CTranslatorQueryToDXL.h
@@ -147,8 +147,6 @@ private:
// node is found
static void CheckUnsupportedNodeTypes(Query *query);
- static void CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query
*query);
-
// walker to check if SUBLINK node is present in the security quals
static BOOL CheckSublinkInSecurityQuals(Node *node, void *context);
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 13d7e79e262..4b62b663f0b 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -507,6 +507,7 @@ extern char *optimizer_search_strategy_path;
/* GUCs to tell Optimizer to enable a physical operator */
extern bool optimizer_enable_nljoin;
extern bool optimizer_enable_indexjoin;
+extern bool optimizer_enable_motions_masteronly_queries;
extern bool optimizer_enable_motions;
extern bool optimizer_enable_motion_broadcast;
extern bool optimizer_enable_motion_gather;
diff --git a/src/include/utils/unsync_guc_name.h
b/src/include/utils/unsync_guc_name.h
index 97b9df29814..4c956e14fbf 100644
--- a/src/include/utils/unsync_guc_name.h
+++ b/src/include/utils/unsync_guc_name.h
@@ -422,6 +422,7 @@
"optimizer_enable_motion_gather",
"optimizer_enable_motion_redistribute",
"optimizer_enable_motions",
+ "optimizer_enable_motions_masteronly_queries",
"optimizer_enable_multiple_distinct_aggs",
"optimizer_enable_nljoin",
"optimizer_enable_outerjoin_rewrite",
diff --git a/src/test/singlenode_isolation2/expected/lockmodes.out
b/src/test/singlenode_isolation2/expected/lockmodes.out
index 40835b507ca..0caadff3922 100644
--- a/src/test/singlenode_isolation2/expected/lockmodes.out
+++ b/src/test/singlenode_isolation2/expected/lockmodes.out
@@ -159,13 +159,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods, t_lockmods1 for update;
- QUERY PLAN
--------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.37 rows=5 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4)
- Optimizer: GPORCA
+ QUERY PLAN
+------------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20)
+ -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10)
+ -> Materialize (cost=0.00..1.07 rows=5 width=10)
+ -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10)
+ Optimizer: Postgres query optimizer
(5 rows)
1: select * from t_lockmods, t_lockmods1 for update;
c | c
@@ -185,13 +185,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods, t_lockmods1 for no key update;
- QUERY PLAN
--------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.37 rows=5 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4)
- Optimizer: GPORCA
+ QUERY PLAN
+------------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20)
+ -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10)
+ -> Materialize (cost=0.00..1.07 rows=5 width=10)
+ -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10)
+ Optimizer: Postgres query optimizer
(5 rows)
1: select * from t_lockmods, t_lockmods1 for no key update;
c | c
@@ -211,13 +211,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods, t_lockmods1 for share;
- QUERY PLAN
--------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.37 rows=5 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4)
- Optimizer: GPORCA
+ QUERY PLAN
+------------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20)
+ -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10)
+ -> Materialize (cost=0.00..1.07 rows=5 width=10)
+ -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10)
+ Optimizer: Postgres query optimizer
(5 rows)
1: select * from t_lockmods, t_lockmods1 for share;
c | c
@@ -237,13 +237,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods, t_lockmods1 for key share;
- QUERY PLAN
--------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.37 rows=5 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4)
- Optimizer: GPORCA
+ QUERY PLAN
+------------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20)
+ -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10)
+ -> Materialize (cost=0.00..1.07 rows=5 width=10)
+ -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10)
+ Optimizer: Postgres query optimizer
(5 rows)
1: select * from t_lockmods, t_lockmods1 for key share;
c | c
@@ -583,14 +583,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods_ao, t_lockmods_ao1 for update;
- QUERY PLAN
-----------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.57 rows=8 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4)
- Optimizer: GPORCA
-(5 rows)
+ QUERY PLAN
+---------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20)
+ -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10)
+ -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10)
+ Optimizer: Postgres query optimizer
+(4 rows)
1: select * from t_lockmods_ao, t_lockmods_ao1 for update;
c | c
---+---
@@ -609,14 +608,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods_ao, t_lockmods_ao1 for no key update;
- QUERY PLAN
-----------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.57 rows=8 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4)
- Optimizer: GPORCA
-(5 rows)
+ QUERY PLAN
+---------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20)
+ -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10)
+ -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10)
+ Optimizer: Postgres query optimizer
+(4 rows)
1: select * from t_lockmods_ao, t_lockmods_ao1 for no key update;
c | c
---+---
@@ -635,14 +633,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods_ao, t_lockmods_ao1 for share;
- QUERY PLAN
-----------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.57 rows=8 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4)
- Optimizer: GPORCA
-(5 rows)
+ QUERY PLAN
+---------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20)
+ -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10)
+ -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10)
+ Optimizer: Postgres query optimizer
+(4 rows)
1: select * from t_lockmods_ao, t_lockmods_ao1 for share;
c | c
---+---
@@ -661,14 +658,13 @@ ABORT
1: begin;
BEGIN
1: explain select * from t_lockmods_ao, t_lockmods_ao1 for key share;
- QUERY PLAN
-----------------------------------------------------------------------
- Nested Loop (cost=0.00..1324032.57 rows=8 width=8)
- Join Filter: true
- -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4)
- -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4)
- Optimizer: GPORCA
-(5 rows)
+ QUERY PLAN
+---------------------------------------------------------------------
+ Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20)
+ -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10)
+ -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10)
+ Optimizer: Postgres query optimizer
+(4 rows)
1: select * from t_lockmods_ao, t_lockmods_ao1 for key share;
c | c
---+---
diff --git a/src/test/singlenode_regress/expected/explain.out
b/src/test/singlenode_regress/expected/explain.out
index 2c9f373b894..2803a0b2c50 100644
--- a/src/test/singlenode_regress/expected/explain.out
+++ b/src/test/singlenode_regress/expected/explain.out
@@ -471,7 +471,6 @@ select jsonb_pretty(
}, +
"Settings": { +
"Optimizer": "Postgres query optimizer",+
- "optimizer": "off", +
"parallel_setup_cost": "0", +
"parallel_tuple_cost": "0", +
"min_parallel_table_scan_size": "0" +
diff --git a/src/test/singlenode_regress/expected/rowsecurity.out
b/src/test/singlenode_regress/expected/rowsecurity.out
index d2b3baec80d..60b1eb0a261 100644
--- a/src/test/singlenode_regress/expected/rowsecurity.out
+++ b/src/test/singlenode_regress/expected/rowsecurity.out
@@ -783,16 +783,15 @@ SELECT * FROM t1 FOR SHARE;
EXPLAIN (COSTS OFF) SELECT * FROM t1 FOR SHARE;
QUERY PLAN
-------------------------------------
- LockRows
- -> Append
- -> Seq Scan on t1 t1_1
- Filter: ((a % 2) = 0)
- -> Seq Scan on t2 t1_2
- Filter: ((a % 2) = 0)
- -> Seq Scan on t3 t1_3
- Filter: ((a % 2) = 0)
+ Append
+ -> Seq Scan on t1 t1_1
+ Filter: ((a % 2) = 0)
+ -> Seq Scan on t2 t1_2
+ Filter: ((a % 2) = 0)
+ -> Seq Scan on t3 t1_3
+ Filter: ((a % 2) = 0)
Optimizer: Postgres query optimizer
-(9 rows)
+(8 rows)
SELECT * FROM t1 WHERE f_leak(b) FOR SHARE;
NOTICE: f_leak => bbb
@@ -810,18 +809,17 @@ NOTICE: f_leak => yyy
(5 rows)
EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE;
- QUERY PLAN
------------------------------------------------------
- LockRows
- -> Append
- -> Seq Scan on t1 t1_1
- Filter: (((a % 2) = 0) AND f_leak(b))
- -> Seq Scan on t2 t1_2
- Filter: (((a % 2) = 0) AND f_leak(b))
- -> Seq Scan on t3 t1_3
- Filter: (((a % 2) = 0) AND f_leak(b))
+ QUERY PLAN
+-----------------------------------------------
+ Append
+ -> Seq Scan on t1 t1_1
+ Filter: (((a % 2) = 0) AND f_leak(b))
+ -> Seq Scan on t2 t1_2
+ Filter: (((a % 2) = 0) AND f_leak(b))
+ -> Seq Scan on t3 t1_3
+ Filter: (((a % 2) = 0) AND f_leak(b))
Optimizer: Postgres query optimizer
-(9 rows)
+(8 rows)
-- union all query
SELECT a, b, tableoid::regclass FROM t2 UNION ALL SELECT a, b,
tableoid::regclass FROM t3;
diff --git a/src/test/singlenode_regress/expected/select.out
b/src/test/singlenode_regress/expected/select.out
index f393c638962..a7014af1f98 100644
--- a/src/test/singlenode_regress/expected/select.out
+++ b/src/test/singlenode_regress/expected/select.out
@@ -816,14 +816,13 @@ select unique2 from onek2 where unique2 = 11 and stringu1
< 'B';
-- but if it's an update target, must retest anyway
explain (costs off)
select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;
- QUERY PLAN
------------------------------------------------
- LockRows
- -> Index Scan using onek2_u2_prtl on onek2
- Index Cond: (unique2 = 11)
- Filter: (stringu1 < 'B'::name)
+ QUERY PLAN
+-----------------------------------------
+ Index Scan using onek2_u2_prtl on onek2
+ Index Cond: (unique2 = 11)
+ Filter: (stringu1 < 'B'::name)
Optimizer: Postgres query optimizer
-(5 rows)
+(4 rows)
select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;
unique2
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]