So legen Sie eine Registerkarte in einer Postgres-Front-End-Kopie fest

83

Ich möchte den Befehl psql "\ copy" verwenden, um Daten aus einer durch Tabulatoren getrennten Datei in Postgres zu ziehen. Ich benutze diesen Befehl:

\copy cm_state from 'state.data' with delimiter '\t' null as ;

Aber ich bekomme diese Warnung (die Tabelle wird tatsächlich gut geladen):

WARNING:  nonstandard use of escape in a string literal
LINE 1: COPY cm_state FROM STDIN DELIMITER '\t' NULL AS ';'
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

Wie gebe ich eine Registerkarte an, wenn '\ t' nicht korrekt ist?

Chris Curvey
quelle
14
Versuchen Sie, was die Fehlermeldung vorschlägt:\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
Frank Farmer
Ja, du hast recht. Ich habe das führende "E" in der Fehlermeldung nicht gesehen. Danke vielmals!
Chris Curvey
2
E beginnt eine Escape-Sequenz. Denken Sie an E, als würden Sie eine Zeichenfolge in C in doppelte Anführungszeichen setzen. E '\ t' == "\ t".
Sean

Antworten:

182

Verwenden E'\t'Sie diese Option, um postgresql mitzuteilen, dass dort möglicherweise maskierte Zeichen enthalten sind:

\copy cm_state from 'state.data' with delimiter E'\t' null as ;
Seth Robertson
quelle
16
Vielen Dank! Dies löste auch den weniger informativen Fehler COPY delimiter must be a single one-byte characterfür mich. Fügen Sie es hier hinzu, damit Suchmaschinen es aufgreifen können.
Denis Drescher
Dies sollte eine weitere Antwort mit Fehlermeldung sein. Nur damit die Suchmaschinen es abholen :)
RK Kuppala
5

du kannst das copy cm_state from stdin with (format 'text')

user4372693
quelle
1
Das Standardtrennzeichen für Textdateien ist eine Registerkarte. Ich habe diese verwendet und sie funktioniert. postgresql.org/docs/9.2/static/sql-copy.html
user4372693
1
Dies ist hilfreich, wenn Sie den Befehl in ein Shell-Skript einfügen möchten - $$\t$$scheint seltsamerweise nicht zu funktionieren.
Otheus
Dies funktioniert für Daten, die pg_dumpohne andere Optionen generiert wurden .
GuiRitter