From: | Greg Stark <gsstark(at)mit(dot)edu> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Random not so random |
Date: | 2004-10-01 18:54:55 |
Message-ID: | 87oejm2rr4.fsf@stark.xeocode.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
"Arnau Rebassa" <arebassa(at)hotmail(dot)com> writes:
> select * from messages order by random() limit 1;
>
> in the table messages I have more than 200 messages and a lot of times, the
> message retrieved is the same. Anybody knows how I could do a more "random"
> random?
What OS is this? Postgres is just using your OS's random()/srandom() calls. On
some platforms these may be poorly implemented and not very random.
However of the various choices available I think random/srandom are a good
choice. I'm surprised you're finding it not very random.
Incidentally, are you reconnecting every time or is it that multiple calls in
a single session are returning the same record? It ought not make a difference
as Postgres is careful to seed the random number generator with something
reasonable though.
In a quick test of my own on linux with glibc 2.3.2.ds1 (no, I have no idea
what the ds1 means) It seems fairly random to me:
test=> create table test4 as (select (select case when b.b then a else a end from test order by random() limit 1) as b from b limit 1000);
SELECT
test=> select count(*),b from test4 group by b;
count | b
-------+---
210 | 5
195 | 4
183 | 3
203 | 2
209 | 1
(5 rows)
And the same thing holds if I test just the low order bits too:
test=> create table test4 as (select (select case when b.b then a else a end from test order by random() limit 1) as b from b limit 1000);
SELECT
test=> select count(*),b from test4 group by b;
count | b
-------+---
249 | 4
241 | 3
259 | 2
251 | 1
(4 rows)
--
greg
From | Date | Subject | |
---|---|---|---|
Next Message | Scott Frankel | 2004-10-01 19:05:27 | Re: newby question |
Previous Message | sklassen | 2004-10-01 18:49:54 | Re: error connecting to database |