3

我定义了一个函数,我想更新它被修改的记录值。

CREATE FUNCTION update_project_status_away_from_started()
RETURNS TRIGGER AS $$
BEGIN
  IF OLD.status = 'started' THEN
    NEW.status = 'updating';
    RETURN NEW;
  END IF;
RETURN OLD;
END;
$$ language 'plpgsql';

但是,当我更新一行时,我收到以下错误:

ERROR: operator does not exist: projectstatus = character varying

枚举定义如下:

CREATE TYPE projectstatus AS ENUM ('started', 'updating', 'complete');

我对此的理解是枚举正在与字符串进行比较并且不知道该怎么做。不幸的是,我不知道如何将字符串 ('started') 转换为枚举。http://www.postgresql.org/docs/9.1/static/datatype-enum.html上的 postgresql 页面对我帮助不大。有人知道吗?

4

2 回答 2

9

Postgres 抱怨你需要强制转换:

IF OLD.status = 'started'::projectstatus THEN
  NEW.status := 'updating'::projectstatus;
  RETURN NEW;
END IF;

此外,正如 Igor 的回答中所指出的,最好使用赋值运算符:=而不是旧的(已弃用,但仍然有效)=赋值运算符。

于 2013-05-05T11:55:19.743 回答
2

运算符=用于比较。用于:=分配。

就像是:

  IF OLD.status = 'started' THEN
    NEW.status := 'updating';
    RETURN NEW;
  END IF;
于 2013-05-05T11:12:55.257 回答