Postgres - 更新语句作为触发器

时间:2013-03-11 14:23:41

标签: postgresql

我在最后一小时或更长时间内一直在玩,试图将更新语句放入触发器中。我理解UPDATE语句的概念,下面的工作正常

UPDATE cars SET country = 'France';

我想要的是将其置于触发器中,以便在更新汽车表时,列国家/地区将自动更新为法国。

我已经玩过调整我在interweb上发现的函数和触发器,但是我显然错误地声明了它们不执行或执行但不更新country字段时添加了一条新记录。

CREATE FUNCTION update_country () RETURNS TRIGGER AS $$
BEGIN
    IF (TG_OP = 'UPDATE') THEN
        UPDATE cars SET country = 'France' WHERE id = New.id;
    END IF;
    RETURN NULL;
END;
$$ LANGUAGE plpgsql; --The trigger used to update a table.

CREATE TRIGGER update_country_col BEFORE UPDATE ON cars FOR EACH ROW EXECUTE PROCEDURE update_country();

上述脚本会执行,但不会将France添加到country列。 该功能改编自我在网上发现的声明。

Postgres 9.1。

我知道答案会很简单!

1 个答案:

答案 0 :(得分:3)

在更新触发器中,您应修改NEW条记录。 此外,您可能需要从过程中返回NEW条记录。

因此,您应该使用以下程序而不是您的程序:

CREATE FUNCTION update_country () RETURNS TRIGGER AS $$
  BEGIN
    IF (TG_OP = 'UPDATE') THEN
     NEW.country = 'France';
    END IF;
    RETURN NEW; 
  END; $$ LANGUAGE plpgsql;