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

问题描述 投票:0回答:1

我有一个任务:在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不能一起工作.但我没有看到其他的选择.谢谢。

postgresql database-trigger
1个回答
1
投票

你可以用几种方法处理这种情况。

  1. 如果你在表的id列上定义了一个主键,你可以使用INSERT或UPDATE。https:/www.postgresql.orgdocscurrentsql-insert.html
INSERT INTO temporary_objects VALUES(NEW.*) ON CONFLICT DO UPDATE SET time_dead = now();
  1. 你可以在触发器中加入逻辑来查找带有NEW.id的记录,如果NEW.id不存在,则INSERT一条新记录,否则就UPDATE。就像下面给出的那样。
   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;
© www.soinside.com 2019 - 2024. All rights reserved.