Re: trigger para crear trigger

From: "Manuel A(dot) Estevez Fernandez" <stvzito(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: juan <juanramirez(at)cajazacate(dot)com(dot)sv>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: trigger para crear trigger
Date: 2009-03-26 20:25:24
Message-ID: 49CBE4B4.8020300@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera wrote:
> Manuel A. Estevez Fernandez escribió:
>
>> juan wrote:
>>
>>> <div class="moz-text-flowed" style="font-family: -moz-fixed">Manuel A.
>>> Estevez Fernandez escribió:
>>>
>>>> Me gustaria saber como puedo definir como un trigger sobre una tabla
>>>> que cuando inserte cierto valor en una columna este cree el otro
>>>> trigger que va a actuar sobre otra tabla, y una vez que haga un
>>>> update a la primera tabla, el trigger elimine a otra funcion.
>>>> .........
>>>>
>>> Perdona la respuesta, pero porque tienes que hacer esta práctica???
>>>
>
>
>> La tabla sobre la cual esta la funcion que envié, se ejecuta
>> constantemente mientras que la otra tabla en donde se haranlos
>> movimientos sera muy temporalmente. Así que no encuentro sentido a
>> mantenerla ahi ejecutandose todo el tiempo. Ademas que no se que tanto
>> pueda pegarle en el desempeño a mi sistema el tener que estar ejecutando
>> un procedimiento inecesario todo el tiempo.
>>
>
> Lo que propones es peor idea, porque cada vez que haces CREATE TRIGGER o
> DROP TRIGGER se toma un lock exclusivo en la tabla, y por lo tanto
> impides que cualquier otra operacion concurrente pueda operar en la
> tabla.
>
> (A todo esto, el codigo del trigger que tienes no es muy bueno tampoco;
> lo del select max() no funciona bien cuando tienes dos o mas ejecutando
> concurrentemente el mismo codigo. Usa currval() para obtener el valor
> de una secuencia, de una columna que debes haber declarado con tipo
> SERIAL.)
> Hola Alvaro
>

Gracias por tus observaciones y disculpa todos mis errores en el código
com mencione todavía soy novato en esto.
La estructura de las tablas s la siguiente :

CREATE TABLE marbetes
(
id_marbete bigint NOT NULL,
id_mueble smallint NOT NULL,
id_inventario bigint NOT NULL,
id_sucursal smallint NOT NULL,
id_articulo bigint,
costo numeric(9,3),
descripcion text,
codigo_barras text,
cantidad smallint,
id_estatus smallint,
CONSTRAINT marbetes_pkey PRIMARY KEY (id_marbete, id_mueble,
id_inventario, id_sucursal),
CONSTRAINT marbetes_fk_articulos FOREIGN KEY (id_articulo)
REFERENCES articulos (id_articulo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT marbetes_fk_muebles FOREIGN KEY (id_mueble, id_inventario,
id_sucursal)
REFERENCES muebles (id_mueble, id_inventario, id_sucursal) MATCH
SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE marbetes OWNER TO stvz;

CREATE TABLE ventas_detalle
(
id_venta bigint NOT NULL,
id_sucursal smallint NOT NULL,
id_corte_caja bigint NOT NULL,
numero_caja smallint NOT NULL,
id_venta_detalle serial NOT NULL,
id_esquema_impuesto smallint NOT NULL,
id_esquema_oferta smallint NOT NULL,
cantidad smallint NOT NULL,
precio_venta_unidad_venta numeric(9,3),
tipo_precio text,
precio_regular_unidad_venta numeric(9,3),
precio_chequeo_unidad_venta numeric(9,3),
precio_oferta_unidad_venta numeric(9,3),
kit text,
id_kit smallint,
factor numeric(9,3),
costo_unitario_promedio numeric(9,3),
cantidad_devuelta numeric(9,3),
id_articulo bigint NOT NULL,
CONSTRAINT ventas_detalle_pkey PRIMARY KEY (id_venta, id_sucursal,
id_corte_caja, numero_caja, id_venta_detalle),
CONSTRAINT esquema_ofertas_fk_ofertas FOREIGN KEY (id_esquema_oferta)
REFERENCES esquema_ofertas (id_esquema_oferta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT venta_detalle_fk_esquema_impuesto FOREIGN KEY
(id_esquema_impuesto)
REFERENCES esquema_impuestos (id_esquema_impuesto) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_articulos FOREIGN KEY (id_articulo)
REFERENCES articulos (id_articulo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_kits FOREIGN KEY (id_kit)
REFERENCES kits (id_kit) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ventas_detalle_fk_ventas FOREIGN KEY (id_venta,
id_corte_caja, numero_caja, id_sucursal)
REFERENCES ventas (id_venta, id_corte_caja, numero_caja,
id_sucursal) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE ventas_detalle OWNER TO stvz;

Cabe mencionar que no puedo ponerle serial a los campos porque son
llaves combinadas.
Quedo a la espera de sus observaciones.
Saludos

Manuel A. Estevez Fernandez

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2009-03-26 20:29:03 Re: trigger para crear trigger
Previous Message Emanuel Calvo Franco 2009-03-26 19:57:22 Re: Fix/Review doc en la wiki