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

时间:2014-10-30 09:54:24

标签: postgresql postgresql-9.4

为什么Postgres会给我这个错误

  

[2014-10-30 13:43:36] [2201B]错误:正则表达式无效:   无效的escape \ sequence其中: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()是一个简单的文本函数,对吗?它不应该与我想的正则表达式有任何关系。

1 个答案:

答案 0 :(得分: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列操作被静默地转换为引擎盖下的正则表达式操作。有人可以证实这一点吗?