CREATE FUNCTION log_roll_test()
RETURNS trigger AS
$func$
BEGIN
EXECUTE format('INSERT INTO %I SELECT ($1).*'
, to_char(NEW.updt_ts, '"log"WW')) -- child table name
USING NEW;
RETURN NULL;
END
$func$ LANGUAGE plpgsql;
Você não pode fazer referência a
NEW
dentro da string de consulta. NEW
é visível no corpo da função, mas não dentro de EXECUTE
meio Ambiente. A melhor solução é passar os valores no USING
cláusula. Também substituí o equivalente
to_char(NEW.updt_ts, '"log"WW')
para o nome da tabela. to_char()
é mais rápido e simples aqui.