Особенности смены типа в PostgreSQL: text → bytea

При обыденной смене типа колонки в «Постгресе» с текстового типа на бинарный получил ошибку «ERROR: invalid input syntax for type bytea». Запрос довольно рядовой и сюрпризов я не ожидал:
ALTER TABLE tbl ALTER COLUMN colmn TYPE bytea USING colmn::bytea;
Решения нагуглить не удалось, поэтому начал исследовать проблему сам. Бинарным поиском нашёл строку на которой запрос запнулся, потом так же вычислил символ. Им оказался обратный слэш. Заэкранировал его и ошибка пропала:
ALTER TABLE tbl ALTER COLUMN colmn TYPE bytea USING REPLACE(colmn, '\', '\\')::bytea;
Всё отработало нормально, сконвертировалось, слеши получаются из базы как и ожидается — одинарными.
9 февраля 2017 11:14

Алекс (инкогнито)
25 мая 2017, 13:41

Дурацкий способ конвертации, конечно, гораздо правильнее использовать функцию convert_to. И костылей не понадобится, и отработает, подозреваю, быстрее.

bolknote.ru (bolknote.ru)
25 мая 2017, 17:42, ответ предназначен Алекс

Это указание типа-то (CAST) — это дурацкий способ конвертации? Тем более в базе, которую свою кодировку знает?

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)