比较一个函数中的postgresql枚举

Dou*_*ler 0 postgresql triggers

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

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';
Run Code Online (Sandbox Code Playgroud)

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

ERROR: operator does not exist: projectstatus = character varying
Run Code Online (Sandbox Code Playgroud)

枚举定义如下:

CREATE TYPE projectstatus AS ENUM ('started', 'updating', 'complete');
Run Code Online (Sandbox Code Playgroud)

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

Den*_*rdy 5

Postgres抱怨你需要投射:

IF OLD.status = 'started'::projectstatus THEN
  NEW.status := 'updating'::projectstatus;
  RETURN NEW;
END IF;
Run Code Online (Sandbox Code Playgroud)

此外,正如Igor的回答所指出的,最好使用:=赋值而不是遗留(并且已弃用但仍然可用)=赋值运算符.

  • @AndriyLeshchuk:读取(和维护)不使用同一运算符进行变量赋值和相等性检查的代码要容易得多。(如果有任何旧的Basic或Visual Basic代码,请尝试打开。) (2认同)