Em 19 de agosto de 2015 00:28, Danilo Silva
<[email protected]> escreveu:
> Pessoal,
>
> Considerando:
> pedido | item
>      1    |  ABC
>      1    |  XYZ
>      2    |  XPTO
>
> Tenho uma rotina de integração onde, para cada item do pedido, eu preciso
> indicar o recebimento do pedido, sendo efetuado um update na tabela de
> pedidos dizendo que aquele pedido foi recebido.
>
> Terei que utilizar uma trigger para isso e a minha dúvida é:
> Para cada insert na tabela de itens efetuar o update da tabela de pedidos
> OU
> Para cada insert na tabela de itens, fazer um select na tabela de pedidos
> para saber se o pedido já foi recebido, e caso não tenha sido recebido,
> efetuar o update.
>
> Creio que efetuar o select antes será melhor para evitar os "buracos" que o
> update causa e assim diminuir as ações do autovacuum na tabela de pedidos.

Não respondendo diretamente sua pergunta mas apenas salientando que você
pode testar no próprio UPDATE, antes de fazer o SELECT, algo como:

    UPDATE pedidos SET recebido = true WHERE codigo_pedido = XYZ AND
NOT recebido;

Senão você teria que fazer um SELECT FOR UPDATE para tentar evitar
race-condition em
ambientes com concorrẽncia.

[]s
-- 
Dickson S. Guedes
mail/xmpp: [email protected] - skype: guediz
http://github.com/guedes - http://guedesoft.net
http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a