Slashes in text array trouble

xlex

Guest
Slashes in text array trouble

Добрый день, просветите, пожалуйста, совсем уже запутался и чёрт сколько времени потратил, а всё никак не могу понять:

есть запрос: "UPDATE sections SET index = '{"\\\d", "c"}' WHERE id = 5;" - почему у первого элемента массива съедаются слеши? Та же ситуация с одним и двумя слешами. Если поставить четыре слеша - то в результате в базе образуется массив вида {"\\d", "c"}, то есть с одним лишним слешем.

Подскажите, пожалуйста, где набедокурил?

Про массивы читал (http://www.postgresql.org/docs/8.0/interactive/arrays.html), и если я правильно понимаю, то я должен писать так: {"\\d", "c"} - один слеш убирается при распарсивании как строки, а второй должен доходить до массива и сохраняться в базе данных. Почему так не происходит? Такое впечатление, будто база данных воспринимается \d как некоторую escape последовательность, и слеш кушает, а букву оставляет...

Помогите, пожалуйста!
 

neko

tеam neko
мды
\ это экранирующий символ
\d -- тут нечего экранировать -- в базу -> d
\\ -- экранируется он сам -- в базу -> \

массивы тут вообще не при чемках
 

xlex

Guest
neko, то есть я правильно понимаю, что писать надо так:
update sections set index='{"/\\d"}' where id = 35;

тогда "\\" экранируется сам и в базу должно попасть {"/\d"} ?

Почему я сказал про массивы, потому что в вышеприведённой ссылке есть такая фраза: "Remember that what you write in an SQL command will first be interpreted as a string literal, and then as an array. This doubles the number of backslashes you need."

-~{}~ 25.04.05 10:30:

Проблема обнаружилась: ошибка версии 8.0.1, в 8.0.2 четыре слеша, как и ожидалось, становятся одним, но уже в массиве.

Обходной манёвр - использовать конструкцию array[].

Neko, всё равно спасибо за помощь! =)
 
Сверху