Inserindo json válido com cópia na tabela do postgres

JSON válido pode naturalmente ter o caractere de barra invertida: \. Quando você insere dados em uma instrução SQL da seguinte forma:

sidharth=# create temp table foo(data json);
CREATE TABLE
sidharth=# insert into foo values( '{"foo":"bar", "bam": "{\"mary\": \"had a lamb\"}" }');
INSERT 0 1

sidharth=# select * from foo;

data                         
\-----------------------------------------------------

{"foo":"bar", "bam": "{\"mary\": \"had a lamb\"}" }
(1 row)

As coisas funcionam bem.

Mas se eu copiar o JSON para um arquivo e executar o comando copy, recebo:

sidharth=# \copy foo from './tests/foo' (format text); 


ERROR:  invalid input syntax for type json
DETAIL:  Token "mary" is invalid.
CONTEXT:  JSON data, line 1: {"foo":"bar", "bam": "{"mary...
COPY foo, line 1, column data: "{"foo":"bar", "bam": "{"mary": "had a lamb"}" }"

Parece que o postgres não está processando as barras invertidas. Eu acho que por causa dehttp://www.postgresql.org/docs/8.3/interactive/sql-syntaxelical.html e sou forçado a usar barra invertida dupla. E isso funciona, ou seja, quando o conteúdo do arquivo é:

{"foo":"bar", "bam": "{\\"mary\\": \\"had a lamb\\"}" }  

O comando copy funciona. Mas é correto esperar um tratamento especial para os tipos de dados json porque, afinal, o acima não é um json válido.

questionAnswers(2)

yourAnswerToTheQuestion