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

Cómo pasar NUEVO.* a EJECUTAR en la función de disparo

Mejor con el USING cláusula de EXECUTE :

CREATE FUNCTION foo ()
  RETURNS trigger AS
$func$
BEGIN
  IF TG_OP = 'INSERT' THEN
     EXECUTE format('INSERT INTO %s SELECT $1.*'
                  , 'samples_' || left(NEW.md5, 2);
     USING NEW;
  END IF;
  RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Y EXECUTE no requiere paréntesis.
Y sabe que los identificadores se colocan en minúsculas a menos que se cite donde sea necesario (%I en lugar de %s en format() ).

Más detalles: