Então Matheus... Como esse MasterDetail precisa ser “exato” eu fiz FOREIGN KEY entre as tabelas pra não ter problemas. Estava analisando aqui e realmente é um problema de rotina no sistema, onde o usuário tenta salvar uma tabela acima estando uma filha em edição, por isso a ambiguidade no post.
Resolvido Valeu as dicas, é bom trocar umas ideias Marcelo Silva ------------------------------------------------------------- Desenvolvedor: Delphi, PHP, ASP Cel: (11) 95052-1407 Tim Cel: (11) 99693-4251 Vivo msn: [email protected] Empresa: Perfil Medicina e Segurança do Trabalho From: Matheus de Oliveira Sent: Thursday, October 25, 2012 9:11 AM To: Comunidade PostgreSQL Brasileira Subject: Re: [pgbr-geral] Travamento de Registro??? (curiosidade) 2012/10/25 Marcelo Silva <[email protected]> Senhores aconteceu uma coisa curiosa no meu sistema e não entendi, resolvi, mas acho que não foi da forma correta. Tenho uma tela bem complexa onde faço vários “Masters Details” e vou inserindo sub-níveis em várias tabelas. Como o usuário as vezes faz uma sequencia ainda não prevista, gera uns erros que vamos corrigindo e tudo bem... Dica: eu não gosto muito de documentos muito "formais", mas em casos assim um diagrama de sequência e até um de caso de uso ajuda bastante. Tente também não "forçar" uma sequência exata, mas valide cada uma das etapas que dependem de etapas anteriores, assim você se desprende um pouco desses "vamos corrigindo..." (claro que não conheço bem o seu caso, então posso não estar falando "coisa com coisa" para tal, nem sempre dá pra generalizar). Em um dado momento ocorreu o seguinte erro: “0 record(s) updated. Only one record should have been updated.” Ao meu ver isso ocorre porque o aplicativo tentou fazer um update em mais de um registro ao mesmo tempo. (estranho) Até aí tudo bem, corrijo a rotina e bola pra frente... Cara, eu posso estar enganado, mas isso aí não me parece erro vindo do PostgreSQL não, tá mais com cara de erro vindo do seu driver ou algum framework. Qual sua linguagem? Delphi? Está usando algum tipo de ORM? Se for mesmo erro vindo de alguma lib, tente pesquisar na documentação da mesma e ver o que causa o mesmo. Mas no postgres ele travou esse registro e eu não conseguia mais fazer o update, Como você chegou a essa conclusão? Digo, que ele "travou" e não que você não conseguia mais fazer o update. O link [1] e [2] disponibiliza consultas que ajudam a encontrar "locks" abertos. eu tive que deletar o registro manualmente na base pra poder prosseguir. Se ele "travar" um registro pra update por causa de um lock (que é o que o PostgreSQL pode fazer), o mesmo também fica "travado" para delete. Lembre-se de que para o PostgreSQL um update é basicamente um delete seguido de um insert. Tentei um Vaccumn nas tabelas envolvidas mas também não deu... só excluindo o registro mesmo. Pergunta: Por que isso ocorre, e por que não consegui fazer o update mesmo depois de ter derrubado a conexão que gerou esse erro? Registros bloqueados sem nenhuma conexão, muitas vezes é causado por "prepared transactions", execute a seguinte consulta e diga se há alguma: SELECT * FROM pg_prepared_xacts; Obs.: Eu não faço nenhum travamento exclusivo no sistema de registro ou tabela. E o seu framework/driver? [1] http://wiki.postgresql.org/wiki/Lock_Monitoring [2] http://wiki.postgresql.org/wiki/Lock_dependency_information Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados PostgreSQL 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
<<wlEmoticon-smile[1].png>>
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
