Din løsning retter videregivelsen af den række-typede NEW
variabel. Men du har et lusket SQL-injektion hul i din kode, det er særligt farligt i en SECURITY DEFINER
fungere. Brugerinput må aldrig konverteres til SQL-kode unescaped.
Rengør sådan:
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;
Også:
OLD
er ikke defineret i enINSERT
trigger.- Du behøver ikke en variabel. Opgaver er forholdsvis dyre i plpgsql.