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 по дате отправления: