小编Dav*_*lis的帖子

PostgreSQL 9.3触发函数插入到具有参数化名称的表中

我正在尝试动态分区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)

postgresql triggers dynamic-sql plpgsql

3
推荐指数
1
解决办法
2043
查看次数

标签 统计

dynamic-sql ×1

plpgsql ×1

postgresql ×1

triggers ×1