Re: Proceso dormido

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Juan Carlos Avila Mendez <jcavila(at)tabicel(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Proceso dormido
Date: 2005-09-26 18:07:34
Message-ID: 20050926180734.GC7980@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Sep 26, 2005 at 12:31:51PM -0500, Juan Carlos Avila Mendez wrote:
> Si estoy usando llaves foraneas, y el codigo que estoy ejecutando es el
> siguiente:
>
> select * from c_articulos
> while not eof(c_articulos)
> select * from t_kardex where t_kardex.articulo_id =
> c_articulos.articulo_id order by almacen_id, articulo_id, fecha, temporal_1,
> consecutivo
> while not eof(t_kardex)
> ---------- (calculos locales)
> ---------- (calculos locales)
> t_kardex.cantidad_inicial = variable_local
> update t_kardex
> end while (t_kardex)
> close t_kardex
> end while (c_articulos)

Ugh. Has pensado en leer algun libro sobre SQL?

Esto podria quedar mucho mejor si hicieras

select * from c_articulos, t_kardex where t_kardex.articulo_id =
c_articulos.articulo_id
while not eof()
--- calculos locales
update t_kardex set cantidad_inicial = variable_local
end while

Y aun mas, posiblemente se pueda hacer en un solo paso

update t_kardex set cantidad_inicial = calculos
from c_articulos
where t_kardex.articulo_id = c_articulos.articulo_id

No tengas miedo de hacer JOIN. En PostgreSQL el join se puede optimizar
mucho. Estoy convencido que dejar que Postgres haga el trabajo sucio
resultara mucho mas eficiente que hacerlo tu, en el codigo de la
aplicacion.

Con respecto a los bloqueos: por favor muestra aca lo que hay en
pg_locks cuando ocurra uno de esos bloqueos, a ver si encontramos al
culpable.

--
Alvaro Herrera http://www.amazon.com/gp/registry/DXLWNGRJD34
Al principio era UNIX, y UNIX habló y dijo: "Hello world\n".
No dijo "Hello New Jersey\n", ni "Hello USA\n".

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2005-09-26 18:30:06 RE:
Previous Message Ernesto Quiñones A. 2005-09-26 17:38:38 comando COPY