2010-12-09 9 views
8

¿Cómo crear sólo un disparador si no existe?postgres desencadenan la creación

Cuando yo crear o sustituir, me sale un error de sintaxis, así que estoy buscando una manera de probar la existencia de un gatillo.

siempre puedo SELECT * FROM pg_trigger, pero estoy seguro de que hay una manera más adecuada.

Gracias

+1

, siempre es una buena idea mencionar la versión de postgres que está utilizando –

Respuesta

16

Postgres condicionalmente puede caer un disparador - ver the docs. Haga esto antes de crear el gatillo, entonces será siempre funciona.

DROP TRIGGER IF EXISTS mytrigger ON mytable; 

Como Jack señala en los comentarios, esta característica solo ha estado disponible desde el 8.2; esto ha estado fuera durante más de cuatro años, por lo que debería estar disponible en su versión.

+0

@El Yobo, vale la pena mencionar que esta característica se introdujo en 8,2 –

+0

@Jack - cierto, gracias por señalar que fuera. –

+0

@El Yobo Es difícil estar seguro de cuántos siguen utilizando 8,1 - Creo que un factor clave a tener en cuenta es que se trata de la instalación por defecto en RHEL5 y sospecho que significa el uso sigue estando muy extendida –

0
CREATE TRIGGER (NameOfTrigger) AFTER INSERT OR UPDATE ON (NameOfTable) 

DROP TRIGGER IF EXISTS (NameOfTrigger) ON (NameOfTable);