Re: Problemas para realizar update

From: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>
To: Paola Alejandra de Montserrat Cordero Bon <paola(dot)cordero(dot)b(at)gmail(dot)com>
Cc: Jaime Casanova <jaime(at)2ndquadrant(dot)com>, POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problemas para realizar update
Date: 2015-07-07 15:21:23
Message-ID: CAEe4h9rPjjURmvmkNKvqPs_5cV-NSESK8gYmKv6724h0FTh-iw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Paola, algunos tips:

- indexa los campos por los que estas haciendo el where em ambas tablas,
- Intenta que ninguna de las tablas tenga valores nulos en los id que estas
utilizando en el where
- si los id esta en formato integer la cosa este tipo de actualizaciones
corre bastante mas rápido.
- quizás el <> te esta haciendo mas demoras la consulta. quizás puedes
hacer una tabla temporal que filtre esta condición antes para que tu update
sea mas limpio.

Saludos

Eduardo

El 1 de julio de 2015, 9:10 p. m., Paola Alejandra de Montserrat Cordero Bon
<paola(dot)cordero(dot)b(at)gmail(dot)com> escribió:

> estimados:
>
> Gracias por el aporte de Jaime Casanova pude avanzar un poco, veras ahora
> sólo estoy intentando hacerle un update a una sola variable. Esta es la
> situación, son tres tablas, tabla 1, tabla 2 y tabla 3 en promedio cada
> una tiene 3.500.000 de tuplas, comparten en común una variable llamada
> mrun (clave primaria en todas). Tabla2 y tabla3 tienen las mismas columnas
> y nombres de variables. Tabla1 tiene las variables de tabla2 con 6
> variables adicionales más, siendo la que quiero hacerle el update una de
> ellas.
> La idea es que esta variable, a la que le quiero hacer el update, tome
> valores 1 si tabla.mrun = tabla2.mrun y tabla2.mrun no existe en
> tabla3.mrun o tome valores 0 si tabla1.mrun = tabla2.mrun y tabla2.mrun
> existe en tabla3.mrun
>
>
> Ahora bien,he probado con varias consultas, y actualmente estoy probando
> con esta:
>
> update tabla3 set variable=1 where exists (select tabla2.mrun, tabla3.mrun
> from tabla2, tabla3 where tabla1.mrun = tabla2.mrun and
> tabla2.mrun<>tabla3.mrun)
>
> Pero después de cuatro horas de procesamiento (aún sin detenerse) entiendo
> que algo no anda bien.
>
> Por eso apelo a su experiencia porque necesito verificar que se este
> haciendo bien y optimizar la consulta ...desde ya muchisimas gracias.....
>
> El 29 de junio de 2015, 22:56, Jaime Casanova <jaime(at)2ndquadrant(dot)com>
> escribió:
>
>> 2015-06-29 17:58 GMT-05:00 Paola Alejandra de Montserrat Cordero Bon
>> <paola(dot)cordero(dot)b(at)gmail(dot)com>:
>> > Buenas noches comunidad, les pido ayuda sobre una operación de
>> > actualización. Tengo dos tablas, tabla 1, tabla 2, tienen en común
>> varias
>> > variables, quedando fuera cuatro que estan en la segunda tabla (tabla
>> 2).
>> > Hice una tercera tabla, tabla 3, donde le cargue la información
>> completa de
>> > la tabla 1, quedando pendiente actualizar con las variables no comunes
>> de la
>> > tabla 2.
>> >
>> > Use los siguientes comandos:
>> >
>> > Para insertar los datos en común: insert into tabla_3 (variable1, ...
>> > variable_n) select variable1, ... variable_n from tabla_1 TODO Bien
>> acá...
>> >
>> > Para actualizar estos usando el siguiente comando: update tabla_3 set
>> > (variable1, variable2, variable3, variable4) = (variable1, variable2,
>> > variable3, variable4 from tabla_2 where tabla_2.variable1 =
>> > tabla_3.variable1)
>> >
>>
>> UPDATE tabla_3
>> SET variable_1 = tabla_2.variable_1,
>> variable_2 = tabla_2.variable_2,
>> ...
>> variable_n = tabla_2.variable_n
>> FROM tabla_2
>> WHERE tabla_2.variable_1 = tabla_3.variable_1;
>>
>>
>> fijate en el FROM, aunque lo que quieres hacer debería ser lo
>> correcto postgres aun no lo implementa y por eso existe la posibilidad
>> *NO* estandar de usar la clausula FROM en el UPDATE.
>>
>> en la versión 9.5 me parece que se podrá hacer como se debería.
>>
>> --
>> Jaime Casanova www.2ndQuadrant.com
>> Professional PostgreSQL: Soporte 24x7 y capacitación
>>
>
>
>
> --
> Paola Alejandra de Montserrat Cordero Bon
>

--
Eduardo Arenas
+56 0 9 6629 1618

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2015-07-07 16:02:35 Re: Problemas para realizar update
Previous Message Jairo Graterón 2015-07-07 15:07:31 Re: Espacio disco