|
|
|
@ -8,7 +8,7 @@ |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* IDENTIFICATION |
|
|
|
|
* $PostgreSQL: pgsql/src/backend/optimizer/plan/planner.c,v 1.232 2008/04/17 21:22:14 tgl Exp $ |
|
|
|
|
* $PostgreSQL: pgsql/src/backend/optimizer/plan/planner.c,v 1.233 2008/05/02 21:26:09 tgl Exp $ |
|
|
|
|
* |
|
|
|
|
*------------------------------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
@ -42,6 +42,9 @@ |
|
|
|
|
#include "utils/syscache.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* GUC parameter */ |
|
|
|
|
double cursor_tuple_fraction = DEFAULT_CURSOR_TUPLE_FRACTION; |
|
|
|
|
|
|
|
|
|
/* Hook for plugins to get control in planner() */ |
|
|
|
|
planner_hook_type planner_hook = NULL; |
|
|
|
|
|
|
|
|
@ -142,11 +145,23 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams) |
|
|
|
|
{ |
|
|
|
|
/*
|
|
|
|
|
* We have no real idea how many tuples the user will ultimately FETCH |
|
|
|
|
* from a cursor, but it seems a good bet that he doesn't want 'em |
|
|
|
|
* all. Optimize for 10% retrieval (you gotta better number? Should |
|
|
|
|
* this be a SETtable parameter?) |
|
|
|
|
* from a cursor, but it is often the case that he doesn't want 'em |
|
|
|
|
* all, or would prefer a fast-start plan anyway so that he can |
|
|
|
|
* process some of the tuples sooner. Use a GUC parameter to decide |
|
|
|
|
* what fraction to optimize for. |
|
|
|
|
*/ |
|
|
|
|
tuple_fraction = cursor_tuple_fraction; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* We document cursor_tuple_fraction as simply being a fraction, |
|
|
|
|
* which means the edge cases 0 and 1 have to be treated specially |
|
|
|
|
* here. We convert 1 to 0 ("all the tuples") and 0 to a very small |
|
|
|
|
* fraction. |
|
|
|
|
*/ |
|
|
|
|
tuple_fraction = 0.10; |
|
|
|
|
if (tuple_fraction >= 1.0) |
|
|
|
|
tuple_fraction = 0.0; |
|
|
|
|
else if (tuple_fraction <= 0.0) |
|
|
|
|
tuple_fraction = 1e-10; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|