|
|
|
@ -2991,6 +2991,7 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, |
|
|
|
|
ResultRelInfo *partrelinfo_new; |
|
|
|
|
Relation partrel_new; |
|
|
|
|
bool found; |
|
|
|
|
EPQState epqstate; |
|
|
|
|
|
|
|
|
|
/* Get the matching local tuple from the partition. */ |
|
|
|
|
found = FindReplTupleInLocalRel(edata, partrel, |
|
|
|
@ -3021,6 +3022,9 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, |
|
|
|
|
newtup); |
|
|
|
|
MemoryContextSwitchTo(oldctx); |
|
|
|
|
|
|
|
|
|
EvalPlanQualInit(&epqstate, estate, NULL, NIL, -1, NIL); |
|
|
|
|
ExecOpenIndices(partrelinfo, false); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Does the updated tuple still satisfy the current |
|
|
|
|
* partition's constraint? |
|
|
|
@ -3036,18 +3040,11 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, |
|
|
|
|
* work already done above to find the local tuple in the |
|
|
|
|
* partition. |
|
|
|
|
*/ |
|
|
|
|
EPQState epqstate; |
|
|
|
|
|
|
|
|
|
EvalPlanQualInit(&epqstate, estate, NULL, NIL, -1, NIL); |
|
|
|
|
ExecOpenIndices(partrelinfo, false); |
|
|
|
|
|
|
|
|
|
EvalPlanQualSetSlot(&epqstate, remoteslot_part); |
|
|
|
|
TargetPrivilegesCheck(partrelinfo->ri_RelationDesc, |
|
|
|
|
ACL_UPDATE); |
|
|
|
|
ExecSimpleRelationUpdate(partrelinfo, estate, &epqstate, |
|
|
|
|
localslot, remoteslot_part); |
|
|
|
|
ExecCloseIndices(partrelinfo); |
|
|
|
|
EvalPlanQualEnd(&epqstate); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
@ -3091,9 +3088,9 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, |
|
|
|
|
RelationGetRelationName(partrel_new)); |
|
|
|
|
|
|
|
|
|
/* DELETE old tuple found in the old partition. */ |
|
|
|
|
apply_handle_delete_internal(edata, partrelinfo, |
|
|
|
|
localslot, |
|
|
|
|
part_entry->localindexoid); |
|
|
|
|
EvalPlanQualSetSlot(&epqstate, localslot); |
|
|
|
|
TargetPrivilegesCheck(partrelinfo->ri_RelationDesc, ACL_DELETE); |
|
|
|
|
ExecSimpleRelationDelete(partrelinfo, estate, &epqstate, localslot); |
|
|
|
|
|
|
|
|
|
/* INSERT new tuple into the new partition. */ |
|
|
|
|
|
|
|
|
@ -3123,6 +3120,9 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, |
|
|
|
|
apply_handle_insert_internal(edata, partrelinfo_new, |
|
|
|
|
remoteslot_part); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ExecCloseIndices(partrelinfo); |
|
|
|
|
EvalPlanQualEnd(&epqstate); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|