| From: | Philippe Ferreira <phil(dot)f(at)worldonline(dot)fr> |
|---|---|
| To: | pgsql-general(at)postgresql(dot)org |
| Subject: | Re: My very first PL/pgSQL procedure... |
| Date: | 2006-01-25 21:11:11 |
| Message-ID: | 43D7E96F.1000709@worldonline.fr |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | 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.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2006-01-25 21:11:14 | Re: Postgresql Segfault in 8.1 |
| Previous Message | Patrick Hatcher | 2006-01-25 21:10:22 | Re: Trigger question: ROW or STATEMENT? |