Hola Francisco

>Dejando aparte cosas de trigger, que ya te han comentado, lo primero
que te recomendaria yo en un proceso tipo batch de estos. salvo que
tengas un problema enorme de espacio, es limpiar los datos antes de
seguir con el INSERT/UPDATE. Dejando aparte que esto le pueda ayudar
al optimizador te hara mucho mas facil seguir el codigo. Lo que quiero
decir es que si tras:

Voy a evitar los Nulls en el archivo csv.
Puedes explicar como sería el proceso batch


>> TRUNCATE item_bodega_pedidos_spp;
>> COPY item_bodega_pedidos_spp FROM '/home/pasa_vfp_pg/bodega_migra.csv' 
>> DELIMITER ',' CSV HEADER;

>En lugar del
>> DELETE FROM item_bodega_pedidos_spp t
>>  WHERE NOT EXISTS (SELECT 1 FROM items i Where i.item = t.item);

> Haces algo tipo:
> CREATE temporary table IBPS_temp AS

> SELECT

>  t.item as item,
> , t.loctid as loctid
> , COALESCE(t.lsoaloc, 0) as lsoaloc
> , COALESCE(t.orderpt, 0) as orderpt
> , COALESCE(t.icacct, '') as icacct
> , COALESCE(t.rclacct, '') as rclacct
> , COALESCE(t.iclacct, '') as iclacct
> , COALESCE(t.gllink, '') as gllink
> , COALESCE(t.com_pedido, 0) as com_pedido
> FROM item_bodega_pedidos_spp t JOIN items i USING (item)

>y luego añadiria, tras crear los indices que necesite (PK? (aunque
>aqui no lo necesita porque estas copiando una que ya la tiene y no la
>tocas) ) un

>ANALYZE IBPS_temp;

>Que si la tabla es pequeña sera rapido, y le puede ayudar al optimizador.

>Esto es sobre todo cleanup generico, separar limpiezas ( coalesces,
delete ) del proceso real ( update, insert), que ademas te ayuda a
simplificar los queries posteriores y tener menos problemas con la
logica realmente compleja, que siempre viene bien. Ademas ayuda al
optimizador que ahora no tiene coalesces en los queries y puede ver
mejor lo que se hace.

Que ganaría con la tabla temporal?

El delete no lo puedo evitar viene de unas tablas de Visual Fox Pro.

Saludos.




Reply via email to