Kann die Angebotsverarbeitung im Postgres COPY-Befehl im CSV-Format deaktiviert werden?

7

Ich habe CSV-Dateien, Tab-getrennt, Felder nicht in Anführungszeichen eingeschlossen, wo Felddaten Zeichen wie einfache Anführungszeichen, doppelte Anführungszeichen, Pipes und umgekehrte Schrägstriche enthalten können.

Beispieldaten können wie folgt aussehen:

%Vor%

Ich möchte diese Daten mit der COPY-Anweisung in Postgres importieren.

Wenn ich versuche, dies mit

zu importieren %Vor%

Ich erhalte den Fehler psql:-:1: ERROR: missing data for column , weil Postgres den Backslash + Tab als "Escape-Tab" behandelt und nicht als Backslash, gefolgt vom Feldtrennzeichen.

Ich habe also das "CSV-Format" des COPY-Operators gewählt:

%Vor%

Jetzt gibt es einen neuen Fehler psql:-:1: ERROR: value too long for type character varying(254)

Offenbar, weil es das doppelte Anführungszeichen am Anfang von Feld 3 als Feldumbruchzeichen interpretiert.

Wie kann ich angeben, dass meine Daten NICHT überhaupt zitiert werden?

    
Tom De Leu 05.12.2013, 14:33
quelle

3 Antworten

18

Workaround (Danke an diesen Kommentar !)

%Vor%

Also im Grunde ein Zitat-Zeichen, das nie im Text sein sollte, aber das ist ziemlich hässlich.

Ich würde es sehr bevorzugen, wenn es tatsächlich eine Möglichkeit gäbe, die Angebotsverarbeitung ganz abzuschalten.

    
Tom De Leu 05.12.2013, 14:42
quelle
0

(Als neue Antwort hinzugefügt, da ich noch nicht die Reputation habe, sie zu kommentieren.)

Zum Beispiel, da ich mit dem gleichen Problem zu kämpfen habe, können Sie tr verwenden, um \b zu entfernen, anstatt nur hoffe es ist nirgends in Ihrem Text.

%Vor%

(Unter Verwendung von 0 ist die oktale Darstellung von \b ).

Da COPY das Lesen von STDIN unterstützt, können Sie den I / O-Einfluss verringern, indem Sie tr ausgeben:

%Vor%     
Kyle Barron 03.11.2017 02:18
quelle
0

Der Modus, den Sie für Daten verwenden möchten, die wie beschrieben formatiert sind, ist der Standardtextmodus. Es wird die meisten Charaktere ungehindert in die Datenbank passieren. Es hat keine Quote-Verarbeitung, und es verwendet Tabs als Trennzeichen. Die Verwendung des CSV-Modus führt nur zu Problemen, da Sie angeben müssen, dass Sie arbeiten müssen.

Im Textmodus werden Dollarzeichen, einfache und doppelte Anführungszeichen, Pipes und sogar Leerzeichen (auch wenn dies in der Frage nicht erwähnt wurde) direkt übergeben. Das einzige im Beispiel ist das nicht passiert ist Backslashes. Aber das ist so einfach wie das Entweichen von ihnen, zum Beispiel durch den Befehl sed :

%Vor%

Dann sollte die verarbeitete Datei ohne zusätzliche Optionen importiert werden können:

%Vor%     
nitro2k01 15.03.2018 03:11
quelle

Tags und Links