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;
Non puoi fare riferimento a NEW
all'interno della stringa di query. NEW
è visibile nel corpo della funzione, ma non all'interno di EXECUTE
ambiente. La soluzione migliore è passare i valori in USING
clausola.
Ho anche sostituito l'equivalente to_char(NEW.updt_ts, '"log"WW')
per il nome della tabella. to_char()
qui è più semplice e veloce.