pgSQL - INSERT 之前的触发函数检查是否存在具有相同 ID 的记录

pgSQL - trigger function before INSERT check if record with same id exists

我有一个任务: 在 INSERT 之前检查是否存在具有相同 ID 的记录,以设置新记录 time_dead()

BEGIN
IF NEW.id = OLD.id THEN
         INSERT INTO temporary_objects(OLD.time_dead)
         value(now());
    END IF;
    RETURN NEW;
END;

这不起作用,因为 OLD 和 INSERT 不能一起工作。 但我看不到替代方案。 谢谢。

您可以通过几种方式处理这种情况:

  1. 如果您在 table 的 id 列上定义了主键,则可以使用 INSERT 或 UPDATE: https://www.postgresql.org/docs/current/sql-insert.html
INSERT INTO temporary_objects VALUES(NEW.*) ON CONFLICT DO UPDATE SET time_dead = now();
  1. 您可以在触发器中添加逻辑以查找包含 NEW.id 的行,如果 NEW.id 不存在,则插入一条新记录,否则更新。如下所示:
   DECLARE
      id_exists INTEGER;
   BEGIN
     SELECT id INTO id_exists FROM temporary_objects WHERE id = NEW.id;
     IF NOT FOUND THEN
        INSERT INTO temporary_objects VALUES(NEW.*);
     ELSE 
         UPDATE temporary_objects SET time_dead = now() WHERE id = NEW.id;
         RETURN NEW;
     END IF;
     RETURN NEW;
END;