我已经检查了类似的威胁,但不是完全匹配,我试图做的。
我有两个相同的表:
t_data
:我们将有近两个月的数据。将有超过两个月的数据删除工作。t_data_historical
:我们将所有的数据。我想做的事:如果一个INSERT完成到t_data
,我想“克隆”相同的查询到t_data_historical
。
我已经看到,可以用触发器来实现,但有件事我不明白:在触发器定义,我需要知道的列和价值观,我不想关心INSERT查询(客户端的我的信任即做查询),我只克隆它。
如果你知道历史表将具有相同的定义和名称始终构建了方式,你可以
EXECUTE format('INSERT INTO %I.%I VALUES (($1).*)',
TG_TABLE_SCHEMA,
TG_TABLE_NAME || '_historical')
USING NEW;
在你的触发功能。
这将所有表工作,你不需要知道实际列。
Laurenz,我创建了触发条件:
CREATE OR REPLACE FUNCTION copy2historical() RETURNS trigger AS
$BODY$
BEGIN
EXECUTE format('INSERT INTO %I.%I VALUES (($1).*)', TG_TABLE_SCHEMA, TG_TABLE_NAME || '_historical')
USING NEW;
END;
RETURN NULL;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER copy2historical_tg
AFTER INSERT
ON t_data
FOR EACH ROW
EXECUTE PROCEDURE copy2historical();
谢谢你的帮助。