如何在PostgreSQL中创建复制触发函数?

Ale*_*lex 1 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
);
Run Code Online (Sandbox Code Playgroud)

和另一个表格的订单历史记录

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  
);
Run Code Online (Sandbox Code Playgroud)

我需要一个ORDER表的触发函数,当我向ORDER表中插入一些数据或更新数据时,该函数可以在事件上触发。此外,此过程必须将数据持久化到表中ORDER_HISTORY

pet*_*erm 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();
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示

进一步阅读: