mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
postgres_fdw: Perform the (FINAL, NULL) upperrel operations remotely.
The upper-planner pathification allows FDWs to arrange to push down different types of upper-stage operations to the remote side. This commit teaches postgres_fdw to do it for the (FINAL, NULL) upperrel, which is responsible for doing LockRows, LIMIT, and/or ModifyTable. This provides the ability for postgres_fdw to handle SELECT commands so that it 1) skips the LockRows step (if any) (note that this is safe since it performs early locking) and 2) pushes down the LIMIT and/or OFFSET restrictions (if any) to the remote side. This doesn't handle the INSERT/UPDATE/DELETE cases. Author: Etsuro Fujita Reviewed-By: Antonin Houska and Jeff Janes Discussion: https://postgr.es/m/87pnz1aby9.fsf@news-spur.riddles.org.uk
This commit is contained in:
@ -2439,6 +2439,24 @@ typedef struct
|
||||
PartitionwiseAggregateType patype;
|
||||
} GroupPathExtraData;
|
||||
|
||||
/*
|
||||
* Struct for extra information passed to subroutines of grouping_planner
|
||||
*
|
||||
* limit_needed is true if we actually need a Limit plan node
|
||||
* limit_tuples is an estimated bound on the number of output tuples,
|
||||
* or -1 if no LIMIT or couldn't estimate
|
||||
* count_est and offset_est are the estimated values of the LIMIT and OFFSET
|
||||
* expressions computed by preprocess_limit() (see comments for
|
||||
* preprocess_limit() for more information).
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
bool limit_needed;
|
||||
double limit_tuples;
|
||||
int64 count_est;
|
||||
int64 offset_est;
|
||||
} FinalPathExtraData;
|
||||
|
||||
/*
|
||||
* For speed reasons, cost estimation for join paths is performed in two
|
||||
* phases: the first phase tries to quickly derive a lower bound for the
|
||||
|
Reference in New Issue
Block a user