Página 2 de 2 PrimeiroPrimeiro 12
+ Responder ao Tópico



  1. Vou colocar as respostas em partes.

    Eu ia perguntar se isso gerava algum erro na engine do MySQL, mas creio que não chega a gerar pois ele não deve encontrar nada pra deletar, e sinceramente acho que ele não vai te deixar executar uma outra operação no row com a operação atual não-"oficialmente" terminada, mas vc pode tentar para ver realmente se não ...
    O que acontece com o statement acima é que quando vc diz "WHERE OLD.RadAcctId" vc está referenciando um valor e não a coluna RadAcctId, o certo seria vc pôr ... DELETE FROM radacct_1 WHERE RadAcctId = NEW.RadAcctId;
    Ele não gera erro e a sua indicação de DELETE é o que eu fiz primeiro que também não funcionou. Ele copia o registro mas não apaga ele da primeira tabela. Tentei 1001 opções usando o NEW e o OLD em ambos os lados. Tentei também um DELETE dos campos que não eram nulos naquela coluna mas também não surtiu resultado algum.

    Poderia te dar uma sugestão que também tenho 99,9% de certeza que ele não vai te deixar executar que seria criar um trigger no INSERT na tabela radacct para DELETE FROM radacct_1 WHERE RadAcctId = NEW.RadAcctId AND AccStopTime IS NOT NULL, pois acho que apesar de estar "oficialmente" em operações diferentes a primeira row ainda vai estar locked, mas como a primeira operação é um UPDATE vc pode tentar ... Eu sou tipo Tomé, só acredito que não dá certo, quando vejo o erro, rs ...
    O problema é que o INSERT quando é feito nessa tabela sempre terá o AcctStopTime como NULL. Este só será modificado quando houver um UPDATE. Obrigatóriamente em todos os UPDATE esse campo é alterado. Se em um novo INSERT na tabela eu pudesse remover os campos que tem o AcctStopTime não nulos seria interessante mas acho que a rotina só permite mexer na linha que está sendo inserida/corrigida.

    Ou vc poderia criar um campo na tabela radacct_1 para sinalizar que aquele registro seria um candidato à deleção e à sua conveniência passar um script de deleção nesses registros ... mas acho que essa segunda opção não é tão elegante ...

    Falow,

    Feliz Ano Novo ...
    Esta última realmente é impraticável já que a tabela é de um programa de autenticação de clientes (FreeRadius) e eu teria que recompilar o módulo MySQL dele para que ele coloque uma nova coluna quando há update na tabela radacct. Sinceramente é muito complexo por meu nível de programação... hahahahahaha...

    Me ocorreu o seguinte. Como eu executo o TRIGGER logo que o UPDATE é feito eu poderia, tranquilamente, colocar um cron job no shell do meu box linux que execute um comando simples do tipo:

    DELETE FROM radacct_1 WHERE AcctStopTime IS NOT NULL

    E esse comando rode todos os dias, por exemplo, ou a cada hora... Acho que já ajudaria meu problema... Que acha?

  2. Citação Postado originalmente por nataniel Ver Post

    Ele não gera erro e a sua indicação de DELETE é o que eu fiz primeiro que também não funcionou. Ele copia o registro mas não apaga ele da primeira tabela. Tentei 1001 opções usando o NEW e o OLD em ambos os lados. Tentei também um DELETE dos campos que não eram nulos naquela coluna mas também não surtiu resultado algum.
    Verifique o log do MySQL para ver se não aparece nenhum erro lá que possa esclarecer, pois foi como disse, o DELETE não pode ter o referenciador, pois vc não estará se referindo à coluna, mas talvez no log te mostre algum erro, pois creio que ele não deixe vc efetuar um comando que "modifique" a linha que já está sendo operada no momento ...

    Citação Postado originalmente por nataniel Ver Post

    O problema é que o INSERT quando é feito nessa tabela sempre terá o AcctStopTime como NULL. Este só será modificado quando houver um UPDATE. Obrigatóriamente em todos os UPDATE esse campo é alterado. Se em um novo INSERT na tabela eu pudesse remover os campos que tem o AcctStopTime não nulos seria interessante mas acho que a rotina só permite mexer na linha que está sendo inserida/corrigida.
    Não, estava me referindo à um trigger no insert do radacct, que deletaria o radacct_1, pois o seu primeiro trigger e no update de radacct_1, irá inserir um registro em radacct. Então vc poderia criar um trigger no insert do radacct para deletar de radacct_1 os registros que não forem nulos ... Ficaria a mesma coisa do seu trigger atual, mas em dois triggers diferentes ... mas como também disse ... acho que o MySQL não vai te deixar fazer isso por integridade dos dados ....

    Citação Postado originalmente por nataniel Ver Post
    Esta última realmente é impraticável já que a tabela é de um programa de autenticação de clientes (FreeRadius) e eu teria que recompilar o módulo MySQL dele para que ele coloque uma nova coluna quando há update na tabela radacct. Sinceramente é muito complexo por meu nível de programação... hahahahahaha...
    Na verdade, não precisa fazer nada extraordinário, e eu estava sugerindo criar um campo na tabela radacct_1 que não é usada pelo FreeRadius (a não ser se vc fez uma instalação custom), e mesmo assim não precisaria recompilar, pois as queries executadas pelo FreeRadius ficam dentro da pasta sql/mysql tera um conf que dependendo do seu conf principal é o responsável pelos queries e eles estão lá, podendo ser modificados normalmente ... Mas também, depois que dei a sugestão, vi que realmente não precisa de outro campo identificador, só realmente apagar o que AcctStopTime não for nulo ...

    Citação Postado originalmente por nataniel Ver Post
    Me ocorreu o seguinte. Como eu executo o TRIGGER logo que o UPDATE é feito eu poderia, tranquilamente, colocar um cron job no shell do meu box linux que execute um comando simples do tipo:

    DELETE FROM radacct_1 WHERE AcctStopTime IS NOT NULL

    E esse comando rode todos os dias, por exemplo, ou a cada hora... Acho que já ajudaria meu problema... Que acha?
    Na verdade, quando sugeri o script que à sua conveniência seria rodado estava pensando no cron mesmo, via mysql command line ou outra linguagem de programacao preferida ...

    Falow
    Última edição por marcelocbf; 31-12-2008 às 16:53.



  3. Marcelo,

    Obrigado pelas informações. Já consegui resolver os problemas... Desculpe ter tomado seu tempo e, se precisar de alguma coisa, me avisa...

  4. Ah beleza,

    Vc conseguiu com o trigger mesmo, ou outra maneira ? Falow ...



  5. Citação Postado originalmente por marcelocbf Ver Post
    Vc conseguiu com o trigger mesmo, ou outra maneira ? Falow ...

    Com o TRIGGER eu copiei e fiz um shell script simples que roda todos os dias e apaga os dados da tabela radacct_1 onde o AcctStopTime não é nulo. Algo simples, prático e rápido.






Tópicos Similares

  1. Trigger Mysql pegando qualquer registro.
    Por fernandochina no fórum Servidores de Rede
    Respostas: 0
    Último Post: 09-03-2012, 09:37
  2. Mysql criar trigger mais de um produto
    Por ribeiro3001 no fórum Servidores de Rede
    Respostas: 3
    Último Post: 12-08-2010, 12:03
  3. TRIGGER MySQL
    Por Bituim no fórum Servidores de Rede
    Respostas: 1
    Último Post: 21-04-2006, 14:45
  4. Mysql suporta triggers?
    Por Romulo Neves no fórum Servidores de Rede
    Respostas: 10
    Último Post: 24-05-2004, 11:59
  5. configurando o mysql
    Por no fórum Servidores de Rede
    Respostas: 2
    Último Post: 28-03-2002, 10:52

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L