2017-07-11 4 views
0

Ich habe ein Problem mit Tab Importieren von Daten aus CSV-Datei begrenzt wegen doppelter Anführungszeichen in Daten zB mit:Postgres - Import von Daten mit doppelten Anführungszeichen

→ Voice "Mail →

Ich importiere Datenimport mit Option in pgadmin III. Ich habe Tab als Trennzeichen angegeben und habe es auch mit den Optionen QUOTE und/oder ESCAPE versucht.Keiner davon hat funktioniert.Ich weiß, dass es ein Problem mit einem doppelten Anführungszeichen gibt, weil ich es aus der Datei entfernt habe und der Import erfolgreich war wurde bereits erhöht (Is it possible to turn off quote processing in the Postgres COPY command with CSV format?), aber ich kann die Option COPY <tablename> FROM <filename> nicht verwenden, da ich Daten in die entfernte DB importiere und der relative Pfad zur Datei auf meinem PC nicht akzeptiert wird. Ich möchte vermeiden, inpu zu modifizieren t-Datei, weil es von enormer Größe sein könnte.

Antwort

2

Wenn Sie die doppelten Anführungszeichen beibehalten möchten, setzen Sie die QUOTE auf etwas anderes (ich würde ein Zeichen verwenden, das nicht in Ihrer Datendatei vorhanden ist).

Beispiel: (getestet auf postgresql 9,6)

eine Testtabelle mit den folgenden Beispieldaten

CREATE TABLE dialogue (person TEXT, dialogue TEXT); 

erstellen eine Testdatendatei (Register getrennt) erstellen.

# dialogue.txt 
jim I ran into your ex. He says "hi" 
rachel did he now? well tell him i said "don't call me" 

den folgenden Befehl in psql ausführen

\copy dialogue FROM '/path/to/dialogue.txt' WITH CSV QUOTE '$' DELIMITER E'\t'; 

Ausgabe:

etl_db=# \copy dialogue from '~/Desktop/dialogue.txt' WITH CSV DELIMITER E'\t' QUOTE '$'; 
COPY 2 
etl_db=# select * from dialogue; 
person |      dialogue 
--------+-------------------------------------------------- 
jim | I ran into your ex. He says "hi" 
rachel | did he now? well tell him i said "don't call me" 
(2 rows) 

I am importing data to remote DB and relative path to file on my PC is not accepted. I want to avoid modifying input file because it might be of huge size.

die psql Befehlszeilen-Client für postgresql verwenden. Es unterstützt den Meta-Befehl \copy, der den Befehl sql COPY umschließt und es Ihnen ermöglicht, Datensätze von einem lokalen Computer auf den Server zu streamen.

I have tried with '|' as QUOTE because my data has lots of special characters like: %$^&*# I got this error: ERROR: character with byte sequence 0x8f in encoding "WIN1252" has no equivalent in encoding UTF8. My system locale is: Polish (Poland)

der COPY Befehl hat eine ENCODING Option. Sie könnten das verwenden, um anzugeben, dass die Datei in utf8 oder einer anderen Codierung codiert ist.

+0

Nur um sicher zu sein, verstehe ich Ihren Kommentar. Meine Daten werden nicht in Anführungszeichen (double oder single) gesetzt, sondern tabulatorgetrennt, und sie können ein einzelnes oder ein doppeltes Anführungszeichen haben, die übereinstimmen oder nicht übereinstimmen. Sie schlagen vor, WITH CSV QUOTE '$' zu verwenden, die Postgres sagen, nach '$' als Zitat zu suchen, und da es nicht in den Daten ist, benutzt es nur Tab, um Daten zu trennen? – zwornik

+0

Ja, das stimmt. Haben Sie die obige Lösung versucht und funktioniert es oder gibt es einen Fehler? –

+0

Ich habe es mit '|' versucht als Zitat, weil meine Daten viele Sonderzeichen wie:% $^& * # habe ich diesen Fehler: Fehler: Zeichen mit Byte-Sequenz 0x8f in der Codierung "WIN1252" hat keine Entsprechung in der Codierung UTF8 – zwornik

Verwandte Themen