Problem with volatile function

From: Artacus <artacus(at)comcast(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Problem with volatile function
Date: 2008-06-19 03:11:10
Message-ID: 4859CE4E.5010501@comcast.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

So my understanding of volatile functions is that volatile functions can
return different results given the same input.

I have a function random(int, int) that returns a random value between
$1 and $2. I want to use it in a query to generate values. But it only
evaluates once per query and not once per row like I need it to.

-- This always returns the same value
SELECT ts.sis_id, bldg_id, f_name.name, l_name.name
FROM tmp_students ts
JOIN names AS f_name ON
ts.gender = f_name.gender
WHERE f_name.counter = random(1,300)

--As does this
SELECT ts.sis_id, bldg_id, f_name.name, l_name.name
FROM tmp_students ts
JOIN names AS f_name ON
ts.gender = f_name.gender
AND ts.counter = random(1,100)

-- This generates different numbers
SELECT random(1,100), s.*
FROM usr_students s

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2008-06-19 03:43:20 Re: Problem with volatile function
Previous Message Bruce Momjian 2008-06-19 02:43:23 Re: Forcibly vacating locks