2014-09-25 36 views
1

我有一个表如何在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中。

+0

以下是此一个通用的解决方案:https://开头的wiki。 postgresql.org/wiki/Aud it_trigger_91plus – 2014-09-25 21:11:16

回答

4

你在找这样的事吗?

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演示

延伸阅读:

+0

谢谢。它像一个魅力。 – Alex 2014-09-25 21:19:02