Обновите текстовый столбец, содержащий символ новой строки '\ n' - PullRequest
1 голос
/ 13 октября 2019

Я сталкиваюсь со странным поведением PostgreSQL, когда пытаюсь выполнить следующий запрос

update posts 
set content = replace(content, '\n', '<br>') 
where content is not null;

, и он ничего не делает с данными в базе данных. Я ** попытался зафиксировать вручную (включая попытку запустить этот запрос из psql) **, а также установил DBeaver / pgAdmin в AUTOCOMMIT, но безрезультатно.

Результат говорит мне 37 строк были обновлены, но изменений там нет . Если я пытаюсь зафиксировать его, мне сообщается, что затронуто 0 строк.

У меня вообще нет триггеров, так что об этом не может быть и речи.

Я что-то здесь упускаю?

1 Ответ

2 голосов
/ 13 октября 2019

Используйте e перед литералом:

update posts 
set content = replace(content, e'\n', '<br>') 
where content is not null
-- or better
-- where content like e'%\n%'

Из документации ( Строковые константы с E-Style Escape * ):

Escapeстроковая константа указывается путем написания буквы E (в верхнем или нижнем регистре) непосредственно перед открывающей одинарной кавычкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...