postgresql - 比较函数中的 postgresql 枚举

标签 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';

但是,当我更新一行时,出现以下错误:

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 页面真的帮不了我太多。有人知道吗?

最佳答案

Postgres 提示你需要转换它:

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

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

关于postgresql - 比较函数中的 postgresql 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383886/

相关文章:

triggers - 在 db2 中启用和禁用触发器

email - 下订单后如何在 Magento 中触发电子邮件?

javascript - 在具有多个参数的环回远程方法中执行Postgres存储过程

postgresql - 可以使用 PostgreSQL TYPE 来定义 dblink 表吗?

sql - 计算日期字段的变化(在一段时间内)

postgresql - 在现有的 Postgresql 数据库上连接 Neo4J

postgresql - pg_hba.conf 中的 "local"和 "localhost"连接类型有什么区别?

mysql - TRIGGER 未在表中插入值

php - 在 mysql 启动时运行一些脚本

sql - 查看是什么导致了 SQL 触发器?