Issue in ExecCleanupTupleRouting()
От | Etsuro Fujita |
---|---|
Тема | Issue in ExecCleanupTupleRouting() |
Дата | |
Msg-id | 5CAF3B8F.2090905@lab.ntt.co.jp обсуждение исходный текст |
Ответы |
Re: Issue in ExecCleanupTupleRouting()
Re: Issue in ExecCleanupTupleRouting() |
Список | pgsql-hackers |
Hi, (added Alvaro, Amit, and David) While working on an update-tuple-routing bug in postgres_fdw [1], I noticed this change to ExecCleanupTupleRouting() made by commit 3f2393edefa5ef2b6970a5a2fa2c7e9c55cc10cf: + /* + * Check if this result rel is one belonging to the node's subplans, + * if so, let ExecEndPlan() clean it up. + */ + if (htab) + { + Oid partoid; + bool found; + + partoid = RelationGetRelid(resultRelInfo->ri_RelationDesc); + + (void) hash_search(htab, &partoid, HASH_FIND, &found); + if (found) + continue; + } /* Allow any FDWs to shut down if they've been exercised */ - if (resultRelInfo->ri_PartitionReadyForRouting && - resultRelInfo->ri_FdwRoutine != NULL && + if (resultRelInfo->ri_FdwRoutine != NULL && resultRelInfo->ri_FdwRoutine->EndForeignInsert != NULL) resultRelInfo->ri_FdwRoutine->EndForeignInsert(mtstate->ps.state, resultRelInfo); This skips subplan resultrels before calling EndForeignInsert() if they are foreign tables, which I think causes an issue: the FDWs would fail to release resources for their foreign insert operations, because ExecEndPlan() and ExecEndModifyTable() don't do anything to allow them to do that. So I think we should skip subplan resultrels after EndForeignInsert(). Attached is a small patch for that. Best regards, Etsuro Fujita [1] https://www.postgresql.org/message-id/21e7eaa4-0d4d-20c2-a1f7-c7e96f4ce440%40lab.ntt.co.jp
Вложения
В списке pgsql-hackers по дате отправления: