Uw oplossing corrigeert het doorgeven van de rij-getypte NEW
variabel. Je hebt echter een stiekem SQL-injectiegat in je code, dat is bijzonder gevaarlijk in een SECURITY DEFINER
functie. Gebruikersinvoer mag nooit worden geconverteerd naar SQL-code zonder escapecodes.
Ontsmet als volgt:
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;
Ook:
OLD
is niet gedefinieerd in eenINSERT
trigger.- Je hebt geen variabele nodig. Opdrachten zijn relatief duur in plpgsql.