在触发器函数中使用动态表名INSERT
我不确定如何实现以下内容:
CREATE OR REPLACE FUNCTION fnJobQueueBEFORE() RETURNS trigger AS $$ DECLARE shadowname varchar := TG_TABLE_NAME || 'shadow'; BEGIN INSERT INTO shadowname VALUES(OLD.*); RETURN OLD; END;$$LANGUAGE plpgsql;
即将值插入到具有动态生成名称的表中。
执行上面的代码会产生:
ERROR: relation "shadowname" does not exist LINE 1: INSERT INTO shadowname VALUES(OLD.*)
它似乎表明变量不会作为表名扩展/允许。我在Postgres手册中没有发现这个。
我已经尝试过EXECUTE
这样的事情:
EXECUTE 'INSERT INTO ' || quote_ident(shadowname) || ' VALUES ' || OLD.*;
但没有运气:
ERROR: syntax error at or near ","LINE 1: INSERT INTO personenshadow VALUES (1,sven,,,)
该RECORD
类型似乎失去了:OLD.*
似乎被转换为字符串,并得到的重新解析,导致各种各样的类型的问题(例如NULL
值)。
有任何想法吗?
慕尼黑5688855