使用触发器功能时,新插入的项目在插入时为 NULL
NEW inserted item is NULL on insert when using trigger function
当使用外键 asset_id 在另一个 table 中进行插入时,我正在尝试更新 table 调用资产中的时间戳...在伪代码中我是什么意思是:
插入 table B,
更新资产集last_updated = now()
其中 asset.asset_id = B.asset_id;
下面是我试图用来完成该任务的 Postgres 脚本:
CREATE OR REPLACE FUNCTION update_asset () RETURNS trigger
LANGUAGE PLPGSQL
AS $plpgsql$
BEGIN
IF NEW is NULL THEN RAISE EXCEPTION 'entry is null';
end IF;
UPDATE asset
SET last_updated_timestamp = NOW()
WHERE asset_id = NEW.asset_id;
END;
$plpgsql$;
CREATE TRIGGER table_b_update_trigger
BEFORE INSERT OR UPDATE ON table_b
EXECUTE PROCEDURE update_asset();
我面临的问题是 NEW 总是 NULL。有谁知道我哪里出错了?
对每一行使用:
FOR EACH ROW EXECUTE PROCEDURE update_asset();
NEW 对于语句级触发器是 NULL。
我遇到了同样的问题,看起来您无法将 NEW 或 OLD 与 NULL 进行比较。我替换了条件
如果新是空的
经过
如果 tg_op = 'DELETE'
它奏效了。
当使用外键 asset_id 在另一个 table 中进行插入时,我正在尝试更新 table 调用资产中的时间戳...在伪代码中我是什么意思是:
插入 table B,
更新资产集last_updated = now()
其中 asset.asset_id = B.asset_id;
下面是我试图用来完成该任务的 Postgres 脚本:
CREATE OR REPLACE FUNCTION update_asset () RETURNS trigger
LANGUAGE PLPGSQL
AS $plpgsql$
BEGIN
IF NEW is NULL THEN RAISE EXCEPTION 'entry is null';
end IF;
UPDATE asset
SET last_updated_timestamp = NOW()
WHERE asset_id = NEW.asset_id;
END;
$plpgsql$;
CREATE TRIGGER table_b_update_trigger
BEFORE INSERT OR UPDATE ON table_b
EXECUTE PROCEDURE update_asset();
我面临的问题是 NEW 总是 NULL。有谁知道我哪里出错了?
对每一行使用:
FOR EACH ROW EXECUTE PROCEDURE update_asset();
NEW 对于语句级触发器是 NULL。
我遇到了同样的问题,看起来您无法将 NEW 或 OLD 与 NULL 进行比较。我替换了条件 如果新是空的 经过 如果 tg_op = 'DELETE' 它奏效了。