Re: [Pgsql-ayuda] Trigers en postgres

From: Gunnar Wolf <gwolf(at)gwolf(dot)cx>
To: Dimas Ayala <dimasayala(at)vickza(dot)com(dot)sv>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] Trigers en postgres
Date: 2003-10-30 23:39:01
Message-ID: 20031030233901.GY15026@gwolf.cx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Dimas Ayala dijo [Thu, Oct 30, 2003 at 05:10:27PM -0800]:
> Estoy usando postgresql 7.3.2
>
> Es la primera ves que trabajo con esta DB.
> Ya tengo mis tablas y los accesos al server atraves del ODBC pero lo que
> quiero implemetar el la parte de los Trigers.
>
> Pero no tengo ni idea por donde empesar.
> Me podrian dar un ejemplo para crear un triger que acutalice una ralacion de
> uno a muchos.
> Cuando de aga un UPDATE en la tabla principal
>
> O alguna direccion donde se pueda buscar es informacion en español.

http://www.postgresql.org/docs/7.3/static/plpgsql.html

Un ejemplo simple: Digamos que quieres un trigger siempre que haya un
update. Este trigger revisará que el campo 'nombre' de la tabla
'tabla' no sea 'Fulano', sale?

Primero, creas la función que lo revise. Esta función va a recibir
(sin que tú se lo declares) el registro en cuestión en NEW.

CREATE OR REPLACE FUNCTION no_permitir_fulano() RETURNS TRIGGER AS
'BEGIN
IF NEW.nombre = ''Fulano'' THEN
RAISE EXCEPTION ''No acepto el nombre Fulano. Vete a volar.'';
END IF;
RETURN NEW;
END;' LANGUAGE 'plpgsql';

Y después, amarras esta función como trigger al hacer update a la
tabla:

CREATE TRIGGER no_permitir_fulano BEFORE UPDATE ON tabla FOR EACH ROW
EXECUTE PROCEDURE no_permitir_fulano();

Y ya.

Ahora... Lo estás creando sólo sobre la actualización. Podrías
insertar un nuevo registro con el nombre Fulano. Si es lo que quieres,
al crear el trigger lo haces 'before update or insert'. Podrías
también modificar los datos a guardar - por ejemplo, en vez de marcar
un error con RAISE EXCEPTION, podrías cambiar el nombre, poniendo en
vez de esa línea:

NEW.nombre='Poco imaginativo';

y así al regresar NEW regresaría valores diferentes.

...O... Bueno, posibilidades básicamente infinitas. pl/pgsql es un
lenguaje completo y bastante poderoso, aunque a veces algo incómodo.

Saludos,

--
Gunnar Wolf - gwolf(at)gwolf(dot)cx - (+52-55)5630-9700 ext. 1366
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Dimas Ayala 2003-10-31 01:10:27 [Pgsql-ayuda] Trigers en postgres
Previous Message Martin Marques 2003-10-30 20:01:48 Re: [Pgsql-ayuda] Parametro sort_mem