Resultado com Explain no update errado Update on mv_vendas_itens (cost=1469.85..2114.64 rows=616 width=109) -> Nested Loop (cost=1469.85..2114.64 rows=616 width=109) -> Merge Join (cost=1469.85..1612.30 rows=1 width=16) Merge Cond: ((a.valor_ven = b.valor_ven) AND (a.cod_id = b.cod_id) AND (a.pedido = b.pedido) AND ((a.codigo)::text = (b.codigo)::text)) -> Sort (cost=691.57..701.78 rows=4082 width=22) Sort Key: a.valor_ven, a.cod_id, a.pedido, a.codigo -> Seq Scan on mv_vendas_itens a (cost=0.00..446.76 rows=4082 width=22) Filter: ((obs <> 'C'::bpchar) AND (cod_key_pre = 0)) -> Sort (cost=778.27..796.58 rows=7322 width=26) Sort Key: b.valor_ven, b.cod_id, b.pedido, b.codigo -> Seq Scan on mv_vendas_pre_itens b (cost=0.00..308.27 rows=7322 width=26) Filter: (obs <> 'C'::bpchar) -> Seq Scan on mv_vendas_itens (cost=0.00..391.17 rows=11117 width=93)
Mas depois da dica do Osvaldo o update está assim update mv_vendas_itens a set cod_key_pre = coalesce(b.cod_key, 0) from mv_vendas_pre_itens as b where (b.cod_id = a.cod_id) and(b.pedido = a.pedido) and(b.codigo = a.codigo) and(b.valor_ven = a.valor_ven) and(b.obs not in('C')) and(a.obs not in('C')) E funcionou belesminha From: JotaComm Sent: Wednesday, January 18, 2012 2:19 PM To: Marcelo Silva (IG) ; Comunidade PostgreSQL Brasileira Subject: Re: [pgbr-geral] Por que este UPDATE está loopando? Opa, Em 18 de janeiro de 2012 13:27, Marcelo Silva (IG) <marc...@ig.com.br> escreveu: Pessoal esse UPDATE esta sem fim... mas não entendi porque o mesmo SQL funciona normalmente Olha o UPDATE update mv_vendas_itens set cod_key_pre = coalesce(b.cod_key, 0) from mv_vendas_itens as a inner join mv_vendas_pre_itens b on(b.cod_id = a.cod_id) and(b.pedido = a.pedido) and(b.codigo = a.codigo) and(b.valor_ven = a.valor_ven) and(b.obs not in('C')) where (a.obs not in('C')) Aqui o SELECT select b.cod_key, b.pedido, b.codigo, b.valor_ven, a.* from mv_vendas_itens a inner join mv_vendas_pre_itens b on(b.cod_id = a.cod_id) and(b.pedido = a.pedido) and(b.codigo = a.codigo) and(b.valor_ven = a.valor_ven) and(b.obs not in('C')) where (a.obs not in('C')) O Select vem rapidinho, mas o Update fica em loop Update em loop ou extramemente lento? Qual o resultado do EXPLAIN? Marcelo Silva -------------------------------------------------- Desenvolvedor Delphi, PHP msn: marc...@ig.com.br cel.: (11) 9693-4251 _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral