如何将两个触发操作合而为一?

时间:2019-06-19 06:50:51

标签: function triggers

我有两个要在Postgres SQL中执行的动作 a)每当修改表时,将修改前的行移至历史表。 b)在修改后的实际表上,使用当前的datetimestamp更新修改的on列。

我已经能够使用两个单独的触发器来完成这两个任务,但是我们知道触发器会增加一些性能开销,因此寻找一种在一个函数中管理这两个任务的解决方案,可以使用一个触发器来调用它。

到目前为止,我已经创建了两个函数和两个单独的触发器来实现我的目标,但对过程并不满意,因此需要一些帮助

对于任务(a),这是我到目前为止所做的,并且工作正常:

CREATE TRIGGER <trigger_name> AFTER UPDATE
  ON <table_name> FOR EACH ROW
  EXECUTE PROCEDURE <procedure_name>();

CREATE OR REPLACE FUNCTION <procedure_name>()
  RETURNS trigger
  LANGUAGE plpgsql
AS
BEGIN
insert into <history_table_name>(column1, column2, .......)values(old.column1,old.column2, .......);

 RETURN old;
 END;

对于任务(b),这是我到目前为止所做的,并且工作正常:

CREATE TRIGGER <trigger_name> BEFORE UPDATE
  ON <table_name> FOR EACH ROW
  EXECUTE PROCEDURE <procedure_name>();

CREATE OR REPLACE FUNCTION <procedure_name>()
  RETURNS trigger
  LANGUAGE plpgsql
AS
BEGIN
      new.recordmodifiedon = now();
      RETURN new;
END;

使用上述两个功能我可以达到预期的效果,但是我想将它们作为一个功能组合在一起,以便只有一个触发器调用可以同时执行这两个功能。

0 个答案:

没有答案