[英]PostgreSQL - Trigger on INSERT or UPDATE
我不想在PostgreSQL
数据库中添加触发器。 此触发器用于连接 2 列的值以更新第三列。 当在表中插入或更新行时,我不想运行它。
桌子
CREATE TABLE IF NOT EXISTS FILE(ID INT NOT NULL PRIMARY KEY, FOLDER TEXT, NAME TEXT, URL TEXT);
Function
CREATE OR REPLACE FUNCTION LINK() RETURNS trigger AS
$$
BEGIN
IF (TG_OP = 'UPDATE') THEN
UPDATE FILE
SET URL = CONCAT(FOLDER, NAME)
WHERE ID = OLD.ID;
ELSIF (TG_OP = 'INSERT') THEN
UPDATE FILE
SET URL = CONCAT(FOLDER, NAME)
WHERE ID = NEW.ID;
END IF;
RETURN NULL;
END
$$
LANGUAGE PLPGSQL;
扳机
CREATE TRIGGER TRIGGER_LINK
BEFORE INSERT OR UPDATE
ON FILE
FOR EACH ROW
EXECUTE PROCEDURE LINK();
当我在表中插入一个值时
INSERT INTO FILE VALUES (1, 'C:\', 'doc.pdf');
我有一个错误消息list index out of range
,因为尚未创建ID
号并且INSERT
上的UPDATE
查询无法执行。 但是,如果我进行AFTER UPDATE
它将无限运行。
如何使用ID
上的WHERE
子句在INSERT
或UPDATE
上运行触发器 function 以仅针对插入或更新的行? 我正在使用PostgreSQL 10.14
。
不要使用 UPDATE 来做到这一点。 只需分配值。 此外,BEFORE 触发器不应返回null
,因为这将中止操作。
CREATE OR REPLACE FUNCTION LINK() RETURNS trigger AS
$$
BEGIN
new.url := CONCAT(new.FOLDER, new.NAME);
RETURN new; --<< important!
END
$$
LANGUAGE PLPGSQL;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.