Executando verificação de segurança...
1

Problema com Tabela no PostgreSQL

Olá pessoal, estou com um problema que envolve banco de dados e eu não tenho muita certeza do que pode ser.

Eu tenho um banco hospedado no RDS (Relational Database Service) na minha AWS. Este banco possui 7 tabelas e 1 das tabelas eu não consigo fazer nenhuma query. Estou usando o pgAdmin para me conectar no banco e eu consigo fazer query em todas as outras 6 tabelas, porém em apenas 1 eu não consigo. A query fica executando eternamente.

E nessa tabela que está com esse problema, eu tenho menos de 70 itens dentro dela. E em outras tabelas, que eu consigo fazer query, eu tenho bem mais.

Alguém sabe o que pode estar acontecendo?

Carregando publicação patrocinada...
3

"Alguém sabe o que pode estar acontecendo?" não..e nem tem como na real....

talvez se vc compartilhar alguma coisa como por exemplo:

  • schemas da tabelas
  • quantidade de linhas por tabela
  • a consulta que está tentando fazer

ai talvez alguem consiga te dar uma luz...com essa pergunta genérica, dúvido muito alguem conseguir te ajudar

3

Como o colega acima mencionou as informações que você passou talvez não sejam suficientes pra te ajudar, mas vou tentar dar um palpite com base em experiências que já tive.

Lock no Banco de Dados

A maioria dos bancos de dados possui um sistema de "lock", que é basicamente um mecanismo de segurança para previnir conflitos quando dois recursos tentam atualizar a mesma linha no banco de dados.

Quando você vai executar uma query no banco ele inicia uma transaction, tudo o que você fizer dentro daquela transaction só é finalizado quando a transaction é "commitada", ou seja, quando você ativamente diz que terminou de fazer o que queria com aquela linha no banco de dados.

Neste caso, após fazer o commit da transação outra transação é permitida acessar aquela(s) linha(s) no banco. Até lá essa transaction fica esperando (ou seja, rodando infinitamente caso não haja uma configuração de timeout para lock) até o recurso ser liberado.

Geralmente não temos problema com isso porque a maioria dos frameworks fazem esse gerenciamento automaticamente, além disso dependendo do sistema que você está desenvolvendo você pode experimentar um menor número de concorrências (tentativas de manipular as mesmas linhas no banco de dados por diferentes threads ou serviços), tem também o fato de que geralmente essas consultas são rápidas então os conflitos são menores.

Transação aberta

Pode acontecer, porém de algum problema em um módulo desenvolvido, as vezes uma Exception ou um erro sistêmico, um erro em uma lib ou framework ou um problema de design no código, causar um lock no sistema;

Ou seja, algum recurso fez uma query nesta tabela, não conseguiu fechar (fazer commit ou rollback) na transaction e ficou "segurando" as linhas dessa tabela, não permitindo assim que você faça nada nessa tabela até que a transaction seja liberada.

Como resolver?

Se meu palpite (lembrando que é só um palpite rs) estiver correto, você precisará ou indentificar a aplicação que está fazendo alteração nessa tabela e reiniciar ela, ou aplicar um algum comando (esse comando vai depender do tipo de banco de dados que você está usando) que possa "derrubar" todas as transações ativas.

Vou deixar aqui alguns materiais que podem te ajudar a entender melhor como funciona o lock, espero que te ajude.

Fonte:

https://retool.com/blog/isolation-levels-and-locking-in-relational-databases

https://medium.com/@hnasr/postgres-locks-a-deep-dive-9fc158a5641c

https://codecurated.com/blog/understanding-database-locks-managing-concurrency-in-databases/

1
1