Re: My very first PL/pgSQL procedure...

Поиск
Список
Период
Сортировка
От Philippe Ferreira
Тема Re: My very first PL/pgSQL procedure...
Дата
Msg-id 43D7E96F.1000709@worldonline.fr
обсуждение исходный текст
Ответ на Re: My very first PL/pgSQL procedure...  ("Jim Buttafuoco" <jim@contactbda.com>)
Ответы Re: My very first PL/pgSQL procedure...  ("Jim Buttafuoco" <jim@contactbda.com>)
Список pgsql-general
Hi,

The only solution I've found to get the same reliable result, but
without locking, is the dirty way (loops) :
---------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION seq_min(sequence_name varchar, minval
integer) RETURNS VOID AS $$
DECLARE
  sequence_record RECORD;
BEGIN
  -- Get the current sequence value :
  FOR sequence_record IN EXECUTE 'SELECT last_value FROM ' ||
sequence_name LOOP
    NULL;
  END LOOP;
  -- Loop to bring the sequence to (at least) minval :
  WHILE sequence_record.last_value < minval LOOP
    -- Increment by 1 the sequence (and get the new value) :
    FOR sequence_record IN EXECUTE 'SELECT nextval(''' || sequence_name
|| ''') AS last_value' LOOP
      NULL;
    END LOOP;
  END LOOP;
  RETURN;
END;
$$ LANGUAGE plpgsql;
---------------------------------------------------------------------------------------------------------------------

It gives the result I expect (and it doesn't interfere with concurrent
uses of the sequence), but it is not very optimized !
So, if someone have a better idea, I'm still open !

Thank you,
Philippe Ferreira.

В списке pgsql-general по дате отправления:

Предыдущее
От: Patrick Hatcher
Дата:
Сообщение: Re: Trigger question: ROW or STATEMENT?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Postgresql Segfault in 8.1