Jak określić kartę w kopiach front-end postgres

84

Chciałbym użyć polecenia psql "\ copy", aby pobrać dane z pliku rozdzielanego tabulatorami do Postgres. Używam tego polecenia:

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

Ale pojawia się to ostrzeżenie (tabela w rzeczywistości ładuje się dobrze):

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

Jak określić kartę, jeśli „\ t” nie jest poprawne?

Chris Curvey
źródło
14
Wypróbuj, co sugeruje komunikat o błędzie:\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
Frank Farmer
2
E rozpoczyna sekwencję ucieczki. Pomyśl o E tak, jak o podwójnym cudzysłowie w C. E '\ t' == "\ t".
Sean

Odpowiedzi:

182

Służy E'\t'do informowania postgresql, że mogą tam znajdować się znaki ucieczki:

\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
Seth Robertson
źródło
16
Dzięki! To również rozwiązało COPY delimiter must be a single one-byte characterdla mnie mniej informacyjny błąd . Dodanie go tutaj, aby wyszukiwarki mogły go odebrać.
Denis Drescher
To powinna być kolejna odpowiedź z komunikatem o błędzie. Tylko po to, żeby wyszukiwarki to
odebrały
5

możesz to zrobić copy cm_state from stdin with (format 'text')

user4372693
źródło
1
domyślnym separatorem pliku tekstowego jest tabulator. Użyłem tego i działa .. postgresql.org/docs/9.2/static/sql-copy.html
user4372693
1
To pomaga, gdy chcesz umieścić polecenie w skrypcie powłoki - $$\t$$dziwnie nie działa.
Otheus
Działa to dla danych wygenerowanych przez pg_dumpbez innych określonych opcji.
GuiRitter