Search Postgresql Archives

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux