2016-04-04 6 views
1

So versuche ich Reihe von Pipe-getrennte Dateien in PgAdmin III zu importieren (mit einer PostgreSQL 9.5 DB).Wie Pipe-Zeichen ('|') in PostgreSQL zu entkommen

landete ich den Fehler bekommen:

ERROR: extra data after last expected column 
SQL state: 22P04 

Grundsätzlich ist die Linie 25 Spalten hatte, wo es 17 gewesen sein sollte ... Warum? Nun, ich fand heraus, dass es in einigen Feldern Pfeifchen ("|") gab.

Ich verwende den folgenden Befehl zu importieren:

START TRANSACTION; 
copy drugs FROM 'path/to/source_file.rrf' (DELIMITER '|', FORMAT TEXT); 
COMMIT; 

ich auf die lexikalische Struktur hatte unter Bezugnahme documentation, obwohl ich es falsch ...

tun haben könnte

ich schon habe versucht, die Pipe-Zeichen in Feldern durch '/ |' zu ersetzen und '// |', aber bisher ergeben beide die gleiche Fehlermeldung wie oben.

Vielen Dank und lassen Sie mich wissen, wenn Sie weitere Informationen benötigen!

+1

finden Können Sie zeigen uns einige Beispiele von "schlechten" Daten? –

+0

Dies ist ein Beispiel: VX-703 ist eine Anti-Zytokin-Therapie, bei der der p38-MAP-Kinase-Inhibitor LPS-stimulierte TNF | & agr;, IL-6 und IL-1 | & bgr; | wirksam inhibiert Produktion. – user3684314

Antwort

1

Sie müssen den gesamten Spaltenwert angeben, um ein Trennzeichen als Teil von Felddaten zu verwenden. Zum Beispiel:

filed_one|field_two|with_a_delimiter_inside|field_three 

Sollte auf

filed_one|"field_two|with_a_delimiter_inside"|field_three 

oder

"filed_one"|"field_two|with_a_delimiter_inside"|"field_three" 

Andere Option ist Backslash zu verwenden, um zu entkommen Trennzeichen umgewandelt werden. Beispiel:

filed_one|field_two\|with_a_delimiter_inside|field_three 

Sie Details in der manual on COPY command

+0

Ihre letzte Antwort, mit der Single "\" summiert funktioniert. Ich habe herausgefunden, dass mein Python-Code versehentlich ein Treffer mit "|" zweimal und statt es "\ |" es machte es "\\". Danke vielmals! – user3684314