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;
Du kan inte referera till NEW inuti frågesträngen. NEW är synlig i funktionskroppen, men inte inuti EXECUTE miljö. Den bästa lösningen är att skicka värdena i USING klausul.
Jag ersatte också motsvarande to_char(NEW.updt_ts, '"log"WW') för tabellnamnet. to_char()
är snabbare och enklare här.