0

为什么 Postgres 给我这个错误

[2014-10-30 13:43:36] [2201B] 错误:无效的正则表达式:无效的转义\序列其中:PL/pgSQL 函数 normalize_username() 分配时的第 5 行

当我使用 SQL 语句时:

UPDATE users."user" SET username = username

激活以下触发器:

CREATE OR REPLACE FUNCTION normalize_username()
  RETURNS TRIGGER AS $normalize_username$
BEGIN
  IF NOT (NEW.username IS NULL)
  THEN
    NEW.username := replace(NEW.username, 'ё', 'е');
  END IF;
  RETURN NEW;
END;
$normalize_username$ LANGUAGE plpgsql;

表是这样创建的:

            CREATE TABLE USERS.user (
              user_id                SERIAL PRIMARY KEY,
              username                CITEXT,
)

replace() 是一个简单的文本函数,对吧?我想它不应该与正则表达式有任何关系。

4

1 回答 1

0

通过在分配中将用户名转换为 TEXT 解决了这个问题,如下所示:

CREATE OR REPLACE FUNCTION normalize_username()
  RETURNS TRIGGER AS $normalize_username$
BEGIN
  IF NOT (NEW.username IS NULL)
  THEN
    NEW.username := replace(NEW.username::TEXT, 'ё', 'е');
  END IF;
  RETURN NEW;
END;
$normalize_username$ LANGUAGE plpgsql;

看起来 CITEXT 列操作在后台默默地转换为正则表达式操作。有人可以证实这一点吗?

于 2014-10-30T10:19:58.500 回答