Я импортировал набор данных в свою базу данных postgres. Он содержит несколько строк, в которых символы Юникода не были импортированы должным образом, и они отображаются как «u00e9», поэтому записи со словами «Café» выглядят как «Cafu00e9».
Теперь я хочу создать триггер, чтобы заменить 'u00e9' соответствующим символом Юникода. Это можно сделать так:
SELECT replace('Cafu00e9', 'u00e9', U&'\00e9');
---- Result ---
Café
Однако я не хочу перечислять все символы Юникода в большой цепочке replace
вызовов. Поэтому я попытался использовать регулярное выражение:
SELECT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', U&'\\\1');
Это вызывает ошибку, хотя:
Query 1 ERROR: ERROR: invalid Unicode escape value at or near "\1'"
LINE 1: ...CT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', U&'\\\1');
, что связано с U&
до замены_строки. Это работает для получения строки, как мне нравится:
SELECT regexp_replace('Cafu00e9', 'u(00[a-z0-9]{2})', '\\\1');
----- Result ----
Caf\00e9
Но добавление U&
вызывает вышеуказанную ошибку. Кажется, что Postgres оценивает U&'\\\1'
без учета регулярных выражений вообще.
Каким будет хороший способ решить эту проблему без перечисления всех символов?