【发布时间】:2011-12-16 09:24:25
【问题描述】:
我不确定如何实现以下目标:
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 值)。
有什么想法吗?
【问题讨论】:
标签: postgresql triggers dynamic-sql plpgsql