Re: [HACKERS] What's wrong with this group by clause?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [HACKERS] What's wrong with this group by clause?
Дата
Msg-id 6955.1047574975@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: What's wrong with this group by clause?  (Manfred Koizar <mkoi-pg@aon.at>)
Ответы Re: [HACKERS] What's wrong with this group by clause?
Список pgsql-sql
Manfred Koizar <mkoi-pg@aon.at> writes:
> ISTM you have found a Postgres 7.3 bug.

Yeah.  Actually, the planner bug has been there a long time, but it was
only latent until the parser stopped suppressing duplicate GROUP BY
items:

2002-08-18 14:46  tgl
* src/backend/parser/parse_clause.c: Remove optimization wherebyparser would make only one sort-list entry when two
equal()targetlistitems were to be added to an ORDER BY or DISTINCT list. Although indeed this would make sorting
fractionallyfaster bysometimes saving a comparison, it confuses the heck out of laterstages of processing, because it
makesit look like the user wroteDISTINCT ON rather than DISTINCT.  Bug reported byjoe@piscitella.com.
 

7.3 patch is attached if you need it.
        regards, tom lane


*** src/backend/optimizer/plan/planner.c.orig    Wed Mar  5 13:38:26 2003
--- src/backend/optimizer/plan/planner.c    Thu Mar 13 11:21:16 2003
***************
*** 1498,1510 ****          * are just dummies with no extra execution cost.)          */         List
*sort_tlist= new_unsorted_tlist(subplan->targetlist);         int            keyno = 0;         List       *gl;
foreach(gl, groupClause)         {             GroupClause *grpcl = (GroupClause *) lfirst(gl);
 
!             TargetEntry *te = nth(grpColIdx[keyno] - 1, sort_tlist);             Resdom       *resdom = te->resdom;
          /*
 
--- 1498,1511 ----          * are just dummies with no extra execution cost.)          */         List
*sort_tlist= new_unsorted_tlist(subplan->targetlist);
 
+         int            grpno = 0;         int            keyno = 0;         List       *gl;          foreach(gl,
groupClause)        {             GroupClause *grpcl = (GroupClause *) lfirst(gl);
 
!             TargetEntry *te = nth(grpColIdx[grpno] - 1, sort_tlist);             Resdom       *resdom = te->resdom;
          /*
 
***************
*** 1518,1523 ****
--- 1519,1525 ----                 resdom->reskey = ++keyno;                 resdom->reskeyop = grpcl->sortop;
  }
 
+             grpno++;         }          Assert(keyno > 0);


В списке pgsql-sql по дате отправления:

Предыдущее
От: Christoph Haller
Дата:
Сообщение: Re: [HACKERS] What's wrong with this group by clause?
Следующее
От: Kurt Overberg
Дата:
Сообщение: massive INSERT