Given:
create table t1 ( c1 timestamp without time zone, c2 int ); explain verbose select to_char ( c1, '<whatever>' ) from t1 group by to_char ( c1, '<whatever>' ); does any one know why the SEQSCAN node has TWO TARGETENTRYs? Why do we project "c1" as well as "to_char( c1 . )" ? --- For cases where we compute an aggregate, such as: select min(c1), to_char(c1,.) from t1 group by to_char( c1,.) it would make (some kind of) sense to project out "c1". But can't the planner/optimizer distinguish these cases on the basis that 'min' is an aggregate function and 'to_char' is not? The planner seems to be computing a minimal target list of columns (no expressions) first. Guess I'm asking why it isn't replaced.