Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group