Re: Re: Re: RANDOM function?
От | Neal Lindsay |
---|---|
Тема | Re: Re: Re: RANDOM function? |
Дата | |
Msg-id | 5.1.0.14.0.20010731091610.00a12730@mail.peaofohio.com обсуждение исходный текст |
Ответ на | Re: Re: RANDOM function? (ghaverla@freenet.edmonton.ab.ca) |
Ответы |
Re: Re: Re: RANDOM function?
|
Список | pgsql-novice |
I think that what you want to do is create a trigger (or rule?) that pulls up your random number and then checks to see if it exists already. I haven't used triggers yet, but it should not be too hard. Also, what happens when you declare a column unique, and a function like random() tries to give it a non-unique number? At 03:58 PM 7/31/01 +0300, you wrote: >On Tue, 31 Jul 2001 ghaverla@freenet.edmonton.ab.ca wrote: > > > > > On Tue, 31 Jul 2001, macky wrote: > > > > > if ill be using big range of numbers sa 10000 woundd the be any > possibility > > > to have multiple items... meaning lets say 1234 will show up more > than once? > > > > It sounds like you are trying to draw a number from a finite > > supply, WITHOUT REPLACEMENT. I don't know how to attach > > an external C (perl, ...?) function to PostgreSQL, but > > I think you'll end up doing this. > > > > Some of what I am describing can be done "virtually". > > You will need to set up an array (stack, list) containing > > all the possible integers you want to draw from. Say > > 1, 2, 3, .... 100000. Note that there are 100000 > > elements in the stack. Now, draw a random (0 - 1) > > floating point number. If the 0-1 deviate lies between > > (i-1)/N and i/N (where N is how many integers are in > > our stack, and i is an index), we will withdraw the > > i'th value from the stack as our random number (leaving > > us with N-1 values in the stack). We continuous to > > withdraw numbers in this manner until we have either > > withdrawn enough numbers, or we have exhausted the stack. > > >That sounds very hard to implement effeciently. Could you send me some >high level pseudocode? I think that a with 31 bit random integers the >probablity to get the same value is very very small. If it is too big >I can always change to bigints. > >- Einar Karttunen > > > >---------------------------(end of broadcast)--------------------------- >TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
В списке pgsql-novice по дате отправления: