INSERT复制到另一个PostgreSQL表

问题描述 投票:0回答:2

我已经检查了类似的威胁,但不是完全匹配,我试图做的。

我有两个相同的表:

  • t_data:我们将有近两个月的数据。将有超过两个月的数据删除工作。
  • t_data_historical:我们将所有的数据。

我想做的事:如果一个INSERT完成到t_data,我想“克隆”相同的查询到t_data_historical

我已经看到,可以用触发器来实现,但有件事我不明白:在触发器定义,我需要知道的列和价值观,我不想关心INSERT查询(客户端的我的信任即做查询),我只克隆它。

postgresql
2个回答
0
投票

如果你知道历史表将具有相同的定义和名称始终构建了方式,你可以

EXECUTE format('INSERT INTO %I.%I VALUES (($1).*)',
               TG_TABLE_SCHEMA,
               TG_TABLE_NAME || '_historical')
USING NEW;

在你的触发功能。

这将所有表工作,你不需要知道实际列。


0
投票

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();

谢谢你的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.