On Tue, Aug 21, 2012 at 2:59 PM, Craig James <cjames@xxxxxxxxxxxxxx> wrote: > On Tue, Aug 21, 2012 at 1:03 PM, Scott Marlowe <scott.marlowe@xxxxxxxxx> wrote: >> That seems unnecessarily complex. how about this: >> >> create sequence s; >> select array_agg (a.b) from (select nextval('s') as b from >> generate_series(1,1000)) as a; >> >> Then you just iterate that array for the ids you need. > > For brevity I didn't explain the use-case in detail. I need a series > of IDs that are unique across a cluster of servers and across time > (years and decades). The blocksize might be anywhere from 1 to > 100000. One server is the master and issues all IDs. > > I don't want to iterate over an array to get the values because it's > inefficient: if the blocksize is large (say, 100000 items), it will > require 100000 select() statements. The solution using an advisory > lock along with setvalue() is nice because the application only makes > one select() statement and gets a block of IDs that are guaranteed to > be unique across the cluster. Ahhh ok. Yeah that's why I said early on I wasn't really sure of your use case, cause that really can make all the difference. Good to know. -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance