[postgis-tickets] [PostGIS] #3503: ST_ColorMap regress failing on PostgreSQL 9.6 debbie

PostGIS trac at osgeo.org
Sat Mar 12 13:41:46 PST 2016


#3503: ST_ColorMap regress failing on PostgreSQL 9.6 debbie
-----------------------+---------------------------
  Reporter:  robe      |      Owner:  dustymugs
      Type:  defect    |     Status:  new
  Priority:  critical  |  Milestone:  PostGIS 2.3.0
 Component:  raster    |    Version:  trunk
Resolution:            |   Keywords:
-----------------------+---------------------------

Comment (by robe):

 Looking at the last couple of committs from PostgreSQL folks, It might be
 this commit the screwed up the order of ST_GeneratePoints and ST_ColorMap.


 {{{
 Commit 9118d03a8cca3d97327c56bf89a72e328e454e63 by Tom Lane

 When appropriate, postpone SELECT output expressions till after ORDER
 BY.
 It is frequently useful for volatile, set-returning, or expensive
 functions in a SELECT's targetlist to be postponed till after ORDER BY
 and LIMIT are done.  Otherwise, the functions might be executed for
 every row of the table despite the presence of LIMIT, and/or be executed
 in an unexpected order.  For example, in
 SELECT x, nextval('seq') FROM tab ORDER BY x LIMIT 10; it's probably
 desirable that the nextval() values are ordered the same as x, and that
 nextval() is not run more than 10 times.
 In the past, Postgres was inconsistent in this area: you would get the
 desirable behavior if the ordering were performed via an indexscan, but
 not if it had to be done by an explicit sort step.  Getting the desired
 behavior reliably required contortions like
 SELECT x, nextval('seq')
   FROM (SELECT x FROM tab ORDER BY x) ss LIMIT 10;
 This patch conditionally postpones evaluation of pure-output target
 expressions (that is, those that are not used as DISTINCT, ORDER BY, or
 GROUP BY columns) so that they effectively occur after sorting, even if
 an explicit sort step is necessary.  Volatile expressions and
 set-returning expressions are always postponed, so as to provide
 consistent semantics. Expensive expressions (costing more than 10 times
 typical operator cost, which by default would include any user-defined
 function) are postponed if there is a LIMIT or if there are expressions
 that must be postponed.
 We could be more aggressive and postpone any nontrivial expression, but
 there are costs associated with doing so: it requires an extra Result
 plan node which adds some overhead, and postponement changes the volume
 of data going through the sort step, perhaps for the worse.  Since we
 tend not to have very good estimates of the output width of nontrivial
 expressions, it's hard to have much confidence in our ability to predict
 whether postponement would increase or decrease the cost of the sort;
 therefore this patch doesn't attempt to make decisions conditionally on
 that. Between these factors and a general desire not to change query
 behavior when there's not a demonstrable benefit, it seems best to be
 conservative about applying postponement.  We might tweak the decision
 rules in the future, though.
 Konstantin Knizhnik, heavily rewritten by me
 }}}




 Anyrate like I said, means we need to force the output of the set
 returning funcs now more than ever:

--
Ticket URL: <http://trac.osgeo.org/postgis/ticket/3503#comment:1>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.


More information about the postgis-tickets mailing list