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) <[email protected]> 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: [email protected]
cel.: (11) 9693-4251
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Abraços
--
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral