2014-10-30 17 views
0

Почему Postgres дает мне эту ошибку2201B ОШИБКА: недопустимый регулярное выражение при использовании заменить функции()

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

, когда я использую 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() - простая текстовая функция, не так ли? Я полагаю, он не должен иметь никакого отношения к регулярным выражениям.

ответ

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 молча преобразуются в обычные операции экспрессии под капотом. Может кто-то подтвердить это?