On 09-07-2012 17:34, Aldrey Galindo wrote:
> Flavio,
>
>     O que ocorreu é que a Aplicação por algum motivo prendeu a transação.
>     Eu tentei apagar a tabela que estava *travada*, mais ele não alertou
> sobre nada. Já quando tentei renomear o banco foi que obtive a mensagem
> que ajudou na solução.

Uma trava (lock) faz tudo isso que você passou. Em transações preparadas 
essas travas são bastante silenciosas. Já passei por dificuldades por 
causa delas uma vez. Aprendi muito naquele momento. E eu não tinha a 
opção que você teve de copiar o banco pra outro lugar. Tive de achar a 
trava e removê-la.

>     Me pergunto, se eu tentasse realizar alguma mudança em uma tabela
> envolvida em um *prepared*, não seria o caso do Banco informar que a
> mesma está *ocupada*?

A trava (lock) é parte do funcionamento normal de um banco ACID, caso do 
PostgreSQL. Travas em transações preparadas são inclusive parte do 
funcionamento avançado do PostgreSQL, que aceita trabalhar em 2PC desde 
várias versões atrás.

O detector de deadlocks é capaz de fazer isso com transações 
concorrentes, emitindo para o usuário e no log aquela mensagem "Processo 
A aguardando liberação de trava na relação B..." mas ele não faz isso 
para preparadas (ou se faz nunca vi).

Você poderia sugerir isso na lista hackers e ver se alguém topa 
implementar (ou você mesmo ajuda a implementar). Eu só pesquisaria antes 
pra ver se a discussão já não existe e já não deram motivos para não 
implementação ou se já não está prevista implementação em versão futura.

[]s

Flavio Henrique A. Gurgel
Consultor e Instrutor 4Linux
Tel: +55-11-2125-4747
www.4linux.com.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a