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页面并没有真正帮助我.任何人都有任何想法?
Postgres抱怨你需要投射:
IF OLD.status = 'started'::projectstatus THEN
NEW.status := 'updating'::projectstatus;
RETURN NEW;
END IF;
Run Code Online (Sandbox Code Playgroud)
此外,正如Igor的回答所指出的,最好使用:=赋值而不是遗留(并且已弃用但仍然可用)=赋值运算符.
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |