Está en la página 1de 27

GoBack

PostgreSQL Mdulo 1 - Triggers

Rodrigo Soliz Rocabado (rodrifer@gmail.com)


June 14, 2007

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 1

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Triggers

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 2

Triggers

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Hemos visto las ventajas que la funciones nos proporcionan al simplicar acciones en nuestra base de datos. Pero estas acciones requieren la intervencin de una persona encargada de ejecutar las funciones cuando se requiera de su actuacin. Los Triggers al contrario son funciones que se ejecutan de forma automtica en respuesta a ciertos eventos que ocurren en la base de datos.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 3

Ejecucin de un trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Cuando se ejecuta un trigger? Antes o despus de una insercin (INSERT) Antes o despus de una actualizacin (UPDATE) Antes o despus de un borrado (DELETE)

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 4

Denicin de un trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

La denicin de un trigger consta de dos partes, 1. La denicin de la funcin asociada al trigger que es la que ejecuta la accin en respuesta al evento (INSERT, UPDATE, DELETE) 2. La denicin formal de trigger que indicar: (a) De que tabla se esperarn los eventos (b) A que tipo de evento se responder

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 5

Partes de un trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Una funcin tipo trigger es similar a una funcin normal, salvo por unos detalles:

Primero, el tipo de retorno ya no es un tipo normal de PostgreSQL, sino el tipo especial trigger. Segundo, dependiendo de las acciones del trigger, el parmetro en el comando RETURN puede variar, eso lo veremos mas adelante :-)

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 6

Denicin formal del trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Luego de elaborada la funcin trigger, debemos denir formalmente el trigger de este modo:

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 7

Explicacin

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

CREATE TRIGGER nombretrigger = Creacin del trigger [AFTER | BEFORE ] = Antes o despus del evento [INSERT | UPDATE | DELETE ] = El tipo de evento al que se responder ON nombretabla = De que tabla se esperarn los eventos FOR EACH [ROW | STATEMENT ] = Para cada la o para cada sentencia EXECUTE PROCEDURE funcin = La funcin que se va a ejecutar (con sus parmetros si es que los necesitara)

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 8

Nuestro primer trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Hagamos un ejemplo para ver las cosas un poco mas claras. Tomemos otra vez nuestra tabla item:

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 9

Que es lo que queremos?

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Nuestra tabla item tiene la capacidad de almacenar la informacin mas actual e importante para la tienda de computadoras, pero hay otro tipo de informacin que no es capaz de almacenar (por lo menos por ahora), la informacin del cambio de datos. Nuestra tabla item no tiene memoria de los cambios que han sufrido sus tuplas, si alguien viene y cambia el precio de venta de un artculo, no hay forma de obtener el precio anterior. Si alguien borra un artculo, tampoco sabremos que artculo ha sido borrado ni por quien. Esto nos lleva a la primera gran rea de utilizacin de los triggers, la auditora de tablas.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 10

Que es lo que queremos?

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Entonces cuales son las acciones que debe realizar nuestro trigger? Necesitamos llevar un registro de todos los cambios relevantes en nuestra tabla item, para empezar queremos tener un seguimiento de los cambios en los precios de los items. Tambin queremos almacenar en algn lugar todos aquellos items que hayan sido eliminados, tambin queremos guardar sus respectivos historiales de cambios.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 11

Variables del sistema

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Antes de empezar a denir el trigger es necesario conocer una cuantas variables por defecto que nos provee PostgreSQL: current_user = el nombre del usuario que esta actualmente conectado a la base de datos y que ejecuta las sentencias. current_date = La fecha actual (del servidor, no del cliente) current_time = La hora actual

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 12

Variables del trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

PostgreSQL tambin maneja unas cuantas variables al momento de ejecutar un trigger, estas son: NEW = Variable compuesta que almacena los nuevos valores de la tupla que se esta modicando OLD = Variable compuesta que almacena los valores antiguos de la tupla que se esta modicando TG_OP = Variable tipo string que indica que tipo de evento est ocurriendo (INSERT, UPDATE, DELETE) TG_ARGV = Variable tipo arreglo que almacena los parametros de la funcin del trigger, podemos accederlos de la forma TG_ARGV[0], TG_ARGV[1], etc.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 13

Tabla adicional

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Como ltimo paso antes de empezar a denir el trigger, debemos crear una tabla que vaya a almacenar los cambios de precio en nuestra tabla item, la llamaremos item_actualizado.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 14

Funcin trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

La nombramos con un sujo tri para darnos cuenta que es una funcin perteneciente a un trigger y no confundirla con otra que tengamos en nuestro servidor.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 15

Denicin formal del trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Vamos a la denicion formal del trigger:


Listo, cada vez que se actualice una tupla en la tabla item, se reejar el cambio en la tabla item_actualizado. Pero era eso lo que queriamos?, no totalmente, volvamos a la funcin del trigger.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 16

Funcin trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Ahora si, solo se insertarn tuplas en la tabla item_actualizado cuando se cambie el valor de precio_venta .

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 17

Prueba

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Modiquemos algn precio_venta de la tabla item y luego veamos la tabla item_actualizado.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 18

Ejercicios

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Ejercicios: A la tabla item_actualizado aadir un atributo hora_cambio que almacene la hora de la modicacin. Hacer otro trigger que haga el mismo tratamiento pero con los items eliminados de la tabla item.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 19

Aadiendo la hora

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Modicamos la tabla:

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 20

Aadiendo la hora

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Modicamos la funcin:

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 21

Informacin adicional

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Gracias a nuestra nueva tabla item_actualizado ahora podemos obtener mas informacin acerca de nuestra tienda de computadoras. Podemos saber: Que precio tenia cierto tem en cierta temporada Cuanto tiempo se ha mantenido el precio estable En que temporadas del ao los precio caen o se disparan Quienes han modicado los precios de los items

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 22

Otro trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Ahora hagamos el trigger que haga el seguimiento de los items que han sido eliminados de nuestra tabla item: Primero creamos la tabla item_eliminado:

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 23

Funcin trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 24

Denicin formal del trigger

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 25

Problema

Triggers Triggers Ejecucin de un trigger Denicin de un trigger Partes de un trigger Denicin formal del trigger Nuestro primer trigger Que es lo que queremos? Variables del sistema Variables del trigger Funcin trigger Otro trigger

Pero aqu nos surge un problema, solo podremos eliminar items que no tengan sus correspondientes cambios en la tabla item_actualizado, una solucin seria eliminar todo su registro de cambios antes de hacer la eliminacin.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 26

También podría gustarte