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

Responder a