我有一个任务: 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 不能一起工作。 但我没有看到其他选择。 谢谢。
最佳答案
您可以通过多种方式处理这种情况:
- 如果您在表的 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();
- 您可以将逻辑放入触发器中以查找包含 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;
关于postgresql - pgSQL - INSERT 之前触发函数检查是否存在具有相同 id 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61458007/