あなたのソリューションは、行タイプのNEW
の受け渡しを修正します 変数。ただし、コードに卑劣なSQLインジェクションの穴があり、それは特に危険です SECURITY DEFINER
で 働き。ユーザー入力は絶対にしてはいけません エスケープされていないSQLコードに変換されます。
このように消毒します:
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;
また:
-
OLD
INSERT
で定義されていません トリガー。 - 変数は必要ありません。 plpgsqlでは割り当てが比較的高価です。