Einfügen eines gültigen json mit Kopie in die postgres-Tabelle

Gültiges JSON kann natürlich den umgekehrten Schrägstrich haben: \. Wenn Sie Daten in eine SQL-Anweisung wie folgt einfügen:

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)

Die Dinge funktionieren gut.

Aber wenn ich den JSON in eine Datei kopiere und den Kopierbefehl ausführe, erhalte ich:

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"}" }"

Scheint, als würde Postgres die Backslashes nicht verarbeiten. Ich denke wegenhttp://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html und ich bin gezwungen, doppelten Backslash zu verwenden. Und das funktioniert, d. H. Wenn der Dateiinhalt wie folgt lautet:

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

Der Kopierbefehl funktioniert. Aber ist es richtig, eine Sonderbehandlung für JSON-Datentypen zu erwarten, da das oben Gesagte kein gültiger JSON ist?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage