La tua soluzione risolve il passaggio del NEW
digitato in riga variabile. Tuttavia, hai un subdolo buco di iniezione SQL nel tuo codice, che è particolarmente pericoloso in un SECURITY DEFINER
funzione. L'input dell'utente deve mai essere convertito in codice SQL senza caratteri di escape.
Igienizza in questo modo:
CREATE OR REPLACE FUNCTION trg_test_log()
RETURNS trigger AS
$$
BEGIN
EXECUTE 'INSERT INTO public.' || quote_ident('testlog_' || NEW.name)
|| ' SELECT ($1).*'
USING NEW;
RETURN NULL;
END
$$
LANGUAGE plpgsql SECURITY DEFINER;
Inoltre:
OLD
non è definito in unINSERT
trigger.- Non hai bisogno di una variabile. Gli incarichi sono relativamente costosi in plpgsql.