Thread: Simulate count result are distinct between 8.3 and 8.4

Simulate count result are distinct between 8.3 and 8.4

From
Emanuel Calvo Franco
Date:
hi people!

I have this test query to simulate rownums in 8.3:

SELECT
(select count(i)+1 from prueba
where i < xi.i
) as rownum, i, p
FROM prueba xi limit 5;

Devuelve , que esta bien:
1;1;"299361"
2;2;"421127"
3;3;"166284"
4;4;"458945"
5;5;"81619"


But in 8.4 throws this:

postgres=# SELECT
postgres-# (select count(i)+1 from prueba
postgres(# where i < xi.i
postgres(# ) as rownum, i, p
postgres-# FROM prueba xi limit 5;
 rownum |   i    |   p
--------+--------+--------
 168770 | 168763 | 908731
 168771 | 168764 | 640826
 168772 | 168765 | 571112
 168773 | 168766 | 992462
 168774 | 168767 | 992471
(5 filas)


synchronize_seqscan are on in both engines.


I only want to know why is this difference...

--
              Emanuel Calvo Franco
             Database consultant at:
                    www.siu.edu.ar
        www.emanuelcalvofranco.com.ar

Re: Simulate count result are distinct between 8.3 and 8.4

From
Chris
Date:
Emanuel Calvo Franco wrote:
> hi people!
>
> I have this test query to simulate rownums in 8.3:
>
> SELECT
> (select count(i)+1 from prueba
> where i < xi.i
> ) as rownum, i, p
> FROM prueba xi limit 5;
>
> Devuelve , que esta bien:
> 1;1;"299361"
> 2;2;"421127"
> 3;3;"166284"
> 4;4;"458945"
> 5;5;"81619"
>
>
> But in 8.4 throws this:
>
> postgres=# SELECT
> postgres-# (select count(i)+1 from prueba
> postgres(# where i < xi.i
> postgres(# ) as rownum, i, p
> postgres-# FROM prueba xi limit 5;
>  rownum |   i    |   p
> --------+--------+--------
>  168770 | 168763 | 908731
>  168771 | 168764 | 640826
>  168772 | 168765 | 571112
>  168773 | 168766 | 992462
>  168774 | 168767 | 992471
> (5 filas)

Without an order by in your query, the db can return them as soon as it
finds the rows.

If you add an order by (to the outer part), it should be more reliable.

--
Postgresql & php tutorials
http://www.designmagick.com/


Re: Simulate count result are distinct between 8.3 and 8.4

From
Shoaib Mir
Date:
On Thu, Aug 13, 2009 at 9:37 AM, Chris <dmagick@gmail.com> wrote:
Emanuel Calvo Franco wrote:
 
But in 8.4 throws this:

postgres=# SELECT
postgres-# (select count(i)+1 from prueba
postgres(# where i < xi.i
postgres(# ) as rownum, i, p
postgres-# FROM prueba xi limit 5;
 rownum |   i    |   p
--------+--------+--------
 168770 | 168763 | 908731
 168771 | 168764 | 640826
 168772 | 168765 | 571112
 168773 | 168766 | 992462
 168774 | 168767 | 992471
(5 filas)



Why don't you make it simple and just use row_number() from 8.4... It can be simplified as:

select row_number() over(), i, p from prueba limit 5;

--
Shoaib Mir
http://shoaibmir.wordpress.com/

Re: Simulate count result are distinct between 8.3 and 8.4

From
Emanuel Calvo Franco
Date:
>
> Why don't you make it simple and just use row_number() from 8.4... It can be
> simplified as:
>
> select row_number() over(), i, p from prueba limit 5;
>

I know the use of WF. What surprised me, is the difference between
both versions in the same query. I'm trying to understand why happens
and  not look for another way :)


--
              Emanuel Calvo Franco
             Database consultant at:
                    www.siu.edu.ar
        www.emanuelcalvofranco.com.ar