Si se intenta insertar un carácter de escape en una tabla, aparece una advertencia.
Por ejemplo:
create table EscapeTest (text varchar(50));
insert into EscapeTest (text) values ('This is the first part \n And this is the second');
Produce la advertencia:
WARNING: nonstandard use of escape in a string literal
(Usando PSQL 8.2)
¿Alguien sabe cómo evitar esto?
Parcialmente. Se inserta el texto, pero se sigue generando la advertencia.
Encontré una discusión que indicaba que el texto debía ir precedido de 'E', como tal:
insert into EscapeTest (text) values (E'This is the first part \n And this is the second');
Esto suprimió la advertencia, pero el texto seguía sin devolverse correctamente. Cuando añadí la barra adicional como Michael sugirió, funcionó.
Como tal:
insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Genial.
También he encontrado la documentación relativa a la E:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
PostgreSQL también acepta "escape" constantes de cadena, que son una extensión de la norma SQL. Una constante de cadena de escape se especifica escribiendo la letra E (mayúscula o minúscula) justo antes de la comilla simple de apertura, por ejemplo, E'foo'. (Al continuar una constante de cadena de escape a través de líneas, escriba E sólo antes de la primera comilla de apertura). Dentro de una cadena de escape, un carácter de barra invertida (\) inicia una secuencia de escape de barra invertida tipo C, en la que la combinación de barra invertida y carácter(es) siguiente(s) representa(n) un valor de byte especial. \b es un retroceso, \f es un salto de línea, \n es una nueva línea, \r es un retorno de carro, \t es un tabulador. También son compatibles \digits, donde digits representa un valor de byte octal, y \xhexdigits, donde hexdigits representa un valor de byte hexadecimal. (Es tu responsabilidad que las secuencias de bytes que crees sean caracteres válidos en la codificación del juego de caracteres del servidor). Cualquier otro carácter que siga a una barra invertida se toma literalmente. Así, para incluir un carácter de barra invertida, escriba dos barras invertidas (\\). Además, se puede incluir una comilla simple en una cadena de escape escribiendo \', además de la forma normal de ''.
Una pregunta realmente estúpida: ¿Estás seguro de que la cadena está siendo truncada, y no sólo rota en el salto de línea que especifiques (y posiblemente no se muestra en tu interfaz)? Es decir, ¿espera que el campo se muestre como
Se insertará \n No se insertará se
o
Esto será insertado
No se insertará
Además, ¿qué interfaz estás utilizando? ¿Es posible que algo se esté comiendo tus barras invertidas?