mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +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:
@ -131,6 +131,8 @@ static void fileEndForeignScan(ForeignScanState *node);
|
||||
static bool fileAnalyzeForeignTable(Relation relation,
|
||||
AcquireSampleRowsFunc *func,
|
||||
BlockNumber *totalpages);
|
||||
static bool fileIsForeignScanParallelSafe(PlannerInfo *root, RelOptInfo *rel,
|
||||
RangeTblEntry *rte);
|
||||
|
||||
/*
|
||||
* Helper functions
|
||||
@ -170,6 +172,7 @@ file_fdw_handler(PG_FUNCTION_ARGS)
|
||||
fdwroutine->ReScanForeignScan = fileReScanForeignScan;
|
||||
fdwroutine->EndForeignScan = fileEndForeignScan;
|
||||
fdwroutine->AnalyzeForeignTable = fileAnalyzeForeignTable;
|
||||
fdwroutine->IsForeignScanParallelSafe = fileIsForeignScanParallelSafe;
|
||||
|
||||
PG_RETURN_POINTER(fdwroutine);
|
||||
}
|
||||
@ -761,6 +764,18 @@ fileAnalyzeForeignTable(Relation relation,
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* fileIsForeignScanParallelSafe
|
||||
* Reading a file in a parallel worker should work just the same as
|
||||
* reading it in the leader, so mark scans safe.
|
||||
*/
|
||||
static bool
|
||||
fileIsForeignScanParallelSafe(PlannerInfo *root, RelOptInfo *rel,
|
||||
RangeTblEntry *rte)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* check_selective_binary_conversion
|
||||
*
|
||||
|
Reference in New Issue
Block a user