我正在尝试动态分区Postgres中的日志条目.我有53个子表(每周有1个日志条目),并希望使用触发器将INSERT路由到子表.
我运行该函数INSERT INTO log5 VALUES (NEW.*),它的工作原理.
我用EXECUTE语句运行函数,但它失败了.在EXECUTE语句中,它识别NEW为表名而不是传递给触发器函数的变量.有关如何修复的任何想法?谢谢!
错误:
QUERY:INSERT INTO log5 VALUES(NEW.*)
CONTEXT:PL/pgSQL函数log_roll_test()EXECUTE语句中的第6行
错误:缺少表"new"的FROM子句条目SQL状态:42P01
我的功能:
CREATE FUNCTION log_roll_test() RETURNS trigger AS $body$
DECLARE t text;
BEGIN
t := 'log' || extract(week FROM NEW.updt_ts); --child table name
--INSERT INTO log5 VALUES (NEW.*);
EXECUTE format('INSERT INTO %I VALUES (NEW.*);', t);
RETURN NULL;
END;
$body$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我的触发器:
CREATE TRIGGER log_roll_test
BEFORE INSERT ON log FOR EACH ROW
EXECUTE PROCEDURE log_roll_test();
Run Code Online (Sandbox Code Playgroud)