2201B错误:无效的正则表达式中使用替换()函数时

问题描述:

为什么Postgres的给了我这个错误2201B错误:无效的正则表达式中使用替换()函数时

当我使用SQL语句

[2014-10-30 13:43:36] [2201B] ERROR: invalid regular expression: invalid escape \ sequence Where: PL/pgSQL function normalize_username() line 5 at assignment

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()是一个简单的文本函数,对不对?它不应该与我想的正则表达式有任何关系。

的问题是解决了这样的分配铸造用户名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列操作引擎盖下静静地转化为正则表达式运算。有人能证实这一点吗?