bug(?) : order by function limit x - Mailing list pgsql-general

From pilsl@goldfisch.at
Subject bug(?) : order by function limit x
Date
Msg-id 20020923224359.D24588@goldfisch.at
Whole thread Raw
Responses Re: bug(?) : order by function limit x
List pgsql-general
I just face a very strange phenomena with postgres. I want to order my
output using a userdefined function and I want to limit the output.

In my case when using limit<=7 the result gots
totally mixed up and postgres simply does not order in the correct way:

example:

#select OID,rankval(releasedate,ranking),releasedate,ranking from tanzen where type!='TK' and released='1' order by
rankval(releasedate,ranking)desc offset 0 limit 3; 
  oid   |       rankval       |      releasedate       | ranking
--------+---------------------+------------------------+---------
 608153 | 9 days 14:08:10     | 2002-09-23 12:45:13+02 |      10
 325620 | -152 days -04:24:49 | 2002-04-21 18:12:14+02 |       3
 592403 | -8 days -02:21:43   | 2002-09-14 20:15:20+02 |       1
(3 rows)

The output is definitely not ordered by the value of rankval !!
The same is with limit=2,4,5,6,7

now the same query on the same database/table with limit=8:
# select OID,rankval(releasedate,ranking),releasedate,ranking from tanzen where type!='TK' and released='1' order by
rankval(releasedate,ranking)desc offset 0 limit 8; 
  oid   |      rankval       |      releasedate       | ranking
--------+--------------------+------------------------+---------
 608153 | 9 days 14:07:44    | 2002-09-23 12:45:13+02 |      10
 592403 | -8 days -02:22:09  | 2002-09-14 20:15:20+02 |       1
 570285 | -11 days -10:33:46 | 2002-09-02 12:03:43+02 |      10
 521871 | -39 days -05:45:38 | 2002-08-06 16:51:51+02 |       9
 458942 | -69 days -04:29:49 | 2002-07-06 18:07:40+02 |      10
 448472 | -84 days -08:19:21 | 2002-07-01 14:18:08+02 |       0
 442558 | -88 days -04:13:21 | 2002-06-27 18:24:08+02 |       0
 425840 | -96 days -12:09:16 | 2002-06-18 10:28:13+02 |       1

Now it works !!

The function "rankval" is defined as:

CREATE FUNCTION "rankval" (timestamp with time zone,integer) RETURNS interval AS
'select timestamp_mi($1+interval($2*86400),current_timestamp\);'
LANGUAGE 'sql';

It should return the interval between 'releasedate'+'ranking' and
'current_timestamp' where 'ranking' is given in days.

and the table is defined as:

# \d tanzen
                                Table "tanzen"
    Attribute    |           Type           |             Modifier
-----------------+--------------------------+----------------------------------
 releasedate     | timestamp with time zone |
 ranking         | integer                  | default 3
<skip the rest>

what is going on here ?

I use version 7.1.3 on linux.

thnx,
peter


--
mag. peter pilsl
IT-Consulting
tel: +43-699-1-3574035
fax: +43-699-4-3574035
pilsl@goldfisch.at

pgsql-general by date:

Previous
From: "Weaver, Walt"
Date:
Subject: Re: Speaking of dblink
Next
From: elein
Date:
Subject: Re: OID order = INSERT order?