繁体   English   中英

如何在 PostgreSQL 中插入触发器?

[英]How to insert trigger in PostgreSQL?

我有两个表:

  1. users
  2. trainer

users表中,我is_trainer=false有一列is_trainer=false false`。

当用户在表users输入信息并选择列is_trainer=true我想在trainer is_trainer=true中插入用户信息。

当我省略 if 条件时,当我在users表中插入一个用户后,它会将信息放入trainer表中,但是当我放入 if 条件时,它无法工作! 我认为它认为is_trainer是针对trainer is_trainer而不是针对users

我的代码:

BEGIN
    IF NEW.is_trainer <> OLD.is_trainer THEN
        INSERT INTO trainer(trainer_id, sport_id, fee_per_hour, experience, created_by)
        VALUES(users.user_id, 3, '200$', 3, 6);
    END IF;
    RETURN NEW;
END;

这不会像您期望的那样工作:

IF NEW.is_trainer <> OLD.is_trainer THEN

INSERT触发器中,没有OLD值,即伪表OLD中的所有列都是NULL 所以你的表达归结为:

IF NEW.is_trainter <> NULL THEN

这个条件永远不会是真的,因为没有什么不同NULL ,也不等于NULL (检查空性,你需要IS NULL )。

根据您对需求的描述,我认为您想要:

IF NEW.is_traiter = true THEN

此外,您的INSERT命令将不起作用,因为它引用了未知关系users 你可能想要:

INSERT INTO trainer(trainer_id,sport_id,fee_per_hour,experience,created_by)
VALUES(NEW.user_id, 3, '200$', 3, 6);

很可能,您为 insert into trainer提供的其他值也应该来自伪表NEW (例如created_by )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM