Improve code to prevent allowing wrong pushdowns

pull/1175/head
Onder Kalaci 2017-01-26 17:08:44 +02:00
parent 88f4956064
commit 64c70a0777
2 changed files with 136 additions and 52 deletions

View File

@ -72,6 +72,19 @@ typedef struct WalkerState
bool badCoalesce; bool badCoalesce;
} WalkerState; } WalkerState;
typedef struct InstantiateQualWalker
{
ShardInterval *targetShardInterval;
Var *relationPartitionColumn;
}InstantiateQualWalker;
typedef struct EqualityCheckOnPartitionColumnWalker
{
Var *relationPartitionColumn;
bool partitionColumnEqualityExists;
}PartitionColumnEqualityCheckWalker;
bool EnableRouterExecution = true; bool EnableRouterExecution = true;
/* planner functions forward declarations */ /* planner functions forward declarations */
@ -128,6 +141,7 @@ static DeferredErrorMessage * InsertPartitionColumnMatchesSelect(Query *query,
Oid * Oid *
selectPartitionColumnTableId); selectPartitionColumnTableId);
static void AddUninstantiatedEqualityQual(Query *query, Var *targetPartitionColumnVar); static void AddUninstantiatedEqualityQual(Query *query, Var *targetPartitionColumnVar);
static Node * PartitionColumnEqualityWalker(Node *originalNode, void *context);
static DeferredErrorMessage * ErrorIfQueryHasModifyingCTE(Query *queryTree); static DeferredErrorMessage * ErrorIfQueryHasModifyingCTE(Query *queryTree);
@ -356,11 +370,13 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
ListCell *restrictionCell = NULL; ListCell *restrictionCell = NULL;
Task *modifyTask = NULL; Task *modifyTask = NULL;
List *selectPlacementList = NIL; List *selectPlacementList = NIL;
List *insertShardPlacementList = NULL;
List *intersectedPlacementList = NULL;
uint64 selectAnchorShardId = INVALID_SHARD_ID; uint64 selectAnchorShardId = INVALID_SHARD_ID;
List *relationShardList = NIL; List *relationShardList = NIL;
uint64 jobId = INVALID_JOB_ID; uint64 jobId = INVALID_JOB_ID;
List *insertShardPlacementList = NULL; ShardInterval *anchorShardInterval = NULL;
List *intersectedPlacementList = NULL; ListCell *relationShardCell = NULL;
bool routerPlannable = false; bool routerPlannable = false;
bool upsertQuery = false; bool upsertQuery = false;
bool replacePrunedQueryWithDummy = false; bool replacePrunedQueryWithDummy = false;
@ -377,6 +393,9 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
{ {
RelationRestriction *restriction = lfirst(restrictionCell); RelationRestriction *restriction = lfirst(restrictionCell);
List *originalBaserestrictInfo = restriction->relOptInfo->baserestrictinfo; List *originalBaserestrictInfo = restriction->relOptInfo->baserestrictinfo;
InstantiateQualWalker *instantiateQualWalker = palloc0(
sizeof(InstantiateQualWalker));
Var *relationPartitionKey = PartitionKey(restriction->relationId);
/* /*
* We haven't added the quals if all participating tables are reference * We haven't added the quals if all participating tables are reference
@ -387,9 +406,12 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
break; break;
} }
instantiateQualWalker->relationPartitionColumn = relationPartitionKey;
instantiateQualWalker->targetShardInterval = shardInterval;
originalBaserestrictInfo = originalBaserestrictInfo =
(List *) InstantiatePartitionQual((Node *) originalBaserestrictInfo, (List *) InstantiatePartitionQual((Node *) originalBaserestrictInfo,
shardInterval); instantiateQualWalker);
} }
/* /*
@ -436,15 +458,40 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
return NULL; return NULL;
} }
/*
* If the anchorShardInterval belongs to a reference table and the target tables it
* not a reference table, find another shard interval that does not belong to a
* reference table.
*/
anchorShardInterval = LoadShardInterval(selectAnchorShardId);
if (PartitionMethod(anchorShardInterval->relationId) == DISTRIBUTE_BY_NONE &&
!restrictionContext->allReferenceTables)
{
foreach(relationShardCell, relationShardList)
{
RelationShard *relationShard = (RelationShard *) lfirst(relationShardCell);
if (PartitionMethod(relationShard->relationId) != DISTRIBUTE_BY_NONE)
{
anchorShardInterval = LoadShardInterval(relationShard->shardId);
break;
}
}
}
/* this case indicate*/
if (!ShardsColocated(anchorShardInterval, shardInterval))
{
ereport(DEBUG2, (errmsg("Skipping target shard interval %ld since "
"SELECT query for it pruned away", shardId)));
return NULL;
}
/* get the placements for insert target shard and its intersection with select */ /* get the placements for insert target shard and its intersection with select */
insertShardPlacementList = FinalizedShardPlacementList(shardId); insertShardPlacementList = FinalizedShardPlacementList(shardId);
intersectedPlacementList = IntersectPlacementList(insertShardPlacementList, intersectedPlacementList = IntersectPlacementList(insertShardPlacementList,
selectPlacementList); selectPlacementList);
/*
* If insert target does not have exactly the same placements with the select,
* we sholdn't run the query.
*/
if (list_length(insertShardPlacementList) != list_length(intersectedPlacementList)) if (list_length(insertShardPlacementList) != list_length(intersectedPlacementList))
{ {
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@ -454,7 +501,6 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
"for shard %ld", shardId))); "for shard %ld", shardId)));
} }
/* this is required for correct deparsing of the query */ /* this is required for correct deparsing of the query */
ReorderInsertSelectTargetLists(copiedQuery, copiedInsertRte, copiedSubqueryRte); ReorderInsertSelectTargetLists(copiedQuery, copiedInsertRte, copiedSubqueryRte);
@ -479,7 +525,7 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
modifyTask = CreateBasicTask(jobId, taskIdIndex, MODIFY_TASK, queryString->data); modifyTask = CreateBasicTask(jobId, taskIdIndex, MODIFY_TASK, queryString->data);
modifyTask->dependedTaskList = NULL; modifyTask->dependedTaskList = NULL;
modifyTask->anchorShardId = shardId; modifyTask->anchorShardId = shardId;
modifyTask->taskPlacementList = insertShardPlacementList; modifyTask->taskPlacementList = FinalizedShardPlacementList(shardId);
modifyTask->upsertQuery = upsertQuery; modifyTask->upsertQuery = upsertQuery;
modifyTask->relationShardList = relationShardList; modifyTask->relationShardList = relationShardList;
modifyTask->replicationModel = cacheEntry->replicationModel; modifyTask->replicationModel = cacheEntry->replicationModel;
@ -1142,9 +1188,23 @@ AddUninstantiatedEqualityQual(Query *query, Var *partitionColumn)
Oid equalsOperator = InvalidOid; Oid equalsOperator = InvalidOid;
Oid greaterOperator = InvalidOid; Oid greaterOperator = InvalidOid;
bool hashable = false; bool hashable = false;
PartitionColumnEqualityCheckWalker *walker =
palloc0(sizeof(PartitionColumnEqualityCheckWalker));
AssertArg(query->commandType == CMD_SELECT); AssertArg(query->commandType == CMD_SELECT);
walker->partitionColumnEqualityExists = false;
walker->relationPartitionColumn = partitionColumn;
/* if the query already includes part_column = const, we don't need to add another. In fact,
* adding another equality qual breaks lots of things.
*/
PartitionColumnEqualityWalker((Node *) query->jointree->quals, walker);
if (walker->partitionColumnEqualityExists)
{
return;
}
/* get the necessary equality operator */ /* get the necessary equality operator */
get_sort_group_operators(partitionColumn->vartype, false, true, false, get_sort_group_operators(partitionColumn->vartype, false, true, false,
&lessThanOperator, &equalsOperator, &greaterOperator, &lessThanOperator, &equalsOperator, &greaterOperator,
@ -1186,6 +1246,51 @@ AddUninstantiatedEqualityQual(Query *query, Var *partitionColumn)
} }
/*
*
*/
static Node *
PartitionColumnEqualityWalker(Node *originalNode, void *context)
{
PartitionColumnEqualityCheckWalker *walker =
(PartitionColumnEqualityCheckWalker *) context;
if (originalNode == NULL)
{
return NULL;
}
if (IsA(originalNode, OpExpr) && list_length(((OpExpr *) originalNode)->args) == 2)
{
OpExpr *op = (OpExpr *) originalNode;
Node *leftop = get_leftop((Expr *) op);
Node *rightop = get_rightop((Expr *) op);
if (IsA(leftop, Var) && IsA(rightop, Const) &&
OperatorImplementsEquality(op->opno))
{
if (((Var *) leftop)->varattno == walker->relationPartitionColumn->varattno)
{
walker->partitionColumnEqualityExists = true;
return NULL;
}
}
else if (IsA(leftop, Const) && IsA(rightop, Var) &&
OperatorImplementsEquality(op->opno))
{
walker->partitionColumnEqualityExists = true;
return NULL;
}
}
return expression_tree_mutator(originalNode, PartitionColumnEqualityWalker,
(void *) context);
}
/* /*
* ModifyQuerySupported returns NULL if the query only contains supported * ModifyQuerySupported returns NULL if the query only contains supported
* features, otherwise it returns an error description. * features, otherwise it returns an error description.
@ -2950,7 +3055,10 @@ CopyRelationRestrictionContext(RelationRestrictionContext *oldContext)
static Node * static Node *
InstantiatePartitionQual(Node *node, void *context) InstantiatePartitionQual(Node *node, void *context)
{ {
ShardInterval *shardInterval = (ShardInterval *) context; InstantiateQualWalker *instantiateContext = ((InstantiateQualWalker *) context);
ShardInterval *shardInterval = instantiateContext->targetShardInterval;
Var *relationPartitionColumn = instantiateContext->relationPartitionColumn;
Assert(shardInterval->minValueExists); Assert(shardInterval->minValueExists);
Assert(shardInterval->maxValueExists); Assert(shardInterval->maxValueExists);
@ -2974,6 +3082,7 @@ InstantiatePartitionQual(Node *node, void *context)
Node *leftop = get_leftop((Expr *) op); Node *leftop = get_leftop((Expr *) op);
Node *rightop = get_rightop((Expr *) op); Node *rightop = get_rightop((Expr *) op);
Param *param = NULL; Param *param = NULL;
Var *currentPartitionColumn = NULL;
Var *hashedGEColumn = NULL; Var *hashedGEColumn = NULL;
OpExpr *hashedGEOpExpr = NULL; OpExpr *hashedGEOpExpr = NULL;
@ -2989,13 +3098,15 @@ InstantiatePartitionQual(Node *node, void *context)
Oid integer4LEoperatorId = InvalidOid; Oid integer4LEoperatorId = InvalidOid;
/* look for the Params */ /* look for the Params */
if (IsA(leftop, Param)) if (IsA(leftop, Param) && IsA(rightop, Var))
{ {
param = (Param *) leftop; param = (Param *) leftop;
currentPartitionColumn = (Var *) rightop;
} }
else if (IsA(rightop, Param)) else if (IsA(rightop, Param) & IsA(leftop, Var))
{ {
param = (Param *) rightop; param = (Param *) rightop;
currentPartitionColumn = (Var *) leftop;
} }
/* not an interesting param for our purpose, so return */ /* not an interesting param for our purpose, so return */
@ -3004,6 +3115,13 @@ InstantiatePartitionQual(Node *node, void *context)
return node; return node;
} }
/* if the qual is not on the partition column, skip it */
if (relationPartitionColumn && currentPartitionColumn->varattno !=
relationPartitionColumn->varattno)
{
return node;
}
/* get the integer >=, <= operators from the catalog */ /* get the integer >=, <= operators from the catalog */
integer4GEoperatorId = get_opfamily_member(INTEGER_BTREE_FAM_OID, INT4OID, integer4GEoperatorId = get_opfamily_member(INTEGER_BTREE_FAM_OID, INT4OID,
INT4OID, INT4OID,

View File

@ -198,7 +198,6 @@ DEBUG: StartTransactionCommand
DEBUG: StartTransaction DEBUG: StartTransaction
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300004 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300004 since SELECT query for it pruned away
@ -207,12 +206,10 @@ DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300005 AS citus_table_alias (user_id, "time") SELECT user_id, "time" FROM public.raw_events_first_13300001 raw_events_first WHERE ((user_id = 7) AND ((hashint4(user_id) >= '-1073741824'::integer) AND (hashint4(user_id) <= '-1'::integer))) DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300005 AS citus_table_alias (user_id, "time") SELECT user_id, "time" FROM public.raw_events_first_13300001 raw_events_first WHERE ((user_id = 7) AND ((hashint4(user_id) >= '-1073741824'::integer) AND (hashint4(user_id) <= '-1'::integer)))
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300007 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300007 since SELECT query for it pruned away
@ -248,17 +245,14 @@ DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300004 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_first_13300000 raw_events_first WHERE ((user_id = 8) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer))) DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300004 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_first_13300000 raw_events_first WHERE ((user_id = 8) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer)))
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300005 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300005 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 DEBUG: predicate pruning for shardId 13300003
@ -371,28 +365,9 @@ DEBUG: StartTransactionCommand
DEBUG: StartTransaction DEBUG: StartTransaction
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003 ERROR: cannot perform distributed planning for the given modification
DEBUG: Skipping target shard interval 13300004 since SELECT query for it pruned away DETAIL: Select query cannot be pushed down to the worker.
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300005 AS citus_table_alias (user_id, value_1, value_3) SELECT user_id, value_1, value_3 FROM public.raw_events_first_13300001 raw_events_first WHERE (((user_id = 9) OR (user_id = 16)) AND ((hashint4(user_id) >= '-1073741824'::integer) AND (hashint4(user_id) <= '-1'::integer))) RETURNING citus_table_alias.user_id, citus_table_alias."time", citus_table_alias.value_1, citus_table_alias.value_2, citus_table_alias.value_3, citus_table_alias.value_4
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300003
DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300007 AS citus_table_alias (user_id, value_1, value_3) SELECT user_id, value_1, value_3 FROM public.raw_events_first_13300003 raw_events_first WHERE (((user_id = 9) OR (user_id = 16)) AND ((hashint4(user_id) >= 1073741824) AND (hashint4(user_id) <= 2147483647))) RETURNING citus_table_alias.user_id, citus_table_alias."time", citus_table_alias.value_1, citus_table_alias.value_2, citus_table_alias.value_3, citus_table_alias.value_4
DEBUG: ProcessQuery
DEBUG: Plan is router executable
ERROR: duplicate key value violates unique constraint "raw_events_second_user_id_value_1_key_13300007"
DETAIL: Key (user_id, value_1)=(9, 90) already exists.
CONTEXT: while executing command on localhost:57638
-- now do some aggregations -- now do some aggregations
INSERT INTO agg_events INSERT INTO agg_events
SELECT SELECT
@ -722,21 +697,21 @@ DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300004 AS citus_table_alias (user_id) SELECT user_id FROM public.raw_events_first_13300003 raw_events_first WHERE ((user_id IN (SELECT raw_events_second.user_id FROM public.raw_events_second_13300007 raw_events_second WHERE (raw_events_second.user_id = 2))) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer))) DEBUG: Skipping target shard interval 13300004 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300005 AS citus_table_alias (user_id) SELECT user_id FROM public.raw_events_first_13300003 raw_events_first WHERE ((user_id IN (SELECT raw_events_second.user_id FROM public.raw_events_second_13300007 raw_events_second WHERE (raw_events_second.user_id = 2))) AND ((hashint4(user_id) >= '-1073741824'::integer) AND (hashint4(user_id) <= '-1'::integer))) DEBUG: Skipping target shard interval 13300005 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: distributed statement: INSERT INTO public.raw_events_second_13300006 AS citus_table_alias (user_id) SELECT user_id FROM public.raw_events_first_13300003 raw_events_first WHERE ((user_id IN (SELECT raw_events_second.user_id FROM public.raw_events_second_13300007 raw_events_second WHERE (raw_events_second.user_id = 2))) AND ((hashint4(user_id) >= 0) AND (hashint4(user_id) <= 1073741823))) DEBUG: Skipping target shard interval 13300006 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300000 DEBUG: predicate pruning for shardId 13300000
DEBUG: predicate pruning for shardId 13300001 DEBUG: predicate pruning for shardId 13300001
DEBUG: predicate pruning for shardId 13300002 DEBUG: predicate pruning for shardId 13300002
@ -1555,17 +1530,14 @@ DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300000 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300004 raw_events_second WHERE ((user_id = 5) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer))) DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300000 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300004 raw_events_second WHERE ((user_id = 5) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer)))
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300002 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300002 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
@ -1614,12 +1586,10 @@ DEBUG: StartTransaction
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300000 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300000 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
@ -1628,7 +1598,6 @@ DEBUG: predicate pruning for shardId 13300007
DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300002 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300006 raw_events_second WHERE ((user_id = 6) AND ((hashint4(user_id) >= 0) AND (hashint4(user_id) <= 1073741823))) DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300002 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300006 raw_events_second WHERE ((user_id = 6) AND ((hashint4(user_id) >= 0) AND (hashint4(user_id) <= 1073741823)))
DEBUG: predicate pruning for shardId 13300004 DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300003 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300003 since SELECT query for it pruned away
DEBUG: ProcessQuery DEBUG: ProcessQuery
@ -1695,17 +1664,14 @@ DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300000 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300004 raw_events_second WHERE ((user_id = 5) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer))) DEBUG: distributed statement: INSERT INTO public.raw_events_first_13300000 AS citus_table_alias (user_id, "time", value_1, value_2, value_3, value_4) SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM public.raw_events_second_13300004 raw_events_second WHERE ((user_id = 5) AND ((hashint4(user_id) >= '-2147483648'::integer) AND (hashint4(user_id) <= '-1073741825'::integer)))
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300001 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007
DEBUG: Skipping target shard interval 13300002 since SELECT query for it pruned away DEBUG: Skipping target shard interval 13300002 since SELECT query for it pruned away
DEBUG: predicate pruning for shardId 13300004
DEBUG: predicate pruning for shardId 13300005 DEBUG: predicate pruning for shardId 13300005
DEBUG: predicate pruning for shardId 13300006 DEBUG: predicate pruning for shardId 13300006
DEBUG: predicate pruning for shardId 13300007 DEBUG: predicate pruning for shardId 13300007