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?


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 ;

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')


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.