`random()` in subquery is only executed once
I discovered this morning that random()
when used in a subquery doesn't really do what you think it does.
Random generally looks like this:
> select random() from generate_series(1, 3)
random
-------------------
0.856217631604522
0.427044434007257
0.237484132871032
(3 rows)
But when you use random()
in a subquery the function is only evaluated one time.
> select (select random()), random() from generate_series(1, 3);
random | random
-------------------+-------------------
0.611774671822786 | 0.212534857913852
0.611774671822786 | 0.834582580719143
0.611774671822786 | 0.415058249142021
(3 rows)
So do something like this:
insert into things (widget_id)
select
(select id from widgets order by random() limit 1)
from generate_series(1, 1000);
Results in 1000 entries into things
all with the same widget_id
.