Update from lento

Lists: pgsql-es-ayuda
From: Josué Maldonado <josue(at)lamundial(dot)hn>
To: postgresql spanish <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Update from lento
Date: 2004-05-21 22:51:52
Message-ID: 40AE8808.4010004@lamundial.hn
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola lista,

He utilizado el siguiente codigo para actualizar una tabla con datos de
otra:

UPDATE product SET
pro_pdetalle = ss.detalle,
pro_pdocena = ss.precioma2,
pro_pmayorista = ss.precioma1,
pro_prevendedor = ss.preciorev
FROM precios ss, product f
where precios.procode = f.pro_code

Esa orden tardo mas de 30 minutos y al final se interrumpio con el
siguiente error:
ERROR: could not write to hash-join temporary file: No space left on device

Ambas tablas tienen unas 28000 filas, mi pregunta es ¿Que podria estar
afectando en la configuracion de db/server para que esta consulta demore
tanto y que no se pueda llevar a cabo?

Los discos del server estan asi y postgres esta en /home2:
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 7.9G 4.9G 2.5G 66% /
/dev/sda1 197M 28M 160M 15% /boot
/dev/sda2 8.0G 2.3G 5.3G 30% /home
/dev/sda9 29G 21G 8.7G 71% /home2
/dev/sda8 10G 4.7G 5.0G 48% /home3
none 1010M 0 1010M 0% /dev/shm
/dev/sda6 2.0G 34M 1.8G 2% /tmp
/dev/sda3 7.9G 1.6G 5.9G 21% /var

Gracias por anticipado.

--
Sinceramente,
Josué Maldonado.

"El mal genio es lo que nos mete en líos. El orgullo es lo que nos
mantienen en ellos." -- Pitágoras


From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Josué Maldonado <josue(at)lamundial(dot)hn>
Cc: postgresql spanish <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Update from lento
Date: 2004-05-21 23:41:18
Message-ID: 20040521234118.GB19793@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On Fri, May 21, 2004 at 04:51:52PM -0600, Josué Maldonado wrote:

> He utilizado el siguiente codigo para actualizar una tabla con datos de
> otra:

> UPDATE product SET
> pro_pdetalle = ss.detalle,
> pro_pdocena = ss.precioma2,
> pro_pmayorista = ss.precioma1,
> pro_prevendedor = ss.preciorev
> FROM precios ss, product f
> where precios.procode = f.pro_code

Creo que tienes un cross join irrestricto que agranda la consulta mucho
mas de lo que esperas. Prueba lo siguiente:

UPDATE product SET
pro_pdetalle = ss.detalle,
pro_pdocena = ss.precioma2,
pro_pmayorista = ss.precioma1,
pro_prevendedor = ss.preciorev
FROM precios ss
where ss.procode = product.pro_code

La forma que tienes arriba me parece que esta haciendo un join de
product, product AS f, precios AS ss, precios
(dos tablas repetidas!)

Probablemente no es lo que quieres (en otras palabras: el problema es
un "implicit from").

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
Licensee shall have no right to use the Licensed Software
for productive or commercial use. (Licencia de StarOffice 6.0 beta)


From: Josué Maldonado <josue(at)lamundial(dot)hn>
To: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: postgresql spanish <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Update from lento
Date: 2004-05-21 23:47:14
Message-ID: 40AE9502.2020901@lamundial.hn
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola Alvaro y gracias por tu respuesta,

El 21/05/2004 5:41 PM, Alvaro Herrera en su mensaje escribio:

> Creo que tienes un cross join irrestricto que agranda la consulta mucho
> mas de lo que esperas. Prueba lo siguiente:
>
> UPDATE product SET
> pro_pdetalle = ss.detalle,
> pro_pdocena = ss.precioma2,
> pro_pmayorista = ss.precioma1,
> pro_prevendedor = ss.preciorev
> FROM precios ss
> where ss.procode = product.pro_code
>
> La forma que tienes arriba me parece que esta haciendo un join de
> product, product AS f, precios AS ss, precios
> (dos tablas repetidas!)

Efectivamente mi codigo estaba equivocado, ahora con la corrección
funciona perfecto.

--
Sinceramente,
Josué Maldonado.
"La violencia es miedo a las ideas de los demás y poca fe en las
propias." -- V. Turati.