Обновление с функцией, вызываемой один раз для каждой строки в Postgres 8.4

У меня есть следующий оператор UPDATE:

update mytable
   set a = first_part(genid()),
       b = second_part(genid()),
       c = third_path(genid())
 where package_id = 10;

В этом примере функция genid() вызывается три раза для каждой строки, что неправильно - я хочу, чтобы она вызывалась только один раз для каждой строки mytable.

Я использую базу данных PostgreSQL 8.4. Как правильно написать обновление?

Я пробовал что-то вроде этого:

update mytable
   set a = first_part(g),
       b = second_part(g),
       c = third_path(g)
 where package_id = 10
  from genid() as g;

Но это не сработало, потому что genid() был вызван только один раз для всего оператора обновления.

6
задан Lukas Eder 30 December 2011 в 12:33
поделиться