Em 1 de junho de 2012 15:05, Marco Aurélio V. da Silva < [email protected]> escreveu:
> Caro Edson, poderia explicar um pouco mais a respeito ? > > Desde já agradeço a atenção recebida. > Com os advisory locks sua aplicação pode dar um lock em uma chave conhecida pela sua aplicação através da função pg_advisory_lock(key bigint) Veja na documentação que essa função obtém um lock exclusivo sobre essa chave para a sua sessão. ex: select pg_advisory_lock(10); Qualquer outra sessão que tentar obter esse lock ficara em espera até que a sessão que o obteve primeiro libere o lock através das funções pg_advisory_unlock(key bigint) ou pg_advisory_unlock_all() No seu caso especifico acredito que seja simplesmente executar os seguintes passos: select pg_advisory_lock(10); buscar o max da sua tabela. inserir o registro com o id = maxid + 1 select pg_advisory_unlock_all() Note que toda sessão que tentar select pg_advisory_lock(10); ficará em wait até o select pg_advisory_unlock_all() ser executado. Ou seja sua entrada de dados será serialzada. na documentação tem bastante informações sobre como os advisory locks funcionam http://www.postgresql.org/docs/9.1/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS []s Edson
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
