Re: Lanzamiento de triggers selectivo

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: "Mauro Morales M(dot)" <mmorales(at)adsum(dot)cl>
Cc: Rafael Vigata <rvigata(at)sipec(dot)es>, "Lpostgres (E-mail)" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Lanzamiento de triggers selectivo
Date: 2004-03-31 16:19:33
Message-ID: 20040331161933.GB30378@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, Mar 31, 2004 at 11:48:47AM -0400, Mauro Morales M. wrote:

Para complementar un poco,

> Quizas valga la pena guardar las transacciones sobre la tabla del stock
> en otra tabla (o archivo) y una vez que tengas que acceder a la tabla
> dada la condicion que tu planteas, gatillar alguna funcion que modifique
> los valores.
> No se en cuanto te puede afectar un par de triggers adicionales en dicha
> tabla, pero se pueden encontrar otras estrategias que te ayuden a
> resolver el problema sin afectar en demasia el rendimiento de tu BD.

Correcto ... creo que la pregunta es: ¿cuando se hace SELECT de esa
columna? Si es muy frecuente y necesitas tener los datos siempre
actualizados, probablemente no te quede otra que usar un trigger y
verificar que las cajas no hagan tonteras.

Si no, quizas sea mejor almacenar los deltas de cada movimiento en una
tabla aparte (donde solo tienes que hacer INSERT, nunca UPDATE) y de vez
en cuando tomas todos esos datos, los agrupas y aplicas UPDATEs sobre la
tabla del inventario, luego de verificar las condiciones.

Una pregunta por curiosidad: es frecuente que las cajas efectuen
operaciones que lleven el inventario por debajo del minimo? Si es el
caso, quizás haya problemas en la aplicación ;-) Y que algo la lleve
por encima del máximo? También suena un poco raro ...

Con respecto a la baja de rendimiento: tendrías que medirlo. Hay baja
de rendimiento, sí, pero quizás sea insignificante. No, los triggers no
se pueden disparar condicionalmente (aunque, naturalmente, la función
puede tomar un camino corto si lo deseas). Otra cosa a tomar en cuenta
es que una función en C puede tener mejor rendimiento que una en
plpgsql.

> El mi??, 31-03-2004 a las 04:18, Rafael Vigata escribi??:

> > Tengo una base de datos postgres 7.2 (ya s??, deber??a
> > actualizar, pero no me dejan!!) que gestiona el almacen de un
> > supermercado. En esta base de datos tengo una tabla stock cuyo
> > campo istock guarda el stock asociado a un art??culo. Esta tabla
> > es accedida por todas las cajas del supermercado y otros
> > terminales, y este campo es actualizado de manera constante en
> > cada una de las ventas, por ejemplo.
> >
> > La cuesti??n es que deseamos limitar el valor del campo istock
> > de forma que cuando se vaya a desbordar por encima del valor
> > m??ximo o por debajo del valor m??nimo no lo permita y ponga un
> > valor por defecto. Para ello hab??amos pensado asociar 2
> > triggers a la tabla (uno before update y otro before insert) que
> > lo controlen.
> >
> > Lo que nos da miedo es que los triggers bajen el rendimiento de
> > la BD, ya que esta es la tabla m??s accedida y se accede a ella
> > constantemente.
> >
> > Las preguntas son 2: ??Realmente bajar??a mucho el rendimiento?
> > y ??Se puede hacer que un trigger se lanze s??lo en determinados casos?

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
www.google.com: interfaz de línea de comando para la web.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2004-03-31 16:23:50 Re: [Pgsql-ayuda] Cantidad
Previous Message Mauro Morales M. 2004-03-31 15:48:47 Re: Lanzamiento de triggers selectivo