使用触发器功能时,新插入的项目在插入时为 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' 它奏效了。