Обсуждение: Bug? Me or PostgreSQL.

Поиск
Список
Период
Сортировка

Bug? Me or PostgreSQL.

От
Christopher Sawtell
Дата:
Greetings,

How can this happen?

chris=# select name from boys_names where 
boys_names.number=(random()*225+1)::int4; name
--------FredGunnarManuelRainer
(4 rows)

Here is the table declaration:

create table boys_names (       number                  serial primary key,       name                    varchar(20)
   ); 
 

the details of my installation:-

chris=# select version();                               version
------------------------------------------------------------------------PostgreSQL 7.1beta3 on i586-pc-linux-gnu,
compiledby GCC egcs-2.91.66
 
(1 row)

-- 
Sincerely etc.,
NAME       Christopher SawtellCELL PHONE 021 257 4451ICQ UIN    45863470EMAIL      csawtell @ xtra . co . nzCNOTES
ftp://ftp.funet.fi/pub/languages/C/tutorials/sawtell_C.tar.gz
-->> Please refrain from using HTML or WORD attachments in e-mails to me 
<<--



Re: Bug? Me or PostgreSQL.

От
Tom Lane
Дата:
Christopher Sawtell <csawtell@xtra.co.nz> writes:
> How can this happen?

> chris=# select name from boys_names where 
> boys_names.number=(random()*225+1)::int4;
>   name
> --------
>  Fred
>  Gunnar
>  Manuel
>  Rainer
> (4 rows)

Er, what's your complaint exactly?  It's not obvious to me that
there's anything wrong here.  You seem to have gotten random
matches on four rows --- if that's ridiculously too low (or too
high) you'd better explain why you think so.
        regards, tom lane


Re: Bug? Me or PostgreSQL.

От
Tod McQuillin
Дата:
On Mon, 19 Feb 2001, Christopher Sawtell wrote:

> How can this happen?
>
> chris=# select name from boys_names where
> boys_names.number=(random()*225+1)::int4;
>   name
> --------
>  Fred
>  Gunnar
>  Manuel
>  Rainer
> (4 rows)

It's not clear what you expected to see -- I'll guess you expected only
one row returned.

But random() is being called once for every row in the table -- it's not
surprising (if you have a lot of rows) that it comes up with a match more
than once.  Sometimes it might even return no rows at all.

SQL is not the best language for picking random members of a set.  You're
better off picking a random number in a procedural language and passing
that number as a constant to an embedded SQL query.
-- 
Tod McQuillin