mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Add new FDW API to test for parallel-safety.
This is basically a bug fix; the old code assumes that a ForeignScan is always parallel-safe, but for postgres_fdw, for example, this is definitely false. It should be true for file_fdw, though, since a worker can read a file from the filesystem just as well as any other backend process. Original patch by Thomas Munro. Documentation, and changes to the comments, by me.
This commit is contained in:
@ -527,6 +527,23 @@ set_rel_consider_parallel(PlannerInfo *root, RelOptInfo *rel,
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ask FDWs whether they can support performing a ForeignScan
|
||||
* within a worker. Most often, the answer will be no. For
|
||||
* example, if the nature of the FDW is such that it opens a TCP
|
||||
* connection with a remote server, each parallel worker would end
|
||||
* up with a separate connection, and these connections might not
|
||||
* be appropriately coordinated between workers and the leader.
|
||||
*/
|
||||
if (rte->relkind == RELKIND_FOREIGN_TABLE)
|
||||
{
|
||||
Assert(rel->fdwroutine);
|
||||
if (!rel->fdwroutine->IsForeignScanParallelSafe)
|
||||
return;
|
||||
if (!rel->fdwroutine->IsForeignScanParallelSafe(root, rel, rte))
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case RTE_SUBQUERY:
|
||||
|
Reference in New Issue
Block a user