如何在PostgreSQL中插入触发器?

问题描述 投票:2回答:1

我有两个表:

  1. users
  2. trainer

users表中,默认情况下我有一列is_trainer=false`。

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

[当省略if条件时,在users表中插入用户后,它将信息放置在trainer表中,但是当我输入if条件时,它将无法工作!我认为它认为is_trainer用于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;
sql postgresql triggers sql-insert
1个回答
1
投票

这将无法正常工作:

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);

同样,您要插入trainer的其他值也应来自伪表NEW(例如created_by)。

© www.soinside.com 2019 - 2024. All rights reserved.