sql >> Base de Datos >  >> RDS >> PostgreSQL

Desencadenador de inserción de Postgresql para establecer el valor

Tiene razón en que necesita un activador, porque establecer un valor predeterminado para la columna no funcionará para usted:los valores predeterminados solo funcionan para null valores y no lo ayudan a prevenir valores en blanco.

En postgres hay un par de pasos para crear un disparador:

Paso 1:Cree una función que devuelva el tipo trigger :

CREATE FUNCTION my_trigger_function()
RETURNS trigger AS $$
BEGIN
  IF NEW.C1 IS NULL OR NEW.C1 = '' THEN
    NEW.C1 := 'X';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql

Paso 2:Cree un disparador que se dispare antes insert, que le permite cambiar los valores antes de que se inserten, que invoca la función anterior:

CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()

Y listo.

¡Vea el código anterior ejecutándose en SQLFIddle demostrando que funciona correctamente!

Mencionas en un comentario que el valor 'X' se recupera de una subconsulta. Si es así, cambie la línea relevante para algo como:

NEW.C1 := (select some_column from some_table where some_condition);