Você precisa de SQL dinâmico com
EXECUTE
se você quiser passar identificadores (ou partes deles) como parâmetros:CREATE OR REPLACE FUNCTION f_trunc(pos text)
RETURNS void AS
$func$
BEGIN
EXECUTE format('TRUNCATE %I', massive_table_ || pos);
END
$func$ LANGUAGE plpgsql;
Aqui estão duas respostas relacionadas com muitas explicações e links:
- INSERT com nome da tabela dinâmica na função de gatilho
- Nome da tabela como Parâmetro de função do PostgreSQL