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

Поиск
Список
Период
Сортировка
От Philippe Ferreira
Тема Re: My very first PL/pgSQL procedure...
Дата
Msg-id 43D7C36C.2040802@worldonline.fr
обсуждение исходный текст
Ответ на Re: My very first PL/pgSQL procedure...  ("Jim Buttafuoco" <jim@contactbda.com>)
Список pgsql-general
>
>
>you need to use EXECUTE to do the dynamic lock table.
>
>sql = 'LOCK TABLE ' || sequence_name  || 'IN ACCESS EXCLUSIVE MODE';
>EXECUTE sql;
>
>


Thank you for your help  ;-)
I've been able to rewrite my procedure as follows :

---------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION seq_min(sequence_name varchar, minval
integer) RETURNS VOID AS $$
DECLARE
  current_seq integer;
BEGIN
  EXECUTE 'LOCK TABLE ' || sequence_name || ' IN ACCESS EXCLUSIVE MODE';
  current_seq := last_value FROM sequence_name;
  IF current_seq < minval THEN
    EXECUTE 'ALTER SEQUENCE ' || sequence_name || ' RESTART WITH ' ||
minval;
  END IF;
END;
$$ LANGUAGE plpgsql;
---------------------------------------------------------------------------------------------------------------------

However, when I call : "SELECT seq_min('seq_mytable', 1029);"
I get this other error (translated from french) :

  ERROR:  «seq_mytable» is not a table
  CONTEXT : SQL instruction «LOCK TABLE seq_mytable IN ACCESS EXCLUSIVE
MODE»
  PL/pgSQL function "seq_min" line 4 at execute statement

So, it seems that it is impossible to lock a sequence !
If it is the case, how can I achieve the same result without locking the
sequence ?

Thank you again,
Philippe Ferreira.


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

Предыдущее
От: Michael Fuhr
Дата:
Сообщение: Re: Constraint that compares and limits field values
Следующее
От: MargaretGillon@chromalloy.com
Дата:
Сообщение: Re: Constraint that compares and limits field values