diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
new file mode 100644
index e45bc12..f62a690
*** a/src/backend/optimizer/path/costsize.c
--- b/src/backend/optimizer/path/costsize.c
*************** set_cte_size_estimates(PlannerInfo *root
*** 3824,3831 ****
   * is responsible for producing useful estimates.  We can do a decent job
   * of estimating baserestrictcost, so we set that, and we also set up width
   * using what will be purely datatype-driven estimates from the targetlist.
!  * There is no way to do anything sane with the rows value, so we just put
!  * a default estimate and hope that the wrapper can improve on it.	The
   * wrapper's GetForeignRelSize function will be called momentarily.
   *
   * The rel's targetlist and restrictinfo list must have been constructed
--- 3824,3831 ----
   * is responsible for producing useful estimates.  We can do a decent job
   * of estimating baserestrictcost, so we set that, and we also set up width
   * using what will be purely datatype-driven estimates from the targetlist.
!  * Calculate the rows value from the table statistics (or a default value
!  * if there are none) and hope that the wrapper can improve on it.	The
   * wrapper's GetForeignRelSize function will be called momentarily.
   *
   * The rel's targetlist and restrictinfo list must have been constructed
*************** set_foreign_size_estimates(PlannerInfo *
*** 3837,3843 ****
  	/* Should only be applied to base relations */
  	Assert(rel->relid > 0);
  
! 	rel->rows = 1000;			/* entirely bogus default estimate */
  
  	cost_qual_eval(&rel->baserestrictcost, rel->baserestrictinfo, root);
  
--- 3837,3856 ----
  	/* Should only be applied to base relations */
  	Assert(rel->relid > 0);
  
! 	if (rel->tuples == 0)
! 		rel->rows = 1000.0;		/* default estimate */
! 	else
! 	{
! 		/* apply restriction clauses */
! 		double nrows = rel->tuples *
! 			clauselist_selectivity(root,
! 								   rel->baserestrictinfo,
! 								   0,
! 								   JOIN_INNER,
! 								   NULL);
! 
! 		rel->rows = clamp_row_est(nrows);
! 	}
  
  	cost_qual_eval(&rel->baserestrictcost, rel->baserestrictinfo, root);
  
