Tecnologia

Solo disponible en BuenasTareas
  • Páginas : 10 (2300 palabras )
  • Descarga(s) : 0
  • Publicado : 14 de junio de 2011
Leer documento completo
Vista previa del texto
Triggers (disparadores)
Postgres tiene algunas interfaces cliente como Perl, Tcl, Python y C, así como dos Lenguajes
Procedurales (PL). También es posible llamar a funciones C como acciones trigger. Notar que los
eventos trigger a nivel STATEMENT no están soportados en la versión actual. Actualmente es
posible especificar BEFORE o AFTER en los INSERT, DELETE o UPDATE de un registro como
unevento trigger.
Creación de Triggers
Si un evento trigger ocurre, el administrador de triggers (llamado Ejecutor) inicializa la estructura
global TriggerData *CurrentTriggerData (descrita más abajo) y llama a la función trigger para
procesar el evento.
La función trigger debe ser creada antes que el trigger, y debe hacerse como una función sin
argumentos, y códigos de retorno opacos.
Lasintaxis para la creación de triggers es la siguiente:
El nombre del trigger se usará si se desea eliminar el trigger. Se usa como argumento del comando
DROP TRIGGER.
La palabra siguiente determina si la función debe ser llamada antes (BEFORE) o después (AFTER)
del evento.
El siguiente elemento del comando determina en que evento/s será llamada la función. Es posible
especificar múltipleseventos utilizado el operador OR.
El nombre de la relación (relation name) determinará la tabla afectada por el evento.
La instrucción FOR EACH determina si el trigger se ejecutará para cada fila afectada o bien antes (o
después) de que la secuencia se haya completado.
El nombre del procedimiento (procedure name) es la función C llamada.
Los argumentos son pasados a la función en la estructuraCurrentTriggerData. El propósito de pasar
los argumentos a la función es permitir a triggers diferentes con requisitos similares llamar a la
misma función.
Además, la función puede ser utilizada para disparar distintas relaciones (estas funciones son
llamadas "general trigger funcions").
Como ejemplo de utilización de lo descrito, se puede hacer una función general que toma como
argumentos dosnombres de campo e inserta el nombre del usuario y la fecha (timestamp) actuales en
ellos. Esto permite, por ejemplo, utilizar los triggers en los eventos INSERT para realizar un
Guia del Programador de PostgreSQL
Anterior Siguiente
CREATE TRIGGER
ON FOR EACH
EXECUTE PROCEDURE ();
Triggers (disparadores) Página 1 de 2http://lucas.hispalinux.es/Postgresql-es/web/navegable/programmer/triggers.html 20/10/2002
seguimiento automático de la creación de registros en una tabla de transacciones. Se podría utilizar
también para registrar actualizaciones si es utilizado en un evento UPDATE.
Las funciones trigger retornan un área de tuplas (HeapTuple) al ejecutor. Esto es ignorado para
trigger lanzados tras (AFTER) una operación INSERT, DELETE o UPDATE, pero permite lo
siguiente alos triggers BEFORE: - retornar NULL e ignorar la operación para la tupla actual (y de
este modo la tupla no será insertada/actualizada/borrada); - devolver un puntero a otra tupla (solo en
eventos INSERT y UPDATE) que serán insertados (como la nueva versión de la tupla actualizada en
caso de UPDATE) en lugar de la tupla original.
Notar que no hay inicialización por parte del CREATE TRIGGERhandler. Esto será cambiado en el
futuro. Además, si más de un trigger es definido para el mismo evento en la misma relación, el orden
de ejecución de los triggers es impredecible. Esto puede ser cambiado en el futuro.
Si una función trigger ejecuta consultas SQL (utilizando SPI) entonces estas funciones pueden
disparar nuevos triggers. Esto es conocido como triggers en cascada. No hay ningunalimitación
explicita en cuanto al número de niveles de cascada.
Si un trigger es lanzado por un INSERT e inserta una nueva tupla en la misma relación, el trigger
será llamado de nuevo (por el nuevo INSERT). Actualmente, no se proporciona ningún mecanismo
de sincronización (etc) para estos casos pero esto puede cambiar. Por el momento, existe una función
llamada funny_dup17() en los tests de...
tracking img