2014-09-25 103 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