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:
- INSERTAR con nombre de la tabla dinámica en la función de activación
- ¿Cómo utilizar dinámicamente TG_TABLE_NAME en PostgreSQL 8.2?