outer-join-noncolocated-dist-tables
aykutbozkurt 2023-01-22 16:50:48 +03:00
parent d637814e46
commit 83f08b6aa6
12 changed files with 297 additions and 220 deletions

View File

@ -69,11 +69,11 @@ static uint32 LargeDataTransferLocation(List *joinOrder);
static List * TableEntryListDifference(List *lhsTableList, List *rhsTableList); static List * TableEntryListDifference(List *lhsTableList, List *rhsTableList);
static bool ConvertSemiToInnerInJoinInfoContext(JoinInfoContext *joinOrderContext); static bool ConvertSemiToInnerInJoinInfoContext(JoinInfoContext *joinOrderContext);
static bool JoinInfoContextHasAntiJoin(JoinInfoContext *joinOrderContext); static bool JoinInfoContextHasAntiJoin(JoinInfoContext *joinOrderContext);
static List * FindJoinClauseForTables(List *joinRestrictInfoListList, static List * FindApplicableJoinClausesForTables(List *joinRestrictInfoListList,
List *generatedEcJoinClauseList, List *generatedEcJoinClauseList,
List *lhsTableIdList, List *lhsTableIdList,
uint32 rhsTableId, uint32 rhsTableId,
JoinType joinType); JoinType joinType);
static const char * JoinTypeName(JoinType jointype); static const char * JoinTypeName(JoinType jointype);
static List * ExtractPushdownJoinRestrictInfos(List *joinRestrictInfoList, static List * ExtractPushdownJoinRestrictInfos(List *joinRestrictInfoList,
RestrictInfo *joinRestrictInfo, RestrictInfo *joinRestrictInfo,
@ -382,6 +382,8 @@ ExtractPushdownJoinRestrictInfos(List *restrictInfoListOfJoin,
Bitmapset *joinRelids = bms_union(joinRestrictInfo->left_relids, Bitmapset *joinRelids = bms_union(joinRestrictInfo->left_relids,
joinRestrictInfo->right_relids); joinRestrictInfo->right_relids);
/* todo:aykut joinRelids should be taken from planner context */
RestrictInfo *restrictInfo = NULL; RestrictInfo *restrictInfo = NULL;
foreach_ptr(restrictInfo, restrictInfoListOfJoin) foreach_ptr(restrictInfo, restrictInfoListOfJoin)
{ {
@ -398,14 +400,17 @@ ExtractPushdownJoinRestrictInfos(List *restrictInfoListOfJoin,
/* /*
* FindJoinClauseForTables finds join clause for given left hand side tables and * FindApplicableJoinClausesForTables finds all applicable join clauses for given
* right hand side table. * left hand side tables and right hand side table. It encapsulates pushdownable
* and nonpushdownable parts of the join clauses inside ApplicableJoinClauseContext.
*/ */
static List * static List *
FindJoinClauseForTables(List *joinRestrictInfoListList, List *generatedEcJoinClauseList, FindApplicableJoinClausesForTables(List *joinRestrictInfoListList,
List *lhsTableIdList, uint32 rhsTableId, JoinType joinType) List *generatedEcJoinClauseList,
List *lhsTableIdList, uint32 rhsTableId, JoinType
joinType)
{ {
List *applicableJoinClauseListList = NIL; List *applicableJoinClauseContextList = NIL;
List *joinRestrictInfoList = NIL; List *joinRestrictInfoList = NIL;
foreach_ptr(joinRestrictInfoList, joinRestrictInfoListList) foreach_ptr(joinRestrictInfoList, joinRestrictInfoListList)
@ -420,13 +425,24 @@ FindJoinClauseForTables(List *joinRestrictInfoListList, List *generatedEcJoinCla
{ {
List *pushdownableJoinRestrictInfoList = ExtractPushdownJoinRestrictInfos( List *pushdownableJoinRestrictInfoList = ExtractPushdownJoinRestrictInfos(
joinRestrictInfoList, joinRestrictInfo, joinType); joinRestrictInfoList, joinRestrictInfo, joinType);
List *pushdownableJoinRestrictClauseList =
get_all_actual_clauses(pushdownableJoinRestrictInfoList);
List *nonPushdownableJoinRestrictInfoList = list_difference( List *nonPushdownableJoinRestrictInfoList = list_difference(
joinRestrictInfoList, joinRestrictInfoList,
pushdownableJoinRestrictInfoList); pushdownableJoinRestrictInfoList);
List *nonPushdownableJoinRestrictClauseList = List *nonPushdownableJoinRestrictClauseList =
get_all_actual_clauses(nonPushdownableJoinRestrictInfoList); get_all_actual_clauses(nonPushdownableJoinRestrictInfoList);
applicableJoinClauseListList = lappend(applicableJoinClauseListList,
nonPushdownableJoinRestrictClauseList); ApplicableJoinClauseContext *applicableJoinClauseContext = palloc0(
sizeof(ApplicableJoinClauseContext));
applicableJoinClauseContext->joinClauseList = get_all_actual_clauses(
joinRestrictInfoList);
applicableJoinClauseContext->pushdownableJoinClauseList =
pushdownableJoinRestrictClauseList;
applicableJoinClauseContext->nonPushdownableJoinClauseList =
nonPushdownableJoinRestrictClauseList;
applicableJoinClauseContextList = lappend(applicableJoinClauseContextList,
applicableJoinClauseContext);
} }
} }
} }
@ -439,13 +455,30 @@ FindJoinClauseForTables(List *joinRestrictInfoListList, List *generatedEcJoinCla
{ {
if (IsApplicableJoinClause(lhsTableIdList, rhsTableId, ecClause)) if (IsApplicableJoinClause(lhsTableIdList, rhsTableId, ecClause))
{ {
applicableJoinClauseListList = lappend(applicableJoinClauseListList, List *generatedJoinClauseList = list_make1(ecClause);
list_make1(ecClause)); ApplicableJoinClauseContext *applicableJoinClauseContext = palloc0(
sizeof(ApplicableJoinClauseContext));
applicableJoinClauseContext->joinClauseList = generatedJoinClauseList;
applicableJoinClauseContext->pushdownableJoinClauseList = NIL;
applicableJoinClauseContext->nonPushdownableJoinClauseList =
generatedJoinClauseList;
applicableJoinClauseContextList = lappend(applicableJoinClauseContextList,
applicableJoinClauseContext);
} }
} }
} }
return applicableJoinClauseListList; /* add an empty join clause list to be evaluated by cartesian rules */
List *emptyClauseList = NIL;
ApplicableJoinClauseContext *emptyApplicableJoinClauseContext = palloc0(
sizeof(ApplicableJoinClauseContext));
emptyApplicableJoinClauseContext->joinClauseList = emptyClauseList;
emptyApplicableJoinClauseContext->pushdownableJoinClauseList = emptyClauseList;
emptyApplicableJoinClauseContext->nonPushdownableJoinClauseList = emptyClauseList;
applicableJoinClauseContextList = lappend(applicableJoinClauseContextList,
emptyApplicableJoinClauseContext);
return applicableJoinClauseContextList;
} }
@ -989,13 +1022,12 @@ EvaluateJoinRules(List *joinedTableList, JoinOrderNode *currentJoinNode,
*/ */
List *joinedTableIdList = RangeTableIdList(joinedTableList); List *joinedTableIdList = RangeTableIdList(joinedTableList);
uint32 candidateTableId = candidateTable->rangeTableId; uint32 candidateTableId = candidateTable->rangeTableId;
List *applicableJoinClauseListList = FindJoinClauseForTables(joinRestrictInfoListList, List *applicableJoinClauseContextList = FindApplicableJoinClausesForTables(
generatedEcJoinClauseList, joinRestrictInfoListList,
joinedTableIdList, generatedEcJoinClauseList,
candidateTableId, joinedTableIdList,
joinType); candidateTableId,
List *emptyClauseList = NIL; joinType);
applicableJoinClauseListList = lappend(applicableJoinClauseListList, emptyClauseList);
/* we then evaluate all join rules in order */ /* we then evaluate all join rules in order */
for (uint32 ruleIndex = lowestValidIndex; ruleIndex <= highestValidIndex; ruleIndex++) for (uint32 ruleIndex = lowestValidIndex; ruleIndex <= highestValidIndex; ruleIndex++)
@ -1003,9 +1035,11 @@ EvaluateJoinRules(List *joinedTableList, JoinOrderNode *currentJoinNode,
JoinRuleType ruleType = (JoinRuleType) ruleIndex; JoinRuleType ruleType = (JoinRuleType) ruleIndex;
RuleEvalFunction ruleEvalFunction = JoinRuleEvalFunction(ruleType); RuleEvalFunction ruleEvalFunction = JoinRuleEvalFunction(ruleType);
List *applicableJoinClauseList = NIL; ApplicableJoinClauseContext *applicableJoinClauseContext = NULL;
foreach_ptr(applicableJoinClauseList, applicableJoinClauseListList) foreach_ptr(applicableJoinClauseContext, applicableJoinClauseContextList)
{ {
List *applicableJoinClauseList =
applicableJoinClauseContext->nonPushdownableJoinClauseList;
nextJoinNode = (*ruleEvalFunction)(currentJoinNode, nextJoinNode = (*ruleEvalFunction)(currentJoinNode,
candidateTable, candidateTable,
applicableJoinClauseList, applicableJoinClauseList,
@ -1015,7 +1049,9 @@ EvaluateJoinRules(List *joinedTableList, JoinOrderNode *currentJoinNode,
if (nextJoinNode != NULL) if (nextJoinNode != NULL)
{ {
nextJoinNode->joinType = joinType; nextJoinNode->joinType = joinType;
nextJoinNode->joinClauseList = applicableJoinClauseList; nextJoinNode->joinClauseList =
applicableJoinClauseContext->nonPushdownableJoinClauseList;
nextJoinNode->applicableJoinClauseContext = applicableJoinClauseContext;
return nextJoinNode; return nextJoinNode;
} }
} }
@ -1542,6 +1578,7 @@ MakeJoinOrderNode(TableEntry *tableEntry, JoinRuleType joinRuleType,
joinOrderNode->partitionColumnList = partitionColumnList; joinOrderNode->partitionColumnList = partitionColumnList;
joinOrderNode->partitionMethod = partitionMethod; joinOrderNode->partitionMethod = partitionMethod;
joinOrderNode->joinClauseList = NIL; joinOrderNode->joinClauseList = NIL;
joinOrderNode->applicableJoinClauseContext = NULL;
joinOrderNode->anchorTable = anchorTable; joinOrderNode->anchorTable = anchorTable;
return joinOrderNode; return joinOrderNode;

View File

@ -169,8 +169,9 @@ typedef struct OrderByLimitReference
/* Local functions forward declarations */ /* Local functions forward declarations */
static MultiSelect * PushdownableSelectNode(MultiSelect *selectNode); static MultiSelect * AndSelectNode(MultiSelect *selectNode);
static MultiSelect * NonPushdownableSelectNode(MultiSelect *selectNode); static MultiSelect * OrSelectNode(MultiSelect *selectNode);
static List * OrSelectClauseList(List *selectClauseList);
static void PushDownNodeLoop(MultiUnaryNode *currentNode); static void PushDownNodeLoop(MultiUnaryNode *currentNode);
static void PullUpCollectLoop(MultiCollect *collectNode); static void PullUpCollectLoop(MultiCollect *collectNode);
static void AddressProjectSpecialConditions(MultiProject *projectNode); static void AddressProjectSpecialConditions(MultiProject *projectNode);
@ -380,29 +381,27 @@ MultiLogicalPlanOptimize(MultiTreeRoot *multiLogicalPlan)
if (selectNodeList != NIL) if (selectNodeList != NIL)
{ {
MultiSelect *selectNode = (MultiSelect *) linitial(selectNodeList); MultiSelect *selectNode = (MultiSelect *) linitial(selectNodeList);
MultiSelect *pushdownableSelectNode = PushdownableSelectNode(selectNode); MultiSelect *andSelectNode = AndSelectNode(selectNode);
MultiSelect *nonPushdownableSelectNode = NonPushdownableSelectNode(selectNode); MultiSelect *orSelectNode = OrSelectNode(selectNode);
if (pushdownableSelectNode != NULL && nonPushdownableSelectNode != NULL) if (andSelectNode != NULL && orSelectNode != NULL)
{ {
MultiNode *parentNode = ParentNode((MultiNode *) selectNode); MultiNode *parentNode = ParentNode((MultiNode *) selectNode);
MultiNode *childNode = ChildNode((MultiUnaryNode *) selectNode); MultiNode *childNode = ChildNode((MultiUnaryNode *) selectNode);
Assert(UnaryOperator(parentNode)); Assert(UnaryOperator(parentNode));
SetChild((MultiUnaryNode *) parentNode, SetChild((MultiUnaryNode *) parentNode, (MultiNode *) orSelectNode);
(MultiNode *) nonPushdownableSelectNode); SetChild((MultiUnaryNode *) orSelectNode, (MultiNode *) andSelectNode);
SetChild((MultiUnaryNode *) nonPushdownableSelectNode, SetChild((MultiUnaryNode *) andSelectNode, (MultiNode *) childNode);
(MultiNode *) pushdownableSelectNode);
SetChild((MultiUnaryNode *) pushdownableSelectNode, (MultiNode *) childNode);
} }
else if (pushdownableSelectNode != NULL && nonPushdownableSelectNode == NULL) else if (andSelectNode != NULL && orSelectNode == NULL)
{ {
pushdownableSelectNode = selectNode; /* no need to modify the tree */ andSelectNode = selectNode; /* no need to modify the tree */
} }
if (pushdownableSelectNode != NULL) if (andSelectNode != NULL)
{ {
PushDownNodeLoop((MultiUnaryNode *) pushdownableSelectNode); PushDownNodeLoop((MultiUnaryNode *) andSelectNode);
} }
} }
@ -487,44 +486,71 @@ MultiLogicalPlanOptimize(MultiTreeRoot *multiLogicalPlan)
/* /*
* PushdownableSelectNode looks for pushdownable clauses in the given select node. * AndSelectNode looks for AND clauses in the given select node. If they exist,
* If they exist, the function returns these clauses in a new node. Otherwise, the function * the function returns these clauses in a new node. Otherwise, the function
* returns null. * returns null.
*/ */
static MultiSelect * static MultiSelect *
PushdownableSelectNode(MultiSelect *selectNode) AndSelectNode(MultiSelect *selectNode)
{ {
MultiSelect *pushdownableSelectNode = NULL; MultiSelect *andSelectNode = NULL;
List *selectClauseList = selectNode->selectClauseList;
List *orSelectClauseList = OrSelectClauseList(selectClauseList);
if (selectNode->pushdownableSelectClauseList != NIL) /* AND clauses are select clauses that are not OR clauses */
List *andSelectClauseList = list_difference(selectClauseList, orSelectClauseList);
if (andSelectClauseList != NIL)
{ {
pushdownableSelectNode = CitusMakeNode(MultiSelect); andSelectNode = CitusMakeNode(MultiSelect);
pushdownableSelectNode->selectClauseList = andSelectNode->selectClauseList = andSelectClauseList;
selectNode->pushdownableSelectClauseList;
} }
return pushdownableSelectNode; return andSelectNode;
} }
/* /*
* PushdownableSelectNode looks for nonpushdownable clauses in the given select node. * OrSelectNode looks for OR clauses in the given select node. If they exist,
* If they exist, the function returns these clauses in a new node. Otherwise, the function * the function returns these clauses in a new node. Otherwise, the function
* returns null. * returns null.
*/ */
static MultiSelect * static MultiSelect *
NonPushdownableSelectNode(MultiSelect *selectNode) OrSelectNode(MultiSelect *selectNode)
{ {
MultiSelect *nonPushdownableSelectNode = NULL; MultiSelect *orSelectNode = NULL;
List *selectClauseList = selectNode->selectClauseList;
List *orSelectClauseList = OrSelectClauseList(selectClauseList);
if (selectNode->nonPushdownableSelectClauseList != NIL) if (orSelectClauseList != NIL)
{ {
nonPushdownableSelectNode = CitusMakeNode(MultiSelect); orSelectNode = CitusMakeNode(MultiSelect);
nonPushdownableSelectNode->selectClauseList = orSelectNode->selectClauseList = orSelectClauseList;
selectNode->nonPushdownableSelectClauseList;
} }
return nonPushdownableSelectNode; return orSelectNode;
}
/*
* OrSelectClauseList walks over the select clause list, and returns all clauses
* that have OR expressions in them.
*/
static List *
OrSelectClauseList(List *selectClauseList)
{
List *orSelectClauseList = NIL;
Node *selectClause = NULL;
foreach_ptr(selectClause, selectClauseList)
{
bool orClause = is_orclause(selectClause);
if (orClause)
{
orSelectClauseList = lappend(orSelectClauseList, selectClause);
}
}
return orSelectClauseList;
} }

View File

@ -88,13 +88,14 @@ static List * MultiTableNodeList(List *tableEntryList, List *rangeTableList);
static List * AddMultiCollectNodes(List *tableNodeList); static List * AddMultiCollectNodes(List *tableNodeList);
static MultiNode * MultiJoinTree(List *joinOrderList, List *collectTableList); static MultiNode * MultiJoinTree(List *joinOrderList, List *collectTableList);
static MultiCollect * CollectNodeForTable(List *collectTableList, uint32 rangeTableId); static MultiCollect * CollectNodeForTable(List *collectTableList, uint32 rangeTableId);
static MultiSelect * MultiSelectNode(List *pushdownableClauseList, static MultiSelect * MultiSelectNode(List *selectClauseList);
List *nonPushdownableClauseList);
static bool IsSelectClause(Node *clause); static bool IsSelectClause(Node *clause);
static JoinInfoContext * FetchJoinOrderContext(FromExpr *fromExpr); static JoinInfoContext * FetchJoinOrderContext(FromExpr *fromExpr);
static bool JoinInfoWalker(Node *node, JoinInfoContext *joinInfoContext); static bool JoinInfoWalker(Node *node, JoinInfoContext *joinInfoContext);
static List * ExtractNonPushdownableJoinClauses(List *joinOrderList); static ApplicableJoinClauseContext * ExtractApplicableJoinClauseContext(
List *joinOrderList);
static List * ExtractPushdownableSelectClausesFromJoinClauses(List *joinRestricInfoList);
/* Local functions forward declarations for applying joins */ /* Local functions forward declarations for applying joins */
static MultiNode * ApplyJoinRule(MultiNode *leftNode, MultiNode *rightNode, static MultiNode * ApplyJoinRule(MultiNode *leftNode, MultiNode *rightNode,
@ -722,28 +723,31 @@ MultiNodeTree(Query *queryTree, PlannerRestrictionContext *plannerRestrictionCon
Assert(currentTopNode != NULL); Assert(currentTopNode != NULL);
/* all base clauses are pushdownable */
List *selectClauseList = baseClauseList;
/* pseudoconstant clauses like false, null can be pushdowned */
selectClauseList = list_concat(selectClauseList, pseudoClauseList);
/* /*
* build select node if the query has selection criteria * - some of join clauses cannot be pushed down and they can only be applied
* select node will have pushdownable and non-pushdownable parts. * after join as join filter. Those should stay in MultiJoin.
* - all base clauses can be pushdownable * - some of join clauses can be pushed down. (pushdownable part inside
* - some of join clauses cannot be pushed down and they can only be applied after join * ApplicableJoinClauseContext)
* as join condition. Those should stay in MultiJoin.
* - some of join clauses can be pushed down. Those should be in nonpushdownable part of
* MultiSelect. ??? todo: can we also pushdown those to workers for optimization
* (I put them on nonpushdownable part as they contain reference to both tables and fails at workers now)
* - pseudoconstant clauses like false, null can be pushdowned
*/ */
List *pushdownableSelectClauseList = baseClauseList; ApplicableJoinClauseContext *applicableJoinClauseContext =
pushdownableSelectClauseList = list_concat(pushdownableSelectClauseList, ExtractApplicableJoinClauseContext(
pseudoClauseList); joinOrderList);
List *nonpushdownableJoinClauseList = ExtractNonPushdownableJoinClauses( List *pushdownableJoinClauseList =
joinOrderList); applicableJoinClauseContext->pushdownableJoinClauseList;
List *pushdownableJoinClauseList = list_difference(allJoinClauseList, List *innerPushdownableJoinClauseList =
nonpushdownableJoinClauseList); ExtractPushdownableSelectClausesFromJoinClauses(joinRestrictInfoList);
List *nonPushdownableSelectClauseList = pushdownableJoinClauseList; pushdownableJoinClauseList = list_concat(pushdownableJoinClauseList,
MultiSelect *selectNode = MultiSelectNode(pushdownableSelectClauseList, innerPushdownableJoinClauseList);
nonPushdownableSelectClauseList); selectClauseList = list_concat(selectClauseList,
pushdownableJoinClauseList);
MultiSelect *selectNode = MultiSelectNode(selectClauseList);
if (selectNode != NULL) if (selectNode != NULL)
{ {
SetChild((MultiUnaryNode *) selectNode, currentTopNode); SetChild((MultiUnaryNode *) selectNode, currentTopNode);
@ -770,23 +774,67 @@ MultiNodeTree(Query *queryTree, PlannerRestrictionContext *plannerRestrictionCon
/* /*
* ExtractNonPushdownableJoinClauses returns pushdownable clauses from given join * ExtractPushdownableSelectClausesFromJoinClauses extracts pushdownable clauses from
* restrict infos. * given joinRestricInfoList.
*/ */
static List * static List *
ExtractNonPushdownableJoinClauses(List *joinOrderList) ExtractPushdownableSelectClausesFromJoinClauses(List *joinRestricInfoList)
{ {
List *nonPushdownJoinClauseList = NIL; List *pushdownableClauseList = NIL;
RestrictInfo *restrictInfo = NULL;
foreach_ptr(restrictInfo, joinRestricInfoList)
{
bool isOuterRestriction = (bms_num_members(restrictInfo->outer_relids) > 0);
if (!restrictInfo->can_join && !isOuterRestriction &&
restrictInfo->is_pushed_down)
{
Node *pushdownableClause = (Node *) restrictInfo->clause;
pushdownableClauseList = lappend(pushdownableClauseList, pushdownableClause);
}
}
return pushdownableClauseList;
}
/*
* ExtractApplicableJoinClauseContext returns ApplicableJoinClauseContext which contains
* all pushdownable and nonpushdownable clauses from given joinOrderList.
*/
static ApplicableJoinClauseContext *
ExtractApplicableJoinClauseContext(List *joinOrderList)
{
List *pushdownableJoinClauseList = NIL;
List *nonPushdownableJoinClauseList = NIL;
JoinOrderNode *joinOrderNode = NULL; JoinOrderNode *joinOrderNode = NULL;
foreach_ptr(joinOrderNode, joinOrderList) foreach_ptr(joinOrderNode, joinOrderList)
{ {
List *joinClauselist = joinOrderNode->joinClauseList; ApplicableJoinClauseContext *nodeApplicableJoinClauseContext =
nonPushdownJoinClauseList = list_concat(nonPushdownJoinClauseList, joinOrderNode->applicableJoinClauseContext;
joinClauselist);
/* first node does not contain ApplicableJoinClauseContext */
if (nodeApplicableJoinClauseContext == NULL)
{
continue;
}
pushdownableJoinClauseList = list_concat_unique(pushdownableJoinClauseList,
nodeApplicableJoinClauseContext->
pushdownableJoinClauseList);
nonPushdownableJoinClauseList = list_concat_unique(nonPushdownableJoinClauseList,
nodeApplicableJoinClauseContext
->nonPushdownableJoinClauseList);
} }
return nonPushdownJoinClauseList; ApplicableJoinClauseContext *applicableJoinClauseContext = palloc0(
sizeof(ApplicableJoinClauseContext));
applicableJoinClauseContext->joinClauseList = list_concat_copy(
pushdownableJoinClauseList, nonPushdownableJoinClauseList);
applicableJoinClauseContext->pushdownableJoinClauseList = pushdownableJoinClauseList;
applicableJoinClauseContext->nonPushdownableJoinClauseList =
nonPushdownableJoinClauseList;
return applicableJoinClauseContext;
} }
@ -820,10 +868,9 @@ ExtractRestrictionInfosFromPlannerContext(
baseRestrictInfo); baseRestrictInfo);
continue; continue;
} }
baseRestrictInfoList = list_append_unique(baseRestrictInfoList,
baseRestrictInfo);
} }
baseRestrictInfoList = list_concat_unique(baseRestrictInfoList,
relOptInfo->baserestrictinfo);
RestrictInfo *joinRestrictInfo = NULL; RestrictInfo *joinRestrictInfo = NULL;
foreach_ptr(joinRestrictInfo, relOptInfo->joininfo) foreach_ptr(joinRestrictInfo, relOptInfo->joininfo)
@ -840,7 +887,6 @@ ExtractRestrictionInfosFromPlannerContext(
JoinRestriction *joinRestriction = NULL; JoinRestriction *joinRestriction = NULL;
foreach_ptr(joinRestriction, joinRestrictionContext->joinRestrictionList) foreach_ptr(joinRestriction, joinRestrictionContext->joinRestrictionList)
{ {
List *currentJoinRestrictInfoList = NIL;
RestrictInfo *joinRestrictInfo = NULL; RestrictInfo *joinRestrictInfo = NULL;
foreach_ptr(joinRestrictInfo, joinRestriction->joinRestrictInfoList) foreach_ptr(joinRestrictInfo, joinRestriction->joinRestrictInfoList)
{ {
@ -850,16 +896,13 @@ ExtractRestrictionInfosFromPlannerContext(
joinRestrictInfo); joinRestrictInfo);
continue; continue;
} }
currentJoinRestrictInfoList = list_append_unique(currentJoinRestrictInfoList,
joinRestrictInfo);
joinRestrictInfoList = list_append_unique(joinRestrictInfoList,
joinRestrictInfo);
} }
joinRestrictInfoListList = lappend(joinRestrictInfoListList, joinRestrictInfoList = list_concat_unique(joinRestrictInfoList,
currentJoinRestrictInfoList); joinRestriction->joinRestrictInfoList);
joinRestrictInfoListList = list_append_unique(joinRestrictInfoListList,
joinRestriction->
joinRestrictInfoList);
} }
RestrictInfoContext *restrictInfoContext = palloc0(sizeof(RestrictInfoContext)); RestrictInfoContext *restrictInfoContext = palloc0(sizeof(RestrictInfoContext));
@ -1878,18 +1921,14 @@ CollectNodeForTable(List *collectTableList, uint32 rangeTableId)
* not have any select clauses, the function return null. * not have any select clauses, the function return null.
*/ */
static MultiSelect * static MultiSelect *
MultiSelectNode(List *pushdownableClauseList, List *nonPushdownableClauseList) MultiSelectNode(List *selectClauseList)
{ {
MultiSelect *selectNode = NULL; MultiSelect *selectNode = NULL;
if (list_length(pushdownableClauseList) > 0 || if (list_length(selectClauseList) > 0)
list_length(nonPushdownableClauseList) > 0)
{ {
selectNode = CitusMakeNode(MultiSelect); selectNode = CitusMakeNode(MultiSelect);
selectNode->selectClauseList = list_concat_copy(pushdownableClauseList, selectNode->selectClauseList = selectClauseList;
nonPushdownableClauseList);
selectNode->pushdownableSelectClauseList = pushdownableClauseList;
selectNode->nonPushdownableSelectClauseList = nonPushdownableClauseList;
} }
return selectNode; return selectNode;

View File

@ -60,6 +60,18 @@ typedef struct TableEntry
} TableEntry; } TableEntry;
/*
* ApplicableJoinClauseContext stores pushdownable and nonpushdownable
* parts of applicable join clauses in separate lists.
*/
typedef struct ApplicableJoinClauseContext
{
List *joinClauseList;
List *pushdownableJoinClauseList;
List *nonPushdownableJoinClauseList;
} ApplicableJoinClauseContext;
/* /*
* JoinOrderNode represents an element in the join order list; and this list * JoinOrderNode represents an element in the join order list; and this list
* keeps the total join order for a distributed query. The first node in this * keeps the total join order for a distributed query. The first node in this
@ -80,6 +92,7 @@ typedef struct JoinOrderNode
char partitionMethod; char partitionMethod;
List *joinClauseList; /* not relevant for the first table */ List *joinClauseList; /* not relevant for the first table */
ApplicableJoinClauseContext *applicableJoinClauseContext; /* not relevant for the first table */
TableEntry *anchorTable; TableEntry *anchorTable;
} JoinOrderNode; } JoinOrderNode;

View File

@ -124,8 +124,6 @@ typedef struct MultiSelect
{ {
MultiUnaryNode unaryNode; MultiUnaryNode unaryNode;
List *selectClauseList; List *selectClauseList;
List *pushdownableSelectClauseList;
List *nonPushdownableSelectClauseList;
} MultiSelect; } MultiSelect;

View File

@ -286,8 +286,8 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_2_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_2_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_3_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_3_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_4_3']::text[],'localhost',57636) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_4_3']::text[],'localhost',57636) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_0,repartition_25_2_0,repartition_25_3_0,repartition_25_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_0,repartition_26_2_0,repartition_26_3_0,repartition_26_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_0,repartition_25_2_0,repartition_25_3_0,repartition_25_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_0,repartition_26_2_0,repartition_26_3_0,repartition_26_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_3,repartition_25_2_3,repartition_25_3_3,repartition_25_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_3,repartition_26_2_3,repartition_26_3_3,repartition_26_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_3,repartition_25_2_3,repartition_25_3_3,repartition_25_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_3,repartition_26_2_3,repartition_26_3_3,repartition_26_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100
@ -325,8 +325,8 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_2_5']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_2_5']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_3_5']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_3_5']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_4_5']::text[],'localhost',57636) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_4_5']::text[],'localhost',57636) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_2,repartition_29_2_2,repartition_29_3_2,repartition_29_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_2,repartition_30_2_2,repartition_30_3_2,repartition_30_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_2,repartition_29_2_2,repartition_29_3_2,repartition_29_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_2,repartition_30_2_2,repartition_30_3_2,repartition_30_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_5,repartition_29_2_5,repartition_29_3_5,repartition_29_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_5,repartition_30_2_5,repartition_30_3_5,repartition_30_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_5,repartition_29_2_5,repartition_29_3_5,repartition_29_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_5,repartition_30_2_5,repartition_30_3_5,repartition_30_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100
@ -608,8 +608,8 @@ NOTICE: executing the copy locally for shard xxxxx
INSERT INTO ref_table SELECT *, * FROM generate_series(1, 100); INSERT INTO ref_table SELECT *, * FROM generate_series(1, 100);
NOTICE: executing the copy locally for shard xxxxx NOTICE: executing the copy locally for shard xxxxx
SELECT COUNT(*) FROM test JOIN ref_table USING(x); SELECT COUNT(*) FROM test JOIN ref_table USING(x);
NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503000 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE (ref_table.x OPERATOR(pg_catalog.=) test.x) NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503000 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503003 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE (ref_table.x OPERATOR(pg_catalog.=) test.x) NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503003 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100

View File

@ -286,8 +286,8 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_2_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_2_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_3_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_3_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_4_3']::text[],'localhost',57636) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_26_4_3']::text[],'localhost',57636) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_0,repartition_25_2_0,repartition_25_3_0,repartition_25_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_0,repartition_26_2_0,repartition_26_3_0,repartition_26_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_0,repartition_25_2_0,repartition_25_3_0,repartition_25_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_0,repartition_26_2_0,repartition_26_3_0,repartition_26_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_3,repartition_25_2_3,repartition_25_3_3,repartition_25_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_3,repartition_26_2_3,repartition_26_3_3,repartition_26_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_25_1_3,repartition_25_2_3,repartition_25_3_3,repartition_25_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_26_1_3,repartition_26_2_3,repartition_26_3_3,repartition_26_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100
@ -325,8 +325,8 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_2_5']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_2_5']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_3_5']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_3_5']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_4_5']::text[],'localhost',57636) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_30_4_5']::text[],'localhost',57636) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_2,repartition_29_2_2,repartition_29_3_2,repartition_29_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_2,repartition_30_2_2,repartition_30_3_2,repartition_30_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_2,repartition_29_2_2,repartition_29_3_2,repartition_29_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_2,repartition_30_2_2,repartition_30_3_2,repartition_30_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_5,repartition_29_2_5,repartition_29_3_5,repartition_29_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_5,repartition_30_2_5,repartition_30_3_5,repartition_30_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_29_1_5,repartition_29_2_5,repartition_29_3_5,repartition_29_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 integer) JOIN read_intermediate_results('{repartition_30_1_5,repartition_30_2_5,repartition_30_3_5,repartition_30_4_5}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 integer) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100
@ -608,8 +608,8 @@ NOTICE: executing the copy locally for shard xxxxx
INSERT INTO ref_table SELECT *, * FROM generate_series(1, 100); INSERT INTO ref_table SELECT *, * FROM generate_series(1, 100);
NOTICE: executing the copy locally for shard xxxxx NOTICE: executing the copy locally for shard xxxxx
SELECT COUNT(*) FROM test JOIN ref_table USING(x); SELECT COUNT(*) FROM test JOIN ref_table USING(x);
NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503000 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE (ref_table.x OPERATOR(pg_catalog.=) test.x) NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503000 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503003 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE (ref_table.x OPERATOR(pg_catalog.=) test.x) NOTICE: executing the command locally: SELECT count(*) AS count FROM (coordinator_shouldhaveshards.test_1503003 test JOIN coordinator_shouldhaveshards.ref_table_1503039 ref_table ON ((test.x OPERATOR(pg_catalog.=) ref_table.x))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
100 100

View File

@ -425,8 +425,8 @@ SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -437,8 +437,8 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470025 abcd JOIN local_shard_execution.abcd_1470025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470025 abcd JOIN local_shard_execution.abcd_1470025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470027 abcd JOIN local_shard_execution.abcd_1470027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470027 abcd JOIN local_shard_execution.abcd_1470027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -461,8 +461,8 @@ NOTICE: executing the command locally: SELECT worker_column_1 AS b, worker_colu
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | c | d b | c | d | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 2 | 3 | 4 | 3 | 4
@ -473,8 +473,8 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
b | c | d | c | d | b | c | d b | c | d | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 3 | 4 | 2 | 3 | 4
@ -788,10 +788,10 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_2_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_2_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_3_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_3_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_4_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_4_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_0,repartition_66_2_0,repartition_66_3_0,repartition_66_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_0,repartition_66_2_0,repartition_66_3_0,repartition_66_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_1,repartition_66_2_1,repartition_66_3_1,repartition_66_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_1,repartition_66_2_1,repartition_66_3_1,repartition_66_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_2,repartition_66_2_2,repartition_66_3_2,repartition_66_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_2,repartition_66_2_2,repartition_66_3_2,repartition_66_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_3,repartition_66_2_3,repartition_66_3_3,repartition_66_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_3,repartition_66_2_3,repartition_66_3_3,repartition_66_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 2

View File

@ -425,8 +425,8 @@ SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -437,8 +437,8 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470025 abcd JOIN local_shard_execution.abcd_1470025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470025 abcd JOIN local_shard_execution.abcd_1470025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470027 abcd JOIN local_shard_execution.abcd_1470027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution.abcd_1470027 abcd JOIN local_shard_execution.abcd_1470027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -461,8 +461,8 @@ NOTICE: executing the command locally: SELECT worker_column_1 AS b, worker_colu
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | c | d b | c | d | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 2 | 3 | 4 | 3 | 4
@ -473,8 +473,8 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470025 first JOIN local_shard_execution.abcd_1470025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution.abcd_1470027 first JOIN local_shard_execution.abcd_1470027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution.abcd_1470027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
b | c | d | c | d | b | c | d b | c | d | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 3 | 4 | 2 | 3 | 4
@ -788,10 +788,10 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_2_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_2_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_3_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_3_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_4_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_66_4_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_0,repartition_66_2_0,repartition_66_3_0,repartition_66_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_0,repartition_66_2_0,repartition_66_3_0,repartition_66_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_1,repartition_66_2_1,repartition_66_3_1,repartition_66_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_1,repartition_66_2_1,repartition_66_3_1,repartition_66_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_2,repartition_66_2_2,repartition_66_3_2,repartition_66_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_2,repartition_66_2_2,repartition_66_3_2,repartition_66_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_3,repartition_66_2_3,repartition_66_3_3,repartition_66_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_66_1_3,repartition_66_2_3,repartition_66_3_3,repartition_66_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 2

View File

@ -361,10 +361,10 @@ SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -375,10 +375,10 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500025 abcd JOIN local_shard_execution_replicated.abcd_1500025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500025 abcd JOIN local_shard_execution_replicated.abcd_1500025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500026 abcd JOIN local_shard_execution_replicated.abcd_1500026 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500026 abcd JOIN local_shard_execution_replicated.abcd_1500026 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500027 abcd JOIN local_shard_execution_replicated.abcd_1500027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500027 abcd JOIN local_shard_execution_replicated.abcd_1500027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500028 abcd JOIN local_shard_execution_replicated.abcd_1500028 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500028 abcd JOIN local_shard_execution_replicated.abcd_1500028 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -403,10 +403,10 @@ NOTICE: executing the command locally: SELECT worker_column_1 AS b, worker_colu
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | c | d b | c | d | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 2 | 3 | 4 | 3 | 4
@ -417,10 +417,10 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500026 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500026 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500028 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500028 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
b | c | d | c | d | b | c | d b | c | d | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 3 | 4 | 2 | 3 | 4
@ -748,10 +748,10 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_2_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_2_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_3_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_3_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_4_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_4_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_0,repartition_64_2_0,repartition_64_3_0,repartition_64_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_0,repartition_64_2_0,repartition_64_3_0,repartition_64_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_1,repartition_64_2_1,repartition_64_3_1,repartition_64_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_1,repartition_64_2_1,repartition_64_3_1,repartition_64_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_2,repartition_64_2_2,repartition_64_3_2,repartition_64_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_2,repartition_64_2_2,repartition_64_3_2,repartition_64_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_3,repartition_64_2_3,repartition_64_3_3,repartition_64_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_3,repartition_64_2_3,repartition_64_3_3,repartition_64_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 2

View File

@ -361,10 +361,10 @@ SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.b, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -375,10 +375,10 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4; SELECT * FROM abcd_view first join abcd_view second on first.b = second.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500025 abcd JOIN local_shard_execution_replicated.abcd_1500025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500025 abcd JOIN local_shard_execution_replicated.abcd_1500025 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500026 abcd JOIN local_shard_execution_replicated.abcd_1500026 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500026 abcd JOIN local_shard_execution_replicated.abcd_1500026 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500027 abcd JOIN local_shard_execution_replicated.abcd_1500027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500027 abcd JOIN local_shard_execution_replicated.abcd_1500027 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500028 abcd JOIN local_shard_execution_replicated.abcd_1500028 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE (abcd_1.b OPERATOR(pg_catalog.=) abcd.b) NOTICE: executing the command locally: SELECT abcd.b, abcd.c, abcd.d, abcd_1.b, abcd_1.c, abcd_1.d FROM (local_shard_execution_replicated.abcd_1500028 abcd JOIN local_shard_execution_replicated.abcd_1500028 abcd_1 ON ((abcd.b OPERATOR(pg_catalog.=) abcd_1.b))) WHERE true
b | c | d | b | c | d b | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 2 | 3 | 4
@ -403,10 +403,10 @@ NOTICE: executing the command locally: SELECT worker_column_1 AS b, worker_colu
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE (second.b OPERATOR(pg_catalog.=) first.b) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d FROM (local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) WHERE true
b | c | d | c | d b | c | d | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 2 | 3 | 4 | 3 | 4
@ -417,10 +417,10 @@ NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second
END; END;
BEGIN; BEGIN;
SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4; SELECT * FROM abcd first join abcd second USING(b) join abcd third on first.b=third.b ORDER BY 1,2,3,4;
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500025 first JOIN local_shard_execution_replicated.abcd_1500025 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500025 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500026 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500026 first JOIN local_shard_execution_replicated.abcd_1500026 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500026 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500027 first JOIN local_shard_execution_replicated.abcd_1500027 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500027 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500028 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE ((second.b OPERATOR(pg_catalog.=) third.b) AND (second.b OPERATOR(pg_catalog.=) first.b)) NOTICE: executing the command locally: SELECT first.b, first.c, first.d, second.c, second.d, third.b, third.c, third.d FROM ((local_shard_execution_replicated.abcd_1500028 first JOIN local_shard_execution_replicated.abcd_1500028 second ON ((first.b OPERATOR(pg_catalog.=) second.b))) JOIN local_shard_execution_replicated.abcd_1500028 third ON ((first.b OPERATOR(pg_catalog.=) third.b))) WHERE true
b | c | d | c | d | b | c | d b | c | d | c | d | b | c | d
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 | 3 | 4 | 3 | 4 | 2 | 3 | 4 2 | 3 | 4 | 3 | 4 | 2 | 3 | 4
@ -748,10 +748,10 @@ NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_res
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_2_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_2_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_3_3']::text[],'localhost',57637) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_3_3']::text[],'localhost',57637) bytes
NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_4_3']::text[],'localhost',57638) bytes NOTICE: executing the command locally: SELECT bytes FROM fetch_intermediate_results(ARRAY['repartition_65_4_3']::text[],'localhost',57638) bytes
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_0,repartition_64_2_0,repartition_64_3_0,repartition_64_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_0,repartition_64_2_0,repartition_64_3_0,repartition_64_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_0,repartition_65_2_0,repartition_65_3_0,repartition_65_4_0}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_1,repartition_64_2_1,repartition_64_3_1,repartition_64_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_1,repartition_64_2_1,repartition_64_3_1,repartition_64_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_1,repartition_65_2_1,repartition_65_3_1,repartition_65_4_1}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_2,repartition_64_2_2,repartition_64_3_2,repartition_64_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_2,repartition_64_2_2,repartition_64_3_2,repartition_64_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_2,repartition_65_2_2,repartition_65_3_2,repartition_65_4_2}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_3,repartition_64_2_3,repartition_64_3_3,repartition_64_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE (intermediate_result_1.column1 OPERATOR(pg_catalog.=) intermediate_result.column1) NOTICE: executing the command locally: SELECT count(*) AS count FROM (read_intermediate_results('{repartition_64_1_3,repartition_64_2_3,repartition_64_3_3,repartition_64_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result(column1 bigint) JOIN read_intermediate_results('{repartition_65_1_3,repartition_65_2_3,repartition_65_3_3,repartition_65_4_3}'::text[], 'binary'::citus_copy_format) intermediate_result_1(column1 bigint) ON ((intermediate_result.column1 OPERATOR(pg_catalog.=) intermediate_result_1.column1))) WHERE true
count count
--------------------------------------------------------------------- ---------------------------------------------------------------------
2 2

View File

@ -225,51 +225,15 @@ WHERE
DEBUG: Router planner cannot handle multi-shard select queries DEBUG: Router planner cannot handle multi-shard select queries
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match DEBUG: dual partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match DEBUG: dual partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match DEBUG: dual partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: single partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match
DEBUG: dual partition column types do not match DEBUG: dual partition column types do not match
LOG: join order: [ "single_hash_repartition_first" ][ local partition join(INNER) "single_hash_repartition_first" ][ cartesian product(INNER) "single_hash_repartition_second" ] LOG: join order: [ "single_hash_repartition_first" ][ local partition join(INNER) "single_hash_repartition_first" ][ cartesian product(INNER) "single_hash_repartition_second" ]
ERROR: cannot perform distributed planning on this query ERROR: cannot perform distributed planning on this query