Re: Problema Order By en PosgreSQL 8.1

From: "Paolo Lopez" <murphyperu(at)gmail(dot)com>
To: listas(at)soft-com(dot)es, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Problema Order By en PosgreSQL 8.1
Date: 2006-04-08 22:49:41
Message-ID: ab97ec200604081549g325ecacbr673a798085905804@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-es-ayuda

Ok Oswaldo , gracias por tus pruebas. Son muy concluyentes.

Con respecto a mi version 8.1.0 he notado que cuando a "tablita" le
elimino el constraint de llave primaria, el ordenamiento se efectua
sin problemas. y cuando se le vuelve a poner llaves primarias, el
ordenamiento vuelve a ser erroneo.

Acabo de migrar a la version 8.1.3 , me sigue saliendo lo del guru
hint , pero el ordenamiento deseado se efectua sin ningun problema.

Paolo.

On 4/8/06, Oswaldo Hernández <listas(at)soft-com(dot)es> wrote:
> Alvaro Herrera escribió:
>
> >
> > Me gustaria saber si alguien mas puede reproducir este problema en
> > Windows.
>
> Windows XP SP1
> postgres=# select version();
> version
> ------------------------------------------------------------------------------------------
> PostgreSQL 8.1.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
> (1 fila)
>
> Hasta esta expresion el ordenamiento lo hace mal en mi sistema:
>
> CREATE TABLE tablita (
> d int4 ,
> e int4 ,
> f int4 ,
> dia int4 ,
> primary key (d, e, f, dia)
> );
>
>
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 1);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 3);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 5);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 2);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 4);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 5);
>
> select dia from tablita where d = 1 and e = 1 order by dia;
>
> El resultado tanto en pgadmin como en la consola es:
>
> dia
> -----
> 1
> 3
> 5
> 2
> 4
> 5
> (6 filas)
>
>
> * Creo que he encontrado algo:
>
> 1.
>
> Cambio los valores del campo 'e'
>
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 1, 1);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 1, 3);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 1, 5);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 2, 2);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 2, 4);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 2, 2, 5);
>
> select dia from tablita where d = 1 and e = 2 order by dia;
>
> El resultado es correcto:
>
> dia
> -----
> 1
> 2
> 3
> 4
> 5
> 5
> (6 filas)
>
>
> 2.
>
> Cambio los valores de los campos 'd' y 'e' y les vuelvo a poner un valor igual pero disntinto a '1':
>
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 1, 1);
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 1, 3);
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 1, 5);
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 2, 2);
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 2, 4);
> INSERT INTO tablita (d, e, f, dia) VALUES (21512, 21512, 2, 5);
>
> select dia from tablita where d = 21512 and e = 21512 order by dia;
>
> El resultado vuelve a ser incorrecto:
> dia
> -----
> 1
> 3
> 5
> 2
> 4
> 5
> (6 filas)
>
> 3.
>
> Pongo a 'd' y 'e' el mismo valor pero cambio la condicion where:
>
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 1);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 3);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 1, 5);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 2);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 4);
> INSERT INTO tablita (d, e, f, dia) VALUES (1, 1, 2, 5);
>
> postgres=# select dia from tablita where d > 0 and e > 0 order by dia;
> dia
> -----
> 1
> 2
> 3
> 4
> 5
> 5
> (6 filas)
>
> El resultaso SI es correcto
>
> 4.
>
> Mas pruebas cambiando el where:
>
> postgres=# select dia from tablita where e = d and e = 1 order by dia;
> dia
> -----
> 1
> 3
> 5
> 2
> 4
> 5
> (6 filas)
> Incorrecto
>
> postgres=# select dia from tablita where d between 1 and 1 and e between 1 and 1 order by dia;
> dia
> -----
> 1
> 2
> 3
> 4
> 5
> 5
> (6 filas)
> Correcto
>
> postgres=# select dia from tablita where e = d and e > 0 order by dia;
> dia
> -----
> 1
> 2
> 3
> 4
> 5
> 5
> (6 filas)
> Correcto
>
>
> Resumen:
> Da la impresion que el fallo lo da unicamente cuando:
> en el where estan las dos condiciones,
> 'd' y 'e' tienen el mismo valor
> la clausula where utiliza el operador '=' para ambas condiciones
>
>
> Saludos,
>
> --
> *****************************************
> Oswaldo Hernández
> oswaldo(at)soft-com(dot)es
> *****************************************
>

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Alvaro Herrera 2006-04-09 00:58:30 Re: Problema Order By en PosgreSQL 8.1
Previous Message Tom Lane 2006-04-08 19:13:36 Re: ORDER BY bug in 8.1, WinXP

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Paolo Lopez 2006-04-08 22:59:01 Re: [tgl@sss.pgh.pa.us: Re: [BUGS] ORDER BY bug in 8.1, WinXP]
Previous Message Alvaro Herrera 2006-04-08 21:16:34 [tgl@sss.pgh.pa.us: Re: [BUGS] ORDER BY bug in 8.1, WinXP]