Tome top post...
Em 12-04-2013 16:33, Marcelo da Silva escreveu:
Com toda humildade possivel :)
Não vejo como, no meu caso que preciso de transações concorrentes (tempo
real), abrir e fechar as transações sem um malabarismo excepcional.
Por exemplo, meu cadastro de clientes se o usuário abre, não posso abrir
pegar X registros e fechar a transação, eu trabalho com componentes
DBWare (conexão direta com a tabela), eu tenho um controle manual por
assim dizer, quando um registro está em uso e outro tenta abri-lo o
sistema não deixa... funciona de boa.
O Financeiro tem que ver uma venda que acabou de ser efetivada e dar o
aval, se não retorna ao vendedor e por ai vai... é bem dinâmico mesmo, é
atendimento ao público (balcão).
Esse meu problema não acontece toda hora, é bem exporádico, mas quando
acontece me dá esse transtorno.
Na minha aplicação enquanto um formulario está aberto tenho que manter a
transação aberta senão ele limpa as informações.
Isso se chama lock pessimista.
É um conceito antigo, mas muita aplicação funciona assim até hoje, e
posso até chutar que sua aplicação é Delphi.
Quanto a terminar somente o processo do tal registro eu consigo fazer
isso pelo pgadmin mas ele trava o registro mesmo sem a conexão, isso que
estou achando estranho.
Provavelmente o PostgreSQL não detectou a queda da conexão.
Você falou em Wireless, isso pode acontecer mesmo.
Eu pedi pra todos sairem, vi que não havia mais conexão, só a minha,
então tentei alterar o tal registro, mas não foi, ele só liberou depois
que restartei o postgres.
Só a título de comparação, quando usava o MySQL nesse mesmo conceito que
trabalho não ocorria isso, um colega disse aqui na lista que o modo do
MySQL trabalhar é diferente, é tipo um espelho, tanto é que posso
alterar uma tabela colocando ou inserindo novos campos que ele não
grita. No postgres já vi que isso não é possível, mas compreendo que são
arquiteturas diferentes.
Isso é possível sim.
E o MySQL com InnoDB também tem locks semelhantes.
Só preciso compreender melhor o postgres pra lidar com essas situações
Seu servidor de banco de dados é Linux.
Considere usar keep alives. Veja em [1].
Eu uso em alguns servidores:
tcp_keepalives_idle=60
tcp_keepalives_interval=30
tcp_keepalives_count=2
Isso faz com que conexões fechadas pela ponta remota (o que inclui
problemas em rede, firewalls e nats malucos) serem detectadas pelo
servidor PostgreSQL e em até 2 minutos a conexão morre por força do
servidor.
[1] http://www.postgresql.org/docs/9.2/static/runtime-config-connection.html
[]s
__________________________________
Flavio Henrique A. Gurgel
Líder de Projetos Especiais
Consultoria, Projetos & Treinamentos 4LINUX
Tel1: +55-11.2125-4747 ou 2125-4748
www.4linux.com.br
email: [email protected]
______________________________
FREE SOFTWARE SOLUTIONS
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral