Estimada Lista,

Tengo un problema con PostgreSQL, desde el día de ayer. Tengo 4 bases de datos que en principio estuvieron corriendo sobre la versión 8.3 en windows 2003 server, sin problemas desde hace poco mas de 3 años.

Sin embargo, luego de agregar una nueva base de datos, se presentaron problemas al momento de actualizar saldos y grabar movimientos en 3 tablas.

Tengo una función que realiza esta tarea (actualzar saldos x articulo, grabar movimientos y actualizar lotes disponibles x articulo).

Por cada pedido realizado, llamo a esta función para que actualice3 tablas. Antes de ayer, este proceso no demoraba ni dos segundos en procesar. Ahora demora demasiado (6'500,000ms) y aun no termina de procesar 2305 registros.

He instalado la ultima versión de PostgreSQL y he levantado las BDs sin problema, puedo consultar cualquier tabla de forma normal, pero no puedo procesar ninguna actualización sobre éstas.

Tengo un servidor HP ML150 con disco sata de 500GB memoria de 4GB y porcesador Xeon de 4 nucleos. Todo corriendo sobre Windows 2003 server.

El código que ejecuto es:
-------------------------
FOR reg_pedidos IN SELECT
            a.cod_producto
          , a.cantidad
          , b.fecha_emision
      FROM
            detalle_pedidos a
          , pedidos b
      WHERE a.empresa = v_empresa
        AND a.sucursal = v_sucursal
        AND a.pedido = v_interno
        AND a.procesado
        AND NOT a.anulado
        AND b.empresa = a.empresa
        AND b.sucursal = a.sucursal
        AND b.pedido = a.pedido
      LOOP
      RAISE NOTICE 'Producto > %',reg_pedidos.cod_producto;
      RAISE NOTICE 'Actualizando saldos_online';
         UPDATE saldos_online
            SET saldo_apto = saldo_apto - reg_pedidos.cantidad,
                ultima_salida = reg_pedidos.cantidad
          WHERE empresa = v_empresa
            AND sucursal = v_sucursal
            AND cod_producto = reg_pedidos.cod_producto;
         RAISE NOTICE 'Actualizando detalle_pedidos';
         UPDATE detalle_pedidos
            SET procesado = false
          WHERE empresa = v_empresa
            AND sucursal = v_sucursal
            AND pedido = v_interno
            AND cod_producto = reg_pedidos.cod_producto;
         RAISE NOTICE 'Actualizando pedidos';
         UPDATE pedidos
            SET procesado = false
          WHERE empresa = v_empresa
            AND sucursal = v_sucursal
            AND pedido = v_interno;
         RAISE NOTICE 'Anulando movi_prod';
         UPDATE movi_prod
            SET anulado = true
          WHERE empresa = v_empresa
            AND sucursal = v_sucursal
            AND tipo_doc = 90
            AND serie_doc = 1
            AND numero_doc = v_interno;
         RAISE NOTICE 'Actualizar vencimientos';
         FOR reg_lotes IN SELECT
              a.lote
            , a.vencimiento
            , a.cantidad
         FROM
              mov_vencimientos a
         WHERE a.empresa = v_empresa
           AND a.sucursal = v_sucursal
           AND a.cod_movimiento = v_movimiento
           AND a.pedido = v_interno
           AND a.cod_producto = reg_pedidos.cod_producto
         LOOP
            UPDATE vencimientos
               SET saldo_final_apto = saldo_final_apto - reg_lotes.cantidad
             WHERE empresa = v_empresa
               AND sucursal = v_sucursal
               AND cod_producto = reg_pedidos.cod_producto
               AND vencimiento = reg_lotes.vencimiento
               AND lote = reg_lotes.lote;
         END LOOP;
         DELETE FROM mov_vencimientos
         WHERE empresa = v_empresa
           AND sucursal = v_sucursal
           AND cod_movimiento = v_movimiento
           AND pedido = v_interno;
      END LOOP;
-----------------------

Por favor, que información debo proporcionarles para que me puedan orientar y corregir este problema.

Desde ya les agradezco por su atención a la presente.

Saludos,

Marcos Ríos Rodríguez
Arequipa-Perú.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a