如何在PostgreSQL中创建复制触发器功能?

时间:2014-09-25 20:37:45

标签: database postgresql

我有一张桌子

CREATE TABLE order (
  id             SERIAL PRIMARY KEY NOT NULL,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT
);

另一张订单历史表

CREATE TABLE order_history (
  id             SERIAL PRIMARY KEY NOT NULL,
  order_id       INT,
  total_price    DECIMAL(12, 2),
  date           TIMESTAMP WITH TIME ZONE DEFAULT now(),
  product_amount INT  
);

我需要ORDER表的触发器函数,当我将一些数据插入ORDER表或更新数据时,它可以触发事件。此外,此过程必须将数据保留在表ORDER_HISTORY中。

1 个答案:

答案 0 :(得分:5)

你在找这样的东西吗?

CREATE OR REPLACE FUNCTION save_order_in_history()
  RETURNS trigger
AS $$
BEGIN
  INSERT INTO order_history(order_id, total_price, product_amount)
  VALUES (NEW.id, NEW.total_price, NEW.product_amount);
  RETURN NULL;
END $$ LANGUAGE plpgsql;

CREATE TRIGGER order_trigger AFTER INSERT OR UPDATE
ON "order" FOR EACH ROW EXECUTE PROCEDURE save_order_in_history();

这是 SQLFiddle 演示

进一步阅读: