Re: Trying to compute the median - Mailing list pgsql-general

From Tom Lane
Subject Re: Trying to compute the median
Date
Msg-id 8854.1084281763@sss.pgh.pa.us
Whole thread Raw
In response to Trying to compute the median  (Maciej Bliziński <maciej.blizinski@dobranet.polbox.pl>)
Responses Re: Trying to compute the median
List pgsql-general
Maciej =?iso-8859-2?Q?Blizi=F1ski?= <maciej.blizinski@dobranet.polbox.pl> writes:
> I started to write the query that should compute the median.
> Surprisingly, I get following error message:
> "server closed the connection unexpectedly

Yeah, that's a bug.  The patch is attached if you need it.  However, I
think you will wind up looking for some other way to solve the problem,
because this query won't scale well to large datasets.

            regards, tom lane

Index: setrefs.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/optimizer/plan/setrefs.c,v
retrieving revision 1.97
diff -c -r1.97 setrefs.c
*** setrefs.c    8 Aug 2003 21:41:50 -0000    1.97
--- setrefs.c    11 May 2004 12:45:54 -0000
***************
*** 189,195 ****
          case T_Sort:
          case T_Unique:
          case T_SetOp:
-         case T_Limit:

              /*
               * These plan types don't actually bother to evaluate their
--- 189,194 ----
***************
*** 201,206 ****
--- 200,214 ----
               * reprocessing subplans that also appear in lower levels of
               * the plan tree!
               */
+             break;
+         case T_Limit:
+             /*
+              * Like the plan types above, Limit doesn't evaluate its
+              * tlist or quals.  It does have live expressions for
+              * limit/offset, however.
+              */
+             fix_expr_references(plan, ((Limit *) plan)->limitOffset);
+             fix_expr_references(plan, ((Limit *) plan)->limitCount);
              break;
          case T_Agg:
          case T_Group:
Index: subselect.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/optimizer/plan/subselect.c,v
retrieving revision 1.83.2.1
diff -c -r1.83.2.1 subselect.c
*** subselect.c    25 Nov 2003 23:59:32 -0000    1.83.2.1
--- subselect.c    11 May 2004 12:45:54 -0000
***************
*** 1018,1023 ****
--- 1018,1030 ----
                                &context);
              break;

+         case T_Limit:
+             finalize_primnode(((Limit *) plan)->limitOffset,
+                               &context);
+             finalize_primnode(((Limit *) plan)->limitCount,
+                               &context);
+             break;
+
          case T_Hash:
              finalize_primnode((Node *) ((Hash *) plan)->hashkeys,
                                &context);
***************
*** 1029,1035 ****
          case T_Sort:
          case T_Unique:
          case T_SetOp:
-         case T_Limit:
          case T_Group:
              break;

--- 1036,1041 ----

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Very slow query
Next
From: Maciej Bliziński
Date:
Subject: Re: Trying to compute the median