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;
Vous ne pouvez pas référencer NEW
à l'intérieur de la chaîne de requête. NEW
est visible dans le corps de la fonction, mais pas dans EXECUTE
environnement. La meilleure solution est de passer les valeurs dans le USING
clause.
J'ai également remplacé l'équivalent to_char(NEW.updt_ts, '"log"WW')
pour le nom de la table. to_char()
est plus rapide et plus simple ici.