Postgresql 2201B错误:使用replace()函数时正则表达式无效

Postgresql 2201B错误:使用replace()函数时正则表达式无效,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,为什么Postgres会给我这个错误 [2014-10-30 13:43:36][2201B]错误:无效的正则表达式: 无效的转义\序列,其中:PL/pgSQL函数 在赋值处规范化_username()第5行 使用SQL语句时: UPDATE users."user" SET username = username 以下触发器处于激活状态: CREATE OR REPLACE FUNCTION normalize_username() RETURNS TRIGGER AS $normali

为什么Postgres会给我这个错误

[2014-10-30 13:43:36][2201B]错误:无效的正则表达式: 无效的转义\序列,其中:PL/pgSQL函数 在赋值处规范化_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,
)
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;

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

通过在赋值中将用户名强制转换为文本来解决问题,如下所示:

            CREATE TABLE USERS.user (
              user_id                SERIAL PRIMARY KEY,
              username                CITEXT,
)
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列操作被悄悄地转换为正则表达式操作。有人能证实这一点吗