PostgreSQL 相当于从 Oracle 插入的内容是什么?

Kam*_*mil 0 oracle postgresql triggers plpgsql database-trigger

我想创建一个触发器来捕获INSERTUPDATE根据操作执行某些操作。在 Oracle 中可以这样做:

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

 ...
END;
Run Code Online (Sandbox Code Playgroud)

这里提到that是Oracle中INSERTING与the结合使用的一个关键字,在这里你可以看到用法:TRIGGER

IF INSERTING THEN ... END IF;
IF UPDATING THEN ... END IF;
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

首先,在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;
Run Code Online (Sandbox Code Playgroud)

...然后可以在一个(或多个)触发器中使用:

CREATE TRIGGER abc_biu
BEFORE INSERT OR UPDATE ON abc
FOR EACH ROW EXECUTE PROCEDURE trg_abc_biu();
Run Code Online (Sandbox Code Playgroud)

具有更多详细信息的相关答案: