Beleza Daniel,
Meu cenário é mais ou menos o seguinte:
Estou programando em Qt com C++, e a aplicação será um atendimento de
chamadas crítico, então por exemplo um usúario X inseriu uma chamada,
no banco de dados imediatamente ela deve aparecer, para os outros 50
atendentes.
Mais todos poderam inserir e encerrar a chamada, entendeu.
Eu poderia usar sockets para isso ou RPC mais sou novo em Qt não
gostaria de me arriscar tanto.
E não gostaria de ter que ficar tando refresh na tela a cada segundo
isso fica muito feio, somente quando for necessário.
Qual é a sugestão para o cenário.
Cris
On 9/11/06, Daniel Loureiro <[EMAIL PROTECTED]> wrote:
> Cristiano Panvel escreveu:
> > Oi pessoal,
> >
> > Sou novo aqui na lista,
> >
> > bom estou fazendo uma aplicacao que necessitara fazer atualizações
> > constantes, então pesquisando fiquei sabendo que o postgresql suportar
> > eventos NOTIFY e LISTEN gostaria de saber como faço para usar isso.
> >
> > Alguem poderia me ajudar.
> >
> > Cris.
>
> Quando você abre uma conexão, você pode enviar um comando como "LISTEN
> um_identificador_qualquer". Daí sempre que alguma outra conexão enviar
> um comando "NOTIFY um_identificador_qualquer", você receberá um retorno.
>
> Ex.:
> entra no "psql" ("/usr/local/pgsql/bin/psql template1 postgres") e digita:
>
> LISTEN meu_id;
>
> depois, abre um segundo terminal, chama o "psql" novamente, e digita:
>
> NOTIFY meu_id;
>
> você vai receber uma notificação no primeiro terminal.
>
> Como você pode ver, notificações por si só não são muito úteis. O real
> poder delas aparece quando usado em conjunto com regras ("rules") ou
> gatilhos ("triggers"). Você pode, por exemplo, receber notificações
> sempre que for inserido um registro em uma determinada tabela.
>
> Ex.:
>
> CREATE RULE rInsereTab AS ON INSERT TO tabela DO NOTIFY nInsereTab
>
> com este comando, qualquer conexão que tenha chamado um "LISTEN
> nInsereTab" irá receber uma notificação ao ser inserido um registro em
> "tabela".
>
> Porém, no caso de querer receber uma notificação de exclusões ou
> alterações, a coisa não é tão fácil. Isto porque, uma destas operações
> pode afetar vários registros de uma vez só. Nestes casos, devemos usar
> gatilhos chamando funções.
>
> Ex. em "plpgsql" para alterações:
>
> CREATE FUNCTION fAlteraTab() RETURNS OPAQUE AS '
> BEGIN
> NOTIFY nAlteraTab;
> RETURN OLD;
> END; '
> LANGUAGE 'plpgsql';
>
> CREATE TRIGGER tAlteraTab AFTER UPDATE ON tabela
> FOR EACH ROW EXECUTE PROCEDURE fAlteraTab;
>
> Ex. de exclusões:
>
> CREATE FUNCTION fExcluiTab() RETURNS OPAQUE AS '
> BEGIN
> NOTIFY nExcluiTab;
> RETURN OLD;
> END; '
> LANGUAGE 'plpgsql';
>
> CREATE TRIGGER tExcluiTab AFTER DELETE ON tabela
> FOR EACH ROW EXECUTE PROCEDURE fExcluiTab();
>
> Daí, você acaba inevitavelmente entrando no mundo das "stored procedures".
>
> Depois, entra a parte de fazer o seu cliente ouvir estas notificações.
> No Delphi existe uma paleta de componentes gratuita chamada "Zeos", que
> facilita bastante o trabalho. Agora, se você quiser fazer "no braço",
> você terá que criar um processo (através de chamadas do SO) que conterá
> um laço infinito (ou pelo menos até acabar o programa). Este processo
> deverá ficar lendo uma determinada função de retorno do postgresql.
>
> Se precisar de mais ajuda, avisa.
>
> Sds,
> Daniel Loureiro.
>
>
>
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> Antes de perguntar consulte o manual
> http://pgdocptbr.sourceforge.net/
>
> Para editar suas opções ou sair da lista acesse a página da lista em:
> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>
>
>
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios