On Wed, Sep 17, 2014 at 9:19 AM, Eurides Baptistella <
[email protected]> wrote:

> Pessoal, estou com uma tabela que aparentemente está com um Lock mas
> não consigo encontrar quem fez isso.
> Em virtude do lock a tabela está indisponível, não responde mais a
> selects, inserts, deletes ou updates.
>
>
O que quer dizer com "não responde"? Um erro? Fica travado?

Para saber se está travado, faça uma consulta na visão pg_stat_activity e
verifique se a coluna waiting está como true.



> O que posso fazer para voltar essa tabela?
>

Se alguma transação realmente está bloqueando, deve finalizá-la.



> Como identificar que transação travou ela (isso se foi uma transação)?
>

Você pode usar a visão pg_locks. Uma forma simples e rápida de ver quem
está com locks abertos na tabela seria (conecte-se no banco onde está a
tabela primeiro):

    SELECT * FROM pg_locks
  WHERE relation = 'nome_da_tabela'::regclass WHERE granted;

É possível ver o que estes estão executando, cruzando isso com a
pg_stat_activity:

    SELECT * FROM pg_stat_activity
    WHERE pid IN (
        SELECT pid FROM pg_locks
        WHERE relation = 'nome_da_tabela'::regclass WHERE granted
    );

Em seguida você pode usar a pg_cancel_backend ou pg_terminate_backend se
quiser finalizá-las.


> Aproveito para perguntar qual o nível de isolamento vocês costumam
> utilizar?
>

O que acha de iniciar outra discussão para isso?

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a