问题
I am using a function
CREATE FUNCTION myfunc() RETURNS trigger AS $$ ... $$ LANGUAGE plpgsql;
with a trigger,
CREATE TRIGGER mycheck BEFORE INSERT OR UPDATE ON t
FOR EACH ROW EXECUTE PROCEDURE myfunc();
My problem now is to express in the body of myfunc() a condition about events, a plpgsql like
IF TRIGGER_EVENT_WAS_INSERT THEN ...doThis... END IF;
How to express this condition? (see that I have "INSERT OR UPDATE" trigger event)
I am using PostgreSQL v9.1.
回答1:
Yes, TG_OP. Per documentation:
TG_OP
Data type text; a string ofINSERT,UPDATE,DELETE, orTRUNCATEtelling for which operation the trigger was fired.
Careful what you return in each case. Sometimes you want to RETURN NEW, which is not defined in case of a DELETE or vice versa. If it gets too complex, rather split into multiple triggers, called on separate events.
Example:
IF TG_OP = 'DELETE' THEN
-- do something
RETURN OLD; -- depends!
ELSIF TG_OP = 'UPDATE' THEN
-- do something
RETURN NEW; -- depends!
END IF;
More code examples in related answers.
来源:https://stackoverflow.com/questions/23743766/can-a-function-detect-the-trigger-event-type