2012-09-10 129 views
11

我有一個名爲獎項的表。我如何在PostgreSQL中裝載觸發器,其中表中的每個插入點更新不同的表格?插入觸發器使用PostgreSQL更新另一個表

+1

你能提供一些MOR細節?這個「不同的表格」是一個單獨的,單獨的表格還是多個基於某些獎勵領域價值的表格。 – jcater

+2

http://www.postgresql.org/docs/8.1/static/triggers.html – ertx

+2

@ertx更好地鏈接到/ current/doc而不是/8.1/文檔,這是*非常*過時。 –

回答

4

你想要documenation for PL/PgSQL triggers,其中討論這種情況下。一般的documentation on triggers也可能有用。

您可以使用BEFOREAFTER觸發器。我可能會使用一個AFTER觸發器,以便我的觸發器可以看到插入行的最終版本。當然你需要FOR EACH ROW

+0

嘿嘿@Craig Ringer是FOR EACH ROW批量插入的目的嗎? – rosenthal

+1

@rosenthal Huh? 「FOR EACH STATEMENT」觸發器無權訪問「NEW」行。所以,即使你在做一行「INSERT」,它也不會對此有用。 –

+0

我不是那個意思,請原諒我用語言表達的糟糕的選擇。我的意思是FOR EACH ROW做什麼?我查看了Postgres的文檔,並瞭解它。 「標記爲FOR EACH ROW的觸發器對於操作修改的每一行都被調用一次。」 – rosenthal

25

在這裏,我們有一個名爲table1table2兩個表。使用觸發器,我將更新table2插入table1

創建表

CREATE TABLE table1 
(
    id integer NOT NULL, 
    name character varying, 
    CONSTRAINT table1_pkey PRIMARY KEY (id) 
) 

CREATE TABLE table2 
(
    id integer NOT NULL, 
    name character varying 
) 

觸發功能

CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS 
$BODY$ 
BEGIN 
    INSERT INTO 
     table2(id,name) 
     VALUES(new.id,new.name); 

      RETURN new; 
END; 
$BODY$ 
language plpgsql; 

的觸發

CREATE TRIGGER trig_copy 
    AFTER INSERT ON table1 
    FOR EACH ROW 
    EXECUTE PROCEDURE function_copy(); 
+0

在觸發器中函數如何知道從表1插入值?我們不需要在「values(new.id,new.name)」之後寫入「from table1」嗎? –

相關問題