2016-02-23 5 views
-4

Я хочу создать триггер, который ловит INSERT и UPDATE и на основе действия что-то выполняет. В Oracle это можно сделать, выполнив:Что такое PostgreSQL эквивалент INSERTING от Oracle?

CREATE OR REPLACE TRIGGER ABC_BIU BEFORE INSERT OR UPDATE ON ABC 
FOR EACH ROW 
BEGIN 
    IF INSERTING THEN 
    ... 
    END IF; 

... 
END; 

Here упоминается, что INSERTING является ключевым словом, используемым в сочетании с TRIGGER в Oracle и here вы можете увидеть использование:

IF INSERTING THEN ... END IF; 
IF UPDATING THEN ... END IF; 
+4

'TG_OP' смотрите в руководстве : http://www.postgresql.org/docs/current/static/plpgsql-trigger.html –

ответ

1

Прежде всего, вам нужна отдельная функция триггера в Postgres:

CREATE OR REPLACE FUNCTION trg_abc_biu() 
    RETURNS trigger AS 
$func$ 
BEGIN 
    CASE TG_OP   -- to fork depending on operation 
    WHEN ' INSERT' THEN 
     -- do something 
    WHEN ' UPDATE' THEN 
     -- do something 
    ELSE 
     RAISE EXCEPTION 'This trigger function expects INSERT or UPDATE!'; 
    END CASE; 

    RETURN NEW; 
END 
$func$ LANGUAGE plpgsql; 

... которые затем могут быть использованы в триггере (или несколько):

CREATE TRIGGER abc_biu 
BEFORE INSERT OR UPDATE ON abc 
FOR EACH ROW EXECUTE PROCEDURE trg_abc_biu(); 

связанного ответ с более подробной информацией: